Commit 1015f6cf authored by Gerson Sunyé's avatar Gerson Sunyé
Browse files

Correct test examples to respect Alsatian syntax.

parent 75c7d162
...@@ -18,31 +18,32 @@ L'objectif de ce mini-projet est d'intégrer et adapter tout le travail réalis ...@@ -18,31 +18,32 @@ L'objectif de ce mini-projet est d'intégrer et adapter tout le travail réalis
git clone https://gitlab.univ-nantes.fr/${USER}/projet-2019.git git clone https://gitlab.univ-nantes.fr/${USER}/projet-2019.git
cd projet-2019 cd projet-2019
npm install npm install
---- ----
. Regardez la structure du projet. Le projet est organisé en différents dossiers: . Regardez la structure du projet. Le projet est organisé en différents dossiers:
[source,txt] [source,txt]
---- ----
|-- onlineChess |-- projet-2019
|-- client |-- client
|-- index.html |-- index.html
|-- script.js |-- script.js
|-- style.css |-- style.css
|-- src |-- src
|-- chessboard.ts |-- main
|-- main.ts |-- ts
|-- move-validation.ts |-- chessboard.ts
|-- movements.ts |-- main.ts
|-- piece.ts |-- move-validation.ts
|-- position.ts |-- movements.ts
|-- spec |-- piece.ts
|-- move-validation-spec.ts |-- position.ts
|-- movements-spec.ts |-- test
|-- ts
|-- move-validation.spec.ts
|-- movements.spec.ts
|-- node_modules |-- node_modules
|-- package.json |-- package.json
|-- tsconfig.json |-- tsconfig.json
---- ----
* `client` contient le code Javascript qui sera exécuté sur le browser. Vous ne devez pas modifier le contenu de ce dossier. * `client` contient le code Javascript qui sera exécuté sur le browser. Vous ne devez pas modifier le contenu de ce dossier.
...@@ -68,8 +69,8 @@ npm install ...@@ -68,8 +69,8 @@ npm install
Pour déplacer les pièces sur l'échiquier, indiquez dans le formulaire en bas de page la pièce à déplacer et sa destination. Pour déplacer les pièces sur l'échiquier, indiquez dans le formulaire en bas de page la pièce à déplacer et sa destination.
Utilisez la notation par coordonnées, qui inclut la place à partir de laquelle la pièce se déplace, ainsi que sa destination. Utilisez la notation par coordonnées, qui inclut la place à partir de laquelle la pièce se déplace, ainsi que sa destination.
Par exemple:
.Par exemple:
|=== |===
|Coup |Coordonnées |Description |Coup |Coordonnées |Description
...@@ -114,11 +115,12 @@ Le traitement des déplacements se fait de la façon suivante: ...@@ -114,11 +115,12 @@ Le traitement des déplacements se fait de la façon suivante:
. La fonction `processMove()` appelle une autre fonction, `parseMoveString()`, qui transforme une chaîne de caractères en un déplacement (`interface Move`) entre 2 positions (`interface Position`). . La fonction `processMove()` appelle une autre fonction, `parseMoveString()`, qui transforme une chaîne de caractères en un déplacement (`interface Move`) entre 2 positions (`interface Position`).
. La fonction `processMove()` appelle ensuite la fonction `isMovePossible()`, qui fait appel à différentes fonctions de validation spécifiques aux pièces de l'échiquier (une par type de pièce). Le module `move-validation` contient toutes les fonctions de validation de déplacements. . La fonction `processMove()` appelle ensuite la fonction `isMovePossible()`, qui fait appel à différentes fonctions de validation spécifiques aux pièces de l'échiquier (une par type de pièce).
Le module `move-validation` contient toutes les fonctions de validation de déplacements.
. Par exemple, lorsqu'il s'agit d'un Pion blanc, la fonction `isMovePossible()` appelle la fonction `whitePawnMove()`, qui retourne `true` si le déplacement est possible ou `false` si ce n'est pas le cas. . Par exemple, lorsqu'il s'agit d'un Pion blanc, la fonction `isMovePossible()` appelle la fonction `whitePawnMove()`, qui retourne `true` si le déplacement est possible ou `false` si ce n'est pas le cas.
. Si le mouvement est possible, c'est à dire la fonction `isMovePossible()` retourne `true`, la fonction `processMove()` appelle la fonction `performMove(), qui effectue le déplacement. . Si le mouvement est possible, c'est à dire la fonction `isMovePossible()` retourne `true`, la fonction `processMove()` appelle la fonction `performMove()`, qui effectue le déplacement.
Vous devez donc parcourir le module `move-validation` et implémenter les fonctions de validation contenant le commentaire "`// #TODO:`". Vous devez donc parcourir le module `move-validation` et implémenter les fonctions de validation contenant le commentaire "`// #TODO:`".
...@@ -140,7 +142,7 @@ Le paramètre `move` contient 2 coordonnées de type `Position`, représentant l ...@@ -140,7 +142,7 @@ Le paramètre `move` contient 2 coordonnées de type `Position`, représentant l
Les coordonnées indiquent *toujours* des cases à l'intérieur de l'échiquier, c'est à dire, une colonne entre `A` et `H` et une ligne entre `1` et `8`. Les coordonnées indiquent *toujours* des cases à l'intérieur de l'échiquier, c'est à dire, une colonne entre `A` et `H` et une ligne entre `1` et `8`.
Donc, il n'y a pas besoin de vérifier si un déplacement conduit une pièce à l'extérieur de l'échiquier. Donc, il n'y a pas besoin de vérifier si un déplacement conduit une pièce à l'extérieur de l'échiquier.
Les tests unitaires des fonctions `blackPawnMove()` et `whitePawnMove()` ont déjà été implémentés, vous les trouverez dans le fichier `./spec/move-validation-spec.ts`. Les tests unitaires de la fonction `blackPawnMove()` ont déjà été implémentés, vous les trouverez dans le fichier `./src/test/ts/move-validation-spec.ts`.
*Vous devez compléter tous les squelettes de tests unitaires fournis à l'intérieur de ce fichier !* *Vous devez compléter tous les squelettes de tests unitaires fournis à l'intérieur de ce fichier !*
Vous devez procéder par itérations successives, n'essayez pas d'implémenter les fonctions d'un seul trait. Observez le cycle de développement suivant: Vous devez procéder par itérations successives, n'essayez pas d'implémenter les fonctions d'un seul trait. Observez le cycle de développement suivant:
...@@ -176,30 +178,33 @@ export function rookMove(board: Chessboard, move: Move): boolean { ...@@ -176,30 +178,33 @@ export function rookMove(board: Chessboard, move: Move): boolean {
[source,ts] [source,ts]
---- ----
// Dans le fichier "move-validation-spec.ts" // Dans le fichier "move-validation.spec.ts"
describe("Test rookMove()", () => { export class TestRockMoves {
// Fonction exécutée avant chaque test unitaires: chessboard : Chessboard
beforeEach( () => { @Setup
// Création d'un échiquier vide: beforeEach(){
chessboard = createEmptyChessboard(); chessboard = createEmptyChessboard();
// La variable "positionE4" a été créée au début du module pour simplifier le code des tests // La variable "positionE4" a été créée au début du module pour simplifier le code des tests
// Place une tour sur la case E4 d'un échiquier vide: // Place une tour sur la case E4 d'un échiquier vide:
putPiece(chessboard, positionE4, pieces.blackPawn); putPiece(chessboard, positionE4, pieces.blackPawn);
}); }
it("A roock can move horizontally", () => { @Test("A roock can move horizontally")
testRockCanMoveHorizontally() {
// Les variable "moveE4_H4" et "moveE4_14" ont été créées au début // Les variable "moveE4_H4" et "moveE4_14" ont été créées au début
// du module pour simplifier le code des tests. // du module pour simplifier le code des tests.
// Le déplacement doit être possible: // Le déplacement doit être possible:
expect(isPossible.rookMove(chessboard, moveE4_H4)).toBeTruthy(); Expect(isPossible.rookMove(chessboard, moveE4_H4)).toBeTruthy();
expect(isPossible.rookMove(chessboard, moveE4_A4)).toBeTruthy(); Expect(isPossible.rookMove(chessboard, moveE4_A4)).toBeTruthy();
}); }
}
---- ----
==== Etape 2 ==== Etape 2
Nouvelle fonctionnalité à implémenter: la validation des déplacements verticaux. Modifiez la fonction `rookMove()`: Nouvelle fonctionnalité à implémenter: la validation des déplacements verticaux.
Modifiez la fonction `rookMove()`:
[source,ts] [source,ts]
---- ----
...@@ -214,19 +219,16 @@ export function rookMove(board: Chessboard, move: Move): boolean { ...@@ -214,19 +219,16 @@ export function rookMove(board: Chessboard, move: Move): boolean {
[source,ts] [source,ts]
---- ----
// Dans le fichier "move-validation-spec.ts" // Dans le fichier "move-validation.spec.ts"
describe("Test rookMove()", () => { export class TestRockMoves {
beforeEach( () => { // Fonction exécutée avant chaque test unitaires // (...)
chessboard = createEmptyChessboard(); // Création d'un échiquier vide
}); @Test("A roock can move vertically")
testRockCanMoveVertically() {
it("A roock can move horizontally", () => { // (...) Expect(isPossible.rookMove(chessboard, moveE4_E8)).toBeTruthy();
}); Expect(isPossible.rookMove(chessboard, moveE4_E1)).toBeTruthy();
}
it("A roock can move vertically", () => { }
expect(isPossible.rookMove(chessboard, moveE4_E8)).toBeTruthy();
expect(isPossible.rookMove(chessboard, moveE4_E1)).toBeTruthy();
});
---- ----
==== Autres étapes ==== Autres étapes
...@@ -241,8 +243,8 @@ Cela permet de nous envoyer tous les changements que vous avez effectué sur le ...@@ -241,8 +243,8 @@ Cela permet de nous envoyer tous les changements que vous avez effectué sur le
. Assurez vous d'avoir effectué tous les _commits_ et _pushs_ nécessaires avec git. . Assurez vous d'avoir effectué tous les _commits_ et _pushs_ nécessaires avec git.
. Dans le panneau de gauche, cliquez sur "Demandes de fusion". . Dans le panneau de gauche, cliquez sur "Demandes de fusion".
. Cliquez sur "Nouvelle demande de fusion". . Cliquez sur "Nouvelle demande de fusion".
. Vérifiez que dans la partie droite on trouve bien `naomod/software-development-course/onlineChess` et `master`. . Vérifiez que dans la partie droite on trouve bien `naomod/idl/projet-2019` et `master`.
. Dans la partie gauche, choisissez `<votre nom d'utilisateur>/onlineChess` (normalement déjà choisi) et également `master`. . Dans la partie gauche, choisissez `<votre nom d'utilisateur>/projet-2019` (normalement déjà choisi) et également `master`.
. Cliquez sur "Compare branches and continue". . Cliquez sur "Compare branches and continue".
. Comme titre pour la demande de fusion, indiquez "Rendu NOM1 NOM2". . Comme titre pour la demande de fusion, indiquez "Rendu NOM1 NOM2".
. Enfin, cliquez en bas sur "Submit demande de fusion" . Enfin, cliquez en bas sur "Submit demande de fusion"
......
...@@ -22,10 +22,6 @@ ...@@ -22,10 +22,6 @@
"typescript": "^3.3.3" "typescript": "^3.3.3"
}, },
"devDependencies": { "devDependencies": {
"@stryker-mutator/core": "^1.0.2",
"@stryker-mutator/jasmine-framework": "^1.0.2",
"@stryker-mutator/jasmine-runner": "^1.0.2",
"@stryker-mutator/typescript": "^1.0.2",
"alsatian": "^3.2.1", "alsatian": "^3.2.1",
"typescript": "^3.7.5" "typescript": "^3.7.5"
}, },
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment