Include si sistemul de depanare/testare headless din Teste\ (harness UI cu capturi, verificare de sintaxa prin compilare, wrappere text<->binar) si docs\depanare_testare_flora2roa.md.
105 lines
6.1 KiB
Markdown
105 lines
6.1 KiB
Markdown
# Depanare si testare FLORA2ROA (headless, fara IDE)
|
|
|
|
Implementarea in acest proiect a sistemului comun de depanare/testare VFP. Metoda generala si
|
|
capcanele complete: `D:\ROA\ROACONT\COMUN\docs\depanare_testare_vfp.md`,
|
|
`testare-ui-vfp.md`, `flux-editare-vfp-text.md`, `reguli_lucru.md`.
|
|
|
|
## Ce contine `Teste\`
|
|
|
|
Infrastructura (copiata din `COMUN\utile\Teste`, generica):
|
|
|
|
- `ui_harness.prg` - proceduri de handshake intre testul VFP si orchestrator
|
|
(`HarnessLog`, `HarnessStep`, `HarnessReady`, `HarnessWaitContinue`, `HarnessDone`).
|
|
- `vfp_ui_harness.ps1` - orchestrator: precompileaza, lanseaza vfp9, conduce testul pas cu pas
|
|
pe semafoare si face o captura PNG dupa fiecare pas. Fereastra e mutata off-screen, deci nu
|
|
fura focusul si se poate lucra in paralel.
|
|
- `_precompile.ps1` - precompilare izolata a `.fxp`-ului testului (proces copil separat).
|
|
|
|
Specific FLORA2ROA:
|
|
|
|
- `test_init_env_auto.prg` - initializare NEINTERACTIVA a mediului, echivalentul lui `main.prg`
|
|
fara `DO FORM` / `READ EVENTS`. Dupa apel sunt disponibile `goApp`, `goLog`, `goConn`,
|
|
`goExecutor`, `gcAppPath`. Conectarea la Oracle e OPTIONALA (primul parametru).
|
|
- `test_helpers.prg` - `TestErrorHandler` (ON ERROR care logheaza si continua, fara MESSAGEBOX)
|
|
si aserturile `TestAssert` / `TestAssertEqual` / `TestRezultat`.
|
|
- `mock_amessagebox.prg` - `amessagebox` care returneaza direct valoarea butonului, ca
|
|
dialogurile modale sa nu blocheze rularea headless.
|
|
- `verifica_sintaxa.ps1` - compilare de verificare pentru toate `.prg`-urile, pe copii in TEMP.
|
|
- `text_din_bin.ps1` / `bin_din_text.ps1` - conversie `.scx`/`.vcx` <-> text (`_textcache\`).
|
|
- `ruleaza_teste.ps1` - ruleaza toata suita si da sumarul.
|
|
- `test_frm_import_ui.prg` - smoke: formularul real porneste, Init completeaza intervalul din
|
|
`settings.ini`, `Trace` scrie in `edtInfo`.
|
|
- `test_export_date.prg` - functional: `ExportDate()` citeste XML-urile din interval si
|
|
populeaza cursoarele (fara Oracle).
|
|
- `test_conectare_roa.prg` - verifica drumul CU conectare la Oracle: fie se conecteaza si
|
|
executa o interogare de proba, fie raporteaza esecul si iese controlat. NU e in suita
|
|
implicita (depinde de reteaua/serverul Oracle).
|
|
|
|
## Comenzi uzuale
|
|
|
|
```powershell
|
|
# toata suita (sintaxa + teste UI cu capturi)
|
|
powershell -ExecutionPolicy Bypass -File Teste\ruleaza_teste.ps1
|
|
|
|
# doar verificarea de sintaxa, dupa orice editare de .prg
|
|
powershell -ExecutionPolicy Bypass -File Teste\verifica_sintaxa.ps1
|
|
|
|
# un singur test, cu capturi
|
|
powershell -ExecutionPolicy Bypass -File Teste\vfp_ui_harness.ps1 `
|
|
-TestPrg 'D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_export_date.prg' -Steps @('afisat','importat')
|
|
|
|
# un singur test, fara capturi (auto-continue la 30s pe pas)
|
|
& 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_export_date.prg" 20250601 20250630
|
|
|
|
# verificarea conexiunii la Oracle (datele din settings.ini)
|
|
& 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -A -T "D:\PROIECTE\FLORA\FLORA2ROA\Teste\test_conectare_roa.prg"
|
|
```
|
|
|
|
Rezultatele: `Teste\<test>_log.txt` (linii `PASS:`/`FAIL:` si `REZULTAT:`),
|
|
capturi in `Teste\screenshots\`, erori runtime in `Teste\_erori_test.txt`.
|
|
|
|
## Editarea formularului pe text
|
|
|
|
```powershell
|
|
powershell -ExecutionPolicy Bypass -File Teste\text_din_bin.ps1 # binar -> _textcache\*.sc2
|
|
# editezi _textcache\frm_import.sc2 BYTE-SAFE, in Windows-1252:
|
|
# $t = [IO.File]::ReadAllText($p, [Text.Encoding]::GetEncoding(1252))
|
|
# [IO.File]::WriteAllText($p, $t, [Text.Encoding]::GetEncoding(1252))
|
|
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile _textcache\frm_import.sc2 -DryRun
|
|
powershell -ExecutionPolicy Bypass -File Teste\bin_din_text.ps1 -TextFile _textcache\frm_import.sc2
|
|
```
|
|
|
|
Write-back-ul face fidelity check (bin -> text, comparat pe octeti) inainte de a atinge
|
|
binarul si refuza daca `frm_import.scx` e blocat de IDE sau de `flora2roa.exe`.
|
|
|
|
## Un test nou in 5 pasi
|
|
|
|
1. `SET SAFETY OFF` + `SET TALK OFF` ca PRIMA linie, apoi `PUBLIC gcUILog, gcSyncDir`.
|
|
2. `DO test_init_env_auto WITH .F.` (sau `.T.` cand testul chiar are nevoie de Oracle), apoi
|
|
`SET PROCEDURE TO ui_harness ADDITIVE` si `mock_amessagebox` ULTIMUL.
|
|
3. `DO FORM (gcAppPath + 'frm_import') NAME goImportFrm NOSHOW`, `WindowType = 0`, `Show()`.
|
|
Modal (`Show(1)`) nu returneaza si blocheaza testul.
|
|
4. Pe fiecare pas: actiunea din fluxul REAL al utilizatorului (metoda pe care o apeleaza
|
|
butonul, nu popularea directa a cursoarelor), aserturi cu `TestAssert`, apoi
|
|
`DO HarnessStep WITH <n>, '<eticheta>'`. La final `DO HarnessDone WITH TestRezultat()` si `QUIT`.
|
|
5. Inregistreaza testul in lista `$suita` din `ruleaza_teste.ps1`.
|
|
|
|
## Capcane confirmate in acest proiect
|
|
|
|
- `ErrorHandler` din `main.prg` deschide `MESSAGEBOX` si face `SET STEP ON`: headless ar bloca
|
|
procesul la nesfarsit. De aceea `test_init_env_auto.prg` instaleaza `TestErrorHandler`.
|
|
- Compilarile repetate de `vfp9` din ACEEASI sesiune PowerShell esueaza tacut (procesul
|
|
porneste dar nu executa). `verifica_sintaxa.ps1` compileaza toate fisierele intr-o singura
|
|
rulare; harness-ul foloseste proces copil izolat pentru precompilare.
|
|
- `Set Exclusive On` din `main.prg` nu se pastreaza in teste (mediul de test deschide cursoare
|
|
partajate); daca un test are nevoie de comportamentul exact al aplicatiei, il seteaza el.
|
|
- Testele nu ruleaza in paralel intre ele: harness-ul isi omoara instantele `vfp9` proprii
|
|
inainte de fiecare lansare (filtrat pe linia de comanda; instantele straine nu sunt atinse).
|
|
- `settings.ini` decide folderele de import. Testele functionale depind de continutul din
|
|
`EXEMPLE\hotel` si `EXEMPLE\restaurant`; daca intervalul nu are fisiere, cursoarele raman goale.
|
|
- Un test care se conecteaza la Oracle face `SQLSETPROP(0, 'DispLogin', 3)` inainte de conectare:
|
|
altfel, cu date de acces gresite, driverul ODBC deschide un dialog de login care blocheaza
|
|
procesul headless la nesfarsit (simptom: proces viu, CPU 0%, log fara linii noi).
|
|
- `CreeazaNote()` si `ScrieNote()` scriu in ROA si NU pot fi testate fara Oracle. Bifa
|
|
"Nu scrie note contabile" (`chkTest.Value = 1`) opreste scrierea; testele o lasa activa.
|