using CoreLibrary.Core;
using CoreLibrary.Evenements;
using CoreLibrary.Exceptions;
using CoreLibrary.Joueurs;
using CoreLibrary.Regles;
using CoreLibrary.Statistiques;
using System.Reflection;
using Xunit;
namespace UnitTesting
{
///
/// Classe de test de la classe Joueur.
///
public class JoueurUT
{
///
/// Test le premier constructeur d'un joueur.
///
[Fact]
public void TestConstructeur1Valide()
{
string nom = "";
Joueur joueur = new Joueur();
Assert.Equal(nom, joueur.Nom);
}
///
/// Test le deuxieme constructeur d'un joueur.
///
[Fact]
public void TestConstructeur2Valide()
{
string nom = "toto";
Joueur joueur = new Joueur(nom);
Assert.Equal(nom, joueur.Nom);
}
///
/// Test de l'événement JoueurSeConnecterEventArgs.
///
[Fact]
public void TestQuandJoueurSeConnecter()
{
Joueur joueur1 = new Joueur("Joueur1");
Joueur joueur2 = new Joueur("Joueur2");
bool eventTriggered = false;
JoueurSeConnecterEventArgs? eventArgs = null;
joueur1.JoueurSeConnecter += (sender, e) =>
{
eventTriggered = true;
eventArgs = e;
};
MethodInfo? methodInfo = typeof(Joueur).GetMethod("QuandJoueurSeConnecter", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
methodInfo?.Invoke(joueur1, new object[] { joueur2 });
Assert.True(eventTriggered);
Assert.NotNull(eventArgs);
Assert.Equal(joueur2, eventArgs?.Joueur);
}
///
/// Test de la methode SeConnecter de la classe Joueur.
///
[Fact]
public void TestSeConnecterDeclencheEvenement()
{
Joueur joueur1 = new Joueur("Joueur1");
Joueur joueur2 = new Joueur("Joueur2");
bool eventTriggered = false;
JoueurSeConnecterEventArgs? eventArgs = null;
joueur1.JoueurSeConnecter += (sender, e) =>
{
eventTriggered = true;
eventArgs = e;
};
joueur1.SeConnecter(joueur2);
Assert.True(eventTriggered);
Assert.NotNull(eventArgs);
Assert.Equal(joueur2, eventArgs?.Joueur);
}
///
/// Test la methode ToString valide de la classe Joueur.
///
[Fact]
public void TestToStringValide()
{
string nom = "Joueur";
Joueur joueur = new Joueur(nom);
string result = joueur.ToString();
Assert.Equal(nom, result);
}
///
/// Test de la methode ToString vide, de la classe Joueur.
///
[Fact]
public void TestToStringVide()
{
Joueur joueur = new Joueur();
string result = joueur.ToString();
Assert.Equal("", result);
}
///
/// Test la methode Statistique sans incrementation.
///
[Fact]
public void TestStatistiqueNonDefinie()
{
Joueur joueur = new Joueur("Joueur");
ReglesClassiques regles = new ReglesClassiques();
Statistique statistique = new Statistique();
double result = joueur.Statistique(regles, statistique);
Assert.Equal(0, result);
}
///
/// Test la methode Statistique avec incrementation.
///
[Fact]
public void TestStatistiqueDefinie()
{
Joueur joueur = new Joueur("Joueur");
ReglesClassiques regles = new ReglesClassiques();
Statistique statistique = new Statistique();
joueur.IncrementerStatistique(regles, statistique);
double result = joueur.Statistique(regles, statistique);
Assert.Equal(1, result);
}
///
/// Test de la methode IncrementerSStatistique avec une incrementation.
///
[Fact]
public void TestIncrementerStatistiqueUn()
{
Joueur joueur = new Joueur("Joueur");
ReglesClassiques regles = new ReglesClassiques();
Statistique statistique = new Statistique();
joueur.IncrementerStatistique(regles, statistique);
double result = joueur.Statistique(regles, statistique);
Assert.Equal(1, result);
}
///
/// Test de la methode IncrementerSStatistique avec deux incrementation.
///
[Fact]
public void TestIncrementerStatistiqueDeux()
{
Joueur joueur = new Joueur("Joueur");
ReglesClassiques regles = new ReglesClassiques();
Statistique statistique = new Statistique();
joueur.IncrementerStatistique(regles, statistique);
joueur.IncrementerStatistique(regles, statistique);
double result = joueur.Statistique(regles, statistique);
Assert.Equal(2, result);
}
///
/// Test de l'evenement QuandJoueurSeConnecter de la classe Joueur.
///
[Fact]
public void TestJoueurEcoute()
{
Joueur joueur = new Joueur("Joueur1");
MethodInfo? QuandJoueurSeConnecter = typeof(Joueur).GetMethod("QuandJoueurSeConnecter", BindingFlags.NonPublic | BindingFlags.Instance);
Assert.NotNull(QuandJoueurSeConnecter);
QuandJoueurSeConnecter?.Invoke(joueur, [joueur]);
bool appel = false;
joueur.JoueurSeConnecter += (sender, e) => appel = true;
QuandJoueurSeConnecter?.Invoke(joueur, [joueur]);
Assert.True(appel);
}
}
}