Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git, nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de cercetare pe care se sprijina modificarile din cod. O stergere acolo era definitiva. Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele fisierelor de test la care se refereau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
5.1 KiB
S4b etapa 2 — smoke test headless al dialogului frm_sincronizare_articole
Suita nouă: COMUN\utile\Teste\editare_factura\test_s4b_dialog.prg, model
test_s4b_sincronizare.prg (același folder) — tvd/trul construite în test cu helperele
AdaugaTvd/AdaugaTrul (copiate identic), dummyform (copiat identic) refolosit ca
oFormArticole. Complet headless (vfp9.exe -A -T), fără Oracle.
Nu s-a atins COMUN\clase\omodificari.vc2 sau COMUN\programe\ofacturare_editare.prg — doar
citite, niciun write-back.
Rezultat
REZULTAT: 35 PASS / 0 FAIL
Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s4b_dialog_log.txt
Comandă de reproducere:
cd "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura"
"C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T test_s4b_dialog.prg
Niciun proces vfp9.exe rămas viu, verificat cu tasklist înainte și după rulare (0 ambele dăți).
Mediu (fără Oracle, fără test_init_env_auto)
Clasa e OF "_frm_child.vcx" (WindowType=1, modală), dar modalitatea se declanșează la
.Show(), nu la Createobject() — verificat pe cod (_frm_child.vc2/_frm_base.vc2, niciun
.Show( în lanțul de moștenire) înainte de a scrie testul, ca niciun caz să nu rămână blocat.
Mediul de clase a fost replicat din Programe\roafacturare.prg (SET PATH + tot lanțul SET
CLASSLIB, minus procedurile Oracle/init_program), plus SET PROCEDURE TO proceduri_comune.prg
și ofacturare_editare.prg — suficient ca CreateObject('frm_sincronizare_articole') să rezolve
lanțul _frm_child.vcx -> _frm_base.vcx -> _baza.vcx și controalele _grdrow/_optiongrup/_label.
Ce s-a testat (cele 7 puncte din brief, toate acoperite)
- Instanțiere fără eroare — 6 instanțe create (T1, T2, T2b, T3, T4, T5, T6), pe seturi diferite
de
tvd/trul(Modificare+Adaugare+Semnalare+N-A, document identic, doar N-A/Semnalare), toate verificateVartype(loForm)=='O'— PASS pe toate. propunere_afisataidentică camp-cu-camp cupropunere_sincronizare(T1) — comparație completă (id_articol,denumire,codmat,cantitate_veche/noua,pret_vechi/nou,actiune,motiv) prin helper dedicatVerificaCursoareIdentice, 0 nepotriviri pe 4 rânduri.But_termin1.Enabled—.T.cu Modificare+Adaugare prezente (T1),.F.pe propunere goală (document identic, T2) și.F.pe propunere cu doar N-A/Semnalare (T2b) — ambele variante cerute.- Comutarea direcției (T3) —
optDirectie.Value=2+.Click()(apel direct de metodă, fără input real):propunere_afisatas-a reumplut la tot 3 rânduri (nu dublat), rolurile s-au inversat corect (900 Adaugare→Semnalare, 1000 Semnalare→Adaugare, 800 rămas Modificare) — exact regresia pe care corecția (rec_s4b_etapa2.md, punctul 2) o vizează. inainte_de_do_termin()(T4) — întoarce.T., aplică efectiv întvd(800 modificat 4/16, 900 adăugat ca linie nouă 1/50),dummyform.nAdaugaCalls==1,nBaraCalls>=1.oFormArticolerămas.F.(T5) — nicio eroare, gardaVartype(...)=='O'funcționează, REPLACE-ul de bază tot se aplică petvd(4/16) fărătoForm.- Unload/Release (T6) —
propunere_afisatadeschisă înainte, închisă după.Release().
Nicio asercțiune pe coloane de grid, lățimi sau DynamicForeColor — confirmat inutilizabil sub
-A -T (nu a fost nevoie: dialogul se instanțiază fără eroare fatală chiar și fără materializarea
gridului, deci n-a trebuit mutat nimic în harness-ul UI vizibil).
Zgomot de mediu — NU e defect în clasa nouă
La fiecare CreateObject, ON ERROR a prins ~20 erori în cascadă în ACTUALIZEAZA_DREPTURI
(variabile gcAcces, lcProp, lcButoane, lcButon, lnPf negăsite) urmate de
Object GOAPP is not found în _frmbase.Init. Astea vin din codul de bază moștenit
(_frmbase/_baza.vcx, folosit de toate formularele aplicației, nu doar de
frm_sincronizare_articole) — gestionarea drepturilor pe butoane, care citește global gcAcces și
goApp, ambele setate normal la login-ul real în aplicație. Harness-ul acestui test nu face login
(fără Oracle, cum a cerut sarcina), deci aceste globale lipsesc. frm_sincronizare_articole nu
suprascrie ACTUALIZEAZA_DREPTURI — nu are nicio metodă cu acest nume în omodificari.vc2.
ON ERROR înghite fiecare eroare și continuă linie cu linie (comportament VFP normal la eroare
needivizată), iar ConstruiesteEnumerare() din Init rulează după DoDefault() și suprascrie
explicit But_termin1.Enabled — de-aia toate cele 35 de asercțiuni ies corect în ciuda zgomotului.
Nu e raportat ca defect (nu ține de clasa nouă), doar semnalat ca limitare de mediu a harness-ului
fără Oracle.
Ce nu s-a putut testa
Nimic din cele 7 puncte cerute nu a fost blocat. Netestat (în afara scopului acestei sarcini):
comportamentul vizual real al gridului (coloane/culori — cere harness UI vizibil, nu a fost necesar
aici) și .Show() modal (deliberat neatins, ca să nu rămână vreun vfp9.exe blocat pe un dialog
modal fără input real).