diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs
index c7c5129..5f7a9dc 100644
--- a/Sources/ConsoleApp/Program.cs
+++ b/Sources/ConsoleApp/Program.cs
@@ -9,8 +9,8 @@ using Persistance.Persistance;
namespace ConsoleApp
{
///
- /// Permet de jouer une partie de mastermind, avec les règles classiques
- /// (2 joueurs, 12 tours, un code à 4 couleurs parmi 6)
+ /// Permet de jouer une partie de mastermind, avec les regles classiques
+ /// (2 joueurs, 12 tours, un code a code couleurs parmi 6)
///
[ExcludeFromCodeCoverage]
public static class Program
diff --git a/Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs b/Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs
deleted file mode 100644
index f06f56e..0000000
--- a/Sources/CoreLibrary/Exceptions/JoueurDejaConnecteException.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using CoreLibrary.Joueurs;
-using System.Runtime.Serialization;
-
-namespace CoreLibrary.Exceptions
-{
- ///
- /// Exception levée lorsqu'un joueur se connecte alors qu'il l'est déjà .
- ///
- [Serializable]
- public class JoueurDejaConnecteException : Exception
- {
- // Message par défaut
- private const string messageDefaut = "Le joueur est déjà connecté.";
-
- ///
- /// Initialise une nouvelle instance de la classe avec le message par défaut.
- ///
- public JoueurDejaConnecteException() : base(messageDefaut)
- {}
-
- ///
- /// Initialise une nouvelle instance de la classe avec le message spécifié.
- ///
- public JoueurDejaConnecteException(string message) : base(message)
- {}
-
- ///
- /// Initialise une nouvelle instance de la classe avec le joueur spécifié.
- ///
- public JoueurDejaConnecteException(Joueur joueur) : base($"Le joueur {joueur.Nom} est déjà connecté.")
- { }
-
- ///
- /// Initialise une nouvelle instance de la classe avec le message et l'exception parent spécifiés.
- ///
- public JoueurDejaConnecteException(string message, Exception exception) : base(message, exception)
- {}
-
- [Obsolete("This method is obsolete. Use alternative methods for data retrieval.", DiagnosticId = "SYSLIB0051")]
- protected JoueurDejaConnecteException(SerializationInfo info, StreamingContext contexte) : base(info, contexte)
- {}
-
- [Obsolete("This method is obsolete. Use alternative methods for data retrieval.", DiagnosticId = "SYSLIB0051")]
- public override void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- base.GetObjectData(info, context);
- }
- }
-}
diff --git a/Sources/CoreLibrary/Joueurs/Robot.cs b/Sources/CoreLibrary/Joueurs/Robot.cs
index 2ada0dc..dd3ce38 100644
--- a/Sources/CoreLibrary/Joueurs/Robot.cs
+++ b/Sources/CoreLibrary/Joueurs/Robot.cs
@@ -137,9 +137,6 @@ namespace CoreLibrary.Joueurs
/// Une liste de tous les codes restants possibles.
private static void SupprimerCodesImpossibles(List codes, Plateau plateau)
{
- if (codes == null)
- return;
-
List indicesASupprimer = new List();
// Pour chaque code possible
diff --git a/Sources/MauiSpark/Pages/ReglesPage.xaml b/Sources/MauiSpark/Pages/ReglesPage.xaml
index c207aba..3d8b0f0 100644
--- a/Sources/MauiSpark/Pages/ReglesPage.xaml
+++ b/Sources/MauiSpark/Pages/ReglesPage.xaml
@@ -18,7 +18,7 @@
-
+
diff --git a/Sources/MauiSpark/Vues/IndicateurVue.xaml b/Sources/MauiSpark/Vues/IndicateurVue.xaml
index 6ea4634..7b6f6d8 100644
--- a/Sources/MauiSpark/Vues/IndicateurVue.xaml
+++ b/Sources/MauiSpark/Vues/IndicateurVue.xaml
@@ -10,6 +10,8 @@
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
diff --git a/Sources/MauiSpark/Vues/JetonVue.xaml b/Sources/MauiSpark/Vues/JetonVue.xaml
index 6f3571b..9b3f933 100644
--- a/Sources/MauiSpark/Vues/JetonVue.xaml
+++ b/Sources/MauiSpark/Vues/JetonVue.xaml
@@ -11,6 +11,8 @@
HorizontalOptions="FillAndExpand">
diff --git a/Sources/MauiSpark/Vues/ReglesVue.xaml b/Sources/MauiSpark/Vues/ReglesVue.xaml
index f4d64cb..784276a 100644
--- a/Sources/MauiSpark/Vues/ReglesVue.xaml
+++ b/Sources/MauiSpark/Vues/ReglesVue.xaml
@@ -9,7 +9,7 @@
StrokeShape="RoundRectangle 10">
-
+
diff --git a/Sources/MauiSpark/Vues/ReglesVue.xaml.cs b/Sources/MauiSpark/Vues/ReglesVue.xaml.cs
index c179692..421e01d 100644
--- a/Sources/MauiSpark/Vues/ReglesVue.xaml.cs
+++ b/Sources/MauiSpark/Vues/ReglesVue.xaml.cs
@@ -6,9 +6,9 @@ namespace MauiSpark.Vues;
public partial class ReglesVue : ContentView
{
///
- /// Identifie la propriété de dépendance pour le titre des règles.
+ /// Identifie la propriété de dépendance pour le Nom des règles.
///
- public static readonly BindableProperty TitreProperty = BindableProperty.Create(nameof(Titre), typeof(string), typeof(ReglesVue), default(string));
+ public static readonly BindableProperty NomProperty = BindableProperty.Create(nameof(Nom), typeof(string), typeof(ReglesVue), default(string));
///
/// Identifie la propriété de dépendance pour la description des règles.
@@ -18,10 +18,10 @@ public partial class ReglesVue : ContentView
///
/// Obtient ou définit le titre des règles.
///
- public string Titre
+ public string Nom
{
- get => (string)GetValue(TitreProperty);
- set => SetValue(TitreProperty, value);
+ get => (string)GetValue(NomProperty);
+ set => SetValue(NomProperty, value);
}
///
diff --git a/Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs b/Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs
deleted file mode 100644
index f1035e6..0000000
--- a/Sources/UnitTesting/JoueurDejaConnecteExceptionUT.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using CoreLibrary.Exceptions;
-using System.Reflection;
-using System.Runtime.Serialization;
-using Xunit;
-
-namespace UnitTesting
-{
- public class JoueurDejaConnecteExceptionUT
- {
- [Fact]
- public void ExceptionDefaut()
- {
- Assert.ThrowsAsync(() => throw new JoueurDejaConnecteException());
- }
-
- [Fact]
- public void ExceptionMessage()
- {
- string message = "Mon super gros problème.";
-
- Assert.ThrowsAsync(() => throw new JoueurDejaConnecteException(message));
-
- try
- {
- throw new JoueurDejaConnecteException(message);
- }
- catch (JoueurDejaConnecteException e)
- {
- Assert.Equal(message, e.Message);
- }
- }
-
- [Fact]
- public void ExceptionMessageEtException()
- {
- string message = "Mon super gros problème.";
- string message2 = "Pas de chance...";
- InvalidOperationException parent = new InvalidOperationException(message2);
-
- Assert.ThrowsAsync(() => throw new JoueurDejaConnecteException(message, parent));
-
- try
- {
- throw new JoueurDejaConnecteException(message, parent);
- }
- catch (JoueurDejaConnecteException e)
- {
- Assert.Equal(message, e.Message);
- Assert.NotNull(e.InnerException);
- Assert.IsType(e.InnerException);
- Assert.Equal(message2, e.InnerException.Message);
- }
- }
-
- [Fact]
- public void ExceptionSerialisation()
- {
- JoueurDejaConnecteException exception = new JoueurDejaConnecteException();
-
-#pragma warning disable SYSLIB0050
- SerializationInfo info = new SerializationInfo(typeof(JoueurDejaConnecteException), new FormatterConverter());
- StreamingContext contexte = new StreamingContext(StreamingContextStates.All);
-#pragma warning restore SYSLIB0050
-
-#pragma warning disable SYSLIB0051
- exception.GetObjectData(info, contexte);
-#pragma warning restore SYSLIB0051
-
- Assert.Equal(exception.Message, info.GetString("Message"));
-
-#pragma warning disable SYSLIB0050
- JoueurDejaConnecteException exceptionSerialisee =
- (JoueurDejaConnecteException)FormatterServices.GetUninitializedObject(typeof(JoueurDejaConnecteException));
-#pragma warning restore SYSLIB0050
-
- ConstructorInfo? constructeur = typeof(JoueurDejaConnecteException).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, [typeof(SerializationInfo), typeof(StreamingContext)], null);
- Assert.NotNull(constructeur);
- constructeur.Invoke(exceptionSerialisee, [info, contexte]);
-
- Assert.Equal(exception.Message, exceptionSerialisee.Message);
- }
- }
-}
diff --git a/Sources/UnitTesting/JoueurUT.cs b/Sources/UnitTesting/JoueurUT.cs
index 864a822..3cfdd81 100644
--- a/Sources/UnitTesting/JoueurUT.cs
+++ b/Sources/UnitTesting/JoueurUT.cs
@@ -13,7 +13,7 @@ namespace UnitTesting
///
///
public class JoueurUT
- {
+ {
///
///
///
@@ -26,8 +26,8 @@ namespace UnitTesting
Assert.Equal(nom, joueur.Nom);
- }
-
+ }
+
///
///
///
@@ -40,8 +40,8 @@ namespace UnitTesting
Assert.Equal(nom, joueur.Nom);
- }
-
+ }
+
///
///
///
@@ -65,8 +65,8 @@ namespace UnitTesting
Assert.True(eventTriggered);
Assert.NotNull(eventArgs);
Assert.Equal(joueur2, eventArgs?.Joueur);
- }
-
+ }
+
///
///
///
@@ -89,20 +89,8 @@ namespace UnitTesting
Assert.True(eventTriggered);
Assert.NotNull(eventArgs);
Assert.Equal(joueur2, eventArgs?.Joueur);
- }
-
- ///
- ///
- ///
- [Fact]
- public void TestSeConnecterThrowException()
- {
- Joueur joueur = new Joueur("Joueur");
- joueur.SeConnecter(joueur);
+ }
- Assert.Throws(() => joueur.SeConnecter(joueur));
- }
-
///
///
///
@@ -113,8 +101,8 @@ namespace UnitTesting
Joueur joueur = new Joueur(nom);
string result = joueur.ToString();
Assert.Equal(nom, result);
- }
-
+ }
+
///
///
///
@@ -125,8 +113,8 @@ namespace UnitTesting
string result = joueur.ToString();
Assert.Equal("", result);
- }
-
+ }
+
///
///
///
@@ -140,8 +128,8 @@ namespace UnitTesting
double result = joueur.Statistique(regles, statistique);
Assert.Equal(0, result);
- }
-
+ }
+
///
///
///
@@ -156,8 +144,8 @@ namespace UnitTesting
double result = joueur.Statistique(regles, statistique);
Assert.Equal(1, result);
- }
-
+ }
+
///
///
///
@@ -172,8 +160,8 @@ namespace UnitTesting
double result = joueur.Statistique(regles, statistique);
Assert.Equal(1, result);
- }
-
+ }
+
///
///
///
@@ -190,5 +178,25 @@ namespace UnitTesting
Assert.Equal(2, result);
}
+
+
+ [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);
+ }
}
}
diff --git a/Sources/UnitTesting/PartieUT.cs b/Sources/UnitTesting/PartieUT.cs
index 3b86a0f..1b57245 100644
--- a/Sources/UnitTesting/PartieUT.cs
+++ b/Sources/UnitTesting/PartieUT.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
+using System.Reflection;
using Xunit;
using CoreLibrary;
using CoreLibrary.Core;
@@ -9,8 +6,6 @@ using CoreLibrary.Joueurs;
using CoreLibrary.Regles;
using CoreLibrary.Evenements;
using CoreLibrary.Exceptions;
-using System.Diagnostics.Tracing;
-using Xunit.Abstractions;
namespace UnitTesting
diff --git a/Sources/UnitTesting/PlateauUT.cs b/Sources/UnitTesting/PlateauUT.cs
index 340ba81..21c2c50 100644
--- a/Sources/UnitTesting/PlateauUT.cs
+++ b/Sources/UnitTesting/PlateauUT.cs
@@ -2,9 +2,6 @@
using System.Reflection;
using CoreLibrary.Core;
using Xunit;
-using CoreLibrary.Joueurs;
-using CoreLibrary.Regles;
-using CoreLibrary;
namespace UnitTesting
{
@@ -12,7 +9,7 @@ namespace UnitTesting
/// Classe test pour la classe Plateau.
///
public class PlateauUT
- {
+ {
///
/// Test que le constructeur de Plateau soit valide.
///
@@ -22,8 +19,8 @@ namespace UnitTesting
Plateau plateau = new Plateau(4,12);
Assert.NotNull(plateau);
Assert.False(plateau.Victoire);
- }
-
+ }
+
///
/// Test que le constructeur de Plateau soit invalide.
///
@@ -32,8 +29,8 @@ namespace UnitTesting
{
Assert.Throws(() => new Plateau(-1, 10));
Assert.Throws(() => new Plateau(3, -1));
- }
-
+ }
+
///
/// Test la méthode EstComplet de Plateau et vérifie qu'il renvoie True.
///
@@ -54,8 +51,8 @@ namespace UnitTesting
bool estComplet = plateau.Complet;
Assert.True(estComplet);
- }
-
+ }
+
///
/// Test la méthode EstComplet de Plateau et vérifie qu'il renvoie False.
///
@@ -75,8 +72,8 @@ namespace UnitTesting
bool estComplet = plateau.Complet;
Assert.False(estComplet);
- }
-
+ }
+
///
/// Test l'exception CodeCompletException de Plateau avec une taille de code supérieure à ce qui est défini.
///
@@ -99,8 +96,8 @@ namespace UnitTesting
Assert.Throws(() => code.AjouterJeton(new Jeton(Couleur.Bleu)));
- }
-
+ }
+
///
/// Test l'exception CodeIncompletException de Plateau avec un code incomplet.
///
@@ -111,8 +108,8 @@ namespace UnitTesting
Code code = new Code(4);
Assert.Throws(() => plateau.AjouterCode(code));
- }
-
+ }
+
///
/// Test la méthode AjouterCode de Plateau avec un bon code.
///
@@ -131,8 +128,8 @@ namespace UnitTesting
Assert.NotNull(codeSecret);
plateau.AjouterCode(codeSecret);
Assert.True(plateau.Victoire);
- }
-
+ }
+
///
/// Test la méthode AjouterCode de Plateau et vérifie la grille et ses composants.
///
@@ -164,8 +161,8 @@ namespace UnitTesting
Assert.Equal(4, jetonsGrille.First().Count());
Assert.Single(indicateurs);
- }
-
+ }
+
///
/// Test que la grille du plateau est vide.
///
@@ -179,8 +176,8 @@ namespace UnitTesting
Assert.Empty(jetons);
Assert.Empty(indicateurs);
- }
-
+ }
+
///
/// Test l'exception GrilleCompleteException de Plateau.
///
@@ -209,8 +206,8 @@ namespace UnitTesting
plateau.AjouterCode(codeComplet2);
Assert.Throws(() => plateau.AjouterCode(codeComplet3));
- }
-
+ }
+
///
/// Test l'événement QuandPlateauAjouterCode de Plateau.
///
@@ -231,8 +228,8 @@ namespace UnitTesting
QuandPlateauAjouterCodeInfo?.Invoke(plateau, []);
Assert.True(appel);
- }
-
+ }
+
///
/// Test la méthode AjouterCode de Plateau et vérifie tous les cas d'arrêts.
///
diff --git a/Sources/UnitTesting/RobotUT.cs b/Sources/UnitTesting/RobotUT.cs
new file mode 100644
index 0000000..7a8b303
--- /dev/null
+++ b/Sources/UnitTesting/RobotUT.cs
@@ -0,0 +1,106 @@
+using CoreLibrary.Core;
+using CoreLibrary.Joueurs;
+using System.Reflection;
+using Xunit;
+
+namespace UnitTesting
+{
+ public class RobotUT
+ {
+ [Fact]
+ public void TestEstCodePossible()
+ {
+ // Cas 1 - Plateau vide
+ Plateau plateau1 = new Plateau(1, 1);
+ Code code1 = new Code(1);
+ code1.AjouterJeton(new Jeton(Couleur.Rouge));
+
+ MethodInfo? EstCodePossible1 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
+ Assert.NotNull(EstCodePossible1);
+ object? estPossibleObj1 = EstCodePossible1.Invoke(new Robot(), [plateau1, code1]);
+
+ Assert.NotNull(estPossibleObj1);
+ Assert.IsType(estPossibleObj1);
+ Assert.True((bool)estPossibleObj1);
+
+ // Cas 2 - Plateau rempli, code juste
+ Plateau plateau2 = new Plateau(1, 1);
+
+ FieldInfo? codeSecretInfo2 = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance);
+ Assert.NotNull(codeSecretInfo2);
+
+ Code? codeSecret2 = codeSecretInfo2.GetValue(plateau2) as Code;
+ Assert.NotNull(codeSecret2);
+
+ plateau2.AjouterCode(codeSecret2);
+
+ MethodInfo? EstCodePossible2 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
+ Assert.NotNull(EstCodePossible2);
+ object? estPossibleObj2 = EstCodePossible2.Invoke(new Robot(), [plateau2, codeSecret2]);
+ Assert.NotNull(estPossibleObj2);
+ Assert.IsType(estPossibleObj2);
+ Assert.True((bool)estPossibleObj2);
+
+ // Cas 3 - Plateau rempli, code mauvaise couleur
+ Code code3 = new Code(1);
+ code3.AjouterJeton(new Jeton(Couleur.Rouge));
+
+ Plateau plateau3;
+ Code? codeSecret3;
+ do
+ {
+ plateau3 = new Plateau(1, 1);
+
+ FieldInfo? codeSecretInfo3 = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance);
+ Assert.NotNull(codeSecretInfo3);
+
+ codeSecret3 = codeSecretInfo3.GetValue(plateau3) as Code;
+ Assert.NotNull(codeSecret3);
+ } while (codeSecret3.RecupererJeton(0).Equals(code3.RecupererJeton(0)));
+
+ plateau3.AjouterCode(codeSecret3);
+
+ MethodInfo? EstCodePossible3 = typeof(Robot).GetMethod("EstCodePossible", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
+ Assert.NotNull(EstCodePossible3);
+ object? estPossibleObj3 = EstCodePossible3.Invoke(new Robot(), [plateau3, code3]);
+ Assert.NotNull(estPossibleObj3);
+ Assert.IsType(estPossibleObj3);
+ Assert.False((bool)estPossibleObj3);
+ }
+
+ [Fact]
+ public void TestSupprimerCodesImpossibles()
+ {
+ Code codeSecret = new Code(1);
+ codeSecret.AjouterJeton(new Jeton(Couleur.Rouge));
+
+ Code code1 = new Code(1);
+ code1.AjouterJeton(new Jeton(Couleur.Vert));
+
+ Code code2 = new Code(1);
+ code2.AjouterJeton(new Jeton(Couleur.Jaune));
+
+ List codes = new List([
+ codeSecret,
+ code1,
+ code2,
+ ]);
+
+ Plateau plateau = new Plateau(1, 1);
+
+ FieldInfo? codeSecretInfo = typeof(Plateau).GetField("codeSecret", BindingFlags.NonPublic | BindingFlags.Instance);
+ Assert.NotNull(codeSecretInfo);
+ codeSecretInfo.SetValue(plateau, codeSecret);
+
+ plateau.AjouterCode(codeSecret);
+
+ Assert.Equal(3, codes.Count);
+
+ MethodInfo? SupprimerCodesImpossiblesInfo = typeof(Robot).GetMethod("SupprimerCodesImpossibles", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
+ Assert.NotNull(SupprimerCodesImpossiblesInfo);
+ SupprimerCodesImpossiblesInfo.Invoke(new Robot(), [codes, plateau]);
+
+ Assert.Single(codes);
+ }
+ }
+}