Merge branch 'master' into Tests

master
Pauline PRADY 12 months ago
commit eafe61ad2f

@ -8,44 +8,52 @@ trigger:
- push
steps:
- name: build-CoreLibrary
- name: build
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- cd Sources
- dotnet restore CoreLibrary/CoreLibrary.csproj
- dotnet build CoreLibrary/CoreLibrary.csproj -c Release --no-restore
- name: build-ConsoleApp
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- cd Sources
- dotnet restore ConsoleApp/ConsoleApp.csproj
- dotnet build ConsoleApp/ConsoleApp.csproj -c Release --no-restore
- name: build-UnitTesting
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- cd Sources
- dotnet restore UnitTesting/UnitTesting.csproj
- dotnet build UnitTesting/UnitTesting.csproj -c Release --no-restore
- name: build-MauiSpark
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- mkdir /usr/lib/android-sdk
- cd /usr/lib/android-sdk
- wget -O commandlinetools.zip https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip
- apt update && apt install unzip default-jdk -y
- unzip commandlinetools.zip
- yes | /usr/lib/android-sdk/cmdline-tools/bin/sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" --sdk_root=/usr/lib/android-sdk/
- cd /drone/src/Sources
- dotnet --version
- dotnet workload install maui-android
- dotnet restore MauiSpark/MauiSpark.csproj
- dotnet build MauiSpark/MauiSpark.csproj -c Release --no-restore /p:AndroidSdkDirectory=/usr/lib/android-sdk/ -property:Aapt2ToolPath=/usr/lib/android-sdk/build-tools/34.0.0
- dotnet restore mastermindSansMaui.sln
- dotnet build mastermindSansMaui.sln -c Release --no-restore
- dotnet publish mastermindSansMaui.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release
#- name: build-MauiSpark
# image: mcr.microsoft.com/dotnet/sdk:8.0
# commands:
# - mkdir /usr/lib/android-sdk
# - cd /usr/lib/android-sdk
# - wget -O commandlinetools.zip https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip
# - apt update && apt install unzip default-jdk -y
# - unzip commandlinetools.zip
# - yes | /usr/lib/android-sdk/cmdline-tools/bin/sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" --sdk_root=/usr/lib/android-sdk/
# - cd /drone/src/Sources
# - dotnet --version
# - dotnet workload install maui-android
# - dotnet restore MauiSpark/MauiSpark.csproj
# - dotnet build MauiSpark/MauiSpark.csproj -c Release --no-restore /p:AndroidSdkDirectory=/usr/lib/android-sdk/ -property:Aapt2ToolPath=/usr/lib/android-sdk/build-tools/34.0.0
- name: tests
image: mcr.microsoft.com/dotnet/sdk:8.0
commands:
- cd Sources/
- dotnet restore UnitTesting/UnitTesting.csproj
- dotnet test UnitTesting/UnitTesting.csproj --no-restore
- dotnet restore mastermindSansMaui.sln
- dotnet test mastermindSansMaui.sln --no-restore
depends_on: [build]
- name: code-inspection
image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dronesonarplugin-dotnet8
secrets: [ SECRET_SONAR_LOGIN ]
environment:
sonar_host: https://codefirst.iut.uca.fr/sonar/
sonar_token:
from_secret: sonar_token
project_key: celestebarbosa-mastermind
coverage_exclusions: "Tests/**"
commands:
- cd Sources/
- dotnet restore mastermindSansMaui.sln
- dotnet sonarscanner begin /k:$${project_key} /d:sonar.host.url=$${sonar_host} /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml" /d:sonar.coverage.exclusions=$${coverage_exclusions} /d:sonar.login=$${sonar_token}
- dotnet build mastermindSansMaui.sln -c Release --no-restore
- dotnet test mastermindSansMaui.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
- dotnet publish mastermindSansMaui.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- dotnet sonarscanner end /d:sonar.login=$${sonar_token}
- name: generate-and-deploy-docs
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-docdeployer
failure: ignore

@ -10,8 +10,36 @@ ReglesClassiques partie = new ReglesClassiques();
Utils.AfficherTitre();
Utils.AfficherTitre("Joueurs");
string joueur1 = Utils.SaisirNom();
string joueur2 = Utils.SaisirNom();
string joueur1;
string joueur2;
while (true)
{
try
{
joueur1 = Utils.SaisirNom();
break;
}
catch(UtilsNomJoueurNullException)
{
Console.WriteLine("Nom invalide pour le joueur ! Ressaisir le nom");
}
}
while (true)
{
try
{
joueur2 = Utils.SaisirNom();
break;
}
catch (UtilsNomJoueurNullException)
{
Console.WriteLine("Nom invalide pour le joueur 2 ! Ressaisir le nom");
}
}
Utils.AfficherSeparateur();
partie.AjouterJoueur(joueur1);

@ -62,8 +62,13 @@ namespace ConsoleApp
Console.WriteLine(nom);
Console.Write(">>> ");
nom = Console.ReadLine() ?? nom;
if (nom == "")
{
--nombreJoueurs;
throw new UtilsNomJoueurNullException();
}
Console.WriteLine();
return nom;
}
@ -218,7 +223,15 @@ namespace ConsoleApp
else
{
Console.Write("\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b");
code.SupprimerDernierJeton();
try
{
code.SupprimerDernierJeton();
}
catch(CodeTableauLesJetonsVideException)
{
Console.WriteLine("Il n'y a pas de jetons! Impossible de supprimer");
}
}
}
}

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
public class UtilsNomJoueurNullException : Exception
{
public UtilsNomJoueurNullException() : base("Le nom du joueur est null")
{ }
}
}

@ -7,32 +7,43 @@
public int NbJetons { get; private set; } = 0;
public Code(int tailleCode)
{
{
lesJetons = new Jeton?[tailleCode];
}
public Code(IEnumerable<Jeton?> jetons)
public Code(IEnumerable<Jeton> jetons)
{
lesJetons = jetons.ToArray();
lesJetons = new Jeton?[NbJetons];
foreach(Jeton jeton in jetons)
AjouterJeton(jeton);
}
public void AjouterJeton(Jeton jeton)
{
{
if (EstComplet())
throw new CodeTableauLesJetonsCompletException();
lesJetons[NbJetons++] = jeton;
}
public void SupprimerDernierJeton()
{
if(NbJetons <= 0)
throw new CodeTableauLesJetonsVideException();
lesJetons[NbJetons--] = null;
}
public Jeton RecupererJeton(int indice)
{
if(indice < 0 || indice > TailleMaximale())
throw new CodeIndiceHorsDePorteeException();
Jeton? jeton = lesJetons[indice];
if (!jeton.HasValue)
throw new Exception();
throw new CodeJetonNullException();
return jeton.Value;
}
@ -54,6 +65,8 @@
public IEnumerable<Indicateur> Comparer(Code autreCode)
{
// Mon code est le code correct, l'autre code est celui qui teste
if (!autreCode.EstComplet())
throw new CodeTableauLesJetonsIncompletException();
Indicateur[] indicateurs = [];
@ -100,3 +113,5 @@
}
}
}

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreLibrary
{
public class CodeIndiceHorsDePorteeException : Exception
{
public CodeIndiceHorsDePorteeException() : base("L'indice pointe en dehors du tableau")
{ }
}
}

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreLibrary
{
public class CodeJetonNullException : Exception
{
public CodeJetonNullException() : base("le jeton est null")
{ }
}
}

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreLibrary
{
public class CodeTableauLesJetonsCompletException : Exception
{
public CodeTableauLesJetonsCompletException() : base("Le tableau des jetons est plein")
{ }
}
}

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreLibrary
{
public class CodeTableauLesJetonsIncompletException : Exception
{
public CodeTableauLesJetonsIncompletException() : base("Le tableau des jetons est incomplet")
{ }
}
}

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CoreLibrary
{
public class CodeTableauLesJetonsVideException : Exception
{
public CodeTableauLesJetonsVideException() : base("Le tableau des jetons est vide")
{ }
}
}

@ -15,6 +15,16 @@
public Plateau(int tailleCode, int tailleGrille)
{
if(tailleCode <= 0)
{
throw new PlateauTailleCodeException();
}
if (tailleGrille <= 0)
{
throw new PlateauTailleGrilleException();
}
codeSecret = new Code(tailleCode);
grille = new Code?[tailleGrille];
indicateurs = new IEnumerable<Indicateur>[tailleGrille];
@ -22,11 +32,6 @@
this.tailleCode = tailleCode;
GenererCodeAleatoire();
foreach (Jeton? jeton in codeSecret.Jetons())
{
Console.WriteLine(jeton.Value.Couleur);
}
}
private void GenererCodeAleatoire()
@ -46,6 +51,16 @@
public void AjouterCode(Code code)
{
if (code.TailleMaximale() != tailleCode)
{
throw new PlateauTailleCodeException();
}
if (!code.EstComplet())
{
throw new PlateauCodeIncompletException();
}
indicateurs[Tour - 1] = codeSecret.Comparer(code);
grille[Tour - 1] = code;
++Tour;
@ -94,3 +109,4 @@
}
}
}

@ -0,0 +1,8 @@
namespace CoreLibrary
{
public class PlateauCodeIncompletException : Exception
{
public PlateauCodeIncompletException() : base("Le code est incomplet")
{ }
}
}

@ -0,0 +1,7 @@
namespace CoreLibrary
{
public class PlateauTailleCodeException : Exception
{
public PlateauTailleCodeException() : base("La taille du code doit être positive non nulle.") { }
}
}

@ -0,0 +1,7 @@
namespace CoreLibrary
{
public class PlateauTailleCodeIncompleteException : Exception
{
public PlateauTailleCodeIncompleteException() : base("Le code n'est pas remplit au maximum") { }
}
}

@ -0,0 +1,8 @@
namespace CoreLibrary
{
public class PlateauTailleGrilleException : Exception
{
public PlateauTailleGrilleException() : base("La taille de la grille doit être égale positive non nulle.")
{ }
}
}

@ -10,7 +10,6 @@
public int TourMaximum { get => 12; }
public int TailleCodeMaximum { get => 4; }
public int NbJoueurs { get => nbJoueurs; }
public int NbJoueursMaximum { get => 2; }
@ -29,7 +28,7 @@
public Joueur JoueurCourant()
{
if (!joueurCourant.HasValue)
throw new Exception();
throw new ReglesClassiquesJoueurCourantNull();
return joueurs[joueurCourant.Value];
}
@ -37,7 +36,9 @@
public void PasserLaMain()
{
if (!joueurCourant.HasValue)
throw new Exception();
{
throw new ReglesClassiquesJoueurCourantNull();
}
joueurCourant++;
if (joueurCourant >= joueurs.Length)

@ -0,0 +1,8 @@
namespace CoreLibrary
{
public class ReglesClassiquesJoueurCourantNull : Exception
{
public ReglesClassiquesJoueurCourantNull() : base("Le joueur courant est null")
{ }
}
}

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<TargetFrameworks>net8.0-android;</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
<!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
<!-- <TargetFrameworks>$(TargetFrameworks);net8.0-tizen</TargetFrameworks> -->

@ -0,0 +1,46 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreLibrary", "CoreLibrary\CoreLibrary.csproj", "{341FB405-085D-4C34-B395-64EF0F9B93E0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp", "ConsoleApp\ConsoleApp.csproj", "{97507EBF-3973-4D1C-BE56-2F125B25E74F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "UnitTesting\UnitTesting.csproj", "{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}"
ProjectSection(ProjectDependencies) = postProject
{341FB405-085D-4C34-B395-64EF0F9B93E0} = {341FB405-085D-4C34-B395-64EF0F9B93E0}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{341FB405-085D-4C34-B395-64EF0F9B93E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{341FB405-085D-4C34-B395-64EF0F9B93E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{341FB405-085D-4C34-B395-64EF0F9B93E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{341FB405-085D-4C34-B395-64EF0F9B93E0}.Release|Any CPU.Build.0 = Release|Any CPU
{97507EBF-3973-4D1C-BE56-2F125B25E74F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97507EBF-3973-4D1C-BE56-2F125B25E74F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97507EBF-3973-4D1C-BE56-2F125B25E74F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{97507EBF-3973-4D1C-BE56-2F125B25E74F}.Release|Any CPU.Build.0 = Release|Any CPU
{BD22A919-E40E-4791-A6B0-2B8D37BBE834}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD22A919-E40E-4791-A6B0-2B8D37BBE834}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD22A919-E40E-4791-A6B0-2B8D37BBE834}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{BD22A919-E40E-4791-A6B0-2B8D37BBE834}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD22A919-E40E-4791-A6B0-2B8D37BBE834}.Release|Any CPU.Build.0 = Release|Any CPU
{BD22A919-E40E-4791-A6B0-2B8D37BBE834}.Release|Any CPU.Deploy.0 = Release|Any CPU
{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A2182054-C0D1-46D6-BD39-F3F7926CE2DD}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B3BD74E0-E5DA-4859-B2B7-E3759C2089EE}
EndGlobalSection
EndGlobal
Loading…
Cancel
Save