From d67b25cc34566c6ff0f2fa5ad9ae3766e977c778 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Thu, 6 Jun 2024 20:50:02 +0200 Subject: [PATCH] tests manageur --- Sources/ConsoleApp2/ConsoleApp2.csproj | 15 + Sources/ConsoleApp2/Program.cs | 1 + Sources/Fichiers/joueurs.json | 97 +- Sources/Fichiers/parties.json | 2344 ++++------------- Sources/MauiSpark/MauiSpark.csproj | 1 + Sources/Persistance/Persistance.csproj | 13 + .../PersistanceJson.cs} | 193 +- Sources/Persistance/PersistanceStub.cs | 49 + Sources/UnitTesting/JoueurUT.cs | 8 +- Sources/UnitTesting/ManagerUT.cs | 18 - Sources/UnitTesting/ManageurUT.cs | 188 ++ .../PartiePartieTermineeEventArgsUT.cs | 4 +- Sources/UnitTesting/UnitTesting.csproj | 2 +- Sources/mastermind.sln | 12 + 14 files changed, 871 insertions(+), 2074 deletions(-) create mode 100644 Sources/ConsoleApp2/ConsoleApp2.csproj create mode 100644 Sources/ConsoleApp2/Program.cs create mode 100644 Sources/Persistance/Persistance.csproj rename Sources/{CoreLibrary/Persistance/PersistanceJSON.cs => Persistance/PersistanceJson.cs} (96%) create mode 100644 Sources/Persistance/PersistanceStub.cs delete mode 100644 Sources/UnitTesting/ManagerUT.cs create mode 100644 Sources/UnitTesting/ManageurUT.cs diff --git a/Sources/ConsoleApp2/ConsoleApp2.csproj b/Sources/ConsoleApp2/ConsoleApp2.csproj new file mode 100644 index 0000000..e168df2 --- /dev/null +++ b/Sources/ConsoleApp2/ConsoleApp2.csproj @@ -0,0 +1,15 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + diff --git a/Sources/ConsoleApp2/Program.cs b/Sources/ConsoleApp2/Program.cs new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Sources/ConsoleApp2/Program.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/Fichiers/joueurs.json b/Sources/Fichiers/joueurs.json index 5967433..356feb3 100644 --- a/Sources/Fichiers/joueurs.json +++ b/Sources/Fichiers/joueurs.json @@ -9,7 +9,7 @@ }, "Item2": 0 }, - "Value": 2 + "Value": 8.666666666666666 }, { "Key": { @@ -18,25 +18,7 @@ }, "Item2": 1 }, - "Value": 1 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 2 - }, - "Value": 0 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 3 - }, - "Value": 5 + "Value": 3 } ] }, @@ -50,16 +32,7 @@ }, "Item2": 0 }, - "Value": 1 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 1 - }, - "Value": 5 + "Value": 8.666666666666666 }, { "Key": { @@ -68,71 +41,7 @@ }, "Item2": 2 }, - "Value": 2 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 3 - }, - "Value": 10 - } - ] - }, - { - "Nom": "Camille", - "statistiques": [ - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 0 - }, "Value": 3 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 1 - }, - "Value": 5 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 2 - }, - "Value": 6 - }, - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 3 - }, - "Value": 50 - } - ] - }, - { - "Nom": "a", - "statistiques": [ - { - "Key": { - "Item1": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Item2": 3 - }, - "Value": 1 } ] } diff --git a/Sources/Fichiers/parties.json b/Sources/Fichiers/parties.json index e85bbd1..c81f9ae 100644 --- a/Sources/Fichiers/parties.json +++ b/Sources/Fichiers/parties.json @@ -1,48 +1,42 @@ [ { "Regles": { - "__type": "ReglesDifficiles:#CoreLibrary.Regles" + "__type": "ReglesClassiques:#CoreLibrary.Regles" }, "Termine": true, - "Tour": 6, + "Tour": 11, "courant": 1, "joueurs": [ { - "Key": "Naps 1", - "Value": false + "Key": "Céleste", + "Value": true }, { - "Key": "Naps 2", - "Value": false + "Key": "Pauline", + "Value": true } ], "plateaux": [ { "TailleMax": 12, - "TailleMaxCode": 6, + "TailleMaxCode": 4, "Victoire": true, "codeSecret": { "Jetons": [ { - "Couleur": 3 - }, - { - "Couleur": 2 - }, - { - "Couleur": 1 + "Couleur": 4 }, { - "Couleur": 1 + "Couleur": 5 }, { - "Couleur": 5 + "Couleur": 4 }, { - "Couleur": 5 + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, "codes": [ { @@ -56,17 +50,11 @@ { "Couleur": 0 }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, { "Couleur": 0 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -81,38 +69,60 @@ }, { "Couleur": 1 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 2 }, { - "Couleur": 1 + "Couleur": 2 }, { - "Couleur": 1 + "Couleur": 2 + }, + { + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 1 + "Couleur": 3 }, { - "Couleur": 1 + "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 3 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 4 }, { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 2 + "Couleur": 4 + }, + { + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -120,96 +130,139 @@ "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 4 }, { - "Couleur": 1 + "Couleur": 4 }, { - "Couleur": 1 + "Couleur": 5 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 5 + }, + { + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 3 + "Couleur": 0 }, { - "Couleur": 4 + "Couleur": 0 }, { "Couleur": 4 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 }, { - "Couleur": 1 + "Couleur": 0 }, { - "Couleur": 1 + "Couleur": 0 + }, + { + "Couleur": 5 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 3 + "Couleur": 4 }, { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 1 + "Couleur": 5 }, { - "Couleur": 1 + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 4 }, { "Couleur": 5 }, { - "Couleur": 5 + "Couleur": 4 + }, + { + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 } ], "indicateurs": [ + [ ], + [ ], + [ + 0 + ], [ ], [ 0, 0 ], [ + 0, 1, 1, 1 ], [ - 0, 0, 1, + 1, + 1 + ], + [ 1 ], [ - 1, - 1, - 1, 1 ], [ 0, 0, + 1, + 1 + ], + [ 0, 0, 0, @@ -219,40 +272,62 @@ }, { "TailleMax": 12, - "TailleMaxCode": 6, + "TailleMaxCode": 4, "Victoire": false, "codeSecret": { "Jetons": [ { - "Couleur": 5 - }, - { - "Couleur": 5 - }, - { - "Couleur": 5 + "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 5 + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, "codes": [ { "Jetons": [ { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 + }, + { + "Couleur": 1 + }, + { + "Couleur": 1 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 2 + }, + { + "Couleur": 2 }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ { "Couleur": 0 }, @@ -266,16 +341,27 @@ "Couleur": 0 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 1 + "Couleur": 3 }, { - "Couleur": 1 + "Couleur": 3 }, + { + "Couleur": 3 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ { "Couleur": 1 }, @@ -289,7 +375,7 @@ "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -299,6 +385,17 @@ { "Couleur": 2 }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ { "Couleur": 2 }, @@ -312,7 +409,7 @@ "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -323,28 +420,16 @@ "Couleur": 2 }, { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 4 - }, - { - "Couleur": 4 - }, { "Couleur": 2 }, @@ -352,109 +437,147 @@ "Couleur": 2 }, { - "Couleur": 4 + "Couleur": 2 }, { - "Couleur": 4 + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 5 + "Couleur": 2 }, { - "Couleur": 5 + "Couleur": 2 }, { "Couleur": 2 }, { - "Couleur": 5 - }, + "Couleur": 2 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ { "Couleur": 2 }, { - "Couleur": 5 + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 } ], "indicateurs": [ [ ], [ ], [ - 0, 0 ], [ - 1, - 1 - ], - [ - 0, - 1 + 0 ], - [ - 0, - 0, - 0, - 0, - 1, - 1 - ] + [ ], + [ ], + [ ], + [ ], + [ ], + [ ], + [ ] ] } ] }, { "Regles": { - "__type": "ReglesDifficiles:#CoreLibrary.Regles" + "__type": "ReglesClassiques:#CoreLibrary.Regles" + }, + "Termine": false, + "Tour": 0, + "courant": 0, + "joueurs": [ + { + "Key": "Joueur 1", + "Value": true + } + ], + "plateaux": [ + { + "TailleMax": 12, + "TailleMaxCode": 4, + "Victoire": false, + "codeSecret": { + "Jetons": [ + { + "Couleur": 0 + }, + { + "Couleur": 2 + }, + { + "Couleur": 2 + }, + { + "Couleur": 3 + } + ], + "TailleMax": 4 + }, + "codes": [ ], + "indicateurs": [ ] + } + ] + }, + { + "Regles": { + "__type": "ReglesClassiques:#CoreLibrary.Regles" }, "Termine": true, - "Tour": 6, + "Tour": 9, "courant": 1, "joueurs": [ { - "Key": "Naps 1", - "Value": false + "Key": "Céleste", + "Value": true }, { - "Key": "Naps 2", - "Value": false + "Key": "Pauline", + "Value": true } ], "plateaux": [ { "TailleMax": 12, - "TailleMaxCode": 6, + "TailleMaxCode": 4, "Victoire": true, "codeSecret": { "Jetons": [ - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, { "Couleur": 3 }, { - "Couleur": 4 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 }, { "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, "codes": [ { @@ -468,26 +591,14 @@ { "Couleur": 0 }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, { "Couleur": 0 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, { "Couleur": 1 }, @@ -501,18 +612,12 @@ "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 1 + "Couleur": 2 }, { "Couleur": 2 @@ -524,30 +629,41 @@ "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 1 + "Couleur": 3 }, { - "Couleur": 1 + "Couleur": 3 }, { - "Couleur": 0 + "Couleur": 3 }, { "Couleur": 3 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 4 + }, + { + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -560,55 +676,76 @@ { "Couleur": 3 }, + { + "Couleur": 4 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 + }, { "Couleur": 0 }, { - "Couleur": 4 + "Couleur": 3 }, { "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 1 + "Couleur": 0 }, { - "Couleur": 1 + "Couleur": 0 }, { - "Couleur": 3 + "Couleur": 0 }, { "Couleur": 4 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 3 }, { - "Couleur": 0 + "Couleur": 1 + }, + { + "Couleur": 1 }, { "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 } ], "indicateurs": [ + [ ], [ + 0, 0 ], + [ ], [ - 0, - 1, - 1 + 0 ], [ - 0, - 1, - 1 + 0 ], [ 0, @@ -618,15 +755,12 @@ ], [ 0, - 0, - 0, - 0, - 1, 1 ], [ - 0, - 0, + 0 + ], + [ 0, 0, 0, @@ -636,63 +770,45 @@ }, { "TailleMax": 12, - "TailleMaxCode": 6, + "TailleMaxCode": 4, "Victoire": false, "codeSecret": { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 5 - }, - { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 2 + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, "codes": [ { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, { "Couleur": 1 }, @@ -706,16 +822,10 @@ "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, { "Couleur": 2 }, @@ -729,13 +839,10 @@ "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, { "Couleur": 2 }, @@ -746,36 +853,44 @@ "Couleur": 2 }, { - "Couleur": 3 - }, - { - "Couleur": 3 + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 4 }, { "Couleur": 4 }, { - "Couleur": 2 - }, + "Couleur": 4 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ { - "Couleur": 2 + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -783,58 +898,77 @@ "Couleur": 0 }, { - "Couleur": 3 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 5 + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 0 + }, + { + "Couleur": 0 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 + }, + { + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 } ], "indicateurs": [ + [ ], + [ ], + [ ], + [ ], [ + 0, + 0, 0 ], [ - 0 - ], - [ - 0, 0, 0, 0 ], [ - 0, - 0, - 1, - 1, - 1 + 0 ], [ - 0, - 0, - 0, - 1, - 1 + 0 ], [ 0, 0, - 0, - 0, - 1, - 1 + 0 ] ] } @@ -842,48 +976,42 @@ }, { "Regles": { - "__type": "ReglesDifficiles:#CoreLibrary.Regles" + "__type": "ReglesClassiques:#CoreLibrary.Regles" }, "Termine": true, - "Tour": 5, + "Tour": 7, "courant": 1, "joueurs": [ { - "Key": "Naps 1", - "Value": false + "Key": "Céleste", + "Value": true }, { - "Key": "Naps 2", - "Value": false + "Key": "Pauline", + "Value": true } ], "plateaux": [ { "TailleMax": 12, - "TailleMaxCode": 6, - "Victoire": false, + "TailleMaxCode": 4, + "Victoire": true, "codeSecret": { "Jetons": [ { - "Couleur": 4 + "Couleur": 0 }, { - "Couleur": 2 + "Couleur": 1 }, { "Couleur": 4 }, { - "Couleur": 3 - }, - { - "Couleur": 0 - }, - { - "Couleur": 5 + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, "codes": [ { @@ -897,26 +1025,14 @@ { "Couleur": 0 }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, { "Couleur": 0 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, { "Couleur": 1 }, @@ -930,16 +1046,10 @@ "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 2 - }, - { - "Couleur": 0 - }, { "Couleur": 2 }, @@ -953,7 +1063,7 @@ "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ @@ -961,37 +1071,59 @@ "Couleur": 3 }, { - "Couleur": 2 + "Couleur": 3 }, { - "Couleur": 0 + "Couleur": 3 }, { "Couleur": 3 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ + { + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 4 }, { - "Couleur": 3 + "Couleur": 4 + }, + { + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 3 + "Couleur": 4 }, { - "Couleur": 2 + "Couleur": 4 }, { - "Couleur": 4 + "Couleur": 0 }, + { + "Couleur": 1 + } + ], + "TailleMax": 4 + }, + { + "Jetons": [ { "Couleur": 0 }, + { + "Couleur": 1 + }, { "Couleur": 4 }, @@ -999,7 +1131,7 @@ "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 } ], "indicateurs": [ @@ -1007,113 +1139,91 @@ 0 ], [ - 1 + 0 ], + [ ], + [ ], [ - 1, - 1 + 0, + 0 ], [ - 0, - 0, + 1, + 1, + 1, 1 ], [ 0, 0, - 1, - 1, - 1 + 0, + 0 ] ] }, { "TailleMax": 12, - "TailleMaxCode": 6, - "Victoire": true, + "TailleMaxCode": 4, + "Victoire": false, "codeSecret": { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 4 + "Couleur": 2 }, { - "Couleur": 0 + "Couleur": 3 }, { - "Couleur": 4 + "Couleur": 3 } ], - "TailleMax": 6 + "TailleMax": 4 }, "codes": [ { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 0 + "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 + "Couleur": 2 }, { - "Couleur": 1 + "Couleur": 2 }, { - "Couleur": 1 + "Couleur": 2 }, { - "Couleur": 1 + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, { "Couleur": 2 }, { - "Couleur": 0 + "Couleur": 2 }, { "Couleur": 2 @@ -1122,1339 +1232,44 @@ "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 0 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 2 }, { - "Couleur": 0 + "Couleur": 2 }, { - "Couleur": 3 + "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 0 - }, - { - "Couleur": 4 - }, - { - "Couleur": 0 - }, - { - "Couleur": 4 - } - ], - "TailleMax": 6 - } - ], - "indicateurs": [ - [ - 0, - 0, - 0 - ], - [ - 0, - 0, - 1 - ], - [ - 0, - 1, - 1 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0 - ] - ] - } - ] - }, - { - "Regles": { - "__type": "ReglesDifficiles:#CoreLibrary.Regles" - }, - "Termine": true, - "Tour": 7, - "courant": 1, - "joueurs": [ - { - "Key": "Naps 3", - "Value": false - }, - { - "Key": "Naps 4", - "Value": false - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 6, - "Victoire": true, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 5 - }, - { - "Couleur": 5 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 4 - }, - { - "Couleur": 0 - }, - { - "Couleur": 4 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 5 - }, - { - "Couleur": 3 - }, - { - "Couleur": 0 - }, - { - "Couleur": 5 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 5 - }, - { - "Couleur": 5 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - } - ], - "indicateurs": [ - [ - 0, - 0, - 0 - ], - [ - 0, - 0, - 1 - ], - [ - 0, - 0, - 1 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 1 - ], - [ - 0, - 0, - 0, - 0, - 1, - 1 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0 - ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 6, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 5 - }, - { - "Couleur": 5 - }, - { - "Couleur": 4 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 6 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 2 - }, - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 2 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 4 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 1 - }, - { - "Couleur": 4 - }, - { - "Couleur": 4 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 4 - }, - { - "Couleur": 2 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 5 - }, - { - "Couleur": 5 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 5 - }, - { - "Couleur": 4 - }, - { - "Couleur": 5 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 6 - } - ], - "indicateurs": [ - [ - 0 - ], - [ - 0, - 1 - ], - [ - 0, - 1, - 1 - ], - [ - 1, - 1, - 1 - ], - [ - 0, - 1, - 1, - 1 - ], - [ - 1, - 1, - 1, - 1, - 1, - 1 - ], - [ - 0, - 0, - 0, - 0, - 1, - 1 - ] - ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 0, - "courant": 0, - "joueurs": [ - { - "Key": "Naps 5", - "Value": false - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 4 - }, - "codes": [ ], - "indicateurs": [ ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": true, - "Tour": 4, - "courant": 1, - "joueurs": [ - { - "Key": "Naps 6", - "Value": false - }, - { - "Key": "Céleste", - "Value": true - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": true, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ - 0, - 0 - ], - [ - 0, - 1, - 1 - ], - [ - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 5 - }, - { - "Couleur": 5 - }, - { - "Couleur": 1 - }, - { - "Couleur": 5 - } - ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 2 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ ], - [ - 0 - ], - [ ], - [ ] - ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 1, - "courant": 1, - "joueurs": [ - { - "Key": "Robot", - "Value": true - }, - { - "Key": "Céleste", - "Value": true - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 2 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ - 0, - 0 - ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 1 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 4 - }, - "codes": [ ], - "indicateurs": [ ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 3, - "courant": 0, - "joueurs": [ - { - "Key": "Céleste", - "Value": true - }, - { - "Key": "Naps 1", - "Value": false - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ ], - [ ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 2 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ - 0 - ], - [ - 1 - ] - ] - } - ] - }, - { - "Regles": { - "__type": "ReglesDifficiles:#CoreLibrary.Regles" - }, - "Termine": true, - "Tour": 5, - "courant": 1, - "joueurs": [ - { - "Key": "Naps 1", - "Value": false - }, - { - "Key": "Naps 2", - "Value": false - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 6, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 4 - }, - { - "Couleur": 4 - }, - { - "Couleur": 5 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - }, - { - "Couleur": 2 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 3 - }, - { - "Couleur": 4 - }, - { - "Couleur": 4 - }, - { - "Couleur": 4 - } - ], - "TailleMax": 6 - } - ], - "indicateurs": [ - [ - 0 - ], - [ - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 1, - 1 - ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 6, - "Victoire": true, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 4 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 1 - } - ], - "TailleMax": 6 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 + "Couleur": 4 }, { - "Couleur": 0 + "Couleur": 4 }, { - "Couleur": 0 + "Couleur": 4 }, { - "Couleur": 0 + "Couleur": 4 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, { "Couleur": 1 }, @@ -2463,246 +1278,53 @@ }, { "Couleur": 1 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, - { - "Couleur": 0 }, { "Couleur": 1 - }, - { - "Couleur": 2 } ], - "TailleMax": 6 + "TailleMax": 4 }, { "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 2 - }, { "Couleur": 1 }, { - "Couleur": 0 - }, - { - "Couleur": 3 - } - ], - "TailleMax": 6 - }, - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 4 - }, - { - "Couleur": 0 + "Couleur": 1 }, { - "Couleur": 2 + "Couleur": 1 }, { "Couleur": 1 } ], - "TailleMax": 6 + "TailleMax": 4 } ], "indicateurs": [ [ - 0, - 0, 0 ], [ - 0, - 0, - 0, - 1 + 0 ], [ - 0, - 0, - 0, - 1, - 1 + 0 ], [ - 0, - 0, - 1, - 1, - 1 + 0 ], + [ ], [ - 0, - 0, - 0, - 0, - 0, 0 - ] - ] - } - ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 2, - "courant": 0, - "joueurs": [ - { - "Key": "a", - "Value": true - }, - { - "Key": "Naps 1", - "Value": false - } - ], - "plateaux": [ - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 3 - }, - { - "Couleur": 5 - }, - { - "Couleur": 1 - }, - { - "Couleur": 4 - } - ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ - [ ] - ] - }, - { - "TailleMax": 12, - "TailleMaxCode": 4, - "Victoire": false, - "codeSecret": { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 3 - }, - { - "Couleur": 3 - }, - { - "Couleur": 2 - } ], - "TailleMax": 4 - }, - "codes": [ - { - "Jetons": [ - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - }, - { - "Couleur": 0 - } - ], - "TailleMax": 4 - } - ], - "indicateurs": [ [ 0 ] ] } ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 0, - "courant": 0, - "joueurs": [ ], - "plateaux": [ ] - }, - { - "Regles": { - "__type": "ReglesClassiques:#CoreLibrary.Regles" - }, - "Termine": false, - "Tour": 0, - "courant": 0, - "joueurs": [ ], - "plateaux": [ ] } ] \ No newline at end of file diff --git a/Sources/MauiSpark/MauiSpark.csproj b/Sources/MauiSpark/MauiSpark.csproj index 1f7a22a..cfa95a2 100644 --- a/Sources/MauiSpark/MauiSpark.csproj +++ b/Sources/MauiSpark/MauiSpark.csproj @@ -64,6 +64,7 @@ + diff --git a/Sources/Persistance/Persistance.csproj b/Sources/Persistance/Persistance.csproj new file mode 100644 index 0000000..2383a7c --- /dev/null +++ b/Sources/Persistance/Persistance.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs b/Sources/Persistance/PersistanceJson.cs similarity index 96% rename from Sources/CoreLibrary/Persistance/PersistanceJSON.cs rename to Sources/Persistance/PersistanceJson.cs index 8744bc4..ce2beb1 100644 --- a/Sources/CoreLibrary/Persistance/PersistanceJSON.cs +++ b/Sources/Persistance/PersistanceJson.cs @@ -1,95 +1,98 @@ -using System.Runtime.Serialization.Json; -using System.Text; -using System.Xml; - -namespace CoreLibrary.Persistance -{ - /// - /// Classe PersistanceJson, implémentant l'interface IPersistance, pour la persistance des données au format JSON. - /// - public class PersistanceJson : IPersistance - { - /// - /// Chaîne de caractères représentant le nom du dossier pour sauvegarder et charger. - /// - private readonly string nomDossier = "Fichiers"; - - /// - /// Chaîne de caractères représentant le nom du doissier à la racine. - /// - private readonly string nomRacine = "Sources"; - - /// - /// Chaîne de caractères représentant le nom du dossier courant. - /// - private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory; - - /// - /// Constructeur de PersistanceJson. - /// - public PersistanceJson() - { - while (new DirectoryInfo(dossier).Name != nomRacine) - dossier = Path.GetFullPath(Path.Combine(dossier, @"../")); - } - - /// - /// Charge les données trouvées dans le fichier de sauvegarde au format JSON. - /// - /// Renvoie un tableau de tous les éléments chargés. - public T[] Charger() where T : IEstPersistant - { - string fichier = $"{typeof(T).Name.ToLower()}s.json"; - - Directory.SetCurrentDirectory(dossier); - - if (!Directory.Exists(nomDossier)) - return []; - - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); - - if (!File.Exists(fichier)) - return []; - - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); - T[]? elements; - - using (FileStream s = File.OpenRead(fichier)) - { - elements = jsonSerializer.ReadObject(s) as T[]; - } - - return elements != null ? elements : Array.Empty(); - } - - /// - /// Enregistre les éléments spécifiés dans le fichier de sauvegarde au format JSON. - /// - /// Elements à enregistrer dans le fichier de sauvegarde. - public void Enregistrer(T[] elements) where T : IEstPersistant - { - string fichier = $"{typeof(T).Name.ToLower()}s.json"; - - Directory.SetCurrentDirectory(dossier); - - if (!Directory.Exists(nomDossier)) - Directory.CreateDirectory(nomDossier); - - Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); - - DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); - - using (FileStream s = File.Create(fichier)) - { - using (XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter( - s, - Encoding.UTF8, - false, - true)) - { - jsonSerializer.WriteObject(writer, elements); - } - } - } - } -} +using System.Runtime.Serialization.Json; +using System.Text; +using System.Diagnostics.CodeAnalysis; +using System.Xml; +using CoreLibrary.Persistance; + +namespace Persistance.Persistance +{ + /// + /// Classe PersistanceJson, implémentant l'interface IPersistance, pour la persistance des données au format JSON. + /// + [ExcludeFromCodeCoverage] + public class PersistanceJson : IPersistance + { + /// + /// Chaîne de caractères représentant le nom du dossier pour sauvegarder et charger. + /// + private readonly string nomDossier = "Fichiers"; + + /// + /// Chaîne de caractères représentant le nom du doissier à la racine. + /// + private readonly string nomRacine = "Sources"; + + /// + /// Chaîne de caractères représentant le nom du dossier courant. + /// + private readonly string dossier = AppDomain.CurrentDomain.BaseDirectory; + + /// + /// Constructeur de PersistanceJson. + /// + public PersistanceJson() + { + while (new DirectoryInfo(dossier).Name != nomRacine) + dossier = Path.GetFullPath(Path.Combine(dossier, @"../")); + } + + /// + /// Charge les données trouvées dans le fichier de sauvegarde au format JSON. + /// + /// Renvoie un tableau de tous les éléments chargés. + public T[] Charger() where T : IEstPersistant + { + string fichier = $"{typeof(T).Name.ToLower()}s.json"; + + Directory.SetCurrentDirectory(dossier); + + if (!Directory.Exists(nomDossier)) + return []; + + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); + + if (!File.Exists(fichier)) + return []; + + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); + T[]? elements; + + using (FileStream s = File.OpenRead(fichier)) + { + elements = jsonSerializer.ReadObject(s) as T[]; + } + + return elements != null ? elements : Array.Empty(); + } + + /// + /// Enregistre les éléments spécifiés dans le fichier de sauvegarde au format JSON. + /// + /// Elements à enregistrer dans le fichier de sauvegarde. + public void Enregistrer(T[] elements) where T : IEstPersistant + { + string fichier = $"{typeof(T).Name.ToLower()}s.json"; + + Directory.SetCurrentDirectory(dossier); + + if (!Directory.Exists(nomDossier)) + Directory.CreateDirectory(nomDossier); + + Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), nomDossier)); + + DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(T[])); + + using (FileStream s = File.Create(fichier)) + { + using (XmlDictionaryWriter writer = JsonReaderWriterFactory.CreateJsonWriter( + s, + Encoding.UTF8, + false, + true)) + { + jsonSerializer.WriteObject(writer, elements); + } + } + } + } +} diff --git a/Sources/Persistance/PersistanceStub.cs b/Sources/Persistance/PersistanceStub.cs new file mode 100644 index 0000000..f427276 --- /dev/null +++ b/Sources/Persistance/PersistanceStub.cs @@ -0,0 +1,49 @@ +using CoreLibrary; +using CoreLibrary.Joueurs; +using CoreLibrary.Persistance; +using CoreLibrary.Regles; +using System.Diagnostics.CodeAnalysis; + +namespace Persistance.Persistance +{ + /// + /// Classe PersistanceStub, implémentant l'interface IPersistance, pour la persistance des données en brut dans le code. + /// + [ExcludeFromCodeCoverage] + public class PersistanceStub : IPersistance + { + /// + /// En fonction du type T, renvoie une liste d'éléments. + /// + /// Renvoie un tableau de tous les éléments chargés. + public T[] Charger() where T : IEstPersistant + { + if (typeof(T).Equals(typeof(Joueur))) + { + return [ + (T)(object)new Joueur("Céleste"), + (T)(object)new Joueur("Pauline"), + (T)(object)new Joueur("Camille") + ]; + } + + if (typeof(T).Equals(typeof(Partie))) + { + return [ + (T)(object)new Partie(new ReglesClassiques()), + (T)(object)new Partie(new ReglesDifficiles()) + ]; + } + + return Array.Empty(); + } + + /// + /// Enregistre les éléments spécifiés dans le fichier de sauvegarde au format JSON. + /// + /// Elements à enregistrer dans le fichier de sauvegarde. + public void Enregistrer(T[] elements) where T : IEstPersistant + { + } + } +} diff --git a/Sources/UnitTesting/JoueurUT.cs b/Sources/UnitTesting/JoueurUT.cs index d8a6b15..09cd638 100644 --- a/Sources/UnitTesting/JoueurUT.cs +++ b/Sources/UnitTesting/JoueurUT.cs @@ -122,7 +122,7 @@ namespace UnitTesting ReglesClassiques regles = new ReglesClassiques(); Statistique statistique = new Statistique(); - int result = joueur.Statistique(regles, statistique); + double result = joueur.Statistique(regles, statistique); Assert.Equal(0, result); } @@ -135,7 +135,7 @@ namespace UnitTesting Statistique statistique = new Statistique(); joueur.IncrementerStatistique(regles, statistique); - int result = joueur.Statistique(regles, statistique); + double result = joueur.Statistique(regles, statistique); Assert.Equal(1, result); } @@ -148,7 +148,7 @@ namespace UnitTesting Statistique statistique = new Statistique(); joueur.IncrementerStatistique(regles, statistique); - int result = joueur.Statistique(regles, statistique); + double result = joueur.Statistique(regles, statistique); Assert.Equal(1, result); } @@ -162,7 +162,7 @@ namespace UnitTesting joueur.IncrementerStatistique(regles, statistique); joueur.IncrementerStatistique(regles, statistique); - int result = joueur.Statistique(regles, statistique); + double result = joueur.Statistique(regles, statistique); Assert.Equal(2, result); } diff --git a/Sources/UnitTesting/ManagerUT.cs b/Sources/UnitTesting/ManagerUT.cs deleted file mode 100644 index ffe3bd5..0000000 --- a/Sources/UnitTesting/ManagerUT.cs +++ /dev/null @@ -1,18 +0,0 @@ -using CoreLibrary.Manageurs; -using CoreLibrary.Persistance; -using Xunit; - -namespace UnitTesting -{ - public class ManagerUT - { - [Fact] - public void TestConstruteur() - { - IPersistance persistance = new PersistanceJson(); - Manageur manageur = new Manageur(persistance); - Assert.NotNull(manageur.Joueurs); - Assert.NotEmpty(manageur.Joueurs); - } - } -} diff --git a/Sources/UnitTesting/ManageurUT.cs b/Sources/UnitTesting/ManageurUT.cs new file mode 100644 index 0000000..73d8300 --- /dev/null +++ b/Sources/UnitTesting/ManageurUT.cs @@ -0,0 +1,188 @@ +using CoreLibrary; +using CoreLibrary.Evenements; +using CoreLibrary.Joueurs; +using CoreLibrary.Manageurs; +using CoreLibrary.Persistance; +using CoreLibrary.Regles; +using Persistance.Persistance; +using System.Reflection; +using Xunit; + +namespace UnitTesting +{ + public class ManageurUT + { + [Fact] + public void TestConstruteur() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + Assert.NotNull(manageur.Joueurs); + Assert.NotEmpty(manageur.Joueurs); + + Assert.NotNull(manageur.Parties); + Assert.NotEmpty(manageur.Joueurs); + + Assert.NotNull(manageur.PartiesNonTerminees); + Assert.NotEmpty(manageur.Joueurs); + } + + [Fact] + public void TestSauvegarder() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + MethodInfo? infosMethode = typeof(Manageur).GetMethod("Sauvegarder", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(infosMethode); + infosMethode.Invoke(manageur, []); + } + + [Fact] + public void TestChargerPartie() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + Partie partie = manageur.PartiesNonTerminees.First(); + + Partie nouvellePartie = manageur.ChargerPartie(partie); + + Assert.DoesNotContain(partie, manageur.Parties); + Assert.DoesNotContain(partie, manageur.PartiesNonTerminees); + + Assert.Contains(nouvellePartie, manageur.Parties); + Assert.Contains(nouvellePartie, manageur.PartiesNonTerminees); + } + + [Fact] + public void TestNouvellePartie() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + Partie nouvellePartie = manageur.NouvellePartie(new ReglesClassiques()); + + Assert.Contains(nouvellePartie, manageur.Parties); + Assert.Contains(nouvellePartie, manageur.PartiesNonTerminees); + } + + [Fact] + public void TestEcouterPartie() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + MethodInfo? infosMethode = typeof(Manageur).GetMethod("EcouterPartie", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(infosMethode); + + Partie partie = new Partie(new ReglesClassiques()); + + FieldInfo? PartieDemanderJoueurInfos = typeof(Partie) + .GetField("PartieDemanderJoueur", BindingFlags.Instance | BindingFlags.NonPublic); + + Assert.NotNull(PartieDemanderJoueurInfos); + + EventHandler? PartieDemanderJoueur = + PartieDemanderJoueurInfos.GetValue(partie) as EventHandler; + + FieldInfo? PartieDebutPartieInfos = typeof(Partie) + .GetField("PartieDebutPartie", BindingFlags.Instance | BindingFlags.NonPublic); + + Assert.NotNull(PartieDebutPartieInfos); + + EventHandler? PartieDebutPartie = + PartieDebutPartieInfos.GetValue(partie) as EventHandler; + + FieldInfo? PartieDemanderJoueurJouerInfos = typeof(Partie) + .GetField("PartieDemanderJoueurJouer", BindingFlags.Instance | BindingFlags.NonPublic); + + Assert.NotNull(PartieDemanderJoueurJouerInfos); + + EventHandler? PartieDemanderJoueurJouer = + PartieDemanderJoueurJouerInfos.GetValue(partie) as EventHandler; + + FieldInfo? PartiePasserLaMainInfos = typeof(Partie) + .GetField("PartiePasserLaMain", BindingFlags.Instance | BindingFlags.NonPublic); + + Assert.NotNull(PartiePasserLaMainInfos); + + EventHandler? PartiePasserLaMain = + PartiePasserLaMainInfos.GetValue(partie) as EventHandler; + + FieldInfo? PartiePartieTermineeInfos = typeof(Partie) + .GetField("PartiePartieTerminee", BindingFlags.Instance | BindingFlags.NonPublic); + + Assert.NotNull(PartiePartieTermineeInfos); + + EventHandler? PartiePartieTerminee = + PartiePartieTermineeInfos.GetValue(partie) as EventHandler; + + Assert.Null(PartieDemanderJoueur); + Assert.Null(PartieDebutPartie); + Assert.Null(PartieDemanderJoueurJouer); + Assert.Null(PartiePasserLaMain); + Assert.Null(PartiePartieTerminee); + + infosMethode.Invoke(manageur, [partie]); + + PartieDemanderJoueur = + PartieDemanderJoueurInfos.GetValue(partie) as EventHandler; + + PartieDebutPartie = + PartieDebutPartieInfos.GetValue(partie) as EventHandler; + + PartieDemanderJoueurJouer = + PartieDemanderJoueurJouerInfos.GetValue(partie) as EventHandler; + + PartiePasserLaMain = + PartiePasserLaMainInfos.GetValue(partie) as EventHandler; + + PartiePartieTerminee = + PartiePartieTermineeInfos.GetValue(partie) as EventHandler; + + Assert.NotNull(PartieDemanderJoueur); + Assert.NotNull(PartieDebutPartie); + Assert.NotNull(PartieDemanderJoueurJouer); + Assert.NotNull(PartiePasserLaMain); + Assert.NotNull(PartiePartieTerminee); + + Assert.NotEmpty(PartieDemanderJoueur.GetInvocationList()); + Assert.NotEmpty(PartieDebutPartie.GetInvocationList()); + Assert.NotEmpty(PartieDemanderJoueurJouer.GetInvocationList()); + Assert.NotEmpty(PartiePasserLaMain.GetInvocationList()); + Assert.NotEmpty(PartiePartieTerminee.GetInvocationList()); + } + + [Fact] + public void TestDemanderJoueurExistant() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + MethodInfo? infosMethode = typeof(Manageur).GetMethod("DemanderJoueurExistant", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(infosMethode); + + object? celeste = infosMethode.Invoke(manageur, ["Céleste"]); + Assert.NotNull(celeste); + Assert.IsType(celeste); + + object? toto = infosMethode.Invoke(manageur, ["Toto"]); + Assert.Null(toto); + } + + [Fact] + public void TestDemanderJoueur() + { + IPersistance persistance = new PersistanceStub(); + Manageur manageur = new Manageur(persistance); + + Joueur joueur = manageur.DemanderJoueur("Céleste"); + Joueur joueur2 = manageur.DemanderJoueur("Toto"); + + Assert.Contains(joueur, manageur.Joueurs); + Assert.Contains(joueur2, manageur.Joueurs); + } + } +} diff --git a/Sources/UnitTesting/PartiePartieTermineeEventArgsUT.cs b/Sources/UnitTesting/PartiePartieTermineeEventArgsUT.cs index 50821c9..262eed0 100644 --- a/Sources/UnitTesting/PartiePartieTermineeEventArgsUT.cs +++ b/Sources/UnitTesting/PartiePartieTermineeEventArgsUT.cs @@ -11,8 +11,10 @@ namespace UnitTesting { IReadOnlyList gagnants = new List(["joueur1", "joueur2"]); IReadOnlyList perdants = new List(["joueur3"]); + int tour = 10; - PartiePartieTermineeEventArgs evenement = new PartiePartieTermineeEventArgs(gagnants, perdants); + PartiePartieTermineeEventArgs evenement = new PartiePartieTermineeEventArgs(tour, gagnants, perdants); + Assert.Equal(tour, evenement.Tour); Assert.Equal(gagnants, evenement.Gagnants); Assert.Equal(perdants, evenement.Perdants); } diff --git a/Sources/UnitTesting/UnitTesting.csproj b/Sources/UnitTesting/UnitTesting.csproj index 66853b1..3b3c15b 100644 --- a/Sources/UnitTesting/UnitTesting.csproj +++ b/Sources/UnitTesting/UnitTesting.csproj @@ -23,8 +23,8 @@ - + diff --git a/Sources/mastermind.sln b/Sources/mastermind.sln index af9bf58..4ef8628 100644 --- a/Sources/mastermind.sln +++ b/Sources/mastermind.sln @@ -14,6 +14,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTesting", "UnitTesting\ {341FB405-085D-4C34-B395-64EF0F9B93E0} = {341FB405-085D-4C34-B395-64EF0F9B93E0} EndProjectSection EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Persistance", "Persistance\Persistance.csproj", "{B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp2", "ConsoleApp2\ConsoleApp2.csproj", "{5F798F65-4226-49F9-8F01-B140507E9502}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -38,6 +42,14 @@ Global {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.Build.0 = Release|Any CPU + {B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}.Release|Any CPU.Build.0 = Release|Any CPU + {5F798F65-4226-49F9-8F01-B140507E9502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F798F65-4226-49F9-8F01-B140507E9502}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F798F65-4226-49F9-8F01-B140507E9502}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F798F65-4226-49F9-8F01-B140507E9502}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE