fusion
continuous-integration/drone/push Build is passing Details

master
Pauline PRADY 11 months ago
commit 0a051ea4b7

@ -9,8 +9,8 @@ using Persistance.Persistance;
namespace ConsoleApp
{
/// <summary>
/// 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)
/// </summary>
[ExcludeFromCodeCoverage]
public static class Program

@ -1,49 +0,0 @@
using CoreLibrary.Joueurs;
using System.Runtime.Serialization;
namespace CoreLibrary.Exceptions
{
/// <summary>
/// Exception levée lorsqu'un joueur se connecte alors qu'il l'est déjà.
/// </summary>
[Serializable]
public class JoueurDejaConnecteException : Exception
{
// Message par défaut
private const string messageDefaut = "Le joueur est déjà connecté.";
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="JoueurDejaConnecteException"/> avec le message par défaut.
/// </summary>
public JoueurDejaConnecteException() : base(messageDefaut)
{}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="JoueurDejaConnecteException"/> avec le message spécifié.
/// </summary>
public JoueurDejaConnecteException(string message) : base(message)
{}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="JoueurDejaConnecteException"/> avec le joueur spécifié.
/// </summary>
public JoueurDejaConnecteException(Joueur joueur) : base($"Le joueur {joueur.Nom} est déjà connecté.")
{ }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="JoueurDejaConnecteException"/> avec le message et l'exception parent spécifiés.
/// </summary>
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);
}
}
}

@ -137,9 +137,6 @@ namespace CoreLibrary.Joueurs
/// <param name="codes">Une liste de tous les codes restants possibles.</param>
private static void SupprimerCodesImpossibles(List<Code> codes, Plateau plateau)
{
if (codes == null)
return;
List<int> indicesASupprimer = new List<int>();
// Pour chaque code possible

@ -18,7 +18,7 @@
<StackLayout BindableLayout.ItemsSource="{Binding .}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<vues:ReglesVue Titre="{Binding Nom}" Description="{Binding Description}" Margin="20"/>
<vues:ReglesVue Nom="{Binding Nom}" Description="{Binding Description}" Margin="20"/>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>

@ -10,6 +10,8 @@
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<Rectangle
Stroke="Black"
StrokeLineJoin="Miter"
x:Name="Carre"
Fill="{Binding Couleur, Source={x:Reference indicateurVue}}">
</Rectangle>

@ -11,6 +11,8 @@
HorizontalOptions="FillAndExpand">
<Ellipse
Stroke="Black"
StrokeLineJoin="Miter"
x:Name="Cercle"
Fill="{Binding Couleur, Source={x:Reference jetonVue}}">

@ -9,7 +9,7 @@
StrokeShape="RoundRectangle 10">
<Grid RowDefinitions="auto, auto" ColumnDefinitions="*" Margin="20">
<Label Text="{Binding Titre, Source={x:Reference reglesVue}}" FontSize="Large" Margin="0, 0, 0, 20"/>
<Label Text="{Binding Nom, Source={x:Reference reglesVue}}" FontSize="Large" Margin="0, 0, 0, 20"/>
<Label Grid.Row="1" Text="{Binding Description, Source={x:Reference reglesVue}}" FontSize="Medium"/>
</Grid>

@ -6,9 +6,9 @@ namespace MauiSpark.Vues;
public partial class ReglesVue : ContentView
{
/// <summary>
/// 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.
/// </summary>
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));
/// <summary>
/// Identifie la propriété de dépendance pour la description des règles.
@ -18,10 +18,10 @@ public partial class ReglesVue : ContentView
/// <summary>
/// Obtient ou définit le titre des règles.
/// </summary>
public string Titre
public string Nom
{
get => (string)GetValue(TitreProperty);
set => SetValue(TitreProperty, value);
get => (string)GetValue(NomProperty);
set => SetValue(NomProperty, value);
}
/// <summary>

@ -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<JoueurDejaConnecteException>(() => throw new JoueurDejaConnecteException());
}
[Fact]
public void ExceptionMessage()
{
string message = "Mon super gros problème.";
Assert.ThrowsAsync<JoueurDejaConnecteException>(() => 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<JoueurDejaConnecteException>(() => 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<InvalidOperationException>(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);
}
}
}

@ -13,7 +13,7 @@ namespace UnitTesting
///
/// </summary>
public class JoueurUT
{
{
/// <summary>
///
/// </summary>
@ -26,8 +26,8 @@ namespace UnitTesting
Assert.Equal(nom, joueur.Nom);
}
}
/// <summary>
///
/// </summary>
@ -40,8 +40,8 @@ namespace UnitTesting
Assert.Equal(nom, joueur.Nom);
}
}
/// <summary>
///
/// </summary>
@ -65,8 +65,8 @@ namespace UnitTesting
Assert.True(eventTriggered);
Assert.NotNull(eventArgs);
Assert.Equal(joueur2, eventArgs?.Joueur);
}
}
/// <summary>
///
/// </summary>
@ -89,20 +89,8 @@ namespace UnitTesting
Assert.True(eventTriggered);
Assert.NotNull(eventArgs);
Assert.Equal(joueur2, eventArgs?.Joueur);
}
/// <summary>
///
/// </summary>
[Fact]
public void TestSeConnecterThrowException()
{
Joueur joueur = new Joueur("Joueur");
joueur.SeConnecter(joueur);
}
Assert.Throws<JoueurDejaConnecteException>(() => joueur.SeConnecter(joueur));
}
/// <summary>
///
/// </summary>
@ -113,8 +101,8 @@ namespace UnitTesting
Joueur joueur = new Joueur(nom);
string result = joueur.ToString();
Assert.Equal(nom, result);
}
}
/// <summary>
///
/// </summary>
@ -125,8 +113,8 @@ namespace UnitTesting
string result = joueur.ToString();
Assert.Equal("", result);
}
}
/// <summary>
///
/// </summary>
@ -140,8 +128,8 @@ namespace UnitTesting
double result = joueur.Statistique(regles, statistique);
Assert.Equal(0, result);
}
}
/// <summary>
///
/// </summary>
@ -156,8 +144,8 @@ namespace UnitTesting
double result = joueur.Statistique(regles, statistique);
Assert.Equal(1, result);
}
}
/// <summary>
///
/// </summary>
@ -172,8 +160,8 @@ namespace UnitTesting
double result = joueur.Statistique(regles, statistique);
Assert.Equal(1, result);
}
}
/// <summary>
///
/// </summary>
@ -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);
}
}
}

@ -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

@ -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.
/// </summary>
public class PlateauUT
{
{
/// <summary>
/// Test que le constructeur de Plateau soit valide.
/// </summary>
@ -22,8 +19,8 @@ namespace UnitTesting
Plateau plateau = new Plateau(4,12);
Assert.NotNull(plateau);
Assert.False(plateau.Victoire);
}
}
/// <summary>
/// Test que le constructeur de Plateau soit invalide.
/// </summary>
@ -32,8 +29,8 @@ namespace UnitTesting
{
Assert.Throws<TailleCodeException>(() => new Plateau(-1, 10));
Assert.Throws<TailleGrilleException>(() => new Plateau(3, -1));
}
}
/// <summary>
/// Test la méthode EstComplet de Plateau et vérifie qu'il renvoie True.
/// </summary>
@ -54,8 +51,8 @@ namespace UnitTesting
bool estComplet = plateau.Complet;
Assert.True(estComplet);
}
}
/// <summary>
/// Test la méthode EstComplet de Plateau et vérifie qu'il renvoie False.
/// </summary>
@ -75,8 +72,8 @@ namespace UnitTesting
bool estComplet = plateau.Complet;
Assert.False(estComplet);
}
}
/// <summary>
/// Test l'exception CodeCompletException de Plateau avec une taille de code supérieure à ce qui est défini.
/// </summary>
@ -99,8 +96,8 @@ namespace UnitTesting
Assert.Throws<CodeCompletException>(() => code.AjouterJeton(new Jeton(Couleur.Bleu)));
}
}
/// <summary>
/// Test l'exception CodeIncompletException de Plateau avec un code incomplet.
/// </summary>
@ -111,8 +108,8 @@ namespace UnitTesting
Code code = new Code(4);
Assert.Throws<CodeIncompletException>(() => plateau.AjouterCode(code));
}
}
/// <summary>
/// Test la méthode AjouterCode de Plateau avec un bon code.
/// </summary>
@ -131,8 +128,8 @@ namespace UnitTesting
Assert.NotNull(codeSecret);
plateau.AjouterCode(codeSecret);
Assert.True(plateau.Victoire);
}
}
/// <summary>
/// Test la méthode AjouterCode de Plateau et vérifie la grille et ses composants.
/// </summary>
@ -164,8 +161,8 @@ namespace UnitTesting
Assert.Equal(4, jetonsGrille.First().Count());
Assert.Single(indicateurs);
}
}
/// <summary>
/// Test que la grille du plateau est vide.
/// </summary>
@ -179,8 +176,8 @@ namespace UnitTesting
Assert.Empty(jetons);
Assert.Empty(indicateurs);
}
}
/// <summary>
/// Test l'exception GrilleCompleteException de Plateau.
/// </summary>
@ -209,8 +206,8 @@ namespace UnitTesting
plateau.AjouterCode(codeComplet2);
Assert.Throws<GrilleCompleteException>(() => plateau.AjouterCode(codeComplet3));
}
}
/// <summary>
/// Test l'événement QuandPlateauAjouterCode de Plateau.
/// </summary>
@ -231,8 +228,8 @@ namespace UnitTesting
QuandPlateauAjouterCodeInfo?.Invoke(plateau, []);
Assert.True(appel);
}
}
/// <summary>
/// Test la méthode AjouterCode de Plateau et vérifie tous les cas d'arrêts.
/// </summary>

@ -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<bool>(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<bool>(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<bool>(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<Code> codes = new List<Code>([
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);
}
}
}
Loading…
Cancel
Save