using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Xunit; using CoreLibrary; using CoreLibrary.Core; using CoreLibrary.Joueurs; using CoreLibrary.Regles; namespace UnitTesting { public class PartieUT { [Fact] public void TestPremierConstructeurValide() { IRegles regle = new ReglesClassiques(); Partie partie = new Partie(regle); Assert.Equal(regle, partie.Regles); } [Fact] public void Partie_Constructeur_De_Copie_Cree_Une_Nouvelle_Instance_Avec_Les_Memes_Donnees() { IRegles regles = new ReglesClassiques(); Partie partieOriginale = new Partie(regles); FieldInfo? joueursField = typeof(Partie).GetField("joueurs", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo? plateauxField = typeof(Partie).GetField("plateaux", BindingFlags.NonPublic | BindingFlags.Instance); FieldInfo? courantField = typeof(Partie).GetField("courant", BindingFlags.NonPublic | BindingFlags.Instance); PropertyInfo? tourField = typeof(Partie).GetProperty("Tour", BindingFlags.Public | BindingFlags.Instance); PropertyInfo? termineField = typeof(Partie).GetProperty("Termine", BindingFlags.Public | BindingFlags.Instance); if (joueursField != null && plateauxField != null) { Dictionary? joueurs = joueursField.GetValue(partieOriginale) as Dictionary; if (joueurs != null) { joueurs.Add("Joueur1", false); joueurs.Add("Joueur2", true); } List? plateaux = plateauxField.GetValue(partieOriginale) as List; if (plateaux != null) { plateaux.Add(new Plateau(4, 10)); plateaux.Add(new Plateau(4, 10)); } if(tourField != null) tourField.SetValue(partieOriginale, 5); if (termineField != null) termineField.SetValue(partieOriginale, false); var partieCopiee = new Partie(partieOriginale); Dictionary? joueursCopie = joueursField.GetValue(partieCopiee) as Dictionary; List? plateauxCopie = plateauxField.GetValue(partieCopiee) as List; int? courantCopie = courantField.GetValue(partieCopiee) as int?; int? tourCopie = tourField.GetValue(partieCopiee) as int?; bool? termineCopie = termineField.GetValue(partieCopiee) as bool?; if (joueursCopie != null && plateauxCopie != null && courantCopie != null && tourCopie != null && termineCopie != null && joueurs != null && plateaux != null) { Assert.Equal(joueurs.Count, joueursCopie.Count); Assert.Equal(plateaux.Count, plateauxCopie.Count); Assert.Equal(5, tourCopie.Value); Assert.False(termineCopie.Value); Assert.Equal(regles, partieCopiee.Regles); } foreach (String joueur in joueurs.Keys) { if(joueursCopie != null) { Assert.True(joueursCopie.ContainsKey(joueur)); Assert.Equal(joueurs[joueur], joueursCopie[joueur]); } } foreach (Plateau plateau in plateaux) { if (plateauxCopie != null) Assert.Contains(plateau, plateauxCopie); } } } } }