37 lines
4.4 KiB
Markdown
37 lines
4.4 KiB
Markdown
# REL-SAV-ESSAIS : cas d'essai de la garde B+ pour la fiche de tests COMMUN-4 (2026-10-13)
|
|
|
|
Source : `REL-SAV-SPEC.md` § 7, corrigée d'après l'IMPL :
|
|
- en Development, l'exe réel s'appelle `Windows\LifePlay\Binaries\Win64\LifePlay.exe` ;
|
|
- le Shipping n'a pas de journal (`UE_LOG` vide, pas de `bUseLoggingInShipping`).
|
|
|
|
Code : `Source/LifePlay/LPSaveRelaunch.cpp` (MD5 a0cd668771ff5893ed2867f24de1df3a), `LPSaveRelaunch.h` (f31173f606a8f63db762f2d8960509f8), `LifePlay.cpp` (3f7ffa30e0ef83fc87aec297f699eea9).
|
|
|
|
## Avant l'essai (sans jeton UE)
|
|
|
|
- **Présence du code dans l'exe.** `Binaries\Win64\LifePlay.exe` du build COMMUN-4 contient la chaîne UTF-16LE `Dossier de sauvegarde : `. Commande : `Select-String -Path <exe> -Pattern 'Dossier de sauvegarde' -Encoding Unicode`, ou `strings -el`.
|
|
- **Relevé témoin.** `Get-ChildItem -Recurse -Force <build>\Windows\LifePlay\Saved | Get-FileHash -Algorithm MD5` est enregistré dans un `.csv` hors du build, comme ancien dossier Development.
|
|
- **Dossier d'essai.** `D:\Game\LifePlay_Backup_5.5\REL\essai_userdir` doit être absent.
|
|
- **Processus.** `Get-CimInstance Win32_Process -Filter "Name='LifePlay.exe'" | Select ProcessId, ParentProcessId, ExecutablePath, CommandLine`. Le bootstrap est `Windows\LifePlay.exe` et l'exe réel `Windows\LifePlay\Binaries\Win64\LifePlay.exe`.
|
|
- **Fichier de réglage.** `LPSaveLocation.ini` va dans `<build>\Windows\LifePlay\`, en ASCII ou UTF-16 avec BOM (pas d'UTF-8 accentué : réserve R2). Contenu :
|
|
```ini
|
|
[SaveLocation]
|
|
SaveDir=D:\Game\LifePlay_Backup_5.5\REL\essai_userdir
|
|
```
|
|
|
|
## Cas
|
|
|
|
| Cas | Montage | Attendu (PASS si tout est vrai) |
|
|
|---|---|---|
|
|
| E1 | Sans `LPSaveLocation.ini`, lancement normal | Une seule instance de `Binaries\Win64\LifePlay.exe`. `Saved` reste à côté de l'exe (comportement actuel). Journal `Saved\Logs\LifePlay.log` : `Dossier de sauvegarde : … (relance=non, source=inactif, motif=Development-sans-ini)`. |
|
|
| E2 | `.ini` posé, lancement normal, puis nouvelle partie, sauvegarde, quitter, relancer, Continuer, mods actifs | Deux instances de `Binaries\Win64\LifePlay.exe` pendant le jeu. Le parent n'a pas `-UserDir` ; l'enfant a `ParentProcessId` = parent et une ligne qui finit par `-UserDir="D:\Game\LifePlay_Backup_5.5\REL\essai_userdir"`. `essai_userdir\Saved\{Logs,Config,SaveGames}` est créé. Journal de l'enfant (`essai_userdir\Saved\Logs\LifePlay.log`) : `relance=oui, source=ini, motif=-`. **Le relevé de l'ancien `Saved` est identique avant et après, journal compris (0 fichier créé ou modifié).** Tout écart est rapporté avec le fichier et l'heure. La partie se recharge par Continuer. |
|
|
| E3 | E2, plus le lancement `Windows\LifePlay.exe -ScriptStackOnWarnings -LPPersonsLog` | La ligne de l'enfant contient `-ScriptStackOnWarnings -LPPersonsLog` dans l'ordre, avant `-UserDir=…`. `LogInit: Command Line:` du journal de l'enfant les montre aussi. |
|
|
| E4 | E2, plus `-UserDir="D:\Game\LifePlay_Backup_5.5\REL\essai_explicite"` | Une seule instance. Le dossier `essai_explicite\Saved` est utilisé. Journal : `relance=non, source=-UserDir`. |
|
|
| E5 | `.ini` avec `SaveDir=relatif\x`, puis `SaveDir=` vide | Relance vers `%LOCALAPPDATA%\LifePlay-Revival`. Journal : `source=defaut`. Fermer le jeu au menu titre ; supprimer ensuite ce dossier d'essai seulement s'il est vide de sauvegardes, avec l'accord de l'utilisateur. |
|
|
| E6 | E2, plus `-LPNoSaveRelaunch` | Une seule instance ; `Saved` reste à côté de l'exe. Journal : `motif=desactive`. |
|
|
| E7 | E2, sortie par le menu (Quit) | Aucune instance restante. Le code de sortie du bootstrap (`Start-Process -Wait -PassThru` puis `.ExitCode`) est égal à celui de l'enfant, soit 0. |
|
|
| E8 | E2, enfant tué (`Stop-Process` sur l'enfant) | Le parent sort aussitôt, avec le code de l'enfant (≠ 0). Aucune instance restante. |
|
|
| E9 (Shipping, sur accord de Big Boss et de l'utilisateur) | Shipping sans `.ini` | Relance vers `%LOCALAPPDATA%\LifePlay-Revival\Saved` (créé). Le relevé MD5 de `%LOCALAPPDATA%\LifePlay` (vraies sauvegardes, lecture seule) est identique avant et après. Une nouvelle partie démarre et Continuer fonctionne. Sans journal Shipping, la preuve vient de la ligne de commande et des dossiers. |
|
|
|
|
## Verdict attendu
|
|
|
|
PASS si E1 à E8 sont conformes. Un écart dans l'ancien `Saved` en E2 est un FAIL de la garde : rapporter le fichier, l'heure et la ligne de journal. Les réserves R2 (UTF-8 accentué), R3 (redirection de la sortie standard non transmise à l'enfant) et R4 (racine `X:\.`) ne sont pas testées ici.
|