JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
test_map_layers.cpp File Reference

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).

Detailed Description

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).

Function Documentation

◆ TEST() [1/16]

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() [2/16]

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() [3/16]

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() [4/16]

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() [5/16]

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() [6/16]

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() [7/16]

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() [8/16]

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() [9/16]

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() [10/16]

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() [11/16]

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() [12/16]

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() [13/16]

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() [14/16]

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() [15/16]

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() [16/16]

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.