From ad6dc4e85d561017ea775d6cb8c7660e924f1f40 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 7 Jun 2024 11:09:47 +0200 Subject: [PATCH 01/10] tests sur robot --- Sources/ConsoleApp1/ConsoleApp1.csproj | 14 ++ Sources/ConsoleApp1/Program.cs | 27 ++ Sources/UnitTesting/PlateauUT.cs | 329 ++++++++++++------------- Sources/UnitTesting/RobotUT.cs | 73 ++++++ Sources/mastermind.sln | 6 + 5 files changed, 282 insertions(+), 167 deletions(-) create mode 100644 Sources/ConsoleApp1/ConsoleApp1.csproj create mode 100644 Sources/ConsoleApp1/Program.cs create mode 100644 Sources/UnitTesting/RobotUT.cs diff --git a/Sources/ConsoleApp1/ConsoleApp1.csproj b/Sources/ConsoleApp1/ConsoleApp1.csproj new file mode 100644 index 0000000..180e42c --- /dev/null +++ b/Sources/ConsoleApp1/ConsoleApp1.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/Sources/ConsoleApp1/Program.cs b/Sources/ConsoleApp1/Program.cs new file mode 100644 index 0000000..a9b8284 --- /dev/null +++ b/Sources/ConsoleApp1/Program.cs @@ -0,0 +1,27 @@ +// Cas 3 - Plateau rempli, code mauvaise couleur +using CoreLibrary.Core; +using System.Reflection; + +Code code3 = new Code(1); +code3.AjouterJeton(new Jeton(Couleur.Rouge)); + +Plateau plateau3; +Code? codeSecret3; +do +{ + plateau3 = new Plateau(1, 1); + + FieldInfo? codeSecretInfo3 = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + + codeSecret3 = codeSecretInfo3.GetValue(plateau2) as Code; + Assert.NotNull(codeSecret3); +} while (codeSecret3.RecupererJeton(0).Equals(code3.RecupererJeton(0))); + +plateau3.AjouterCode(codeSecret3); + +MethodInfo? EstCodePossible3 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); +Assert.NotNull(EstCodePossible3); +object? estPossibleObj3 = EstCodePossible3.Invoke(new Robot(), [plateau3, code3]); +Assert.NotNull(estPossibleObj3); +Assert.IsType(estPossibleObj3); +Assert.False((bool)estPossibleObj3); \ No newline at end of file diff --git a/Sources/UnitTesting/PlateauUT.cs b/Sources/UnitTesting/PlateauUT.cs index 1bb2469..7bc177d 100644 --- a/Sources/UnitTesting/PlateauUT.cs +++ b/Sources/UnitTesting/PlateauUT.cs @@ -1,78 +1,73 @@ -using CoreLibrary.Exceptions; -using System.Reflection; -using CoreLibrary.Core; -using Xunit; -using CoreLibrary.Joueurs; -using CoreLibrary.Regles; -using CoreLibrary; - -namespace UnitTesting -{ - public class PlateauUT - { - [Fact] - public void TestConstructeurValide() - { - Plateau plateau = new Plateau(4,12); - Assert.NotNull(plateau); - Assert.False(plateau.Victoire); - } - - [Fact] - public void TestConstructeurInvalide() - { - Assert.Throws(() => new Plateau(-1, 10)); - Assert.Throws(() => new Plateau(3, -1)); - } - - [Fact] - public void TestEstCompletTrue() - { - Plateau plateau = new Plateau(4, 3); - Jeton[] jetons = [new Jeton(Couleur.Rouge), new Jeton(Couleur.Bleu), new Jeton(Couleur.Blanc), new Jeton(Couleur.Jaune)]; - Code code = new Code(4); - code.AjouterJeton(jetons[0]); - code.AjouterJeton(jetons[1]); - code.AjouterJeton(jetons[2]); - code.AjouterJeton(jetons[3]); - plateau.AjouterCode(code); - plateau.AjouterCode(code); - plateau.AjouterCode(code); - - bool estComplet = plateau.Complet; - - Assert.True(estComplet); - } - - [Fact] - public void TestEstCompletFalse() - { - Plateau plateau = new Plateau(4, 3); - Jeton[] jetons = [new Jeton(Couleur.Rouge), new Jeton(Couleur.Bleu), new Jeton(Couleur.Blanc), new Jeton(Couleur.Jaune)]; - Code code = new Code(4); - code.AjouterJeton(jetons[0]); - code.AjouterJeton(jetons[1]); - code.AjouterJeton(jetons[2]); - code.AjouterJeton(jetons[3]); - plateau.AjouterCode(code); - plateau.AjouterCode(code); - - - - bool estComplet = plateau.Complet; - - Assert.False(estComplet); - } - +using CoreLibrary.Exceptions; +using System.Reflection; +using CoreLibrary.Core; +using Xunit; + +namespace UnitTesting +{ + public class PlateauUT + { + [Fact] + public void TestConstructeurValide() + { + Plateau plateau = new Plateau(4,12); + Assert.NotNull(plateau); + Assert.False(plateau.Victoire); + } + + [Fact] + public void TestConstructeurInvalide() + { + Assert.Throws(() => new Plateau(-1, 10)); + Assert.Throws(() => new Plateau(3, -1)); + } + + [Fact] + public void TestEstCompletTrue() + { + Plateau plateau = new Plateau(4, 3); + Jeton[] jetons = [new Jeton(Couleur.Rouge), new Jeton(Couleur.Bleu), new Jeton(Couleur.Blanc), new Jeton(Couleur.Jaune)]; + Code code = new Code(4); + code.AjouterJeton(jetons[0]); + code.AjouterJeton(jetons[1]); + code.AjouterJeton(jetons[2]); + code.AjouterJeton(jetons[3]); + plateau.AjouterCode(code); + plateau.AjouterCode(code); + plateau.AjouterCode(code); + + bool estComplet = plateau.Complet; + + Assert.True(estComplet); + } + + [Fact] + public void TestEstCompletFalse() + { + Plateau plateau = new Plateau(4, 3); + Jeton[] jetons = [new Jeton(Couleur.Rouge), new Jeton(Couleur.Bleu), new Jeton(Couleur.Blanc), new Jeton(Couleur.Jaune)]; + Code code = new Code(4); + code.AjouterJeton(jetons[0]); + code.AjouterJeton(jetons[1]); + code.AjouterJeton(jetons[2]); + code.AjouterJeton(jetons[3]); + plateau.AjouterCode(code); + plateau.AjouterCode(code); + + bool estComplet = plateau.Complet; + + Assert.False(estComplet); + } + [Fact] public void TestAjouterCodeTailleIncorrecte() { Plateau plateau = new Plateau(4, 10); Jeton[] jetons = new Jeton[] - { - new Jeton(Couleur.Rouge), - new Jeton(Couleur.Bleu), - new Jeton(Couleur.Blanc), + { + new Jeton(Couleur.Rouge), + new Jeton(Couleur.Bleu), + new Jeton(Couleur.Blanc), new Jeton(Couleur.Jaune) }; Code code = new Code(4); @@ -83,45 +78,45 @@ namespace UnitTesting Assert.Throws(() => code.AjouterJeton(new Jeton(Couleur.Bleu))); - } - - [Fact] - public void TestAjouterCodeIncomplet() - { - Plateau plateau = new Plateau(4, 10); - Code code = new Code(4); - - Assert.Throws(() => plateau.AjouterCode(code)); - } - - [Fact] - public void TestAjouterCodeBonCode() - { - Plateau plateau = new Plateau(4, 10); - - Type type = typeof(Plateau); - - FieldInfo? fieldInfo = type.GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); - Assert.NotNull(fieldInfo); - - Code? codeSecret = (Code?)fieldInfo.GetValue(plateau); - - Assert.NotNull(codeSecret); - plateau.AjouterCode(codeSecret); - Assert.True(plateau.Victoire); - } - - [Fact] - public void TestGrilleAjouterCode() - { - Code code = new Code(4); - Couleur[] couleurs = Enum.GetValues(); + } + + [Fact] + public void TestAjouterCodeIncomplet() + { + Plateau plateau = new Plateau(4, 10); + Code code = new Code(4); + + Assert.Throws(() => plateau.AjouterCode(code)); + } + + [Fact] + public void TestAjouterCodeBonCode() + { + Plateau plateau = new Plateau(4, 10); + + Type type = typeof(Plateau); + + FieldInfo? fieldInfo = type.GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(fieldInfo); + + Code? codeSecret = (Code?)fieldInfo.GetValue(plateau); + + Assert.NotNull(codeSecret); + plateau.AjouterCode(codeSecret); + Assert.True(plateau.Victoire); + } + + [Fact] + public void TestGrilleAjouterCode() + { + Code code = new Code(4); + Couleur[] couleurs = Enum.GetValues(); Plateau plateau = new Plateau(4, 12); Jeton[] jetons = new Jeton[] - { - new Jeton(Couleur.Rouge), - new Jeton(Couleur.Bleu), - new Jeton(Couleur.Blanc), + { + new Jeton(Couleur.Rouge), + new Jeton(Couleur.Bleu), + new Jeton(Couleur.Blanc), new Jeton(Couleur.Jaune) }; code.AjouterJeton(jetons[0]); @@ -129,59 +124,59 @@ namespace UnitTesting code.AjouterJeton(jetons[2]); code.AjouterJeton(jetons[3]); - plateau.AjouterCode(code); - (IEnumerable>, IEnumerable>) grille = plateau.Grille; - - var (jetonsGrille, indicateurs) = grille; - - - Assert.Single(jetonsGrille); - Assert.Equal(4, jetonsGrille.First().Count()); - - Assert.Single(indicateurs); - } - - [Fact] - public void TestGrilleEstVide() - { - Plateau plateau = new Plateau(4, 12); - (IEnumerable>, IEnumerable>) grille = plateau.Grille; - - var (jetons, indicateurs) = grille; - - Assert.Empty(jetons); - Assert.Empty(indicateurs); - } - - [Fact] - public void TestAjouterCode_GrilleComplete_ThrowsGrilleCompleteException() - { - Plateau plateau = new Plateau(4, 2); - Code codeComplet1 = new Code(4); - Code codeComplet2 = new Code(4); - Code codeComplet3 = new Code(4); - Jeton[] jetons = new Jeton[] - { - new Jeton(Couleur.Rouge), - new Jeton(Couleur.Bleu), - new Jeton(Couleur.Blanc), - new Jeton(Couleur.Jaune) - }; - foreach (Jeton jeton in jetons) - { - codeComplet1.AjouterJeton(jeton); - codeComplet2.AjouterJeton(jeton); - codeComplet3.AjouterJeton(jeton); - } - - plateau.AjouterCode(codeComplet1); - plateau.AjouterCode(codeComplet2); - - Assert.Throws(() => plateau.AjouterCode(codeComplet3)); - } - - - [Fact] + plateau.AjouterCode(code); + (IEnumerable>, IEnumerable>) grille = plateau.Grille; + + var (jetonsGrille, indicateurs) = grille; + + + Assert.Single(jetonsGrille); + Assert.Equal(4, jetonsGrille.First().Count()); + + Assert.Single(indicateurs); + } + + [Fact] + public void TestGrilleEstVide() + { + Plateau plateau = new Plateau(4, 12); + (IEnumerable>, IEnumerable>) grille = plateau.Grille; + + var (jetons, indicateurs) = grille; + + Assert.Empty(jetons); + Assert.Empty(indicateurs); + } + + [Fact] + public void TestAjouterCode_GrilleComplete_ThrowsGrilleCompleteException() + { + Plateau plateau = new Plateau(4, 2); + Code codeComplet1 = new Code(4); + Code codeComplet2 = new Code(4); + Code codeComplet3 = new Code(4); + Jeton[] jetons = new Jeton[] + { + new Jeton(Couleur.Rouge), + new Jeton(Couleur.Bleu), + new Jeton(Couleur.Blanc), + new Jeton(Couleur.Jaune) + }; + foreach (Jeton jeton in jetons) + { + codeComplet1.AjouterJeton(jeton); + codeComplet2.AjouterJeton(jeton); + codeComplet3.AjouterJeton(jeton); + } + + plateau.AjouterCode(codeComplet1); + plateau.AjouterCode(codeComplet2); + + Assert.Throws(() => plateau.AjouterCode(codeComplet3)); + } + + + [Fact] public void TestPlateauEcoute() { Plateau plateau = new Plateau(4, 2); @@ -198,10 +193,10 @@ namespace UnitTesting QuandPlateauAjouterCodeInfo?.Invoke(plateau, []); Assert.True(appel); - } - - - [Fact] + } + + + [Fact] public void TestAjouterCodeVictoire() { // Cas 1 : Victoire : false, code correct : false @@ -271,6 +266,6 @@ namespace UnitTesting VictoireInfo4.SetValue(plateau4, true); plateau4.AjouterCode(code4); - } - } -} + } + } +} diff --git a/Sources/UnitTesting/RobotUT.cs b/Sources/UnitTesting/RobotUT.cs new file mode 100644 index 0000000..a8dd1f8 --- /dev/null +++ b/Sources/UnitTesting/RobotUT.cs @@ -0,0 +1,73 @@ +using CoreLibrary; +using CoreLibrary.Core; +using CoreLibrary.Evenements; +using CoreLibrary.Joueurs; +using System.Reflection; +using Xunit; + +namespace UnitTesting +{ + public class RobotUT + { + [Fact] + public void TestEstCodePossible() + { + // Cas 1 - Plateau vide + Plateau plateau1 = new Plateau(1, 1); + Code code1 = new Code(1); + code1.AjouterJeton(new Jeton(Couleur.Rouge)); + + MethodInfo? EstCodePossible1 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + Assert.NotNull(EstCodePossible1); + object? estPossibleObj1 = EstCodePossible1.Invoke(new Robot(), [plateau1, code1]); + + Assert.NotNull(estPossibleObj1); + Assert.IsType(estPossibleObj1); + Assert.True((bool)estPossibleObj1); + + // Cas 2 - Plateau rempli, code juste + Plateau plateau2 = new Plateau(1, 1); + + FieldInfo? codeSecretInfo2 = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(codeSecretInfo2); + + Code? codeSecret2 = codeSecretInfo2.GetValue(plateau2) as Code; + Assert.NotNull(codeSecret2); + + plateau2.AjouterCode(codeSecret2); + + MethodInfo? EstCodePossible2 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + Assert.NotNull(EstCodePossible2); + object? estPossibleObj2 = EstCodePossible2.Invoke(new Robot(), [plateau2, codeSecret2]); + Assert.NotNull(estPossibleObj2); + Assert.IsType(estPossibleObj2); + Assert.True((bool)estPossibleObj2); + + // Cas 3 - Plateau rempli, code mauvaise couleur + Code code3 = new Code(1); + code3.AjouterJeton(new Jeton(Couleur.Rouge)); + + Plateau plateau3; + Code? codeSecret3; + do + { + plateau3 = new Plateau(1, 1); + + FieldInfo? codeSecretInfo3 = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(codeSecretInfo3); + + codeSecret3 = codeSecretInfo3.GetValue(plateau3) as Code; + Assert.NotNull(codeSecret3); + } while (codeSecret3.RecupererJeton(0).Equals(code3.RecupererJeton(0))); + + plateau3.AjouterCode(codeSecret3); + + MethodInfo? EstCodePossible3 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + Assert.NotNull(EstCodePossible3); + object? estPossibleObj3 = EstCodePossible3.Invoke(new Robot(), [plateau3, code3]); + Assert.NotNull(estPossibleObj3); + Assert.IsType(estPossibleObj3); + Assert.False((bool)estPossibleObj3); + } + } +} diff --git a/Sources/mastermind.sln b/Sources/mastermind.sln index f45ac52..f07dc69 100644 --- a/Sources/mastermind.sln +++ b/Sources/mastermind.sln @@ -16,6 +16,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTesting", "UnitTesting\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Persistance", "Persistance\Persistance.csproj", "{B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{2C86B541-6E8A-4C92-BC64-582413B22A49}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -44,6 +46,10 @@ Global {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 + {2C86B541-6E8A-4C92-BC64-582413B22A49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C86B541-6E8A-4C92-BC64-582413B22A49}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C86B541-6E8A-4C92-BC64-582413B22A49}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C86B541-6E8A-4C92-BC64-582413B22A49}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 7abb38a486437d834c8bf708152c5056457d40bc Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 7 Jun 2024 11:12:55 +0200 Subject: [PATCH 02/10] =?UTF-8?q?joueur=20deja=20connect=C3=A9=20n'existe?= =?UTF-8?q?=20plus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Exceptions/JoueurDejaConnecteException.cs | 49 ------------------- Sources/UnitTesting/JoueurUT.cs | 9 ---- 2 files changed, 58 deletions(-) delete mode 100644 Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs diff --git a/Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs b/Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs deleted file mode 100644 index f06f56e..0000000 --- a/Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs +++ /dev/null @@ -1,49 +0,0 @@ -using CoreLibrary.Joueurs; -using System.Runtime.Serialization; - -namespace CoreLibrary.Exceptions -{ - /// - /// Exception levée lorsqu'un joueur se connecte alors qu'il l'est déjà. - /// - [Serializable] - public class JoueurDejaConnecteException : Exception - { - // Message par défaut - private const string messageDefaut = "Le joueur est déjà connecté."; - - /// - /// Initialise une nouvelle instance de la classe avec le message par défaut. - /// - public JoueurDejaConnecteException() : base(messageDefaut) - {} - - /// - /// Initialise une nouvelle instance de la classe avec le message spécifié. - /// - public JoueurDejaConnecteException(string message) : base(message) - {} - - /// - /// Initialise une nouvelle instance de la classe avec le joueur spécifié. - /// - public JoueurDejaConnecteException(Joueur joueur) : base($"Le joueur {joueur.Nom} est déjà connecté.") - { } - - /// - /// Initialise une nouvelle instance de la classe avec le message et l'exception parent spécifiés. - /// - public JoueurDejaConnecteException(string message, Exception exception) : base(message, exception) - {} - - [Obsolete("This method is obsolete. Use alternative methods for data retrieval.", DiagnosticId = "SYSLIB0051")] - protected JoueurDejaConnecteException(SerializationInfo info, StreamingContext contexte) : base(info, contexte) - {} - - [Obsolete("This method is obsolete. Use alternative methods for data retrieval.", DiagnosticId = "SYSLIB0051")] - public override void GetObjectData(SerializationInfo info, StreamingContext context) - { - base.GetObjectData(info, context); - } - } -} diff --git a/Sources/UnitTesting/JoueurUT.cs b/Sources/UnitTesting/JoueurUT.cs index 882ee18..4fc7917 100644 --- a/Sources/UnitTesting/JoueurUT.cs +++ b/Sources/UnitTesting/JoueurUT.cs @@ -77,15 +77,6 @@ namespace UnitTesting Assert.Equal(joueur2, eventArgs?.Joueur); } - [Fact] - public void TestSeConnecterThrowException() - { - Joueur joueur = new Joueur("Joueur"); - joueur.SeConnecter(joueur); - - Assert.Throws(() => joueur.SeConnecter(joueur)); - } - [Fact] public void TestToStringValide() { From 70782b37e7f6df33ecdf9bcedf92ff919e16025e Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 7 Jun 2024 11:13:46 +0200 Subject: [PATCH 03/10] jdt inutil --- .../JoueurDejaConnecteExceptionUT.cs | 83 ------------------- 1 file changed, 83 deletions(-) delete mode 100644 Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs diff --git a/Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs b/Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs deleted file mode 100644 index f1035e6..0000000 --- a/Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs +++ /dev/null @@ -1,83 +0,0 @@ -using CoreLibrary.Exceptions; -using System.Reflection; -using System.Runtime.Serialization; -using Xunit; - -namespace UnitTesting -{ - public class JoueurDejaConnecteExceptionUT - { - [Fact] - public void ExceptionDefaut() - { - Assert.ThrowsAsync(() => throw new JoueurDejaConnecteException()); - } - - [Fact] - public void ExceptionMessage() - { - string message = "Mon super gros problème."; - - Assert.ThrowsAsync(() => throw new JoueurDejaConnecteException(message)); - - try - { - throw new JoueurDejaConnecteException(message); - } - catch (JoueurDejaConnecteException e) - { - Assert.Equal(message, e.Message); - } - } - - [Fact] - public void ExceptionMessageEtException() - { - string message = "Mon super gros problème."; - string message2 = "Pas de chance..."; - InvalidOperationException parent = new InvalidOperationException(message2); - - Assert.ThrowsAsync(() => throw new JoueurDejaConnecteException(message, parent)); - - try - { - throw new JoueurDejaConnecteException(message, parent); - } - catch (JoueurDejaConnecteException e) - { - Assert.Equal(message, e.Message); - Assert.NotNull(e.InnerException); - Assert.IsType(e.InnerException); - Assert.Equal(message2, e.InnerException.Message); - } - } - - [Fact] - public void ExceptionSerialisation() - { - JoueurDejaConnecteException exception = new JoueurDejaConnecteException(); - -#pragma warning disable SYSLIB0050 - SerializationInfo info = new SerializationInfo(typeof(JoueurDejaConnecteException), new FormatterConverter()); - StreamingContext contexte = new StreamingContext(StreamingContextStates.All); -#pragma warning restore SYSLIB0050 - -#pragma warning disable SYSLIB0051 - exception.GetObjectData(info, contexte); -#pragma warning restore SYSLIB0051 - - Assert.Equal(exception.Message, info.GetString("Message")); - -#pragma warning disable SYSLIB0050 - JoueurDejaConnecteException exceptionSerialisee = - (JoueurDejaConnecteException)FormatterServices.GetUninitializedObject(typeof(JoueurDejaConnecteException)); -#pragma warning restore SYSLIB0050 - - ConstructorInfo? constructeur = typeof(JoueurDejaConnecteException).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, [typeof(SerializationInfo), typeof(StreamingContext)], null); - Assert.NotNull(constructeur); - constructeur.Invoke(exceptionSerialisee, [info, contexte]); - - Assert.Equal(exception.Message, exceptionSerialisee.Message); - } - } -} From b1ebbb73b94a598492eae80febcec93e96fcfc3d Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 7 Jun 2024 11:18:44 +0200 Subject: [PATCH 04/10] Probleme regles binding et contoure jetons --- Sources/MauiSpark/Pages/ReglesPage.xaml | 2 +- Sources/MauiSpark/Vues/IndicateurVue.xaml | 2 ++ Sources/MauiSpark/Vues/JetonVue.xaml | 2 ++ Sources/MauiSpark/Vues/ReglesVue.xaml | 2 +- Sources/MauiSpark/Vues/ReglesVue.xaml.cs | 10 +++++----- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Sources/MauiSpark/Pages/ReglesPage.xaml b/Sources/MauiSpark/Pages/ReglesPage.xaml index c207aba..3d8b0f0 100644 --- a/Sources/MauiSpark/Pages/ReglesPage.xaml +++ b/Sources/MauiSpark/Pages/ReglesPage.xaml @@ -18,7 +18,7 @@ - + diff --git a/Sources/MauiSpark/Vues/IndicateurVue.xaml b/Sources/MauiSpark/Vues/IndicateurVue.xaml index 6ea4634..7b6f6d8 100644 --- a/Sources/MauiSpark/Vues/IndicateurVue.xaml +++ b/Sources/MauiSpark/Vues/IndicateurVue.xaml @@ -10,6 +10,8 @@ VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"> diff --git a/Sources/MauiSpark/Vues/JetonVue.xaml b/Sources/MauiSpark/Vues/JetonVue.xaml index 6f3571b..9b3f933 100644 --- a/Sources/MauiSpark/Vues/JetonVue.xaml +++ b/Sources/MauiSpark/Vues/JetonVue.xaml @@ -11,6 +11,8 @@ HorizontalOptions="FillAndExpand"> diff --git a/Sources/MauiSpark/Vues/ReglesVue.xaml b/Sources/MauiSpark/Vues/ReglesVue.xaml index f4d64cb..784276a 100644 --- a/Sources/MauiSpark/Vues/ReglesVue.xaml +++ b/Sources/MauiSpark/Vues/ReglesVue.xaml @@ -9,7 +9,7 @@ StrokeShape="RoundRectangle 10"> - diff --git a/Sources/MauiSpark/Vues/ReglesVue.xaml.cs b/Sources/MauiSpark/Vues/ReglesVue.xaml.cs index c179692..421e01d 100644 --- a/Sources/MauiSpark/Vues/ReglesVue.xaml.cs +++ b/Sources/MauiSpark/Vues/ReglesVue.xaml.cs @@ -6,9 +6,9 @@ namespace MauiSpark.Vues; public partial class ReglesVue : ContentView { /// - /// Identifie la propriété de dépendance pour le titre des règles. + /// Identifie la propriété de dépendance pour le Nom des règles. /// - public static readonly BindableProperty TitreProperty = BindableProperty.Create(nameof(Titre), typeof(string), typeof(ReglesVue), default(string)); + public static readonly BindableProperty NomProperty = BindableProperty.Create(nameof(Nom), typeof(string), typeof(ReglesVue), default(string)); /// /// Identifie la propriété de dépendance pour la description des règles. @@ -18,10 +18,10 @@ public partial class ReglesVue : ContentView /// /// Obtient ou définit le titre des règles. /// - public string Titre + public string Nom { - get => (string)GetValue(TitreProperty); - set => SetValue(TitreProperty, value); + get => (string)GetValue(NomProperty); + set => SetValue(NomProperty, value); } /// From 191f1888ef06254e6ba170c07fb38cb644a67aca Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 7 Jun 2024 11:36:25 +0200 Subject: [PATCH 05/10] Test Joueur --- Sources/UnitTesting/JoueurUT.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Sources/UnitTesting/JoueurUT.cs b/Sources/UnitTesting/JoueurUT.cs index 4fc7917..29acddb 100644 --- a/Sources/UnitTesting/JoueurUT.cs +++ b/Sources/UnitTesting/JoueurUT.cs @@ -146,5 +146,25 @@ namespace UnitTesting Assert.Equal(2, result); } + + + [Fact] + public void TestJoueurEcoute() + { + Joueur joueur = new Joueur("Joueur1"); + + MethodInfo? QuandJoueurSeConnecter = typeof(Joueur).GetMethod("QuandJoueurSeConnecter", BindingFlags.NonPublic | BindingFlags.Instance); + + Assert.NotNull(QuandJoueurSeConnecter); + + QuandJoueurSeConnecter?.Invoke(joueur, [joueur]); + + bool appel = false; + joueur.JoueurSeConnecter += (sender, e) => appel = true; + + QuandJoueurSeConnecter?.Invoke(joueur, [joueur]); + + Assert.True(appel); + } } } From ad5e3ad6ed981645d130c2c3f776e3a00cee36b6 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 7 Jun 2024 11:38:04 +0200 Subject: [PATCH 06/10] Test robot SupprimerCodesImpossibles --- Sources/ConsoleApp1/Program.cs | 53 ++++++++++++++++++++------------- Sources/UnitTesting/PartieUT.cs | 7 +---- Sources/UnitTesting/RobotUT.cs | 39 ++++++++++++++++++++++-- 3 files changed, 70 insertions(+), 29 deletions(-) diff --git a/Sources/ConsoleApp1/Program.cs b/Sources/ConsoleApp1/Program.cs index a9b8284..4787aa5 100644 --- a/Sources/ConsoleApp1/Program.cs +++ b/Sources/ConsoleApp1/Program.cs @@ -1,27 +1,40 @@ -// Cas 3 - Plateau rempli, code mauvaise couleur -using CoreLibrary.Core; +using CoreLibrary.Core; +using CoreLibrary.Joueurs; using System.Reflection; -Code code3 = new Code(1); -code3.AjouterJeton(new Jeton(Couleur.Rouge)); +Code codeSecret = new Code(1); +codeSecret.AjouterJeton(new Jeton(Couleur.Rouge)); -Plateau plateau3; -Code? codeSecret3; -do -{ - plateau3 = new Plateau(1, 1); +Code code1 = new Code(1); +code1.AjouterJeton(new Jeton(Couleur.Vert)); - FieldInfo? codeSecretInfo3 = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); +Code code2 = new Code(1); +code2.AjouterJeton(new Jeton(Couleur.Jaune)); - codeSecret3 = codeSecretInfo3.GetValue(plateau2) as Code; - Assert.NotNull(codeSecret3); -} while (codeSecret3.RecupererJeton(0).Equals(code3.RecupererJeton(0))); +List codes = new List([ + codeSecret, + code1, + code2, +]); -plateau3.AjouterCode(codeSecret3); +Plateau plateau = new Plateau(1, 1); -MethodInfo? EstCodePossible3 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); -Assert.NotNull(EstCodePossible3); -object? estPossibleObj3 = EstCodePossible3.Invoke(new Robot(), [plateau3, code3]); -Assert.NotNull(estPossibleObj3); -Assert.IsType(estPossibleObj3); -Assert.False((bool)estPossibleObj3); \ No newline at end of file +FieldInfo? codeSecretInfo = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + +codeSecretInfo.SetValue(plateau, codeSecret); + +codeSecretInfo = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + +plateau.AjouterCode(codeSecret); +var a = codeSecretInfo.GetValue(plateau); +var b = plateau.Grille; + + + + + +MethodInfo? SupprimerCodesImpossiblesInfo = typeof(Robot).GetMethod("SupprimerCodesImpossibles", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + +SupprimerCodesImpossiblesInfo.Invoke(new Robot(), [codes, plateau]); + +Console.ReadLine(); \ No newline at end of file diff --git a/Sources/UnitTesting/PartieUT.cs b/Sources/UnitTesting/PartieUT.cs index dadbae8..1335f5d 100644 --- a/Sources/UnitTesting/PartieUT.cs +++ b/Sources/UnitTesting/PartieUT.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; +using System.Reflection; using Xunit; using CoreLibrary; using CoreLibrary.Core; @@ -9,8 +6,6 @@ using CoreLibrary.Joueurs; using CoreLibrary.Regles; using CoreLibrary.Evenements; using CoreLibrary.Exceptions; -using System.Diagnostics.Tracing; -using Xunit.Abstractions; namespace UnitTesting diff --git a/Sources/UnitTesting/RobotUT.cs b/Sources/UnitTesting/RobotUT.cs index a8dd1f8..7a8b303 100644 --- a/Sources/UnitTesting/RobotUT.cs +++ b/Sources/UnitTesting/RobotUT.cs @@ -1,6 +1,4 @@ -using CoreLibrary; -using CoreLibrary.Core; -using CoreLibrary.Evenements; +using CoreLibrary.Core; using CoreLibrary.Joueurs; using System.Reflection; using Xunit; @@ -69,5 +67,40 @@ namespace UnitTesting Assert.IsType(estPossibleObj3); Assert.False((bool)estPossibleObj3); } + + [Fact] + public void TestSupprimerCodesImpossibles() + { + Code codeSecret = new Code(1); + codeSecret.AjouterJeton(new Jeton(Couleur.Rouge)); + + Code code1 = new Code(1); + code1.AjouterJeton(new Jeton(Couleur.Vert)); + + Code code2 = new Code(1); + code2.AjouterJeton(new Jeton(Couleur.Jaune)); + + List codes = new List([ + codeSecret, + code1, + code2, + ]); + + Plateau plateau = new Plateau(1, 1); + + FieldInfo? codeSecretInfo = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); + Assert.NotNull(codeSecretInfo); + codeSecretInfo.SetValue(plateau, codeSecret); + + plateau.AjouterCode(codeSecret); + + Assert.Equal(3, codes.Count); + + MethodInfo? SupprimerCodesImpossiblesInfo = typeof(Robot).GetMethod("SupprimerCodesImpossibles", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); + Assert.NotNull(SupprimerCodesImpossiblesInfo); + SupprimerCodesImpossiblesInfo.Invoke(new Robot(), [codes, plateau]); + + Assert.Single(codes); + } } } From c3a52794c451494ec21e48e1825356efd606a930 Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 7 Jun 2024 11:40:02 +0200 Subject: [PATCH 07/10] suprresion projet inutile et robot --- Sources/CoreLibrary/Joueurs/Robot.cs | 3 --- Sources/mastermind.sln | 6 ------ 2 files changed, 9 deletions(-) diff --git a/Sources/CoreLibrary/Joueurs/Robot.cs b/Sources/CoreLibrary/Joueurs/Robot.cs index 2ada0dc..dd3ce38 100644 --- a/Sources/CoreLibrary/Joueurs/Robot.cs +++ b/Sources/CoreLibrary/Joueurs/Robot.cs @@ -137,9 +137,6 @@ namespace CoreLibrary.Joueurs /// Une liste de tous les codes restants possibles. private static void SupprimerCodesImpossibles(List codes, Plateau plateau) { - if (codes == null) - return; - List indicesASupprimer = new List(); // Pour chaque code possible diff --git a/Sources/mastermind.sln b/Sources/mastermind.sln index f07dc69..f45ac52 100644 --- a/Sources/mastermind.sln +++ b/Sources/mastermind.sln @@ -16,8 +16,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTesting", "UnitTesting\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Persistance", "Persistance\Persistance.csproj", "{B9E8C10D-9E0E-42F1-8F2C-1E2200DD96FA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{2C86B541-6E8A-4C92-BC64-582413B22A49}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -46,10 +44,6 @@ Global {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 - {2C86B541-6E8A-4C92-BC64-582413B22A49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C86B541-6E8A-4C92-BC64-582413B22A49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C86B541-6E8A-4C92-BC64-582413B22A49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C86B541-6E8A-4C92-BC64-582413B22A49}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From ab99839fd59b2c3419078d787cac8ff6dd5aa0ba Mon Sep 17 00:00:00 2001 From: "nicolas.barbosa" Date: Fri, 7 Jun 2024 11:40:30 +0200 Subject: [PATCH 08/10] suppression fichiers projet test --- Sources/ConsoleApp1/ConsoleApp1.csproj | 14 --------- Sources/ConsoleApp1/Program.cs | 40 -------------------------- 2 files changed, 54 deletions(-) delete mode 100644 Sources/ConsoleApp1/ConsoleApp1.csproj delete mode 100644 Sources/ConsoleApp1/Program.cs diff --git a/Sources/ConsoleApp1/ConsoleApp1.csproj b/Sources/ConsoleApp1/ConsoleApp1.csproj deleted file mode 100644 index 180e42c..0000000 --- a/Sources/ConsoleApp1/ConsoleApp1.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Exe - net8.0 - enable - enable - - - - - - - diff --git a/Sources/ConsoleApp1/Program.cs b/Sources/ConsoleApp1/Program.cs deleted file mode 100644 index 4787aa5..0000000 --- a/Sources/ConsoleApp1/Program.cs +++ /dev/null @@ -1,40 +0,0 @@ -using CoreLibrary.Core; -using CoreLibrary.Joueurs; -using System.Reflection; - -Code codeSecret = new Code(1); -codeSecret.AjouterJeton(new Jeton(Couleur.Rouge)); - -Code code1 = new Code(1); -code1.AjouterJeton(new Jeton(Couleur.Vert)); - -Code code2 = new Code(1); -code2.AjouterJeton(new Jeton(Couleur.Jaune)); - -List codes = new List([ - codeSecret, - code1, - code2, -]); - -Plateau plateau = new Plateau(1, 1); - -FieldInfo? codeSecretInfo = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); - -codeSecretInfo.SetValue(plateau, codeSecret); - -codeSecretInfo = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); - -plateau.AjouterCode(codeSecret); -var a = codeSecretInfo.GetValue(plateau); -var b = plateau.Grille; - - - - - -MethodInfo? SupprimerCodesImpossiblesInfo = typeof(Robot).GetMethod("SupprimerCodesImpossibles", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); - -SupprimerCodesImpossiblesInfo.Invoke(new Robot(), [codes, plateau]); - -Console.ReadLine(); \ No newline at end of file From cf5f140253f9511ff200310a96ae51b35c0668b7 Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 7 Jun 2024 11:44:24 +0200 Subject: [PATCH 09/10] doc --- Sources/ConsoleApp/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs index c7c5129..1e98642 100644 --- a/Sources/ConsoleApp/Program.cs +++ b/Sources/ConsoleApp/Program.cs @@ -9,8 +9,8 @@ using Persistance.Persistance; namespace ConsoleApp { /// - /// Permet de jouer une partie de mastermind, avec les règles classiques - /// (2 joueurs, 12 tours, un code à 4 couleurs parmi 6) + /// Permet de jouer une partie de mastermind, avec les règles classqiues + /// (2 joueurs, 12 tours, un code à code couleurs parmi 6) /// [ExcludeFromCodeCoverage] public static class Program From c8d30c9fbca60b03e33f8f583948a491ff99b8df Mon Sep 17 00:00:00 2001 From: "camille.turpin-etienne" Date: Fri, 7 Jun 2024 11:46:23 +0200 Subject: [PATCH 10/10] doc --- Sources/ConsoleApp/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs index 1e98642..5f7a9dc 100644 --- a/Sources/ConsoleApp/Program.cs +++ b/Sources/ConsoleApp/Program.cs @@ -9,8 +9,8 @@ using Persistance.Persistance; namespace ConsoleApp { /// - /// Permet de jouer une partie de mastermind, avec les règles classqiues - /// (2 joueurs, 12 tours, un code à code couleurs parmi 6) + /// Permet de jouer une partie de mastermind, avec les regles classiques + /// (2 joueurs, 12 tours, un code a code couleurs parmi 6) /// [ExcludeFromCodeCoverage] public static class Program