using CoreLibrary; using CoreLibrary.Core; using CoreLibrary.Exceptions; using CoreLibrary.Joueurs; using CoreLibrary.Regles; using System.Reflection; using Xunit; namespace UnitTesting { public class ReglesClassiquesUT { [Fact] public void TestNom() { Assert.Equal("Règles classiques", new ReglesClassiques().Nom); } [Fact] public void TestJoueurCourantPartieNonCommencee() { ReglesClassiques regles = new ReglesClassiques(); Assert.Throws(() => regles.JoueurCourant()); } [Fact] public void TestPasserLaMainPartieNonCommencee() { ReglesClassiques regles = new ReglesClassiques(); Assert.Throws(() => regles.PasserLaMain()); } [Fact] public void TestPasserLaMain() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("céleste"); regles.AjouterJoueur("pauline"); regles.CommencerLaPartie(); Type type = typeof(ReglesClassiques); FieldInfo? fieldInfo = type.GetField("joueurCourant", BindingFlags.NonPublic | BindingFlags.Instance); Assert.NotNull(fieldInfo); int? joueurCourant = (int?) fieldInfo.GetValue(regles); Assert.NotNull(joueurCourant); Assert.Equal(0, joueurCourant); regles.PasserLaMain(); joueurCourant = (int?)fieldInfo.GetValue(regles); Assert.NotNull(joueurCourant); Assert.Equal(1, joueurCourant); regles.PasserLaMain(); joueurCourant = (int?)fieldInfo.GetValue(regles); Assert.NotNull(joueurCourant); Assert.Equal(0, joueurCourant); } [Fact] public void TestEstTermineeVictoire() { ReglesClassiques regles = new ReglesClassiques(); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); Assert.False(regles.EstTerminee()); Type type = typeof(ReglesClassiques); FieldInfo? fieldInfo = type.GetField("joueurCourant", BindingFlags.NonPublic | BindingFlags.Instance); Assert.NotNull(fieldInfo); fieldInfo.SetValue(regles, 1); Assert.False(regles.EstTerminee()); fieldInfo.SetValue(regles, 0); regles.CommencerLaPartie(); regles.PasserLaMain(); Assert.False(regles.EstTerminee()); regles.PasserLaMain(); Plateau plateauj1 = regles.JoueurCourant().Plateau; type = typeof(Plateau); fieldInfo = type.GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); Assert.NotNull(fieldInfo); Code? codeSecret = (Code?)fieldInfo.GetValue(plateauj1); Assert.NotNull(codeSecret); regles.JoueurCourant().Plateau.AjouterCode(codeSecret); bool estTerminee = regles.EstTerminee(); Assert.True(estTerminee); } [Fact] public void TestGagants() { ReglesClassiques regles = new ReglesClassiques(); Partie partie = new Partie(regles); regles.AjouterJoueur("joueur1"); regles.AjouterJoueur("joueur2"); regles.CommencerLaPartie(); Plateau plateauj1 = regles.JoueurCourant().Plateau; Type type = typeof(Plateau); FieldInfo? fieldInfo = type.GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance); Assert.NotNull(fieldInfo); Code? codeSecret = (Code?)fieldInfo.GetValue(plateauj1); Assert.NotNull(codeSecret); regles.JoueurCourant().Plateau.AjouterCode(codeSecret); IEnumerable gagnants = regles.Gagnants(); Assert.Single(gagnants); Assert.Contains(regles.JoueurCourant(), gagnants); } } }