* test_s8o_1366_ui.prg - proba empirica S8o: incape stiva "alte date" + banda de totaluri * in frm_facturare_articole2 (COMUN\clase\ofacturare.vc2) la rezolutia minima suportata, * 1366x768, maximizat? Prin analogie cu test_s8_geometrie_ui.prg (nemodificat), dar cu * This.Height calculat pentru un desktop de 768px inaltime, nu masurat pe ecranul real al * masinii de test. * * Inaltimea utila 1366x768 maximizat: nu presupun taskbar=40px si nu insumez SYSMETRIC() * individuale (title bar / border - risc de interpretare gresita a codurilor). Masor direct * pe masina de test overhead-ul real (WindowState=2, This.Height fata de SYSMETRIC(2) - inaltimea * ecranului fizic), presupunand ca overhead-ul (bara de titlu + eventual meniu/toolbar VFP + * taskbar) e in pixeli ficsi, independent de rezolutie, la acelasi DPI: * lnOverhead = SYSMETRIC(2) - This.Height(maximizat real) * This.Height(1366x768) = 768 - lnOverhead * SYSMETRIC(1/2/4/9) sunt logate brut, ca diagnostic, dar NU intra in formula de mai sus. * * Sase pasi (cele 4 stari de casete + decizia 4: acordeoane mutual exclusive sub 1366x768): * (0) ambele inchise; (1) doar Alte date; (2) doar Incasare; (3) deschid Alte date peste * Incasare deschisa - exclusivitatea trebuie sa inchida Incasare (cazul raportat de Marius, * acum reparat); (4) deschid Incasare peste Alte date deschisa - exclusivitate in sens invers; * (5) ca (4), dar cu poDate.lEditare=.T. (editare document existent) - verifica explicit ca * reasezarea (Visible=.F. pe ct_document/ct_contabilitate/ct_livrare) chiar se produce si pe * calea do_comuta_incasare -> actualizeaza_tipincasare(), care iese devreme (Return) cat timp * poDate.lEditare e .T., inainte de a ajunge la Thisform.aseaza_alte_date(). * La fiecare pas 0-4, pe langa cele doua asertiuni din test_s8_geometrie_ui.prg (control.Top >= * grd_factura.Top+Height si, pentru containere vizibile, control.Top+Height <= lb_total_baza.Top), * se adauga o a treia: grd_factura.Height > 60 (gridul nu s-a clampat la minimul tehnic). Pasii * 3-5 mai verifica explicit ca checkbox-ul opus s-a inchis automat (do_comuta_alte_date / * do_comuta_incasare, ofacturare.vc2) SI ca pozitia/vizibilitatea reala s-a actualizat (nu doar * .Value). * Rulare: powershell -ExecutionPolicy Bypass -File test_s8o_1366_ui.ps1 (timeout >= 400s) SET SAFETY OFF SET TALK OFF SET NOTIFY OFF PUBLIC gcUILog, gcSyncDir, gnFail, gnPass, gnAssertFail, gnAssertPass, gnAssertPass2, gnAssertFail2, ; gnAssertPassG, gnAssertFailG gcUILog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s8o_1366_ui_log.txt" gcSyncDir = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\uisync_s8o_1366\" STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog) gnFail = 0 gnPass = 0 gnAssertFail = 0 gnAssertPass = 0 gnAssertPass2 = 0 gnAssertFail2 = 0 gnAssertPassG = 0 gnAssertFailG = 0 ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0 DO AfLog WITH "FAIL: conexiune Oracle esuata" DO Final ENDIF SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\ui_harness.prg" ADDITIVE PUBLIC gcMockUltimMesaj, gnMockUltimTip gcMockUltimMesaj = "" gnMockUltimTip = 0 DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) IF !actualizeaza_optiuni_program() DO AfLog WITH "FAIL: actualizeaza_optiuni_program()" DO Final ENDIF gnScadereStoc = 0 * seriile de facturi (tipdoc 5) sunt pe utilizator in MARIUSM_AUTO gnIdUtil = 8 goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]) * gridextras.vcx e referit din ofacturare.vcx cu cale relativa SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE IF USED('crscursuri') USE IN crscursuri ENDIF CREATE CURSOR crscursuri (curs N(12,4), nume_val C(10), multiplicator N(6)) DO creeaza_facturacrs WITH 'crsfactura' SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE USE IN crsfactura SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE USE IN crsfact_tmp IF !USED('saft_tip_facturi') update_saft_tip_facturi() ENDIF PRIVATE poDate, poGeneratorNumere, loForm poDate = CREATEOBJECT("oDateFactura", 25000, 1) poDate.nIdTipDoc = 5 poDate.totalctva = 1000 DO AfLog WITH "poDate.tip=" + TRANSFORM(poDate.tip) + " poDate.eProforma=" + TRANSFORM(poDate.eProforma) poGeneratorNumere = CREATEOBJECT("oGeneratorNumere") poGeneratorNumere.ResetNumere() poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) loForm = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loForm) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loForm) <> 'O' DO Final ENDIF loForm.WindowType = 0 loForm.Show() * --- masurare inaltime utila reala (maximizare normala pe ecranul masinii de test) --- DO AfLog WITH "=== MASURARE ECRAN REAL ===" DO AfLog WITH "SYSMETRIC(1) latime ecran=" + TRANSFORM(SYSMETRIC(1)) DO AfLog WITH "SYSMETRIC(2) inaltime ecran=" + TRANSFORM(SYSMETRIC(2)) DO AfLog WITH "SYSMETRIC(4) inaltime bara titlu=" + TRANSFORM(SYSMETRIC(4)) DO AfLog WITH "SYSMETRIC(9)=" + TRANSFORM(SYSMETRIC(9)) loForm.WindowState = 2 DOEVENTS FORCE LOCAL lnHMaxReal, lnScreenH, lnOverhead, lnHeight768 lnHMaxReal = loForm.Height lnScreenH = SYSMETRIC(2) lnOverhead = lnScreenH - lnHMaxReal lnHeight768 = 768 - lnOverhead DO AfLog WITH "maximizat real: This.Width=" + TRANSFORM(loForm.Width) + " This.Height=" + TRANSFORM(lnHMaxReal) + " SYSMETRIC(2)=" + TRANSFORM(lnScreenH) DO AfLog WITH "lnOverhead(SYSMETRIC(2)-This.Height maximizat)=" + TRANSFORM(lnOverhead) DO AfLog WITH "lnHeight768(768-lnOverhead)=" + TRANSFORM(lnHeight768) * --- fortez geometria unui formular maximizat pe un desktop de 1366x768 --- loForm.WindowState = 0 DOEVENTS FORCE loForm.Width = 1366 loForm.Height = lnHeight768 DOEVENTS FORCE DO AfLog WITH "dupa setare 1366x768: This.Width=" + TRANSFORM(loForm.Width) + " This.Height=" + TRANSFORM(loForm.Height) * --- pas 0: ambele acordeoane inchise --- DO AfLog WITH "=== PAS 0: ambele inchise (1366x768) ===" DO VerificaGeometrie1366 WITH loForm, "pas0_ambele_inchise_1366" DO HarnessStep WITH 0, 'ambele_inchise', 25 * --- pas 1: doar Alte date deschis --- loForm.chk_alte_date.Value = 1 loForm.do_comuta_alte_date() DOEVENTS FORCE DO AfLog WITH "=== PAS 1: doar Alte date deschis (1366x768) ===" DO VerificaGeometrie1366 WITH loForm, "pas1_alte_date_deschis_1366" DO HarnessStep WITH 1, 'alte_date_deschis', 25 * inchid Alte date la loc, ca pasul 2 sa fie curat "doar incasare" loForm.chk_alte_date.Value = 0 loForm.do_comuta_alte_date() DOEVENTS FORCE * --- pas 2: doar Incasare deschis (aloca o chitanta reala - dezalocata la final) --- loForm.chk_incasare.Value = 1 loForm.do_comuta_incasare() DOEVENTS FORCE DO AfLog WITH "=== PAS 2: doar Incasare deschis (1366x768) ===" DO VerificaGeometrie1366 WITH loForm, "pas2_incasare_deschis_1366" DO HarnessStep WITH 2, 'incasare_deschis', 25 * --- pas 3: deschid Alte date peste Incasare deschisa (cazul raportat de Marius) - decizia 4: * sub pragul de 1366x768, exclusivitatea acordeoanelor trebuie sa inchida Incasare --- loForm.chk_alte_date.Value = 1 loForm.do_comuta_alte_date() DOEVENTS FORCE DO AfLog WITH "=== PAS 3: Alte date peste Incasare - exclusivitate acordeon (1366x768) ===" DO Assert WITH loForm.chk_incasare.Value = 0, "PAS3: chk_incasare s-a inchis automat (exclusivitate acordeon)" DO Assert WITH loForm.chk_alte_date.Value = 1, "PAS3: chk_alte_date a ramas deschis" DO VerificaGeometrie1366 WITH loForm, "pas3_exclusivitate_alte_peste_incasare_1366" DO HarnessStep WITH 3, 'exclusivitate_alte_peste_incasare', 25 * --- pas 4: deschid Incasare peste Alte date deschisa - exclusivitate in sens invers --- loForm.chk_incasare.Value = 1 loForm.do_comuta_incasare() DOEVENTS FORCE DO AfLog WITH "=== PAS 4: Incasare peste Alte date - exclusivitate acordeon, sens invers (1366x768) ===" DO Assert WITH loForm.chk_alte_date.Value = 0, "PAS4: chk_alte_date s-a inchis automat (exclusivitate acordeon)" DO Assert WITH loForm.chk_incasare.Value = 1, "PAS4: chk_incasare a ramas deschis" DO VerificaGeometrie1366 WITH loForm, "pas4_exclusivitate_incasare_peste_alte_1366" DO HarnessStep WITH 4, 'exclusivitate_incasare_peste_alte', 25 * --- pas 5: exclusivitate cu poDate.lEditare = .T. (editare document existent) - verifica ca * reasezarea chiar se face si pe calea do_comuta_incasare -> actualizeaza_tipincasare(), care * iese devreme (Return) cat timp poDate.lEditare e .T., inainte de a ajunge la aseaza_alte_date() --- loForm.chk_incasare.Value = 0 loForm.do_comuta_incasare() loForm.chk_alte_date.Value = 1 loForm.do_comuta_alte_date() DOEVENTS FORCE poDate.lEditare = .T. loForm.chk_incasare.Value = 1 loForm.do_comuta_incasare() DOEVENTS FORCE DO AfLog WITH "=== PAS 5: Incasare peste Alte date, poDate.lEditare=.T. (1366x768) ===" DO Assert WITH loForm.chk_alte_date.Value = 0, "PAS5: chk_alte_date s-a inchis automat (exclusivitate acordeon, lEditare)" DO Assert WITH loForm.chk_incasare.Value = 1, "PAS5: chk_incasare a ramas deschis" DO Assert WITH !loForm.ct_document.Visible, "PAS5: ct_document s-a reasezat (invizibil) desi actualizeaza_tipincasare() a iesit devreme" DO Assert WITH !loForm.ct_contabilitate.Visible, "PAS5: ct_contabilitate s-a reasezat (invizibil)" DO Assert WITH !loForm.ct_livrare.Visible, "PAS5: ct_livrare s-a reasezat (invizibil)" poDate.lEditare = .F. DO HarnessStep WITH 5, 'exclusivitate_lEditare', 25 * curatenie obligatorie: inchid ambele, dezaloc chitanta alocata la pasul 2, inainte de Release() loForm.chk_alte_date.Value = 0 loForm.do_comuta_alte_date() loForm.chk_incasare.Value = 0 loForm.do_comuta_incasare() loForm.Release() RELEASE loForm DO AfLog WITH "TOTAL asertiuni grid (control.Top>=grid.Bottom): pass=" + TRANSFORM(gnAssertPass) + " fail=" + TRANSFORM(gnAssertFail) DO AfLog WITH "TOTAL asertiuni totaluri (container.Bottom<=lb_total_baza.Top): pass=" + TRANSFORM(gnAssertPass2) + " fail=" + TRANSFORM(gnAssertFail2) DO AfLog WITH "TOTAL asertiuni grid.Height>60 (neclampat): pass=" + TRANSFORM(gnAssertPassG) + " fail=" + TRANSFORM(gnAssertFailG) DO Final *---------------------------------------------------------------------------------------- PROCEDURE VerificaGeometrie1366 * Logheaza si verifica geometria la 1366x768 maximizat: grid, banda de sub grila, banda * de totaluri, plus asertiunea noua grd_factura.Height > 60 (gridul nu s-a clampat). LPARAMETERS toForm, tcEticheta LOCAL lnGTop, lnGHeight, lnGBottom, llClampat lnGTop = toForm.grd_factura.Top lnGHeight = toForm.grd_factura.Height lnGBottom = lnGTop + lnGHeight llClampat = (lnGHeight <= 60) DO AfLog WITH "GRID [" + tcEticheta + "] Top=" + TRANSFORM(lnGTop) + " Height=" + TRANSFORM(lnGHeight) + " Bottom=" + TRANSFORM(lnGBottom) + " " + IIF(llClampat, "CLAMPAT(<=60)", "neclampat") DO VerificaControl WITH toForm.chk_incasare, "chk_incasare", tcEticheta, lnGBottom DO VerificaControl WITH toForm.chk_alte_date, "chk_alte_date", tcEticheta, lnGBottom DO VerificaControl WITH toForm.ct_document, "ct_document", tcEticheta, lnGBottom DO VerificaControl WITH toForm.ct_contabilitate, "ct_contabilitate", tcEticheta, lnGBottom DO VerificaControl WITH toForm.ct_livrare, "ct_livrare", tcEticheta, lnGBottom DO VerificaControl WITH toForm.ct_incasare, "ct_incasare", tcEticheta, lnGBottom LOCAL lnFormHeight, lnBanda, lnTotalTop lnFormHeight = toForm.Height lnBanda = lnFormHeight - 103 lnTotalTop = toForm.lb_total_baza.Top DO AfLog WITH "S8O [" + tcEticheta + "] This.Height=" + TRANSFORM(lnFormHeight) + " lnBanda(Height-103)=" + TRANSFORM(lnBanda) + " lb_total_baza.Top=" + TRANSFORM(lnTotalTop) + " chk_incasare.Top=" + TRANSFORM(toForm.chk_incasare.Top) + " chk_alte_date.Top=" + TRANSFORM(toForm.chk_alte_date.Top) DO VerificaTotaluri WITH toForm.ct_document, "ct_document", tcEticheta, lnTotalTop DO VerificaTotaluri WITH toForm.ct_contabilitate, "ct_contabilitate", tcEticheta, lnTotalTop DO VerificaTotaluri WITH toForm.ct_livrare, "ct_livrare", tcEticheta, lnTotalTop DO VerificaTotaluri WITH toForm.ct_incasare, "ct_incasare", tcEticheta, lnTotalTop IF !llClampat gnAssertPassG = gnAssertPassG + 1 ELSE gnAssertFailG = gnAssertFailG + 1 ENDIF DO AfLog WITH IIF(!llClampat, "GRIDMIN-PASS", "GRIDMIN-FAIL") + " [" + tcEticheta + "] grd_factura.Height=" + TRANSFORM(lnGHeight) + " (asteptat > 60)" ENDPROC PROCEDURE VerificaTotaluri * Asertiune control.Top+control.Height <= lb_total_baza.Top, DOAR pentru controale vizibile. LPARAMETERS toCtrl, tcNume, tcEticheta, tnTotalTop LOCAL lnTop, lnHeight, lnBottom, llVis, llOk lnTop = toCtrl.Top lnHeight = toCtrl.Height lnBottom = lnTop + lnHeight llVis = IIF(TYPE('toCtrl.Visible') = 'L', toCtrl.Visible, .T.) IF !llVis DO AfLog WITH "TOTALURI-SKIP [" + tcEticheta + "] " + tcNume + " invizibil, Bottom=" + TRANSFORM(lnBottom) + " (neasertat)" RETURN ENDIF llOk = (lnBottom <= tnTotalTop) IF llOk gnAssertPass2 = gnAssertPass2 + 1 ELSE gnAssertFail2 = gnAssertFail2 + 1 ENDIF DO AfLog WITH IIF(llOk, "TOTALURI-PASS", "TOTALURI-FAIL") + " [" + tcEticheta + "] " + tcNume + ".Top=" + TRANSFORM(lnTop) + " Height=" + TRANSFORM(lnHeight) + " Visible=" + TRANSFORM(llVis) + " Bottom=" + TRANSFORM(lnBottom) + " lb_total_baza.Top=" + TRANSFORM(tnTotalTop) + " marja=" + TRANSFORM(tnTotalTop - lnBottom) ENDPROC PROCEDURE VerificaControl LPARAMETERS toCtrl, tcNume, tcEticheta, tnGBottom LOCAL lnTop, lnHeight, llVis, llOk lnTop = toCtrl.Top lnHeight = toCtrl.Height llVis = IIF(TYPE('toCtrl.Visible') = 'L', toCtrl.Visible, .T.) llOk = (lnTop >= tnGBottom) IF llOk gnAssertPass = gnAssertPass + 1 ELSE gnAssertFail = gnAssertFail + 1 ENDIF DO AfLog WITH IIF(llOk, "ASSERT-PASS", "ASSERT-FAIL") + " [" + tcEticheta + "] " + tcNume + ".Top=" + TRANSFORM(lnTop) + " Height=" + TRANSFORM(lnHeight) + " Visible=" + TRANSFORM(llVis) + " (grid.Bottom=" + TRANSFORM(tnGBottom) + ", delta=" + TRANSFORM(lnTop - tnGBottom) + ")" ENDPROC PROCEDURE Assert LPARAMETERS tlCond, tcMsg IF tlCond gnPass = gnPass + 1 DO AfLog WITH "PASS: " + tcMsg ELSE gnFail = gnFail + 1 DO AfLog WITH "FAIL: " + tcMsg ENDIF ENDPROC PROCEDURE AfLog LPARAMETERS tcMsg STRTOFILE(tcMsg + CHR(13) + CHR(10), gcUILog, 1) ENDPROC PROCEDURE AfErr LPARAMETERS tnErr, tcMsg, tcProg, tnLine gnFail = gnFail + 1 DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg ENDPROC PROCEDURE Final DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) DO AfLog WITH "END " + TTOC(DATETIME()) DO HarnessDone WITH 'done' QUIT ENDPROC