|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Tests unitaires des opérations pures sur tampon de pixels (LOT-54 TACHE-02, EX-EDIT-045). More...
#include <cstdint>#include <optional>#include <vector>#include <gtest/gtest.h>#include "HMI/Editor/PixelOperations.h"Functions | |
| TEST (PixelOperationsTest, SetPixelChangeLaCouleurEtRenvoieLaRegion) | |
| Poser un pixel dans les bornes change sa couleur et renvoie ce seul pixel comme région modifiée ; hors bornes, l'image n'est pas touchée et la région renvoyée est vide. | |
| TEST (PixelOperationsTest, ErasePixelPreserveLaTeinteRvb) | |
| Effacer un pixel met son alpha à zéro sans changer sa teinte RVB. | |
| TEST (PixelOperationsTest, PickColorRenvoieLaCouleurOuAbsentHorsBornes) | |
| La pipette renvoie la couleur du pixel visé, ou nullopt hors bornes. | |
| TEST (PixelOperationsTest, DrawLineDiagonaleSansTrou) | |
| Un glisser rapide (diagonale) ne laisse aucun trou : tous les pixels du segment sont peints. | |
| TEST (PixelOperationsTest, DrawLineVerticaleSansTrou) | |
| Un tracé purement vertical peint chaque ligne du segment, sans trou. | |
| TEST (PixelOperationsTest, EraseLineEffaceSansTrou) | |
| Un glisser rapide avec la gomme efface toute la ligne sans laisser de trou, en préservant la teinte RVB des pixels effacés (même contrat que erasePixel). | |
| TEST (PixelOperationsTest, FloodFillZoneFermeeNeDeborde) | |
| Le remplissage d'une zone fermée colore exactement cette zone, sans déborder au-delà de sa frontière. | |
| TEST (PixelOperationsTest, FloodFillZoneOuverteRempliJusquAuBord) | |
| Une zone ouverte débouchant sur un bord de l'image est remplie jusqu'aux bornes, sans écriture hors limites. | |
| TEST (PixelOperationsTest, FloodFillCouleurDejaPresenteNeChangeRien) | |
| Remplir sur la couleur déjà présente ne change rien et ne boucle jamais. | |
| TEST (PixelOperationsTest, FloodFillImageUnPixel) | |
| Le remplissage fonctionne sur une image d'un seul pixel. | |
| TEST (PixelOperationsTest, FloodFillImageEntierementUniformeRecoloreTout) | |
| Le remplissage d'une image entièrement d'une seule couleur la recolore intégralement. | |
| TEST (PixelOperationsTest, UnionPixelRegionCouvreLesDeuxRegions) | |
| L'union de deux régions donne la plus petite région couvrant les deux ; une région vide n'affecte pas l'union. | |
| TEST (PixelOperationsTest, DeuxSymetriesHorizontalesRestituentLOrigine) | |
| Deux symétries horizontales successives restituent exactement l'image d'origine, avec et sans sélection active (région partielle et image entière). | |
| TEST (PixelOperationsTest, DeuxSymetriesVerticalesRestituentLOrigine) | |
| Deux symétries verticales successives restituent exactement l'image d'origine. | |
| TEST (PixelOperationsTest, QuatreRotationsRestituentLOrigineSurRegionCarree) | |
| Quatre rotations d'un quart de tour dans le même sens restituent l'image d'origine sur une région carrée. | |
| TEST (PixelOperationsTest, RotationNonCarreeTronqueLeDebordement) | |
| Sur une région non carrée, la rotation opère dans le rectangle englobant et le débordement est tronqué au cadre de l'image, jamais écrit hors bornes. | |
| TEST (PixelOperationsTest, CollerPresDUnBordTronqueSansDeborder) | |
| Coller un presse-papiers près d'un bord tronque au cadre sans écriture hors limites. | |
| TEST (PixelOperationsTest, TransformationSurRegionVideEstSansEffet) | |
| Une transformation sans région (région vide) est sans effet et ne produit pas d'entrée d'historique (région renvoyée vide). | |
| TEST (PixelOperationsTest, DeplacerUneRegionLaisseLaZoneQuitteeTransparente) | |
| Déplacer une région laisse la zone quittée transparente ; un déplacement entièrement hors cadre efface la zone de départ sans rien reposer de visible, sans tampon corrompu. | |
| TEST (PixelOperationsTest, ReadRegionPuisWriteRegionRestitueLeContenu) | |
| readRegion puis writeRegion restituent exactement le contenu d'origine — l'aller- retour dont dépend hmi::PixelHistory pour annuler/refaire. | |
Tests unitaires des opérations pures sur tampon de pixels (LOT-54 TACHE-02, EX-EDIT-045).
| TEST | ( | PixelOperationsTest | , |
| CollerPresDUnBordTronqueSansDeborder | ) |
Coller un presse-papiers près d'un bord tronque au cadre sans écriture hors limites.
Cas de test : Coller pres d'un bord tronque sans ecriture hors limites.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Copier une region.
2. La coller a une position debordant du cadre.
Resultat attendu : Aucune exception ; la taille du tampon est inchangee ; les pixels dans les bornes sont ecrits.
| TEST | ( | PixelOperationsTest | , |
| DeplacerUneRegionLaisseLaZoneQuitteeTransparente | ) |
Déplacer une région laisse la zone quittée transparente ; un déplacement entièrement hors cadre efface la zone de départ sans rien reposer de visible, sans tampon corrompu.
Cas de test : Deplacer une region laisse la zone quittee transparente.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Deplacer une region a l'interieur du cadre.
2. Verifier la zone quittee et la zone reposee.
3. Deplacer une region entierement hors cadre.
Resultat attendu : La zone quittee est transparente ; le deplacement hors cadre n'ecrit rien de visible et ne leve pas d'exception.
| TEST | ( | PixelOperationsTest | , |
| DeuxSymetriesHorizontalesRestituentLOrigine | ) |
Deux symétries horizontales successives restituent exactement l'image d'origine, avec et sans sélection active (région partielle et image entière).
Cas de test : Deux symetries horizontales restituent l'image d'origine.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Appliquer flipHorizontal deux fois sur une sous-region.
2. Repeter sur l'image entiere.
Resultat attendu : Les pixels sont identiques a l'original dans les deux cas.
| TEST | ( | PixelOperationsTest | , |
| DeuxSymetriesVerticalesRestituentLOrigine | ) |
Deux symétries verticales successives restituent exactement l'image d'origine.
Cas de test : Deux symetries verticales restituent l'image d'origine.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Appliquer flipVertical deux fois sur une sous-region.
Resultat attendu : Les pixels sont identiques a l'original.
| TEST | ( | PixelOperationsTest | , |
| DrawLineDiagonaleSansTrou | ) |
Un glisser rapide (diagonale) ne laisse aucun trou : tous les pixels du segment sont peints.
Cas de test : drawLine peint un segment diagonal sans trou.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Tracer une ligne diagonale entre deux positions eloignees.
2. Lire chaque pixel du chemin attendu.
Resultat attendu : Tous les pixels du chemin diagonal sont de la couleur tracee.
| TEST | ( | PixelOperationsTest | , |
| DrawLineVerticaleSansTrou | ) |
Un tracé purement vertical peint chaque ligne du segment, sans trou.
Cas de test : drawLine peint un segment purement vertical sans trou.
Categorie : Unitaire · Operations pixel
Criticite : Majeur
Etapes :
1. Tracer une ligne verticale.
2. Lire chaque pixel de la colonne.
Resultat attendu : Tous les pixels de la colonne sont de la couleur tracee.
| TEST | ( | PixelOperationsTest | , |
| EraseLineEffaceSansTrou | ) |
Un glisser rapide avec la gomme efface toute la ligne sans laisser de trou, en préservant la teinte RVB des pixels effacés (même contrat que erasePixel).
Cas de test : eraseLine efface un segment complet sans trou.
Categorie : Unitaire · Operations pixel
Criticite : Majeur
Etapes :
1. Effacer une ligne diagonale sur une image coloree.
2. Lire chaque pixel du chemin.
Resultat attendu : Chaque pixel du chemin a un alpha nul et sa teinte RVB d'origine.
| TEST | ( | PixelOperationsTest | , |
| ErasePixelPreserveLaTeinteRvb | ) |
Effacer un pixel met son alpha à zéro sans changer sa teinte RVB.
Cas de test : erasePixel met l'alpha a zero sans changer la teinte RVB.
Categorie : Unitaire · Operations pixel
Criticite : Majeur
Etapes :
1. Effacer un pixel colore.
2. Lire sa couleur.
Resultat attendu : Le canal alpha est nul, les canaux RVB sont inchanges.
| TEST | ( | PixelOperationsTest | , |
| FloodFillCouleurDejaPresenteNeChangeRien | ) |
Remplir sur la couleur déjà présente ne change rien et ne boucle jamais.
Cas de test : floodFill sur la couleur deja presente est un no-op sans boucle infinie.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Construire une grande image uniforme.
2. La remplir avec sa propre couleur.
Resultat attendu : Le test se termine (pas de boucle infinie), l'image est inchangee et la region renvoyee est vide.
| TEST | ( | PixelOperationsTest | , |
| FloodFillImageEntierementUniformeRecoloreTout | ) |
Le remplissage d'une image entièrement d'une seule couleur la recolore intégralement.
Cas de test : floodFill sur une image entierement uniforme la recolore integralement.
Categorie : Unitaire · Operations pixel
Criticite : Majeur
Etapes :
1. Construire une image uniforme.
2. La remplir d'une autre couleur depuis un pixel quelconque.
Resultat attendu : Tous les pixels sont de la nouvelle couleur.
| TEST | ( | PixelOperationsTest | , |
| FloodFillImageUnPixel | ) |
Le remplissage fonctionne sur une image d'un seul pixel.
Cas de test : floodFill fonctionne sur une image d'un seul pixel.
Categorie : Unitaire · Operations pixel
Criticite : Mineur
Etapes :
1. Construire une image 1x1.
2. La remplir d'une autre couleur.
Resultat attendu : L'unique pixel change de couleur, region = (0,0)-(0,0).
| TEST | ( | PixelOperationsTest | , |
| FloodFillZoneFermeeNeDeborde | ) |
Le remplissage d'une zone fermée colore exactement cette zone, sans déborder au-delà de sa frontière.
Cas de test : floodFill remplit une zone fermee sans deborder.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Construire une image avec un carre interieur cerne d'une bordure d'une autre couleur.
2. Remplir depuis le centre du carre.
Resultat attendu : Seul l'interieur change de couleur ; la bordure reste intacte.
| TEST | ( | PixelOperationsTest | , |
| FloodFillZoneOuverteRempliJusquAuBord | ) |
Une zone ouverte débouchant sur un bord de l'image est remplie jusqu'aux bornes, sans écriture hors limites.
Cas de test : floodFill remplit une zone ouverte jusqu'au bord sans deborder du tampon.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Construire une image entierement d'une couleur (zone "ouverte" par construction : aucune bordure).
2. Remplir depuis un coin.
Resultat attendu : Toute l'image change de couleur, sans exception ni ecriture hors bornes.
| TEST | ( | PixelOperationsTest | , |
| PickColorRenvoieLaCouleurOuAbsentHorsBornes | ) |
La pipette renvoie la couleur du pixel visé, ou nullopt hors bornes.
Cas de test : pickColor renvoie la couleur du pixel ou nullopt hors bornes.
Categorie : Unitaire · Operations pixel
Criticite : Majeur
Etapes :
1. Poser une couleur connue sur un pixel.
2. La prelever avec pickColor.
| TEST | ( | PixelOperationsTest | , |
| QuatreRotationsRestituentLOrigineSurRegionCarree | ) |
Quatre rotations d'un quart de tour dans le même sens restituent l'image d'origine sur une région carrée.
Cas de test : Quatre rotations restituent l'image d'origine sur une region carree.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Appliquer rotateClockwise quatre fois sur une region carree.
Resultat attendu : Les pixels de la region sont identiques a l'original apres le cycle complet.
| TEST | ( | PixelOperationsTest | , |
| ReadRegionPuisWriteRegionRestitueLeContenu | ) |
readRegion puis writeRegion restituent exactement le contenu d'origine — l'aller- retour dont dépend hmi::PixelHistory pour annuler/refaire.
Cas de test : readRegion puis writeRegion restituent le contenu d'origine.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Lire une region d'une image.
2. Modifier l'image dans cette region.
| TEST | ( | PixelOperationsTest | , |
| RotationNonCarreeTronqueLeDebordement | ) |
Sur une région non carrée, la rotation opère dans le rectangle englobant et le débordement est tronqué au cadre de l'image, jamais écrit hors bornes.
Cas de test : Rotation non carree : le debordement est tronque au cadre.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Pivoter une region rectangulaire proche du bord de l'image.
2. Verifier que l'image garde sa taille et qu'aucune ecriture n'a debord du tampon.
Resultat attendu : Le vecteur de pixels garde exactement sa taille d'origine (aucun redimensionnement, aucun crash).
| TEST | ( | PixelOperationsTest | , |
| SetPixelChangeLaCouleurEtRenvoieLaRegion | ) |
Poser un pixel dans les bornes change sa couleur et renvoie ce seul pixel comme région modifiée ; hors bornes, l'image n'est pas touchée et la région renvoyée est vide.
Cas de test : setPixel change la couleur du pixel vise et renvoie la region attendue.
Categorie : Unitaire · Operations pixel
Criticite : Critique
Etapes :
1. Poser un pixel dans les bornes d'une image.
2. Poser un pixel hors bornes.
Resultat attendu : Le premier change la couleur et renvoie la region (x,y)-(x,y) ; le second ne change rien et renvoie une region vide.
| TEST | ( | PixelOperationsTest | , |
| TransformationSurRegionVideEstSansEffet | ) |
Une transformation sans région (région vide) est sans effet et ne produit pas d'entrée d'historique (région renvoyée vide).
Cas de test : Une transformation sur une region vide est sans effet.
Categorie : Unitaire · Operations pixel
Criticite : Majeur
Etapes :
1. Appliquer flipHorizontal, rotateClockwise et moveRegion sur une region vide.
Resultat attendu : Chaque appel renvoie une region vide ; l'image reste inchangee.
| TEST | ( | PixelOperationsTest | , |
| UnionPixelRegionCouvreLesDeuxRegions | ) |
L'union de deux régions donne la plus petite région couvrant les deux ; une région vide n'affecte pas l'union.
Cas de test : unionPixelRegion couvre les deux regions, une region vide etant neutre.
Categorie : Unitaire · Operations pixel
Criticite : Mineur
Etapes :
1. Unir deux regions disjointes.
2. Unir une region avec une region vide.
Resultat attendu : Le premier resultat englobe les deux ; le second est identique a la region non vide.