You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastermind/Sources/UnitTesting/ReglesClassiquesUT.cs

167 lines
5.0 KiB

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<PartieNonCommenceeException>(() => 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<PartieNonCommenceeException>(() => 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<Joueur> gagnants = regles.Gagnants();
Assert.Empty(gagnants);
}
}
}