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); } } }