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

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.

Detailed Description

Tests unitaires des opérations pures sur tampon de pixels (LOT-54 TACHE-02, EX-EDIT-045).

Function Documentation

◆ TEST() [1/20]

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

  1. Prelever hors bornes.
    Resultat attendu : La couleur prelevee correspond ; hors bornes, le resultat est absent.

◆ TEST() [15/20]

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

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.

  1. Reecrire les pixels lus a l'etape 1.
    Resultat attendu : L'image retrouve exactement son contenu d'origine dans la region.

◆ TEST() [17/20]

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

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

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

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.