using CoreLibrary; using CoreLibrary.Exceptions; using System.Reflection; using Xunit; namespace UnitTesting { public class ReglesClassiquesUT { [Fact] public void TestNom() { ReglesClassiques regle = new ReglesClassiques(); Assert.Equal("Règles classiques", regle.Nom); } [Fact] public void TestConstructeur() { ReglesClassiques regles = new ReglesClassiques(); Assert.NotNull(regles); Assert.Equal(0, regles.NbJoueurs); Assert.Equal(2, regles.NbJoueursMaximum); } [Fact] public void TestAjouterJoueur() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("MonJoueur"); Assert.Equal(1, regles.NbJoueurs); } [Fact] public void TestJoueurCourantAvecJoueur() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); Joueur joueurCourant = regles.JoueurCourant(); Assert.NotNull(joueurCourant); Assert.Equal("joueur1", joueurCourant.Nom); } [Fact] public void TestJoueurCourantSansJoueur() { ReglesClassiques regles = new ReglesClassiques(); Assert.Throws(() => regles.JoueurCourant()); } [Fact] public void TestPasserLaMainValide() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); Joueur joueurCourantInitial = regles.JoueurCourant(); regles.PasserLaMain(); Joueur joueurCourantSuivant = regles.JoueurCourant(); Assert.NotEqual(joueurCourantInitial, joueurCourantSuivant); Assert.Equal("joueur2", joueurCourantSuivant.Nom); } [Fact] public void TestPasserLaMainCompteurReinitialise() { ReglesClassiques regles = new ReglesClassiques(); Type type = typeof(ReglesClassiques); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); FieldInfo? fieldInfo = type.GetField("joueurCourant", BindingFlags.NonPublic | BindingFlags.Instance); Assert.NotNull(fieldInfo); int? joueurCourant = (int?)fieldInfo.GetValue(regles); regles.PasserLaMain(); regles.PasserLaMain(); regles.PasserLaMain(); Assert.NotNull(joueurCourant); Assert.Equal(0, joueurCourant); } [Fact] public void TestPasserLaMainInvalide() { ReglesClassiques regles = new ReglesClassiques(); Assert.Throws(() => regles.PasserLaMain()); } [Fact] public void TestGenererCode() { ReglesClassiques regles = new ReglesClassiques(); Code code = regles.GenererCode(); Assert.NotNull(code); Assert.Equal(regles.TailleCodeMaximum, code.TailleMaximale()); } [Fact] public void TestCommencerLaPartie() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); Joueur joueurCourant = regles.JoueurCourant(); Assert.NotNull(joueurCourant); Assert.Equal("joueur1", joueurCourant.Nom); } [Fact] public void TestEstTermineeFalseUnJoueur() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.CommencerLaPartie(); regles.PasserLaMain(); bool result = regles.EstTerminee(); Assert.False(result); } [Fact] public void TestEstTermineeFalse() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); bool estTerminee = regles.EstTerminee(); Assert.False(estTerminee); } [Fact] public void TestGagnantsAucunGagnants() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); IEnumerable gagnants = regles.Gagnants(); Assert.Empty(gagnants); } } }