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