Files
comun/utile/Teste/ui_harness.prg
Marius Mutu 53d9f1c64a Achizitie import unificata (ROAGEST): ointroduceri, teste UI, documentatie
- import_nota / import_adauga_factura: flux unificat note contabile + articole,
  sincronizare automata, total factura automat, TVA impartit pe conturile
  creditoare ale notelor (rundele 1-31)
- runda 32: totalurile import_nota pe _label/_textbox din _baza.vcx (Arial 10),
  fara containerele clb_tx_simplu si fara bifa "Recalculeaza TVA" (recalcul
  mereu automat); "Sincronizeaza facturile secundare" mutata sub butoane
- utile/Teste: harness UI VFP headless (vfp_ui_harness.ps1, ui_harness.prg,
  precompilare, mock-uri) in radacina; suitele e2e pentru achizitia din import
  grupate in utile/Teste/achizitie_import/
- docs: flux editare text vcx/scx, testare-ui-vfp si testare-vfp-mcp (mutate
  din ROAGEST, general valabile), inventar comun, orchestrare subagenti,
  conventie GO recno, depanare testare VFP

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019DGibQKa5uK4P2TNSFFQNh
2026-07-20 00:50:18 +03:00

65 lines
2.4 KiB
Plaintext

* ui_harness.prg - proceduri reutilizabile pentru teste UI VFP cu handshake pe semafoare.
* Un test seteaza PUBLIC gcSyncDir (folder semafoare, cu \ final) si gcUILog (fisier log),
* apoi SET PROCEDURE TO ui_harness ADDITIVE si foloseste:
* HarnessLog(mesaj) - scrie o linie in log
* HarnessStep(n, mesaj [, autoSec]) - semnaleaza pasul n gata + asteapta continuarea
* HarnessReady(n, mesaj) / HarnessWaitContinue(n [, autoSec]) - variantele separate
* HarnessDone([status]) - scrie done.txt
* HarnessWaitContinue asteapta cont_<n>.txt; daca nu apare in autoSec secunde (implicit 30),
* continua singur (auto-continue) => testul merge si FARA orchestrator (doar log, fara capturi).
PROCEDURE HarnessInit
*-- defensiv: SAFETY OFF ca STRTOFILE peste un fisier existent sa nu scoata dialogul modal
*-- "overwrite?" (blocheaza headless); TALK OFF ca SUM/CALCULATE sa nu deseneze pe desktop.
*-- Un test ar trebui sa faca oricum SET SAFETY OFF INAINTE de prima lui scriere de log.
SET SAFETY OFF
SET TALK OFF
ENDPROC
PROCEDURE HarnessLog
LPARAMETERS tcMsg
IF TYPE('gcUILog') <> 'C' OR EMPTY(gcUILog)
RETURN
ENDIF
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
PROCEDURE HarnessReady
LPARAMETERS tnStep, tcNote
SET SAFETY OFF
STRTOFILE(TTOC(DATETIME()) + ' ' + tcNote + CHR(13)+CHR(10), gcSyncDir + 'ready_' + TRANSFORM(tnStep) + '.txt')
HarnessLog('READY ' + TRANSFORM(tnStep) + ' - ' + tcNote)
ENDPROC
FUNCTION HarnessWaitContinue
LPARAMETERS tnStep, tnAutoSec
LOCAL lcCont, lnMax, lnI, llPrimit
lcCont = gcSyncDir + 'cont_' + TRANSFORM(tnStep) + '.txt'
lnMax = IIF(TYPE('tnAutoSec') = 'N' AND tnAutoSec > 0, tnAutoSec, 30)
lnI = 0
DO WHILE !FILE(lcCont) AND lnI < (lnMax * 5)
lnI = lnI + 1
DOEVENTS FORCE
= INKEY(0.2)
ENDDO
llPrimit = FILE(lcCont)
HarnessLog('CONTINUE ' + TRANSFORM(tnStep) + IIF(llPrimit, ' (semnal primit)', ' (auto-continue dupa ' + TRANSFORM(lnMax) + 's)'))
RETURN llPrimit
ENDFUNC
PROCEDURE HarnessStep
LPARAMETERS tnStep, tcNote, tnAutoSec
HarnessReady(tnStep, tcNote)
HarnessWaitContinue(tnStep, tnAutoSec)
ENDPROC
PROCEDURE HarnessDone
LPARAMETERS tcStatus
SET SAFETY OFF
STRTOFILE(IIF(EMPTY(tcStatus), 'done', tcStatus) + ' ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcSyncDir + 'done.txt')
HarnessLog('GATA')
ENDPROC