|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Tests unitaires de l'habillage du personnage : ancrage image/hitbox, repli entre clips et retournement horizontal (LOT-48). More...
#include <string>#include <vector>#include <gtest/gtest.h>#include "Core/Ecs/Components/Sprite.h"#include "Core/Ecs/Components/Transform.h"#include "Core/Ecs/World.h"#include "Core/Physics/PlayerSpawn.h"#include "HMI/Graphics/ComposedScene.h"#include "HMI/Graphics/PlayerSprite.h"#include "HMI/Graphics/PlayerSpriteTag.h"#include "HMI/Graphics/QuadRecorder.h"#include "HMI/Graphics/RenderMode.h"Functions | |
| TEST (PlayerSpriteTest, AncrageImageDeMemeTailleQueLaHitbox) | |
| Une image de la même taille que la hitbox produit un quad sans décalage. | |
| TEST (PlayerSpriteTest, ImagePlusGrandeCentreeEtAncreeParLeBas) | |
| Une image plus grande que la hitbox est centrée horizontalement et alignée par le bas : elle déborde symétriquement de chaque côté, jamais vers le bas. | |
| TEST (PlayerSpriteTest, ImagePlusGrandeNeDeplacePasLaHitbox) | |
| Une image plus grande que la hitbox ne déplace jamais celle-ci : le calcul du quad ne lit ni ne modifie la position simulée, seulement des tailles. | |
| TEST (PlayerSpriteTest, AncrageHorizontalSymetrique) | |
| L'ancrage est symétrique horizontalement : une image plus large que haute reste centrée, propriété nécessaire pour que le retournement (TACHE-03) n'ait besoin d'aucune correction de position. | |
| TEST (PlayerSpriteTest, ClipDeclareUtiliseTelQuel) | |
| Un clip déclaré est utilisé tel quel, sans repli. | |
| TEST (PlayerSpriteTest, ClipsLot48RepliSurLAtlasProcedural) | |
| Un clip absent retombe sur le plus proche déclaré (chaîne de repli documentée). | |
| TEST (PlayerSpriteTest, AucunClipDeclareRetombeSurIdle) | |
| Une chaîne de repli complète (aucun clip déclaré) retombe finalement sur "idle", jamais sur une chaîne vide ni une boucle infinie. | |
| TEST (PlayerSpriteTest, NomsProceduralsSontIdleRunJump) | |
| L'atlas procédural ne déclare que trois clips (idle/run/jump), seule source de vérité partagée avec hmi::PlayerClipKind. | |
| TEST (PlayerSpriteTest, ModePhysiqueIgnoreLeTag) | |
| En RenderMode::Physique, un personnage portant PlayerSpriteTag est dessiné par le chemin générique (Sprite::region + Transform::scale), sans effet du tag : non régression du mode diagnostic (LOT-48 TACHE-01). | |
| TEST (PlayerSpriteTest, ModeTextureAppliqueLeQuadDuTag) | |
| En RenderMode::Texture, le quad d'un personnage taggué vient du tag (taille et décalage), pas de Transform::scale. | |
| TEST (PlayerSpriteTest, ReplinProceduralLieLAtlasEnModeTexture) | |
| Sans spritesheet externe chargée (usesCharacterSheet == false), le tag lie l'atlas : repli procédural en RenderMode::Texture (LOT-48 AC#2). | |
| TEST (PlayerSpriteTest, RetournementEchangeUvSansDeplacerLeQuad) | |
| Le retournement horizontal échange les coordonnées de texture u0/u1, sans modifier la position ni la taille du quad (ancrage symétrique, LOT-48 TACHE-03). | |
Tests unitaires de l'habillage du personnage : ancrage image/hitbox, repli entre clips et retournement horizontal (LOT-48).
| TEST | ( | PlayerSpriteTest | , |
| AncrageHorizontalSymetrique | ) |
L'ancrage est symétrique horizontalement : une image plus large que haute reste centrée, propriété nécessaire pour que le retournement (TACHE-03) n'ait besoin d'aucune correction de position.
Cas de test : L'ancrage horizontal est symetrique (prealable au retournement).
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Calculer le quad d'une image plus large que la hitbox.
Resultat attendu : Le debord a gauche egale le debord a droite.
| TEST | ( | PlayerSpriteTest | , |
| AncrageImageDeMemeTailleQueLaHitbox | ) |
Une image de la même taille que la hitbox produit un quad sans décalage.
Cas de test : Image de la taille de la hitbox : quad sans decalage.
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Calculer le quad pour une image 16x16 px (1x1 unite) et une hitbox 1x1 unite.
Resultat attendu : La taille du quad vaut 1x1 unite (16 px = 1 unite), decalage nul (hitbox et image de meme taille : l'ancrage centre-bas coincide avec le coin haut-gauche).
| TEST | ( | PlayerSpriteTest | , |
| AucunClipDeclareRetombeSurIdle | ) |
Une chaîne de repli complète (aucun clip déclaré) retombe finalement sur "idle", jamais sur une chaîne vide ni une boucle infinie.
Cas de test : Aucun clip declare : repli final sur idle.
Categorie : Unitaire · Player Sprite
Criticite : Mineur
Etapes :
1. Resoudre "dash" dans un jeu totalement vide.
Resultat attendu : Le nom resolu est "idle".
| TEST | ( | PlayerSpriteTest | , |
| ClipDeclareUtiliseTelQuel | ) |
Un clip déclaré est utilisé tel quel, sans repli.
Cas de test : Un clip declare est utilise tel quel.
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Resoudre "run" dans un jeu qui le declare.
Resultat attendu : Le nom resolu est "run".
| TEST | ( | PlayerSpriteTest | , |
| ClipsLot48RepliSurLAtlasProcedural | ) |
Un clip absent retombe sur le plus proche déclaré (chaîne de repli documentée).
Cas de test : Chute/atterrissage/glissade/dash retombent sur le clip le plus proche.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Resoudre fall/land/wallslide/dash dans le jeu procedural (idle/run/jump seulement).
Resultat attendu : fall -> jump, land -> idle, wallslide -> jump, dash -> run.
| TEST | ( | PlayerSpriteTest | , |
| ImagePlusGrandeCentreeEtAncreeParLeBas | ) |
Une image plus grande que la hitbox est centrée horizontalement et alignée par le bas : elle déborde symétriquement de chaque côté, jamais vers le bas.
Cas de test : Image plus grande que la hitbox : centree horizontalement, alignee par le bas.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Calculer le quad pour une image 32x32 px et la hitbox reelle du personnage (core::playerSize()).
Resultat attendu : Le decalage horizontal est negatif de la moitie du surplus de largeur ; le bas de l'image (offset.y + size.y) coincide avec le bas de la hitbox (hitboxSize.y).
| TEST | ( | PlayerSpriteTest | , |
| ImagePlusGrandeNeDeplacePasLaHitbox | ) |
Une image plus grande que la hitbox ne déplace jamais celle-ci : le calcul du quad ne lit ni ne modifie la position simulée, seulement des tailles.
Cas de test : Le calcul du quad ne modifie jamais la hitbox (fonction pure).
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Calculer le quad pour plusieurs tailles d'image, avec la meme hitbox.
Resultat attendu : hitboxSize n'est jamais lu autrement qu'en entree : deux tailles d'image differentes ne changent pas hitboxSize (verification par construction, cf. signature pure de la fonction).
| TEST | ( | PlayerSpriteTest | , |
| ModePhysiqueIgnoreLeTag | ) |
En RenderMode::Physique, un personnage portant PlayerSpriteTag est dessiné par le chemin générique (Sprite::region + Transform::scale), sans effet du tag : non régression du mode diagnostic (LOT-48 TACHE-01).
Cas de test : RenderMode::Physique ignore PlayerSpriteTag.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Composer un personnage taggue en RenderMode::Physique.
Resultat attendu : Le quad soumis vient de la region du sprite et de l'echelle du transform (0,4x0,8 unite), pas du tag.
| TEST | ( | PlayerSpriteTest | , |
| ModeTextureAppliqueLeQuadDuTag | ) |
En RenderMode::Texture, le quad d'un personnage taggué vient du tag (taille et décalage), pas de Transform::scale.
Cas de test : RenderMode::Texture applique le quad du tag.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Composer un personnage taggue (quad plus grand que la hitbox) en RenderMode::Texture.
Resultat attendu : Le quad soumis est decale/dimensionne selon le tag, a la position Transform + decalage.
| TEST | ( | PlayerSpriteTest | , |
| NomsProceduralsSontIdleRunJump | ) |
L'atlas procédural ne déclare que trois clips (idle/run/jump), seule source de vérité partagée avec hmi::PlayerClipKind.
Cas de test : L'atlas procedural ne declare que idle/run/jump.
Categorie : Unitaire · Player Sprite
Criticite : Mineur
Etapes :
1. Lire proceduralPlayerClipNames().
Resultat attendu : Exactement {"idle", "run", "jump"}.
| TEST | ( | PlayerSpriteTest | , |
| ReplinProceduralLieLAtlasEnModeTexture | ) |
Sans spritesheet externe chargée (usesCharacterSheet == false), le tag lie l'atlas : repli procédural en RenderMode::Texture (LOT-48 AC#2).
Cas de test : Sans spritesheet, RenderMode::Texture lie l'atlas.
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Composer un personnage taggue avec usesCharacterSheet=false.
Resultat attendu : La texture liee est l'atlas, pas la spritesheet.
| TEST | ( | PlayerSpriteTest | , |
| RetournementEchangeUvSansDeplacerLeQuad | ) |
Le retournement horizontal échange les coordonnées de texture u0/u1, sans modifier la position ni la taille du quad (ancrage symétrique, LOT-48 TACHE-03).
Cas de test : Le retournement echange u0/u1 sans deplacer le quad.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Composer le meme personnage, flipHorizontal=false puis true.
Resultat attendu : u0 et u1 sont echanges ; x/y/width/height identiques dans les deux cas.