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 TestEstTerminee() { ReglesClassiques regles = new ReglesClassiques(); 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); 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); } } }