Files
NimPulse/VERIFICATION.md
T

6.0 KiB

Vérification TrayTempo

Table de correspondance entre chaque exigence de la spécification, le contrôle concret effectué, et le résultat observé.

Fonctionnalités principales

# Exigence Contrôle concret Résultat observé
1 Icône system tray (démarre minimisé, pas de fenêtre intrusive) tests/test_tray_integration.nim : addTrayIcon → Shell_NotifyIcon(NIM_ADD) retourne true OK (API réussit, icône ajoutée)
1a Menu contextuel (Démarrer/Pause/Arrêter, Profils, Paramètres, Statistiques, Quitter) Construction du menu dans tray.nim (CreatePopupMenu/AppendMenu/TrackPopupMenu) Compile ; affichage non inspecté visuellement
1b Icône dynamique selon l'état (travail/pause courte/pause longue/pause) tests/test_tray_integration.nim : phaseIcon retourne un HICON non nul pour les 5 phases OK (5 icônes GDI générées)
1c Tooltip temps restant updateTrayIcon(NIF_TIP) appelé dans le test d'intégration OK (NIM_MODIFY sans erreur)
2 Durées configurables + profils + sauvegarde %APPDATA%\TrayTempo tests/test_timer.nim (17 tests) + tests/test_config.nim (round-trip JSON, accents UTF-8, champs manquants) 17 + 9 tests OK
3 Rappels santé configurables, rotation sans répétition tests/test_notifications.nim (5 tests) 5 tests OK
4 Notifications natives (toast / NIF_INFO) + son optionnel tests/test_tray_integration.nim : showToast (NIF_INFO) sans erreur + playSound("SystemAsterisk") retourne true OK (API ; rendu toast et son audible non observés)
5 Statistiques (jour/semaine/total, streak, historique, CSV) tests/test_stats.nim (10 tests) 10 tests OK
6 Démarrage auto (registre Run) tests/test_config.nim « setAutostart toggles the Run key and cleans up » OK
6b Mode « Ne pas déranger » champ doNotDisturb + branche dans onWorkCompleted Compile ; logique vérifiée par relecture
6c Raccourci global (Ctrl+Alt+P, configurable) tests/test_tray_integration.nim : RegisterHotKey/UnregisterHotKey retournent non-zéro OK

Fonctionnalités ajoutées (v0.2.0)

# Exigence Contrôle concret Résultat observé
7 Mono-instance (mutex nommé) config.nim acquireSingleInstance ; tests/test_config.nim « acquireSingleInstance detects a second lock » OK (première acquisition → false, seconde → true)
8 Fix du bug cycleCount (reset sur stop) tests/test_timer.nim « stop resets cycleCount » OK
9 Sauter / prolonger une pause tests/test_timer.nim (skipBreak, extendBreak, isBreak) 4 tests OK
10 Internationalisation (fr/en) i18n.nim : deux bundles Strings, détection langue système ; tests/test_config.nim « English defaults » OK
11 Panneau de réglages tests/test_dialogs.nim : buildSettingsDialog crée une fenêtre et ses contrôles OK (fenêtre + contrôles créés)
12 Objectif journalier stats.nim goalReached ; tests/test_stats.nim « goalReached is true only when the goal is exactly met » OK
13 Hotkey et son configurables champs hotkeyModifiers/hotkeyVk/soundName ; tests/test_config.nim round-trip OK
14 Mode portable configDir() ; tests/test_config.nim « configDir returns exe dir in portable mode » OK (mode portable → exe dir, sinon APPDATA)
15 Mise à jour (comparaison de versions) tests/test_updater.nim (5 tests) 5 tests OK
16 Fenêtre flottante (toujours au-dessus, texte agrandi) tests/test_floating.nim (show/update/hide une vraie fenêtre Win32) + floatingWindow round-trip OK (fenêtre créée/mise à jour/détruite sans erreur)

Contraintes techniques

Contrainte Contrôle concret Résultat observé
Nim ≥ 2.0 Compilé avec Nim 2.2.10 OK
winim nimble install winim (3.9.4) OK
Binaire unique < 5 Mo dir src\traytempo.exe ~594 Ko
nim c -d:release --app:gui commande exacte exécutée compile SuccessX
Modules (tray/timer/notifications/config/stats/i18n/dialogs/floating/updater) ls src/ 10 modules présents
Boucle messages + SetTimer/WM_TIMER GetMessage loop + SetTimer/WM_TIMER dans traytempo.nim Compile + timer décrémenté (testé via tick)

Livrables

Livrable Contrôle Résultat
Structure + traytempo.nimble fichier présent, requires winim OK
Code source commenté (tous modules) en-têtes ## de module + commentaires OK
README + instructions compilation README.md (compile, config, archi, tests, distribution) OK
Config exemple + profils par défaut config.example.json (3 profils, 5 rappels, nouveaux champs) OK
Script de release (portable) release.cmd exécuté OK (zip créé)
Script d'installation installer/traytempo.iss présent OK (nécessite Inno Setup pour compiler)

Limites connues de la vérification

  • Les codes de retour des API Win32 (ajout/suppression d'icône tray, génération d'icônes, notification, hotkey, son via PlaySound) sont vérifiés via tests/test_tray_integration.nim. Seul le rendu visuel (aspect de l'icône, contenu exact du toast, menu déroulant, boîtes de dialogue) et le son audible restent non observables dans l'environnement automatisé.
  • La mise à jour automatique n'est pas testée en conditions réelles (aucun serveur de version configuré) ; la comparaison de versions est testée unitairement.
  • L'avertissement d'édition de liens multiple non-default manifests est bénin (manifeste injecté par winim, documenté dans le README).

Commande de re-vérification

run_tests.cmd

(ou nim c -d:release --app:gui src/traytempo.nim pour le binaire)

52 tests au total, tous verts (8 suites).