Compare commits

...

16 Commits

Author SHA1 Message Date
Yoan 9dd6792ffe Nouveau logo doc
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan c8166ec188 Correction bug de génération doc
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 7975ab4a9b bug ci
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan d12fd52ec2 correction bug ci
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 7b4dd95a4a correction erreur ci
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 0ac7dbadab Génération de la documation
continuous-integration/drone/push Build encountered an error Details
2 years ago
Guillaume 310b087c69 Merge branch 'devGuillaume'
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan BRUGIÈRE 7aab5853da Merge pull request 'Tests unitaires devYoan' (#15) from devYoan into master
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 1429aef0fc tests coverage
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 7fdac10b64 test coverage
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 6c58c3218f Tests unitaires, Int2Color converter et test coverage
continuous-integration/drone/push Build encountered an error Details
continuous-integration/drone/pr Build encountered an error Details
2 years ago
Yoan 5ea4f7287a Tests Unitaire
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan 8bf726df80 Tests unitaires
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan BRUGIÈRE 0fd5765a02 Merge remote-tracking branch 'origin/devGuillaume'
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan BRUGIÈRE 22417adca7 correction erreur READ.ME
continuous-integration/drone/push Build is passing Details
2 years ago
Yoan BRUGIÈRE 6c35212f95 Mise a jour README
continuous-integration/drone/push Build is passing Details
2 years ago

@ -30,7 +30,7 @@ steps:
sonar_token:
from_secret: SECRET_SONAR_LOGIN
project_key: Ohara
coverage_exclusions: "Tests/**"
coverage_exclusions: Tests/**,Ohara/**
commands:
- cd Sources/
- dotnet restore Ohara.sln
@ -41,3 +41,19 @@ steps:
- dotnet publish Ohara/Ohara.csproj -c Release --no-restore -o $CI_PROJECT_DIR/build/release -f:net7.0-android /p:AndroidSdkDirectory=/usr/lib/android-sdk
- dotnet sonarscanner end /d:sonar.login=$${sonar_token}
depends_on: [tests]
- name: generate-and-deploy-docs
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-docdeployer
failure: ignore
volumes:
- name: docs
path: /docs
commands:
- /entrypoint.sh
when:
branch:
- master
event:
- push
- pull_request
depends_on: [build,tests]

@ -0,0 +1,429 @@
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "Ohara"
PROJECT_NUMBER = 1.0.0
PROJECT_BRIEF = "Une application windows qui fait office d'encyclopédie personnalisable sur le manga One piece."
PROJECT_LOGO = images/mylogo.png
OUTPUT_DIRECTORY = /docs/doxygen
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
JAVADOC_BANNER = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
PYTHON_DOCSTRING = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
# Well... the one for Java looks so similar to the one for C#...
OPTIMIZE_OUTPUT_JAVA = YES
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
OPTIMIZE_OUTPUT_SLICE = NO
EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES
TOC_INCLUDE_HEADINGS = 5
AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0
NUM_PROC_THREADS = 1
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
# I do not like other members to see my private members... but you can set it to YES if you prefer.
EXTRACT_PRIVATE = NO
EXTRACT_PRIV_VIRTUAL = NO
EXTRACT_PACKAGE = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
RESOLVE_UNNAMED_PARAMS = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = NO
HIDE_SCOPE_NAMES = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_HEADERFILE = YES
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_IF_INCOMPLETE_DOC = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = ../../Sources
INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.java \
*.ii \
*.ixx \
*.ipp \
*.i++ \
*.inl \
*.idl \
*.ddl \
*.odl \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++ \
*.l \
*.cs \
*.d \
*.php \
*.php4 \
*.php5 \
*.phtml \
*.inc \
*.m \
*.markdown \
*.md \
*.mm \
*.dox \
*.py \
*.pyw \
*.f90 \
*.f95 \
*.f03 \
*.f08 \
*.f18 \
*.f \
*.for \
*.vhd \
*.vhdl \
*.ucf \
*.qsf \
*.ice
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS = */Tests/*
EXCLUDE_PATTERNS += */bin/*
EXCLUDE_PATTERNS += */obj/*
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
CLANG_ASSISTED_PARSING = NO
CLANG_ADD_INC_PATHS = YES
CLANG_OPTIONS =
CLANG_DATABASE_PATH =
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES = images/CodeFirst.png images/clubinfo.png
HTML_COLORSTYLE_HUE = 215
HTML_COLORSTYLE_SAT = 45
HTML_COLORSTYLE_GAMMA = 240
HTML_TIMESTAMP = NO
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_FEEDURL =
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
GENERATE_TREEVIEW = NO
FULL_SIDEBAR = NO
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
OBFUSCATE_EMAILS = YES
HTML_FORMULA_FORMAT = png
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
FORMULA_MACROFILE =
USE_MATHJAX = NO
MATHJAX_VERSION = MathJax_2
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH =
MATHJAX_EXTENSIONS =
MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
EXTERNAL_SEARCH = NO
SEARCHENGINE_URL =
SEARCHDATA_FILE = searchdata.xml
EXTERNAL_SEARCH_ID =
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME =
MAKEINDEX_CMD_NAME = makeindex
LATEX_MAKEINDEX_CMD = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
LATEX_EXTRA_STYLESHEET =
LATEX_EXTRA_FILES =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_PROGRAMLISTING = YES
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to Sqlite3 output
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
DOT_UML_DETAILS = NO
DOT_WRAP_THRESHOLD = 17
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DIR_GRAPH_MAX_DEPTH = 1
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DIAFILE_DIRS =
PLANTUML_JAR_PATH =
PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

@ -190,6 +190,12 @@ class Manager {
+ void SuppimerPerso(Personnage perso)
+ void SuppimerIle(Ile ile)
+ void SuppimerBateau(Bateau bateau)
+ void ModifierFDD(FruitDuDemon fruit, string ancienNom)
+ void ModifierIle(Ile ile, string ancienNom)
+ void ModifierBest(Bestiaire best, string ancienNom)
+ void ModifierEquipage(Equipage equip, string ancienNom)
+ void ModifierBateau(Bateau bateau, string ancienNom)
+ void ModifierPerso(Personnage perso, string ancienNom)
}
@ -406,6 +412,8 @@ class Manager #LimeGreen {
+ List<Bestiaire> GetBestiaires()
+ List<Ile> GetIles()
+ List<FruitDuDemon> FiltrerFDD(string type)
+ List<Bateau> FiltrerBateau(string nom)
+ List<Ile>FiltrerIle(string region)
+ List<ObjetOhara> RecherObjetOhara(string text, List<ObjetOhara> liste)
+ List<ObjetOhara> GetFavoris()
+ void ModifierFavFDD(FruitDuDemon fdd, bool value)
@ -426,6 +434,12 @@ class Manager #LimeGreen {
+ void SuppimerPerso(Personnage perso)
+ void SuppimerIle(Ile ile)
+ void SuppimerBateau(Bateau bateau)
+ void ModifierFDD(FruitDuDemon fruit, string ancienNom)
+ void ModifierIle(Ile ile, string ancienNom)
+ void ModifierBest(Bestiaire best, string ancienNom)
+ void ModifierEquipage(Equipage equip, string ancienNom)
+ void ModifierBateau(Bateau bateau, string ancienNom)
+ void ModifierPerso(Personnage perso, string ancienNom)
}
class StubManager #LimeGreen {
@ -490,6 +504,8 @@ class Manager {
+ List<Bestiaire> GetBestiaires()
+ List<Ile> GetIles()
+ List<FruitDuDemon> FiltrerFDD(string type)
+ List<Bateau> FiltrerBateau(string nom)
+ List<Ile>FiltrerIle(string region)
+ List<ObjetOhara> RecherObjetOhara(string text, List<ObjetOhara> liste)
+ List<ObjetOhara> GetFavoris()
+ void ModifierFavFDD(FruitDuDemon fdd, bool value)
@ -510,6 +526,12 @@ class Manager {
+ void SuppimerPerso(Personnage perso)
+ void SuppimerIle(Ile ile)
+ void SuppimerBateau(Bateau bateau)
+ void ModifierFDD(FruitDuDemon fruit, string ancienNom)
+ void ModifierIle(Ile ile, string ancienNom)
+ void ModifierBest(Bestiaire best, string ancienNom)
+ void ModifierEquipage(Equipage equip, string ancienNom)
+ void ModifierBateau(Bateau bateau, string ancienNom)
+ void ModifierPerso(Personnage perso, string ancienNom)
}
class ObjetOhara {
@ -522,10 +544,17 @@ class ObjetOhara {
@enduml
```
# Description du diagramme de classes sur nos parties ajoutées
# Description du diagramme de classes sur nos parties ajoutées pour la fonctionnalité "Favoris"
Notre application possède la fonctionnalité d'ajouter un objet à nos favoris, cette fonctionnalité permet à l'utilisateur de retrouver plus facilement des information qui l'interesse grâce à une page de l'application qui affiche directement tout les objets ajoutés en favori. Cette fonctionnalité est gérée par le manager à travers les méthodes: GetFavoris, qui permet de récupérer tout les objets ajoutés en favoris et de les renvoyer sous forme de liste et ModifierFav(Type de l'objet) qui permet d'ajouter ou d'enlever un favoris. Ces méthodes s'appuient sur la propriété EstFavori de type booléen de la classe mère de toute de nos classe ObjetOhara, si cette propriété est égale à true alors l'objet fait partie des favoris.
# Description du diagramme de classes sur nos parties ajoutées pour les fonctionnalités "Filtrer" et "Rechercher"
Notre application possède également la fonctionnalité de filtrer et de rechercher des objets. En effet, la plupart des pages de notre application possèdent une barre de recherche qui permet d'accéder plus facilement à l'objet recherché. Ces barres de recherche s'appuient sur la méthode "RechercherObjetOhara" qui prend en paramètre le texte dans la barre de recherche ainsi que la liste des objets sur laquelle réaliser la recherche, puis renvoie une nouvelle liste avec les objets correspondants à la recherche.
En ce qui concerne la possibilité de filtrer, elle n'existe que pour certaines classes (Fruit du démon, Bateau et Île). En effet, les pages correspondantes à ces classes possèdent des pickers permettant d'appliquer un filtre sur la liste d'objets qu'elles affichent. Cette fonctionnalité se base sur les méthodes "Filtrer(Type de l'objet)" qui prennent en paramètre une chaîne de caractères représentant l'élément sur lequel filtrer. Par exemple, pour "FiltrerFDD", on donne en paramètre le type du fruit du démon que l'on souhaite ("Zoan", "Logia", "Paramecia",...) puis elle nous renvoie une liste de fruits du démon contenant les fruits du démon possédant le type donné en paramètre grâce à une requête LINQ.
# Diagramme de paquetage <a id="paquetage"></a>
![logo](img/diagramme_paquetage.png)

@ -219,7 +219,7 @@ namespace Model.Classes
}
if (premierChap < 0)
{
premierChap = 0;
PremierChap = 0;
}
else
{

@ -17,16 +17,14 @@ using System.Xml.Linq;
namespace Model.Classes
{
/// <summary>
/// Représente un objet du monde de One Piece appartenant à l'île d'Ohara.
/// Représente un objet du monde de One Piece.
/// </summary>
[DataContract(Name = "objetohara")]
/// <summary>
/// Événement déclenché lorsque la valeur d'une propriété change.
/// </summary>
public class ObjetOhara : INotifyPropertyChanged
{
/// <summary>
/// Événement déclenché lorsque la valeur d'une propriété change.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged;
/// <summary>

@ -259,7 +259,7 @@ namespace Model.Classes
public override int GetHashCode()
{
return HashCode.Combine(Prime, Epithete, Age, Origine,Biographie, Citation,Equipage,Fruit);
return HashCode.Combine(Prime, Epithete, Age, Taille, Origine,Biographie, Citation,Equipage);
}

@ -1,4 +1,7 @@
using System;
/// \file IDataManager.cs
/// \brief Contient la définition de l'intergace IDataManager.
///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -7,14 +10,17 @@ using Model.Classes;
namespace Model.Managers
{
/// <summary>
/// Interface permettant de représenter le StubManager et Le XML Serializer dans le Manager.
/// </summary>
public interface IDataManager
{
IEnumerable<Bateau> GetBateaux();
IEnumerable<Bestiaire> GetBestiaires();
IEnumerable<Equipage> GetEquipages();
IEnumerable<FruitDuDemon> GetFruits();
IEnumerable<Ile> GetIles();
IEnumerable<Personnage> GetPersonnages();
IEnumerable<Bateau>? GetBateaux();
IEnumerable<Bestiaire>? GetBestiaires();
IEnumerable<Equipage>? GetEquipages();
IEnumerable<FruitDuDemon>? GetFruits();
IEnumerable<Ile>? GetIles();
IEnumerable<Personnage>? GetPersonnages();
void SetBateau(List<Bateau> listeBateaux);
void SetBestiaire(List<Bestiaire> listeBest);
void SetEquipage(List<Equipage> listeEquip);

@ -63,49 +63,62 @@ namespace Model.Managers
public Manager(IDataManager dataManager)
{
DataManager = dataManager;
Bateaux = new ObservableCollection<Bateau>(DataManager.GetBateaux());
Personnages = new ObservableCollection<Personnage>(DataManager.GetPersonnages());
Fruits = new ObservableCollection<FruitDuDemon>(DataManager.GetFruits());
Iles = new ObservableCollection<Ile>(DataManager.GetIles());
Bestiaire = new ObservableCollection<Bestiaire>(DataManager.GetBestiaires());
Equipages = new ObservableCollection<Equipage>(DataManager.GetEquipages());
var bateaux = DataManager.GetBateaux();
Bateaux = bateaux != null ? new ObservableCollection<Bateau>(bateaux) : new ObservableCollection<Bateau>();
var personnages = DataManager.GetPersonnages();
Personnages = personnages != null ? new ObservableCollection<Personnage>(personnages) : new ObservableCollection<Personnage>();
var fruits = DataManager.GetFruits();
Fruits = fruits != null ? new ObservableCollection<FruitDuDemon>(fruits) : new ObservableCollection<FruitDuDemon>();
var iles = DataManager.GetIles();
Iles = iles != null ? new ObservableCollection<Ile>(iles) : new ObservableCollection<Ile>();
var bests = DataManager.GetBestiaires();
Bestiaire = bests != null ? new ObservableCollection<Bestiaire>(bests) : new ObservableCollection<Bestiaire>();
var equipages = DataManager.GetEquipages();
Equipages = equipages != null ? new ObservableCollection<Equipage>(equipages) : new ObservableCollection<Equipage>();
}
/// \brief Récupère la liste des personnages.
/// \return La liste des personnages.
public List<Personnage> GetPersonnages()
{
return DataManager.GetPersonnages().ToList();
var personnages = DataManager.GetPersonnages();
return personnages != null ? personnages.ToList() : new List<Personnage>();
}
/// \brief Récupère la liste des fruits du démon.
/// \return La liste des fruits du démon.
public List<FruitDuDemon> GetFruits()
{
return DataManager.GetFruits().ToList();
var fruits = DataManager.GetFruits();
return fruits != null ? fruits.ToList() : new List<FruitDuDemon>();
}
/// \brief Récupère la liste des équipages.
/// \return La liste des équipages.
public List<Equipage> GetEquipages()
{
return DataManager.GetEquipages().ToList();
var equipages = DataManager.GetEquipages();
return equipages != null ? equipages.ToList() : new List<Equipage>();
}
/// \brief Récupère la liste des bateaux.
/// \return La liste des bateaux.
public List<Bateau> GetBateaux()
{
return DataManager.GetBateaux().ToList();
var bateaux = DataManager.GetBateaux();
return bateaux != null ? bateaux.ToList() : new List<Bateau>();
}
/// \brief Récupère la liste des bestiaires.
/// \return La liste des bestiaires.
public List<Bestiaire> GetBestiaires()
{
return DataManager.GetBestiaires().ToList();
var bestiaires = DataManager.GetBestiaires();
return bestiaires != null ? bestiaires.ToList() : new List<Bestiaire>();
}
/// \brief Récupère la liste des îles.
/// \return La liste des îles.
public List<Ile> GetIles()
{
return DataManager.GetIles().ToList();
var iles = DataManager.GetIles();
return iles != null ? iles.ToList() : new List<Ile>();
}
/// \brief Filtre les fruits du démon par type.
@ -113,17 +126,15 @@ namespace Model.Managers
/// \return La liste filtrée des fruits du démon.
public List<FruitDuDemon> FiltrerFDD(string type)
{
List<FruitDuDemon> fdd = new List<FruitDuDemon>();
fdd=Fruits.Where(p=>p.Type==type).ToList();
List<FruitDuDemon> fdd =Fruits.Where(p=>p.Type==type).ToList();
return fdd;
}
/// \brief Filtre les bateaux par nom d'affiliation.
/// \param nom Le nom de l'équipage affilié au(x) bateau(x).
/// \return La liste filtrée des bateaux.
public List<Bateau> FiltrerBateau(string nom)
{
List<Bateau> bateau = new List<Bateau>();
bateau = Bateaux.Where(p => p.Affiliation?.Nom == nom).ToList();
{
List<Bateau> bateau = Bateaux.Where(p => p.Affiliation?.Nom == nom).ToList();
return bateau;
}
/// \brief Filtre les îles par région.
@ -131,8 +142,7 @@ namespace Model.Managers
/// \return La liste filtrée des îles.
public List<Ile> FiltrerIle(string region)
{
List<Ile> ile = new List<Ile>();
ile = Iles.Where(p => p.Region == region).ToList();
List<Ile> ile = Iles.Where(p => p.Region == region).ToList();
return ile;
}
/// \brief Recherche les objets Ohara correspondant au texte donné.
@ -171,15 +181,15 @@ namespace Model.Managers
}
/// \brief Récupère la liste des objets Ohara ayant le parametre EstFavori égal a true.
/// \return La liste des objets Ohara ayant le parametre EstFavori égal a true.
public List<ObjetOhara> GetFavoris()
{
List<ObjetOhara> listeFavoris = new List<ObjetOhara>();
listeFavoris.AddRange(Bateaux);
listeFavoris.AddRange(Equipages);
listeFavoris.AddRange(Bestiaire);
listeFavoris.AddRange(Fruits);
listeFavoris.AddRange(Iles);
listeFavoris.AddRange(Personnages);
public HashSet<ObjetOhara> GetFavoris()
{
HashSet<ObjetOhara> listeFavoris = new HashSet<ObjetOhara>();
listeFavoris.UnionWith(Bateaux);
listeFavoris.UnionWith(Equipages);
listeFavoris.UnionWith(Bestiaire);
listeFavoris.UnionWith(Fruits);
listeFavoris.UnionWith(Iles);
listeFavoris.UnionWith(Personnages);
foreach(ObjetOhara obj in listeFavoris.ToList())
{
if (obj.EstFavori == false)

@ -1,4 +1,7 @@
using Model.Stub;
/// \file XML_Serializer.cs
/// \brief Contient la définition de la classe XML_Serializer
///
using Model.Stub;
using System;
using System.Collections.Generic;
using System.Linq;
@ -11,6 +14,9 @@ using Model.Managers;
namespace Model.Serializer
{
/// <summary>
/// Classe permettant de gérer la persistance sous forme de fichier .xml de l'application.
/// </summary>
public class XML_Serializer : IDataManager
{
public string Chemin { get; set; }
@ -30,27 +36,39 @@ namespace Model.Serializer
{
if (!File.Exists(Path.Combine(Chemin, "./personnage.xml")))
{
SetPersonnage(stubManager.GetPersonnages().ToList());
var personnages = stubManager.GetPersonnages();
if(personnages!=null)
SetPersonnage(personnages.ToList());
}
if (!File.Exists(Path.Combine(Chemin, "./bateau.xml")))
{
SetBateau(stubManager.GetBateaux().ToList());
var bateaux = stubManager.GetBateaux();
if(bateaux !=null)
SetBateau(bateaux.ToList());
}
if (!File.Exists(Path.Combine(Chemin, "./fruitdudemon.xml")))
{
SetFDD(stubManager.GetFruits().ToList());
var fruits = stubManager.GetFruits();
if(fruits!=null)
SetFDD(fruits.ToList());
}
if (!File.Exists(Path.Combine(Chemin, "./bestiaire.xml")))
{
SetBestiaire(stubManager.GetBestiaires().ToList());
var bestiaires= stubManager.GetBestiaires();
if(bestiaires!=null)
SetBestiaire(bestiaires.ToList());
}
if (!File.Exists(Path.Combine(Chemin, "./equipage.xml")))
{
SetEquipage(stubManager.GetEquipages().ToList());
var equipages= stubManager.GetEquipages();
if(equipages!=null)
SetEquipage(equipages.ToList());
}
if (!File.Exists(Path.Combine(Chemin, "./ile.xml")))
{
SetIle(stubManager.GetIles().ToList());
var iles = stubManager.GetIles();
if(iles!=null)
SetIle(iles.ToList());
}
}
@ -143,7 +161,7 @@ namespace Model.Serializer
}
}
public void SetBateau(List<Bateau> listeBateau)
public void SetBateau(List<Bateau> listeBateaux)
{
var serializer = new DataContractSerializer(typeof(List<Bateau>));
string xmlFile = "bateau.xml";
@ -155,92 +173,80 @@ namespace Model.Serializer
using (XmlWriter writer = XmlWriter.Create(tw, settings))
{
serializer.WriteObject(writer, listeBateau);
serializer.WriteObject(writer, listeBateaux);
}
}
}
public IEnumerable<Bateau> GetBateaux()
public IEnumerable<Bateau>? GetBateaux()
{
List<Bateau>? listeBateau = new List<Bateau>();
var serializer = new DataContractSerializer(typeof(List<Bateau>));
string xmlFile = "bateau.xml";
Directory.SetCurrentDirectory(Path.Combine(Chemin, "./"));
using (Stream s = File.OpenRead(xmlFile))
{
listeBateau = serializer.ReadObject(s) as List<Bateau>;
}
return listeBateau;
return serializer.ReadObject(s) as List<Bateau>;
}
}
public IEnumerable<Bestiaire> GetBestiaires()
public IEnumerable<Bestiaire>? GetBestiaires()
{
List<Bestiaire>? listeBest = new List<Bestiaire>();
var serializer = new DataContractSerializer(typeof(List<Bestiaire>));
string xmlFile = "bestiaire.xml";
Directory.SetCurrentDirectory(Path.Combine(Chemin, "./"));
using (Stream s = File.OpenRead(xmlFile))
{
listeBest = serializer.ReadObject(s) as List<Bestiaire>;
return serializer.ReadObject(s) as List<Bestiaire>;
}
return listeBest;
}
public IEnumerable<Equipage> GetEquipages()
{
List<Equipage>? listeEquip = new List<Equipage>();
public IEnumerable<Equipage>? GetEquipages()
{
var serializer = new DataContractSerializer(typeof(List<Equipage>));
string xmlFile = "equipage.xml";
Directory.SetCurrentDirectory(Path.Combine(Chemin, "./"));
using (Stream s = File.OpenRead(xmlFile))
{
listeEquip = serializer.ReadObject(s) as List<Equipage>;
return serializer.ReadObject(s) as List<Equipage>;
}
return listeEquip;
}
public IEnumerable<FruitDuDemon> GetFruits()
public IEnumerable<FruitDuDemon>? GetFruits()
{
List<FruitDuDemon>? listeFDD = new List<FruitDuDemon>();
var serializer = new DataContractSerializer(typeof(List<FruitDuDemon>));
string xmlFile = "fruitdudemon.xml";
Directory.SetCurrentDirectory(Path.Combine(Chemin, "./"));
using (Stream s = File.OpenRead(xmlFile))
{
listeFDD = serializer.ReadObject(s) as List<FruitDuDemon>;
return serializer.ReadObject(s) as List<FruitDuDemon>;
}
return listeFDD;
}
public IEnumerable<Ile> GetIles()
public IEnumerable<Ile>? GetIles()
{
List<Ile>? listeIle = new List<Ile>();
var serializer = new DataContractSerializer(typeof(List<Ile>));
string xmlFile = "ile.xml";
Directory.SetCurrentDirectory(Path.Combine(Chemin, "./"));
using (Stream s = File.OpenRead(xmlFile))
{
listeIle = serializer.ReadObject(s) as List<Ile>;
}
return listeIle;
return serializer.ReadObject(s) as List<Ile>;
}
}
public IEnumerable<Personnage> GetPersonnages()
public IEnumerable<Personnage>? GetPersonnages()
{
List<Personnage>? listePerso = new List<Personnage>();
var serializer = new DataContractSerializer(typeof(List<Personnage>));
string xmlFile = "personnage.xml";
Directory.SetCurrentDirectory(Path.Combine(Chemin, "./"));
using (Stream s = File.OpenRead(xmlFile))
{
listePerso = serializer.ReadObject(s) as List<Personnage>;
return serializer.ReadObject(s) as List<Personnage>;
}
return listePerso;
}
}
}

@ -1,4 +1,7 @@
using Model.Serializer;
/// \file StubManager.cs
/// \brief Contient la définition de la classe StubManager
///
using Model.Serializer;
using System;
using System.Collections.Generic;
using System.Linq;
@ -9,6 +12,9 @@ using Model.Managers;
namespace Model.Stub
{
/// <summary>
/// Classe permettant de gérer toutes les données des différents stubs.
/// </summary>
public class StubManager : IDataManager
{
@ -30,31 +36,31 @@ namespace Model.Stub
}
public IEnumerable<Personnage> GetPersonnages()
public IEnumerable<Personnage>? GetPersonnages()
{
return StubPersonnage.RecupererPersonnage();
}
public IEnumerable<FruitDuDemon> GetFruits()
public IEnumerable<FruitDuDemon>? GetFruits()
{
return StubFruitDuDemon.RecupererFruit();
}
public IEnumerable<Equipage> GetEquipages()
public IEnumerable<Equipage>? GetEquipages()
{
StubEquipage.ChargerEquipage(StubPersonnage.RecupererPersonnage().ToList());
return StubEquipage.RecupererEquipage();
}
public IEnumerable<Bateau> GetBateaux()
public IEnumerable<Bateau>? GetBateaux()
{
return StubBateau.RecupererBateau();
}
public IEnumerable<Bestiaire> GetBestiaires()
public IEnumerable<Bestiaire>? GetBestiaires()
{
return StubBestiaire.RecupererBestiaire();
}
public IEnumerable<Ile> GetIles()
public IEnumerable<Ile>? GetIles()
{
return StubIle.RecupererIle();
}

@ -12,6 +12,7 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestProject1", "TestProject1\TestProject1.csproj", "{4AD3B218-1007-4859-BC93-2B3E957632E0}"
ProjectSection(ProjectDependencies) = postProject
{A0307D66-E621-4BC1-A239-87C9021E7CFD} = {A0307D66-E621-4BC1-A239-87C9021E7CFD}
{EEC24A76-0EB3-4C67-A71B-7FF823713645} = {EEC24A76-0EB3-4C67-A71B-7FF823713645}
EndProjectSection
EndProject
Global

@ -4,10 +4,9 @@ using Model;
public partial class AppShell : Shell
{
public AppShell()
{
InitializeComponent();
}
}
}

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ohara.Converters
{
public class Int2ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is not int) return Colors.Red;
switch (value)
{
case < 0:
return Colors.Orange;
case >0:
return Colors.Green;
default:
return Colors.White;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

@ -2,9 +2,13 @@
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ohara.ModalBateau"
xmlns:conv="clr-namespace:Ohara.Converters"
Title="ModalBateau"
BackgroundColor="#e2edf1"
BackgroundColor="#e2edf1"
Shell.PresentationMode="ModalAnimated">
<ContentPage.Resources>
<conv:Int2ColorConverter x:Key="int2ColorConverter"/>
</ContentPage.Resources>
<ScrollView>
<FlexLayout AlignItems="End" Wrap="Wrap" Direction="Row" JustifyContent="Center" HorizontalOptions="Center" VerticalOptions="Center" >
<VerticalStackLayout Spacing="4" Margin="2">
@ -24,13 +28,13 @@
</Grid>
<Frame Style="{StaticResource frameModif}">
<HorizontalStackLayout HorizontalOptions="Center">
<Label Text="Premier Chapitre :" FontAttributes="Bold"/>
<Label Text="Premier Chapitre :" FontAttributes="Bold" TextColor="{Binding PremierChap, Converter={StaticResource int2ColorConverter}}"/>
<Entry Text="{Binding PremierChap}" />
</HorizontalStackLayout>
</Frame>
<Frame Style="{StaticResource frameModif}">
<HorizontalStackLayout HorizontalOptions="Center">
<Label Text="Premier Episode :" FontAttributes="Bold"/>
<Label Text="Premier Episode :" FontAttributes="Bold" TextColor="{Binding PremierEp, Converter={StaticResource int2ColorConverter}}"/>
<Entry Text="{Binding PremierEp}" />
</HorizontalStackLayout >
</Frame>

@ -1,3 +1,4 @@
using Model.Classes;
using Model.Managers;
@ -27,12 +28,23 @@ public partial class ModalBateau : ContentPage
{
if (manager.SelectedItem != null)
{
if (nouveauBateau.PremierChap < 0 || nouveauBateau.PremierEp < 0)
{
await DisplayAlert("Erreur", "Les paramètres PremierChap et PremierEp doivent être superieur à 0.", "OK");
return;
}
manager.ModifierBateau(nouveauBateau, ancienNom);
nouveauBateau = manager.SelectedItem as Bateau;
}
else
{
if (nouveauBateau.PremierChap<0 || nouveauBateau.PremierEp < 0)
{
await DisplayAlert("Erreur", "Les paramètres PremierChap et PremierEp doivent être superieur à 0.", "OK");
return;
}
manager.AjouterBateau(nouveauBateau);
}
await Navigation.PopModalAsync();

@ -2,9 +2,13 @@
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ohara.ModalEquipage"
xmlns:conv="clr-namespace:Ohara.Converters"
Title="ModalEquipage"
BackgroundColor="#e2edf1"
Shell.PresentationMode="ModalAnimated">
<ContentPage.Resources>
<conv:Int2ColorConverter x:Key="int2ColorConverter"/>
</ContentPage.Resources>
<ScrollView>
<FlexLayout AlignItems="End" Wrap="Wrap" Direction="Row" JustifyContent="Center" HorizontalOptions="Center" VerticalOptions="Center" >
<VerticalStackLayout Spacing="4" Margin="2">
@ -36,13 +40,13 @@
</Frame>
<Frame Style="{StaticResource frameModif}">
<HorizontalStackLayout HorizontalOptions="Center">
<Label Text="Premier Chapitre :" FontAttributes="Bold"/>
<Label Text="Premier Chapitre :" FontAttributes="Bold" TextColor="{Binding PremierChap, Converter={StaticResource int2ColorConverter}}"/>
<Entry Text="{Binding PremierChap}" />
</HorizontalStackLayout>
</Frame>
<Frame Style="{StaticResource frameModif}">
<HorizontalStackLayout HorizontalOptions="Center">
<Label Text="Premier Episode :" FontAttributes="Bold"/>
<Label Text="Premier Episode :" FontAttributes="Bold" TextColor="{Binding PremierEp, Converter={StaticResource int2ColorConverter}}"/>
<Entry Text="{Binding PremierEp}" />
</HorizontalStackLayout >
</Frame>

@ -30,11 +30,21 @@ public partial class ModalEquipage : ContentPage
{
if (manager.SelectedItem != null)
{
if (nouvelEquipage.PremierChap < 0 || nouvelEquipage.PremierEp < 0)
{
await DisplayAlert("Erreur", "Les paramètres PremierChap et PremierEp doivent être superieur à 0.", "OK");
return;
}
manager.ModifierEquipage(nouvelEquipage, ancienNom);
nouvelEquipage = manager.SelectedItem as Equipage;
}
else
{
if (nouvelEquipage.PremierChap < 0 || nouvelEquipage.PremierEp < 0)
{
await DisplayAlert("Erreur", "Les paramètres PremierChap et PremierEp doivent être superieur à 0.", "OK");
return;
}
manager.AjouterEquip(nouvelEquipage);
}

@ -2,9 +2,13 @@
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ohara.ModalIle"
xmlns:conv="clr-namespace:Ohara.Converters"
Title="ModalIle"
BackgroundColor="#e2edf1"
Shell.PresentationMode="ModalAnimated">
<ContentPage.Resources>
<conv:Int2ColorConverter x:Key="int2ColorConverter"/>
</ContentPage.Resources>
<ScrollView>
<FlexLayout AlignItems="End" Wrap="Wrap" Direction="Row" JustifyContent="Center" HorizontalOptions="Center" VerticalOptions="Center" >
<VerticalStackLayout Spacing="4" Margin="2">
@ -36,13 +40,13 @@
</Frame>
<Frame Style="{StaticResource frameModif}">
<HorizontalStackLayout HorizontalOptions="Center">
<Label Text="Premier Chapitre :" FontAttributes="Bold"/>
<Label Text="Premier Chapitre :" FontAttributes="Bold" TextColor="{Binding PremierChap, Converter={StaticResource int2ColorConverter}}"/>
<Entry Text="{Binding PremierChap}" />
</HorizontalStackLayout>
</Frame>
<Frame Style="{StaticResource frameModif}">
<HorizontalStackLayout HorizontalOptions="Center">
<Label Text="Premier Episode :" FontAttributes="Bold"/>
<Label Text="Premier Episode :" FontAttributes="Bold" TextColor="{Binding PremierEp, Converter={StaticResource int2ColorConverter}}"/>
<Entry Text="{Binding PremierEp}" />
</HorizontalStackLayout >
</Frame>

@ -29,11 +29,21 @@ public partial class ModalIle : ContentPage
{
if (manager.SelectedItem != null)
{
if (nouvelIle.PremierChap < 0 || nouvelIle.PremierEp < 0)
{
await DisplayAlert("Erreur", "Les paramètres PremierChap et PremierEp doivent être superieur à 0.", "OK");
return;
}
manager.ModifierIle(nouvelIle,ancienNom);
manager.SelectedItem=nouvelIle;
}
else
{
if (nouvelIle.PremierChap < 0 || nouvelIle.PremierEp < 0)
{
await DisplayAlert("Erreur", "Les paramètres PremierChap et PremierEp doivent être superieur à 0.", "OK");
return;
}
manager.AjouterIle(nouvelIle);
}

@ -8,7 +8,7 @@
BackgroundColor="#e2edf1">
<VerticalStackLayout Spacing="40">
<VerticalStackLayout >
<Grid ColumnDefinitions="200,*,100,10,150" BackgroundColor="#72a3b3" Padding="10">
<SearchBar x:Name="searchBar" Placeholder="Rechercher..." BackgroundColor="#bfe5ef" Grid.Column="0"/>
<Button Text="Ajouter" Clicked="Button_Clicked" Style="{StaticResource buttonBarre}" Grid.Column="4"/>
@ -18,35 +18,20 @@
<CollectionView x:Name="listeBateau" ItemsSource="{Binding Bateaux}" ItemsLayout="HorizontalList" EmptyView="Aucun résultat trouvé." SelectionMode="Single" SelectionChanged="listeBateau_SelectionChanged" >
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="50" ColumnSpacing="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="750"/>
<RowDefinition Height="80*"/>
</Grid.RowDefinitions>
<Frame
CornerRadius="25"
BorderColor="#e2edf1"
IsClippedToBounds="True"
Padding="0"
HeightRequest="800"
WidthRequest="450">
<Frame Style="{StaticResource frameObjet3}" HeightRequest="800" WidthRequest="450">
<Image
Source="{Binding Image}"
Source="{Binding Image}"
Aspect="Fill"
/>
</Frame>
<Frame Style="{StaticResource frameObjet2}">
<StackLayout Orientation="Vertical" Spacing="25" VerticalOptions="Center">
<Label
Text="{Binding Nom}"

@ -13,7 +13,8 @@
</Grid>
<FlexLayout x:Name="listeFav" AlignItems="Center" Wrap="Wrap"
HorizontalOptions="Center" JustifyContent="SpaceEvenly">
HorizontalOptions="Center" JustifyContent="SpaceEvenly"
>
<BindableLayout.ItemTemplate>
<DataTemplate>
<Frame Style="{StaticResource frameObjet}" Margin="0,10,0,0" >
@ -37,6 +38,19 @@
</Frame>
</DataTemplate>
</BindableLayout.ItemTemplate>
<BindableLayout.EmptyView>
<ContentView>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Vous n'avez pas encore ajoutez d'objets à vos favoris ..."
TextColor="#72a3b3"
FontAttributes="Bold"
Margin="50"
FontSize="18"
HorizontalOptions="Fill"
HorizontalTextAlignment="Center"/>
</StackLayout>
</ContentView>
</BindableLayout.EmptyView>
</FlexLayout>
</VerticalStackLayout>

@ -15,7 +15,7 @@ public partial class PageFavoris : ContentPage
void OnTextChanged(object sender, EventArgs e)
{
SearchBar searchBar = (SearchBar)sender;
BindableLayout.SetItemsSource(listeFav, manager.RechercheObjetOhara(searchBar.Text, manager.GetFavoris()));
BindableLayout.SetItemsSource(listeFav, manager.RechercheObjetOhara(searchBar.Text, manager.GetFavoris().ToList()));
}
searchBar.TextChanged += OnTextChanged;

@ -6,7 +6,7 @@
Title="PageIle"
Appearing="ContentPage_Appearing"
BackgroundColor="#e2edf1">
<VerticalStackLayout Spacing="40">
<VerticalStackLayout>
<Grid ColumnDefinitions="200,*,100,10,150" BackgroundColor="#72a3b3" Padding="10">
<SearchBar x:Name="searchBar" Placeholder="Rechercher..." Style="{StaticResource searchBarOhara}" Grid.Column="0"/>
<Button Text="Ajouter" Clicked="Button_Clicked" Style="{StaticResource buttonBarre}" Grid.Column="4"/>
@ -32,15 +32,9 @@
<ColumnDefinition Width="400"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="750"/>
<RowDefinition Height="80*"/>
</Grid.RowDefinitions>
<Frame
CornerRadius="25"
BorderColor="#e2edf1"
IsClippedToBounds="True"
Padding="0"
HeightRequest="800"
WidthRequest="450">
<Frame Style="{StaticResource frameObjet3}" HeightRequest="800" WidthRequest="450">
<Image
Source="{Binding Image}"

@ -3,8 +3,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ohara.PageInfoBateau"
Title="PageInfoBateau"
BackgroundColor="#e2edf1">
<ScrollView Grid.Row="0" Grid.Column="1" Orientation="Vertical" VerticalScrollBarVisibility="Always">
BackgroundColor="#e2edf1"
>
<ScrollView Orientation="Vertical" VerticalScrollBarVisibility="Always">
<VerticalStackLayout Spacing="10" Padding="40">

@ -78,7 +78,7 @@
<Label Text="Membre(s) :" TextColor="#72a3b3" FontSize="20" FontAttributes="Bold"/>
<Line X1="0" Y1="0" X2="3000" Y2="0" StrokeThickness="2" Stroke="#72a3b3" />
<ScrollView Orientation="Horizontal">
<CollectionView x:Name="listMembre" ItemsLayout="HorizontalList" ItemsSource="{Binding Membre}" EmptyView="Cet équipage n'à pas de membres..." SelectionMode="Single" SelectionChanged="listMembre_SelectionChanged" >
<CollectionView x:Name="listMembre" ItemsLayout="HorizontalList" ItemsSource="{Binding Membre}" SelectionMode="Single" SelectionChanged="listMembre_SelectionChanged" >
<CollectionView.ItemTemplate>
<DataTemplate>
@ -98,10 +98,20 @@
FontAttributes="Bold" />
</StackLayout>
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.EmptyView>
<ContentView>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Cet équipage n'à pas (encore) de membre."
TextColor="#72a3b3"
FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Fill"
HorizontalTextAlignment="Center"/>
</StackLayout>
</ContentView>
</CollectionView.EmptyView>
</CollectionView>
</ScrollView>
</VerticalStackLayout>
@ -133,7 +143,7 @@
<Label Text="Allié(s) :" TextColor="#72a3b3" FontSize="20" FontAttributes="Bold"/>
<Line X1="0" Y1="0" X2="3000" Y2="0" StrokeThickness="2" Stroke="#72a3b3" />
<CollectionView x:Name="listAlle" ItemsLayout="HorizontalList" ItemsSource="{Binding Allie}" EmptyView="Cet équipage n'à pas d'alliés..." SelectionMode="Single" SelectionChanged="listAlle_SelectionChanged">
<CollectionView x:Name="listAlle" ItemsLayout="HorizontalList" ItemsSource="{Binding Allie}" SelectionMode="Single" SelectionChanged="listAlle_SelectionChanged">
<CollectionView.ItemTemplate>
<DataTemplate>
<Frame Style="{StaticResource frameEquip}" Margin="5">
@ -154,6 +164,18 @@
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.EmptyView>
<ContentView>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Cet équipage n'à pas (encore) d'allié."
TextColor="#72a3b3"
FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Fill"
HorizontalTextAlignment="Center"/>
</StackLayout>
</ContentView>
</CollectionView.EmptyView>
</CollectionView>
</VerticalStackLayout>

@ -117,6 +117,18 @@
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.EmptyView>
<ContentView>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Ce personnage n'à pas (encore) de fruit du démon."
TextColor="#72a3b3"
FontAttributes="Bold"
FontSize="18"
HorizontalOptions="Fill"
HorizontalTextAlignment="Center"/>
</StackLayout>
</ContentView>
</CollectionView.EmptyView>
</CollectionView>
</VerticalStackLayout>

@ -8,15 +8,13 @@
BackgroundColor="#e2edf1">
<VerticalStackLayout Spacing="10">
<VerticalStackLayout>
<Grid ColumnDefinitions="200,*,150" BackgroundColor="#72a3b3" Padding="10">
<SearchBar x:Name="searchBar" Placeholder="Rechercher..." BackgroundColor="#bfe5ef" Grid.Column="0"/>
<Button Text="Ajouter" Clicked="ButtonAjouter_Clicked" Style="{StaticResource buttonBarre}" Grid.Column="2"/>
</Grid>
<ScrollView Orientation="Horizontal" HorizontalScrollBarVisibility="Always">
<ScrollView Orientation="Horizontal" HorizontalScrollBarVisibility="Always" >
<CollectionView x:Name="listePerso" ItemsSource="{Binding Personnages}" ItemsLayout="HorizontalList" EmptyView="Aucun résultat trouvé." SelectionMode="Single" SelectionChanged="listePerso_SelectionChanged">
<CollectionView.ItemTemplate>
@ -30,16 +28,9 @@
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Frame CornerRadius="25"
BorderColor="#e2edf1"
IsClippedToBounds="True"
Padding="0"
HeightRequest="800"
WidthRequest="450">
<Image
Source="{Binding Image}"
<Frame Style="{StaticResource frameObjet3}" HeightRequest="800" WidthRequest="450">
<Image
Source="{Binding Image}"
Aspect="Fill"
/>
</Frame>

@ -87,7 +87,7 @@
</Style>
<Style TargetType="Editor">
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
<Setter Property="TextColor" Value="White" />
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="14" />
@ -109,7 +109,7 @@
</Style>
<Style TargetType="Entry">
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
<Setter Property="TextColor" Value="White" />
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="14" />
@ -158,7 +158,7 @@
</Style>
<Style TargetType="Label">
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
<Setter Property="TextColor" Value="White" />
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="FontFamily" Value="OpenSansRegular" />
<Setter Property="FontSize" Value="14" />
@ -387,6 +387,7 @@
<Setter Property="Shell.TabBarForegroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
<Setter Property="Shell.TabBarTitleColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
<Setter Property="Shell.TabBarUnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
<Setter Property="FlyoutBackgroundColor" Value="White"/>
</Style>
<Style TargetType="NavigationPage">
@ -477,6 +478,12 @@
</VisualStateGroupList>
</Setter>
</Style>
<Style x:Key="frameObjet3" TargetType="Frame">
<Setter Property="IsClippedToBounds" Value="True"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderColor" Value="Transparent"/>
<Setter Property="CornerRadius" Value="25"/>
</Style>
<Style x:Key="frameEquip" TargetType="Frame">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>

@ -5,6 +5,7 @@ using Model.Managers;
using System.Collections.ObjectModel;
// Tests fonctionnels :
Manager manager = new Manager(new XML_Serializer());
@ -92,7 +93,7 @@ foreach (FruitDuDemon f in manager.FiltrerFDD("Logia"))
Console.WriteLine("\n");
Console.WriteLine("\n");
// Recherche dansune liste de fruit de démon pour afficher les fruits correspondant au mot clé "Nika"
foreach (FruitDuDemon f in manager.RechercheObjetOhara("Nika", new List<ObjetOhara>(manager.Fruits)))
foreach (ObjetOhara f in manager.RechercheObjetOhara("Nika", new List<ObjetOhara>(manager.Fruits)) )
{
Console.WriteLine(f.Nom);
}
@ -106,7 +107,7 @@ foreach (Bateau b in manager.Bateaux)
// Recherche dansune liste de objet ohara pour afficher les objets ohara correspondant au mot clé "Sunny"
foreach (ObjetOhara o in manager.RechercheObjetOhara("Sunny", manager.GetFavoris()))
foreach (ObjetOhara o in manager.RechercheObjetOhara("Sunny", manager.GetFavoris().ToList()))
{
Console.WriteLine(o.Nom);
}

@ -37,9 +37,36 @@ namespace TestProject1
{
Bateau bateau1 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
Bateau bateau2 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
Bateau? bateau3 = null;
Equipage equipage = new Equipage("Équipage du poux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
bool resultat =(bateau1.Equals(bateau2));
bool resultat2 =(bateau1.Equals(equipage));
bool resultat3 =(bateau1.Equals(bateau3));
Assert.True(resultat, "Les deux bateaux devraient etre égaux car ils onts le meme nom");
Assert.False(resultat2);
Assert.False(resultat3);
}
[Fact]
public void GetHashCode_BateauWithSameProperties_ReturnsSameHashCode()
{
Bateau obj1 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
Bateau obj2 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
var hashCode1 = obj1.GetHashCode();
var hashCode2 = obj2.GetHashCode();
Assert.True(hashCode1 == hashCode2);
}
[Fact]
public void ToString_ReturnsCorrectStringRepresentation()
{
Bateau obj1 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
var result = obj1.ToString();
Assert.True("Bateau : Sunny False Sauzando Sani-go 435 321 Le Thousand Sunny est... Ce bateau a pour particularités ... " == result);
}
}
}

@ -37,5 +37,25 @@ namespace TestProject1
Assert.False(resultat2);
Assert.False(resultat3);
}
[Fact]
public void GetHashCode_BestiaireWithSameProperties_ReturnsSameHashCode()
{
Bestiaire obj1 = new Bestiaire("Humains", "??", "Les humains sont ...", "Ils possèdent les caractéristiques suivantes ...", "");
Bestiaire obj2 = new Bestiaire("Humains", "??", "Les humains sont ...", "Ils possèdent les caractéristiques suivantes ...", "");
var hashCode1 = obj1.GetHashCode();
var hashCode2 = obj2.GetHashCode();
Assert.True(hashCode1 == hashCode2);
}
[Fact]
public void ToString_ReturnsCorrectStringRepresentation()
{
Bestiaire obj1 = new Bestiaire("Humains", "??", "Les humains sont ...", "Ils possèdent les caractéristiques suivantes ...", "");
var result = obj1.ToString();
Assert.True("Bestiaire : Humains False ?? Les humains sont ... Ils possèdent les caractéristiques suivantes ... baseimage.png" == result);
}
}
}

@ -31,13 +31,78 @@ namespace TestProject1
Assert.True(resultat, "L'image devrait avoir la valeur : baseimage.png");
}
[Fact]
public void ParametreCapitaine_GetSetMarcheCorrectement()
{
Equipage test = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Personnage test2 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, 1.74, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !");
test.Capitaine=test2;
Assert.True(test.Capitaine==test2);
}
[Fact]
public void RetirerMembreViderMembre_FonctionnentCorrectement()
{
Personnage test = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, 1.74, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !");
FruitDuDemon test2 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "a", "b", "c", "d");
test.AjouterFruit(test2);
test.RetierFruit(test2);
Assert.DoesNotContain(test2, test.Fruit);
}
[Fact]
public void RetirerAllieViderAllie_FonctionnentCorrectement()
{
Equipage test = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Equipage test2 = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
test.AjouterAllie(test2);
test.RetirerAllie(test2);
Assert.DoesNotContain(test2, test.Allie);
test.AjouterAllie(test2);
test.ViderAllie();
Assert.DoesNotContain(test2, test.Allie);
}
[Fact]
public void SurchargeEqualsEquipage_Equipage1EgaleEquipage2()
{
Equipage equiapge1= new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Equipage equiapge2 = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Equipage equiapge3 = new Equipage("Équipage du poux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Bateau bateau1 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
bool resultat = (equiapge1.Equals(equiapge2));
Assert.True(resultat, "Les deux equipages devraient etre égaux car ils onts le meme nom");
bool resultat2 = (equiapge1.Equals(equiapge3));
bool resultat3 = (equiapge1.Equals(bateau1));
Assert.True(resultat, "Les deux equipages devraient etre égaux car ils ont le meme nom");
Assert.False(resultat2, "Les deux equipages ne devraient pas etre égaux car ils n'ont pas le meme nom");
Assert.False(resultat3, "Les deux equipages ne devraient pas etre égaux car ils n'ont pas le meme type");
}
[Fact]
public void GetHashCode_EquipageWithSameProperties_ReturnsSameHashCode()
{
Equipage obj1 = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Equipage obj2 = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
var hashCode1 = obj1.GetHashCode();
var hashCode2 = obj2.GetHashCode();
Assert.True(hashCode1 == hashCode2);
}
[Fact]
public void ToString_ReturnsCorrectStringRepresentation()
{
Equipage obj1 = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
var result = obj1.ToString();
Assert.True("Equipage : Équipage du Roux False Akagami Kalzokudan East Blue 0 0 True L'équipage du Roux ... baseimage.png" == result);
}
}
}

@ -13,7 +13,7 @@ namespace TestProject1
public void FDD_PremierChapEtPremierEpSuperieurOuEgalAZero_ReturnTrue()
{
FruitDuDemon test = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "");
bool resultat = (test.Image == "baseimage.png");
bool resultat = (test.PremierChap >0 && test.PremierEp >0);
Assert.True(resultat, "Les paramètre PremierChap et PremierEp doivent être supérieur ou égale à 0");
}
[Fact]
@ -36,9 +36,33 @@ namespace TestProject1
{
FruitDuDemon fruit1 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "", "");
FruitDuDemon fruit2 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "", "");
FruitDuDemon? fruit3 =null;
bool resultat = (fruit1.Equals(fruit2));
bool resultat2 = (fruit2.Equals(fruit3));
Assert.True(resultat, "Les deux fruits du démon devraient etre égaux car ils onts le meme nom");
Assert.False(resultat2, "Les deux fruits du démon devraient etre égaux car l'un dentre eux est null");
}
[Fact]
public void GetHashCode_FruitDuDemonWithSameProperties_ReturnsSameHashCode()
{
FruitDuDemon obj1 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "", "");
FruitDuDemon obj2 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "", "");
var hashCode1 = obj1.GetHashCode();
var hashCode2 = obj2.GetHashCode();
Assert.True(hashCode1 == hashCode2);
}
[Fact]
public void ToString_ReturnsCorrectStringRepresentation()
{
FruitDuDemon obj1 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "a", "b", "c", "d");
var result = obj1.ToString();
Assert.True("FruitDuDemon : Fruit de la fumée False Moku Moku No Mi Logia 97 48 a b c d" == result);
}
}
}

@ -35,8 +35,34 @@ namespace TestProject1
{
Ile ile1 = new Ile("Dawn", "Don-to", "East Blue", 1, 4, "L'île de Dawn est ...", "Cette île est situé dans la mer d'East Blue près de ...", "");
Ile ile2 = new Ile("Dawn", "Don-to", "East Blue", 1, 4, "L'île de Dawn est ...", "Cette île est situé dans la mer d'East Blue près de ...", "");
FruitDuDemon fruit2 = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "", "");
Ile? ile3 = null;
bool resultat = (ile1.Equals(ile2));
bool resultat2 = (ile1.Equals(ile3));
bool resultat3 = (ile1.Equals(fruit2));
Assert.True(resultat, "Les iles devraient etre égales car ils onts le meme nom");
Assert.False(resultat2, "Les iles devraient etre égales car l'une d'entre elle est null");
Assert.False(resultat3, "Ce test devraient etre false car il comparent une ile et un fruitdudemon");
}
[Fact]
public void GetHashCode_IleWithSameProperties_ReturnsSameHashCode()
{
Ile obj1 = new Ile("Dawn", "Don-to", "East Blue", 1, 4, "L'île de Dawn est ...", "Cette île est situé dans la mer d'East Blue près de ...", "");
Ile obj2 = new Ile("Dawn", "Don-to", "East Blue", 1, 4, "L'île de Dawn est ...", "Cette île est situé dans la mer d'East Blue près de ...", "");
var hashCode1 = obj1.GetHashCode();
var hashCode2 = obj2.GetHashCode();
Assert.True(hashCode1 == hashCode2);
}
[Fact]
public void ToString_ReturnsCorrectStringRepresentation()
{
Ile obj1 = new Ile("Dawn", "Don-to", "East Blue", 1, 4, "L'île de Dawn est ...", "Cette île est situé dans la mer d'East Blue près de ...", "");
var result = obj1.ToString();
Assert.True("Ile : Dawn Don-to East Blue 1 4 L'île de Dawn est ... Cette île est situé dans la mer d'East Blue près de ... baseimage.png" == result);
}
}
}

@ -97,11 +97,11 @@ namespace TestProject1
// Act
var result = manager.RechercheObjetOhara(text, liste);
var result2 = manager.RechercheObjetOhara("", liste);
// Assert
Assert.True(1==result.Count);
Assert.Contains(obj1, result);
Assert.True(result2.Count() == liste.Count());
Assert.True(!result.Contains(obj3));
}
@ -111,7 +111,7 @@ namespace TestProject1
var obj1 =manager.Fruits.First();
var obj2 = manager.Equipages.First();
manager.ModifierFavFDD(obj1, true);
var result = manager.GetFavoris();
var result = manager.GetFavoris().ToList();
Assert.True(1==result.Count);
Assert.Contains(obj1, result);
@ -347,5 +347,190 @@ namespace TestProject1
Assert.Contains(ancienBateau, manager.Bateaux);
Assert.DoesNotContain(nouveauBateau, manager.Bateaux);
}
[Fact]
public void TestAjouterFDD()
{
var fruit = new FruitDuDemon("Fruit de la fumée", "Moku Moku No Mi", "Logia", 97, 48, "", "", "");
manager.AjouterFDD(fruit);
Assert.Contains(fruit, manager.Fruits);
}
[Fact]
public void TestAjouterEquip()
{
var equipage = new Equipage("Equipage", "", "", 97, 48,true ,"", "");
manager.AjouterEquip(equipage);
Assert.Contains(equipage, manager.Equipages);
}
[Fact]
public void TestAjouterBest()
{
var best = new Bestiaire("Bestiaire", "", "", "");
manager.AjouterBest(best);
Assert.Contains(best, manager.Bestiaire);
}
[Fact]
public void TestAjouterPerso()
{
var perso = new Personnage("Personnage",0, "",0,0, "", "","");
manager.AjouterPerso(perso);
Assert.Contains(perso, manager.Personnages);
}
[Fact]
public void TestAjouterIle()
{
var ile = new Ile("Ile", "","", 0, 0, "", "", "");
manager.AjouterIle(ile);
Assert.Contains(ile, manager.Iles);
}
[Fact]
public void TestAjouterBateau()
{
var bateau = new Bateau("Bateau", "", 0, 0, "", "");
manager.AjouterBateau(bateau);
Assert.Contains(bateau, manager.Bateaux);
}
[Fact]
public void TestSupprimerFDD()
{
var fruit = new FruitDuDemon("Fruit", "", "Logia", 97, 48, "", "", "");
manager.AjouterFDD(fruit);
manager.SupprimerFDD(fruit);
Assert.DoesNotContain(fruit, manager.Fruits);
}
[Fact]
public void TestSupprimerEquip()
{
var equipage = new Equipage("Equipage", "", "", 97, 48, true, "", "");
manager.AjouterEquip(equipage);
manager.SupprimerEquip(equipage);
Assert.DoesNotContain(equipage, manager.Equipages);
}
[Fact]
public void TestSupprimerBest()
{
var best = new Bestiaire("Bestiaire", "", "", "");
manager.AjouterBest(best);
manager.SupprimerBest(best);
Assert.DoesNotContain(best, manager.Bestiaire);
}
[Fact]
public void TestSupprimerPerso()
{
var perso = new Personnage("Personnage", 0, "", 0, 0, "", "", "");
manager.AjouterPerso(perso);
manager.SupprimerPerso(perso);
Assert.DoesNotContain(perso, manager.Personnages);
}
[Fact]
public void TestSupprimerIle()
{
var ile = new Ile("Ile", "", "", 0, 0, "", "", "");
manager.AjouterIle(ile);
manager.SupprimerIle(ile);
Assert.DoesNotContain(ile, manager.Iles);
}
[Fact]
public void TestSupprimerBateau()
{
var bateau = new Bateau("Bateau", "", 0, 0, "", "");
manager.AjouterBateau(bateau);
manager.SupprimerBateau(bateau);
Assert.DoesNotContain(bateau, manager.Bateaux);
}
[Fact]
public void TestGetPersonnages()
{
List<Personnage> resultat = new List<Personnage>();
var result = manager.GetPersonnages();
Assert.NotNull(result);
}
[Fact]
public void TestGetFruits()
{
List<FruitDuDemon> resultat = new List<FruitDuDemon>();
var result = manager.GetFruits();
Assert.NotNull(result);
}
[Fact]
public void TestGetEquipages()
{
List<Equipage> resultat = new List<Equipage>();
var result = manager.GetEquipages();
Assert.NotNull(result);
}
[Fact]
public void TestGetBateaux()
{
List<Bateau> resultat = new List<Bateau>();
var result = manager.GetBateaux();
Assert.NotNull(result);
}
[Fact]
public void TestGetBestiaires()
{
List<Bestiaire> resultat = new List<Bestiaire>();
var result = manager.GetBestiaires();
Assert.NotNull(result);
}
[Fact]
public void TestGetIles()
{
List<Ile> resultat = new List<Ile>();
var result = manager.GetIles();
Assert.NotNull(result);
}
}
}

@ -36,15 +36,71 @@ namespace TestProject1
{
Personnage test = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
bool resultat = (test.Taille >= 0);
Assert.True(resultat, "La taille du personnage doit avoir une valeur positive");
}
[Fact]
public void Personnage_EquipageSetFonctionneCorrectement()
{
Personnage test = new Personnage("Luffy", -100, "Luffy au Chapeau de Paille", 19, 1.74, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
Equipage test2 = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
test.Equipage = test2;
bool resultat = (test.Equipage == test2);
Assert.True(resultat, "La valeur Equipage du personnage devrait etre égal à test2");
}
[Fact]
public void PersonnageRetirerFruit_FonctionneCorrectement()
{
Equipage test = new Equipage("Équipage du Roux", "Akagami Kalzokudan", "East Blue", -1, 0, true, "L'équipage du Roux ...", "");
Personnage test2 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, 1.74, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !");
test.AjouterMembre(test2);
test.RetirerMembre(test2);
Assert.DoesNotContain(test2, test.Membre);
test.AjouterMembre(test2);
test.ViderMembre();
Assert.DoesNotContain(test2, test.Membre);
}
[Fact]
public void SurchargeEqualsPersonnage_Personnage1EgalePersonnage2()
{
Personnage personnage1 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
Personnage personnage2 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
Personnage personnage3 = new Personnage("Lufty", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
Bateau bateau1 = new Bateau("Sunny", "Sauzando Sani-go", 435, 321, "Le Thousand Sunny est...", "Ce bateau a pour particularités ...", " ");
bool resultat = (personnage1.Equals(personnage1));
Assert.True(resultat, "Les personanges devraient etre égales car ils onts le meme nom");
bool resultat2 = (personnage1.Equals(personnage3));
bool resultat3 = (personnage1.Equals(bateau1));
Assert.True(resultat, "Les personanges devraient etre égaux car ils ont le meme nom");
Assert.False(resultat2, "Les personanges ne devraient pas etre égaux car ils n'ont pas le meme nom");
Assert.False(resultat3, "Les deux objets ne devraient pas etre égaux car ils n'ont pas le meme type");
}
[Fact]
public void GetHashCode_PersonnageWithSameProperties_ReturnsSameHashCode()
{
Personnage obj1 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
Personnage obj2 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
var hashCode1 = obj1.GetHashCode();
var hashCode2 = obj2.GetHashCode();
Assert.True(hashCode1 == hashCode2);
}
[Fact]
public void ToString_ReturnsCorrectStringRepresentation()
{
Personnage obj1 = new Personnage("Luffy", 3000000000, "Luffy au Chapeau de Paille", 19, -1, "East Blue", "Monkey D. Luffy est...", "Le Roi des Pirates, ce sera moi !", "luffy.png");
var result = obj1.ToString();
Assert.True("Personnage : Luffy False 3000000000 Luffy au Chapeau de Paille 19 East Blue Monkey D. Luffy est... Le Roi des Pirates, ce sera moi ! System.Collections.ObjectModel.ObservableCollection`1[Model.Classes.FruitDuDemon] luffy.png" == result);
}
}
}

@ -1,18 +1,77 @@
using Model.Classes;
using Model.Serializer;
using Model.Stub;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace TestProject1
{
public class XMLSerializerTests
{
public XML_Serializer serializer = new XML_Serializer();
private string TestFolderPath = Directory.GetCurrentDirectory();
[Fact]
public void InitialiserFichiers_FileDoesNotExist_SetPersonnageIfStubManagerReturnsNonNull()
{
// Arrange
var serializer = new XML_Serializer(TestFolderPath);
var stubManager = new StubManager();
var expectedPersonnages = stubManager.GetPersonnages();
var expectedBateaux = stubManager.GetBateaux();
var expectedFruits = stubManager.GetFruits();
var expectedBestiaires= stubManager.GetBestiaires();
var expectedEquipages=stubManager.GetEquipages();
var expectedIles = stubManager.GetIles();
// Act
serializer.InitialiserFichiers(stubManager);
// Assert
if (!File.Exists(Path.Combine(TestFolderPath, "./personnage.xml")))
{
if (expectedPersonnages != null)
{
Assert.True(expectedPersonnages.ToList()== serializer.GetPersonnages());
}
}
if (!File.Exists(Path.Combine(TestFolderPath, "./bateau.xml")))
{
if (expectedBateaux != null)
{
Assert.True(expectedBateaux.ToList() == serializer.GetBateaux());
}
}
if (!File.Exists(Path.Combine(TestFolderPath, "./fruitdudemon.xml")))
{
if (expectedFruits != null)
{
Assert.True(expectedFruits.ToList() == serializer.GetFruits());
}
}
if (!File.Exists(Path.Combine(TestFolderPath, "./equipage.xml")))
{
if (expectedEquipages != null)
{
Assert.True(expectedEquipages.ToList() == serializer.GetEquipages());
}
}
if (!File.Exists(Path.Combine(TestFolderPath, "./ile.xml")))
{
if (expectedIles != null)
{
Assert.True(expectedIles.ToList() == serializer.GetIles());
}
}
}
[Fact]
public void SetPersonnage_SerializesAndWritesToFile()
{

Loading…
Cancel
Save