using CoreLibrary; using CoreLibrary.Evenements; using CoreLibrary.Joueurs; using CoreLibrary.Manageurs; using CoreLibrary.Persistance; using CoreLibrary.Regles; using CoreLibrary.Statistiques; using Persistance.Persistance; using System.Reflection; using Xunit; namespace UnitTesting { /// /// Classe test pour la classe Manageur. /// public class ManageurUT { /// /// Test le constructeur de Manageur. /// [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); } /// /// Test la methode Sauvegarder d'une partie. /// [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, []); } /// /// Test la methode ChargerPartie qui charge une partie. /// [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); } /// /// Test la methode NouvellePartie de Manageur. /// [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); } /// /// Premier test de la methode EcouterPartie de Manageur. /// [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()); } /// /// Deuxieme test de la methode EcouterPartie de Manageur. /// [Fact] public void TestEcouterPartie2() { 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()); infosMethode.Invoke(manageur, [partie]); FieldInfo? PartiePartieTermineeInfos = typeof(Partie) .GetField("PartiePartieTerminee", BindingFlags.Instance | BindingFlags.NonPublic); Assert.NotNull(PartiePartieTermineeInfos); EventHandler? PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; Assert.NotNull(PartiePartieTerminee); Assert.NotEmpty(PartiePartieTerminee.GetInvocationList()); Joueur celeste = manageur.DemanderJoueur("Céleste"); Robot robot = new Robot(); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); int tour = 10; IReadOnlyList gagnants = [celeste.Nom]; IReadOnlyList perdants = [robot.Nom]; PartiePartieTerminee.Invoke(null, new PartiePartieTermineeEventArgs( tour, gagnants, perdants )); Assert.Equal(tour, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(1, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); } /// /// Troisieme test de la methode EcouterPartie de Manageur. /// [Fact] public void TestEcouterPartie3() { 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()); infosMethode.Invoke(manageur, [partie]); FieldInfo? PartiePartieTermineeInfos = typeof(Partie) .GetField("PartiePartieTerminee", BindingFlags.Instance | BindingFlags.NonPublic); Assert.NotNull(PartiePartieTermineeInfos); EventHandler? PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; Assert.NotNull(PartiePartieTerminee); Assert.NotEmpty(PartiePartieTerminee.GetInvocationList()); Joueur celeste = manageur.DemanderJoueur("Céleste"); Robot robot = new Robot(); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); int tour = 10; IReadOnlyList gagnants = [robot.Nom]; IReadOnlyList perdants = [celeste.Nom]; PartiePartieTerminee.Invoke(null, new PartiePartieTermineeEventArgs( tour, gagnants, perdants )); Assert.Equal(tour, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(1, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); } /// /// Quatrieme test de la methode EcouterPartie de Manageur. /// [Fact] public void TestEcouterPartie4() { 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()); infosMethode.Invoke(manageur, [partie]); FieldInfo? PartiePartieTermineeInfos = typeof(Partie) .GetField("PartiePartieTerminee", BindingFlags.Instance | BindingFlags.NonPublic); Assert.NotNull(PartiePartieTermineeInfos); EventHandler? PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; Assert.NotNull(PartiePartieTerminee); Assert.NotEmpty(PartiePartieTerminee.GetInvocationList()); Joueur celeste = manageur.DemanderJoueur("Céleste"); Robot robot = new Robot(); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); int tour = 10; IReadOnlyList gagnants = [robot.Nom, celeste.Nom]; IReadOnlyList perdants = []; PartiePartieTerminee.Invoke(null, new PartiePartieTermineeEventArgs( tour, gagnants, perdants )); Assert.Equal(tour, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(1, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); } /// /// Cinquieme test de la methode EcouterPartie de Manageur. /// [Fact] public void TestEcouterPartie5() { 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()); infosMethode.Invoke(manageur, [partie]); FieldInfo? PartiePartieTermineeInfos = typeof(Partie) .GetField("PartiePartieTerminee", BindingFlags.Instance | BindingFlags.NonPublic); Assert.NotNull(PartiePartieTermineeInfos); EventHandler? PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; PartiePartieTerminee = PartiePartieTermineeInfos.GetValue(partie) as EventHandler; Assert.NotNull(PartiePartieTerminee); Assert.NotEmpty(PartiePartieTerminee.GetInvocationList()); Joueur celeste = manageur.DemanderJoueur("Céleste"); Robot robot = new Robot(); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); int tour = 10; IReadOnlyList gagnants = []; IReadOnlyList perdants = [robot.Nom, celeste.Nom]; PartiePartieTerminee.Invoke(null, new PartiePartieTermineeEventArgs( tour, gagnants, perdants )); Assert.Equal(tour, celeste.Statistique(new ReglesClassiques(), Statistique.CoupMoyen)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieGagnee)); Assert.Equal(0, celeste.Statistique(new ReglesClassiques(), Statistique.PartieEgalite)); Assert.Equal(1, celeste.Statistique(new ReglesClassiques(), Statistique.PartiePerdue)); } /// /// Test de la methode DemanderJoueurExistant de Manageur. /// [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); } /// /// Test de la methode DemanderJoueur de Manageur. /// [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); } } }