|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Tests unitaires du format de carte version: 3 : couches typées, entités, propriétés libres et migration ascendante (EX-LVL-016, EX-LVL-017, EX-LVL-018, LOT-04). More...
#include <algorithm>#include <cstddef>#include <cstdint>#include <map>#include <string>#include <variant>#include <vector>#include <gtest/gtest.h>#include "Core/Ecs/Components/Sprite.h"#include "Core/Ecs/World.h"#include "Core/Levels/GridPosition.h"#include "Core/Levels/LevelDraft.h"#include "Core/Levels/LevelLoader.h"#include "Core/Levels/LevelScene.h"#include "Core/Levels/LevelWriter.h"#include "Core/Levels/TileLayer.h"#include "Core/Levels/TileType.h"Functions | |
| TEST (CouchesDeCarteTest, CarteVersion2PromueEnCoucheLegacyUnique) | |
| Une carte version: 2 se charge sans erreur, sa grille unique promue en couche Legacy (EX-LVL-016). | |
| TEST (CouchesDeCarteTest, CarteVersion2ReecriteSansTableauDeCouches) | |
| Une carte version: 2 réécrite ressort sans tableau layers : la promotion ne convertit pas le fichier dans le dos de son auteur (EX-LVL-016). | |
| TEST (CouchesDeCarteTest, AllerRetourSurTroisCouchesEtDeuxEntites) | |
| Une carte à trois couches et deux entités survit à l'aller-retour chargement → écriture → rechargement (EX-LVL-016, EX-LVL-017). | |
| TEST (CouchesDeCarteTest, ChampsInconnusDUneCouchePreservesALaReecriture) | |
| Les champs inconnus d'une couche sont ignorés sans erreur et préservés à la réécriture, chacun dans son type JSON (EX-LVL-018). | |
| TEST (CouchesDeCarteTest, ChampsInconnusDUneEntitePreservesALaReecriture) | |
| Les champs inconnus d'une entité sont ignorés sans erreur et préservés à la réécriture (EX-LVL-018). | |
| TEST (CouchesDeCarteTest, LaCoucheDeCollisionEstLaGrilleDuGameplay) | |
| La grille consommée par le gameplay est celle de la couche de collision, pas celle du sol ni du décor (EX-LVL-016). | |
| TEST (CouchesDeCarteTest, ProjectionEcsIgnoreLaCoucheDeCollision) | |
| La projection en entités ECS parcourt les couches visibles et ignore la collision, qui est un masque et non une image (EX-LVL-016). | |
| TEST (CouchesDeCarteTest, CarteVersion4RefuseeAvecUnMessageExplicite) | |
| Une carte version: 4 est refusée avec un message explicite et une erreur typée (EX-LVL-005, EX-NFR-040). | |
| TEST (CouchesDeCarteTest, TuileHorsBornesDansUneCoucheRefusee) | |
| Une tuile hors bornes dans une couche est refusée, en nommant la couche fautive (EX-LVL-004). | |
| TEST (CouchesDeCarteTest, EntiteHorsBornesRefusee) | |
| Une entité posée hors de la grille est refusée (EX-LVL-017). | |
| TEST (CouchesDeCarteTest, RoleDeCoucheInconnuRetombeSurLeSol) | |
| Un rôle de couche inconnu ne fait pas échouer la carte : la couche est chargée comme sol (EX-NFR-040). | |
| TEST (CouchesDeCarteTest, BrouillonDEditionPreserveCouchesEtEntites) | |
| Le brouillon d'édition transporte couches et entités : ouvrir puis réenregistrer une carte multi-couches ne les efface pas (EX-EDIT-011, EX-LVL-016). | |
| TEST (CouchesDeCarteTest, TuilePeinteAtteintLaCoucheDeCollision) | |
| La grille éditée dans le brouillon est la couche de collision : une tuile peinte s'y retrouve à l'enregistrement (EX-LVL-016). | |
| TEST (CouchesDeCarteTest, RedimensionnementEmporteCouchesEtEntites) | |
| Redimensionner un brouillon redimensionne toutes ses couches et abandonne les entités sorties de la grille (EX-LVL-016, EX-LVL-017). | |
| TEST (CouchesDeCarteTest, CoucheDeCollisionDeclareeRefusee) | |
| Une couche collision déclarée est refusée : la grille de collision d'une carte est son tableau racine tiles (EX-LVL-016). | |
| TEST (CouchesDeCarteTest, ProjectionEcsAnnonceLeRoleDeChaqueCouche) | |
| La projection ECS annonce le rôle de la couche d'origine de chaque tuile : c'est ce qui permet à la présentation de poser le décor sur la bande de profondeur (EX-REN-018). | |
Tests unitaires du format de carte version: 3 : couches typées, entités, propriétés libres et migration ascendante (EX-LVL-016, EX-LVL-017, EX-LVL-018, LOT-04).
| TEST | ( | CouchesDeCarteTest | , |
| AllerRetourSurTroisCouchesEtDeuxEntites | ) |
Une carte à trois couches et deux entités survit à l'aller-retour chargement → écriture → rechargement (EX-LVL-016, EX-LVL-017).
Cas de test : Une carte a trois couches et deux entites survit a l'aller-retour.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte version 3 a trois couches et deux entites.
2. La reserialiser puis la recharger.
3. Comparer couches et entites au niveau d'origine.
Resultat attendu : Roles, noms, grilles, types d'entites et positions sont identiques.
| TEST | ( | CouchesDeCarteTest | , |
| BrouillonDEditionPreserveCouchesEtEntites | ) |
Le brouillon d'édition transporte couches et entités : ouvrir puis réenregistrer une carte multi-couches ne les efface pas (EX-EDIT-011, EX-LVL-016).
Cas de test : Le brouillon d'edition preserve couches et entites.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte version 3 et en faire un brouillon d'edition.
2. Reconvertir le brouillon en niveau, sans rien modifier.
Resultat attendu : Les trois couches et les deux entites sont toujours la.
| TEST | ( | CouchesDeCarteTest | , |
| CarteVersion2PromueEnCoucheLegacyUnique | ) |
Une carte version: 2 se charge sans erreur, sa grille unique promue en couche Legacy (EX-LVL-016).
Cas de test : Une carte version 2 est promue en couche unique.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte au format version 2, sans tableau 'layers'.
2. Inspecter les couches du niveau obtenu.
Resultat attendu : Le niveau porte exactement une couche, de role Legacy, dont la grille est celle de la carte.
| TEST | ( | CouchesDeCarteTest | , |
| CarteVersion2ReecriteSansTableauDeCouches | ) |
Une carte version: 2 réécrite ressort sans tableau layers : la promotion ne convertit pas le fichier dans le dos de son auteur (EX-LVL-016).
Cas de test : Une carte version 2 reecrite ne gagne pas de tableau 'layers'.
Categorie : Unitaire · Couches de carte
Criticite : Mineur
Etapes :
1. Charger une carte version 2.
2. La reserialiser.
Resultat attendu : Le JSON produit ne contient ni 'layers' ni 'entities'.
| TEST | ( | CouchesDeCarteTest | , |
| CarteVersion4RefuseeAvecUnMessageExplicite | ) |
Une carte version: 4 est refusée avec un message explicite et une erreur typée (EX-LVL-005, EX-NFR-040).
Cas de test : Une carte version 4 est refusee explicitement.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte declarant version 4.
Resultat attendu : Le chargement echoue avec l'erreur UnsupportedFormatVersion et un message nommant la version.
| TEST | ( | CouchesDeCarteTest | , |
| ChampsInconnusDUneCouchePreservesALaReecriture | ) |
Les champs inconnus d'une couche sont ignorés sans erreur et préservés à la réécriture, chacun dans son type JSON (EX-LVL-018).
Cas de test : Les champs inconnus d'une couche sont preserves a la reecriture.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une couche portant quatre cles inconnues (booleen, entier, reel, chaine).
2. Reserialiser puis recharger.
Resultat attendu : Les quatre cles sont toujours la, avec leur valeur et leur type.
| TEST | ( | CouchesDeCarteTest | , |
| ChampsInconnusDUneEntitePreservesALaReecriture | ) |
Les champs inconnus d'une entité sont ignorés sans erreur et préservés à la réécriture (EX-LVL-018).
Cas de test : Les champs inconnus d'une entite sont preserves a la reecriture.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une entite portant un dialogue, un niveau et un drapeau.
2. Reserialiser puis recharger.
Resultat attendu : Les trois cles sont toujours la, avec leur valeur et leur type.
| TEST | ( | CouchesDeCarteTest | , |
| CoucheDeCollisionDeclareeRefusee | ) |
Une couche collision déclarée est refusée : la grille de collision d'une carte est son tableau racine tiles (EX-LVL-016).
Cas de test : Une couche 'collision' declaree est refusee.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte declarant une couche de role 'collision'.
Resultat attendu : Le chargement echoue, avec un message renvoyant au tableau racine 'tiles'.
| TEST | ( | CouchesDeCarteTest | , |
| EntiteHorsBornesRefusee | ) |
Une entité posée hors de la grille est refusée (EX-LVL-017).
Cas de test : Une entite hors bornes est refusee.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte dont une entite est posee en dehors de la grille.
Resultat attendu : Le chargement echoue avec l'erreur OutOfBounds.
| TEST | ( | CouchesDeCarteTest | , |
| LaCoucheDeCollisionEstLaGrilleDuGameplay | ) |
La grille consommée par le gameplay est celle de la couche de collision, pas celle du sol ni du décor (EX-LVL-016).
Cas de test : La couche de collision est la grille du gameplay.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte dont le decor pose un danger en (2, 1), absent de la collision.
2. Lire la grille du niveau.
Resultat attendu : La case (2, 1) est vide dans la grille du niveau : le decor ne bloque pas.
| TEST | ( | CouchesDeCarteTest | , |
| ProjectionEcsAnnonceLeRoleDeChaqueCouche | ) |
La projection ECS annonce le rôle de la couche d'origine de chaque tuile : c'est ce qui permet à la présentation de poser le décor sur la bande de profondeur (EX-REN-018).
Cas de test : La projection ECS annonce le role de la couche de chaque tuile.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Projeter une carte version 3 en entites ECS en relevant le role annonce.
Resultat attendu : Les tuiles du sol sont annoncees Ground, celles du decor Decor, et aucune n'est annoncee Collision.
| TEST | ( | CouchesDeCarteTest | , |
| ProjectionEcsIgnoreLaCoucheDeCollision | ) |
La projection en entités ECS parcourt les couches visibles et ignore la collision, qui est un masque et non une image (EX-LVL-016).
Cas de test : La projection ECS ignore la couche de collision.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte a trois couches (2 tuiles de sol, 1 de decor, 1 de collision).
2. Projeter le niveau en entites ECS.
Resultat attendu : Trois entites : celles du sol et du decor, aucune pour la collision.
| TEST | ( | CouchesDeCarteTest | , |
| RedimensionnementEmporteCouchesEtEntites | ) |
Redimensionner un brouillon redimensionne toutes ses couches et abandonne les entités sorties de la grille (EX-LVL-016, EX-LVL-017).
Cas de test : Un redimensionnement emporte couches et entites.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Ouvrir une carte version 3 de 4x3 en brouillon.
2. La redimensionner en 2x2.
Resultat attendu : Les couches font toutes 2x2, et les entites sorties de la grille ont disparu.
| TEST | ( | CouchesDeCarteTest | , |
| RoleDeCoucheInconnuRetombeSurLeSol | ) |
Un rôle de couche inconnu ne fait pas échouer la carte : la couche est chargée comme sol (EX-NFR-040).
Cas de test : Un role de couche inconnu ne fait pas echouer la carte.
Categorie : Unitaire · Couches de carte
Criticite : Mineur
Etapes :
1. Charger une carte dont une couche declare un role inconnu.
Resultat attendu : La carte se charge, la couche prenant le role Ground.
| TEST | ( | CouchesDeCarteTest | , |
| TuileHorsBornesDansUneCoucheRefusee | ) |
Une tuile hors bornes dans une couche est refusée, en nommant la couche fautive (EX-LVL-004).
Cas de test : Une tuile hors bornes dans une couche est refusee.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Charger une carte dont une couche pose une tuile en dehors de la grille.
Resultat attendu : Le chargement echoue avec l'erreur OutOfBounds et un message nommant la couche.
| TEST | ( | CouchesDeCarteTest | , |
| TuilePeinteAtteintLaCoucheDeCollision | ) |
La grille éditée dans le brouillon est la couche de collision : une tuile peinte s'y retrouve à l'enregistrement (EX-LVL-016).
Cas de test : Une tuile peinte dans l'editeur atteint la couche de collision.
Categorie : Unitaire · Couches de carte
Criticite : Majeur
Etapes :
1. Ouvrir une carte version 3 en brouillon.
2. Peindre un solide en (2, 0).
3. Reconvertir le brouillon en niveau.
Resultat attendu : La couche de collision porte le solide en (2, 0), le sol et le decor sont inchanges.