sync SVN r18224

This commit is contained in:
2026-09-29 16:36:55 +03:00
parent ca8e7ca694
commit 1ae4086ee6
14 changed files with 1092 additions and 9 deletions

View File

@@ -647,6 +647,67 @@ select id from (select id, decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) -
DO TVerdict WITH .F., 'T EXCEPTIE la garzile ActualizeazaRandImportat', loErrT.Message
ENDTRY
* ---------- U: achizitie - linie negativa DISCOUNT/REDUCER primeste 767; linie negativa fara acel cuvant si vanzarea raman neschimbate ----------
TRY
SELECT crsFacturi
APPEND BLANK
REPLACE id WITH -205, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 0, motiv_lot WITH '', de_completat WITH '', ;
numar_act WITH 'ZZT-U1-C', xfurnizor WITH 'TEST U FURNIZOR', cod_fiscal WITH 'RO9992000001', ;
completat WITH 0, completatdet WITH 0, total_cu_tva WITH 0 IN crsFacturi
lnRecnoU1 = RECNO('crsFacturi')
SELECT crsDetaliiFacturi
SET FILTER TO id_efactura = -205
APPEND BLANK
REPLACE id_efactura WITH -205, nr WITH 1, articol WITH 'DISCOUNT 5%', cont WITH '', valoarefaratva WITH -100, in_stoc WITH 0 IN crsDetaliiFacturi
APPEND BLANK
REPLACE id_efactura WITH -205, nr WITH 2, articol WITH 'CAPAC GRATAR RETUR', cont WITH '', valoarefaratva WITH -50, in_stoc WITH 0 IN crsDetaliiFacturi
SELECT crsDetaliiFacturi
SET FILTER TO
loFormB.lPrimite = .T.
SELECT crsFacturi
GO m.lnRecnoU1
loFormB.completeazadetaliifactura()
SELECT crsDetaliiFacturi
LOCATE FOR id_efactura = -205 AND nr = 1
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) == '767', 'U1 achizitie: linie negativa DISCOUNT primeste 767', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + ']'
LOCATE FOR id_efactura = -205 AND nr = 2
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) != '767', 'U2 achizitie: linie negativa fara DISCOUNT/REDUCER nu primeste 767', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + ']'
SET FILTER TO
SELECT crsFacturi
APPEND BLANK
REPLACE id WITH -206, id_fact WITH 0, eligibil_lot WITH 1, ales WITH 0, motiv_lot WITH '', de_completat WITH '', ;
numar_act WITH 'ZZT-U3-V', xclient WITH 'TEST U CLIENT', cod_fiscal WITH 'RO9992000001', ;
completat WITH 0, completatdet WITH 0, total_cu_tva WITH 0 IN crsFacturi
lnRecnoU2 = RECNO('crsFacturi')
SELECT crsDetaliiFacturi
SET FILTER TO id_efactura = -206
APPEND BLANK
REPLACE id_efactura WITH -206, nr WITH 1, articol WITH 'DISCOUNT 5%', cont WITH '', valoarefaratva WITH -100, in_stoc WITH 0 IN crsDetaliiFacturi
SELECT crsDetaliiFacturi
SET FILTER TO
loFormB.lPrimite = .F.
SELECT crsFacturi
GO m.lnRecnoU2
loFormB.completeazadetaliifactura()
SELECT crsDetaliiFacturi
LOCATE FOR id_efactura = -206 AND nr = 1
DO TVerdict WITH ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) != '767', 'U3 vanzare: linie negativa DISCOUNT nu primeste 767 (ramane neschimbata)', '[' + ALLTRIM(NVL(crsDetaliiFacturi.cont,'')) + ']'
SET FILTER TO
loFormB.lPrimite = .T.
CATCH TO loErrU
loFormB.lPrimite = .T.
DO TLog WITH 'EXCEPTIE U (discount 767 la achizitie): ' + loErrU.Message + ' | ' + loErrU.Procedure + ' linia ' + TRANSFORM(loErrU.LineNo)
DO TVerdict WITH .F., 'U EXCEPTIE la testul discount 767', loErrU.Message
ENDTRY
loFormB.Release()
ENDIF

View File

@@ -128,13 +128,17 @@ TRY
LOCATE FOR id = 5
DO PrTest WITH 'randul 5 (numar fara cifre) BLOCAT', eligibil_lot = 0 AND ales = 0 AND 'numarul documentului' $ motiv_lot
DO PrLogLocal WITH '=== NrActDinNumarAct: primul grup de cifre de la dreapta ==='
DO PrLogLocal WITH '=== NrActDinNumarAct: primul grup de cifre de la dreapta, ultimele 12 ==='
DO PrTest WITH 'ZZT-A1-C -> 1', loCoada.NrActDinNumarAct('ZZT-A1-C') = 1
DO PrTest WITH 'ZZT-A10-C -> 10', loCoada.NrActDinNumarAct('ZZT-A10-C') = 10
DO PrTest WITH 'F1234 -> 1234 (neschimbat fata de regula veche)', loCoada.NrActDinNumarAct('F1234') = 1234
DO PrTest WITH '2026-000123 -> 123 (neschimbat)', loCoada.NrActDinNumarAct('2026-000123') = 123
DO PrTest WITH 'FACTURA (fara cifre) -> 0', loCoada.NrActDinNumarAct('FACTURA') = 0
DO PrTest WITH 'gol -> 0', loCoada.NrActDinNumarAct('') = 0
DO PrTest WITH 'RO20709900053983 -> 709900053983 (14 cifre, ultimele 12)', loCoada.NrActDinNumarAct('RO20709900053983') = 709900053983
DO PrTest WITH '017524993734246 -> 524993734246 (15 cifre, ultimele 12)', loCoada.NrActDinNumarAct('017524993734246') = 524993734246
DO PrTest WITH '1021024019453 -> 21024019453 (13 cifre, ultimele 12, zeroul din fata cade)', loCoada.NrActDinNumarAct('1021024019453') = 21024019453
DO PrTest WITH '259105268697 -> 259105268697 (12 cifre, neschimbat)', loCoada.NrActDinNumarAct('259105268697') = 259105268697
USE IN crsFactTest

View File

@@ -0,0 +1,327 @@
* test_splitter_ef.prg
* Splitter sub grila de facturi la importul eFactura (frm_import_efactura, COMUN\clase\anaf_efactura.vc2):
* Sfsplitterv1 = sfsplitterv_panou (sfsplitter.vcx), T7 tragere simulata cu MouseMove.
* Sfsplitterv1 intre grdFacturi si _shape3, pozitia salvata in settings.ini [efactura] import_splitter_top.
* T1 fara cheie in ini: layout de design neschimbat. T2 MoveSplitterToPosition muta panoul si grila de
* linii, fara sa schimbe marginea de jos a grilei de linii. T3 clamp la limitele 100px/60px. T4 persistenta
* (Destroy scrie doar daca s-a schimbat, Show restaureaza, forma neschimbata nu rescrie fisierul). T5
* compatibilitate cu pozitioneazalistasubimport() dupa mutare. T6 calea REALA a meniului
* (CREATEOBJECT + Show(1) modal, ca in import_efactura.prg) - la deschidere, restaurarea rula in Show()
* inainte ca maximizarea sa aduca grdDetaliiFacturi la inaltimea reala, deci clamp-ul MoveSplitterToPosition
* o taia prematur; muta acum in Resize (o singura data, dupa maximizare).
* gcGeneralIniFile redirectat pe un .ini temporar - nu atinge settings.ini real.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef.prg"
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gnPass, gnFail, gcTempIni
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt"
gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_temp.ini"
gnPass = 0
gnFail = 0
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
QUIT
ENDIF
SET PROCEDURE TO import_efactura.prg ADDITIVE
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE
gcGeneralIniFile = m.gcTempIni
DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gcGeneralIniFile=' + m.gcGeneralIniFile
*-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din test_pozitie_lista_ef.prg
TEXT TO lcSchemaFacturi NOSHOW
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null, explicatia4ROA V(100) null, explicatia5ROA V(100) null, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(80), gest c(1), part_inactiv N(1)
ENDTEXT
IF USED('crsFacturi')
USE IN crsFacturi
ENDIF
CREATE CURSOR crsFacturi (&lcSchemaFacturi)
INSERT INTO crsFacturi (ales, id, id_fact, data_act, numar_act, xfurnizor, partener, cod_fiscal, ;
total_cu_tva, nume_valuta, procesat, completat, completatdet, creditnote, detalii, ;
eligibil_lot, motiv_lot, eroare_lot, de_completat, gest) ;
VALUES (0, 1, 0, DATE(), 'TEST-SPL-1', 'FIXTURA SPLITTER 1', 'FIXTURA SPLITTER 1', 'RO99970001', ;
100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '')
TEXT TO lcSchemaDetalii NOSHOW
distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6), explicatia V(100), explicatia4 V(100), explicatia5 V(100)
ENDTEXT
IF USED('crsDetaliiFacturi')
USE IN crsDetaliiFacturi
ENDIF
CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii)
* rand mut pe id_efactura=1, ca actualizeaza_grid2 sa gaseasca detaliile deja in cursor (fara poFacturiDetalii/Oracle)
INSERT INTO crsDetaliiFacturi (id, id_efactura, nr, articol) VALUES (100, 1, 1, 'FIXTURA')
CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
SELECT cTipArticoleP
GO TOP IN cTipArticoleP
INDEX ON ordine TAG ordine
CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
SELECT cTipArticoleE
GO TOP IN cTipArticoleE
INDEX ON ordine TAG ordine
SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip
SELECT cTip
INDEX ON id TAG id
goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + ALLTRIM(STR(m.gnIdUtil)), 'cGestiuni')
SELECT cGestiuni
APPEND BLANK
INDEX ON id_gestiune TAG id_gest
SELECT CAST(ALLTRIM(nume_gestiune) + '-' + ALLTRIM(NVL(cgest, '')) AS V(50)) AS nume_gestiune, id_gestiune FROM cGestiuni ORDER BY nume_gestiune INTO CURSOR cGestiuni2
goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO')
SELECT cUMISO
INDEX ON cod_um_iso TAG cod_um_iso
goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
SELECT cUM
INDEX ON id TAG id
LOCAL loForm, lnTopInitial, lnTopMutat
SELECT crsFacturi
GO TOP
*=== T1: fara cheie in ini -> layout de design neschimbat dupa Show ===
loForm = CREATEOBJECT('frm_import_efactura', .T.)
loForm.WindowType = 0
DO PrTest WITH 'formular instantiat', TYPE('loForm') == 'O'
loForm.Show()
lnTopInitial = loForm.Sfsplitterv1.Top
DO PrTest WITH 'T1 grdFacturi.Height = 292 (design)', loForm.grdFacturi.Height = 292, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
DO PrTest WITH 'T1 _shape3.Top = 369 (design)', loForm._shape3.Top = 369, 'obtinut=' + TRANSFORM(loForm._shape3.Top)
DO PrTest WITH 'T1 splitter.Top = 364 (design)', lnTopInitial = 364, 'obtinut=' + TRANSFORM(lnTopInitial)
*=== T2: MoveSplitterToPosition(Top+100) -> muta panoul, pastreaza marginea de jos a grilei de linii ===
LOCAL lnShapeTop0, lnPartTop0, lnDetTop0, lnDetBottom0
lnShapeTop0 = loForm._shape3.Top
lnPartTop0 = loForm.txtPartener.Top
lnDetTop0 = loForm.grdDetaliiFacturi.Top
lnDetBottom0 = lnDetTop0 + loForm.grdDetaliiFacturi.Height
loForm.Sfsplitterv1.MoveSplitterToPosition(lnTopInitial + 100)
DO PrTest WITH 'T2 grdFacturi.Height +100', loForm.grdFacturi.Height = 392, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
DO PrTest WITH 'T2 _shape3.Top +100', loForm._shape3.Top = lnShapeTop0 + 100, 'obtinut=' + TRANSFORM(loForm._shape3.Top)
DO PrTest WITH 'T2 txtPartener.Top +100', loForm.txtPartener.Top = lnPartTop0 + 100, 'obtinut=' + TRANSFORM(loForm.txtPartener.Top)
DO PrTest WITH 'T2 grdDetaliiFacturi.Top +100', loForm.grdDetaliiFacturi.Top = lnDetTop0 + 100, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top)
DO PrTest WITH 'T2 marginea de jos a grdDetaliiFacturi neschimbata', loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height = lnDetBottom0, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height)
*=== T7: tragere simulata cu MouseMove (coordonate relative la forma, ca in VFP), fara sa atinga Anchor ===
LOCAL lnAnchorSpl, lnTopSpl
lnAnchorSpl = loForm.Sfsplitterv1.Anchor
lnTopSpl = loForm.Sfsplitterv1.Top
loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl - 30)
DO PrTest WITH 'T7 MouseMove sus 30: splitter.Top -30', loForm.Sfsplitterv1.Top = m.lnTopSpl - 30, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top)
DO PrTest WITH 'T7 grdFacturi.Height -30', loForm.grdFacturi.Height = 362, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl)
DO PrTest WITH 'T7 MouseMove jos 30: revine', loForm.Sfsplitterv1.Top = m.lnTopSpl, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top)
DO PrTest WITH 'T7 Anchor splitter neschimbat', loForm.Sfsplitterv1.Anchor = m.lnAnchorSpl
DO PrTest WITH 'T7 subclasa sfsplitterv_panou, nu override pe forma', LOWER(loForm.Sfsplitterv1.Class) == 'sfsplitterv_panou' AND !PEMSTATUS(loForm, 'lSplitterRestaurat', 5)
*=== T3: clamp la limite ===
loForm.Sfsplitterv1.MoveSplitterToPosition(9999)
DO PrTest WITH 'T3 clamp sus: grdDetaliiFacturi.Height = 60', loForm.grdDetaliiFacturi.Height = 60, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Height)
loForm.Sfsplitterv1.MoveSplitterToPosition(0)
DO PrTest WITH 'T3 clamp jos: grdFacturi.Height = 100', loForm.grdFacturi.Height = 100, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
*=== T5: pozitioneazalistasubimport() dupa mutare -> grdFacturi.Height revine la valoarea mutata ===
LOCAL lnHeightMutat
lnHeightMutat = loForm.grdFacturi.Height
loForm.pozitioneazalistasubimport()
DO PrTest WITH 'T5 grdFacturi.Height revine la valoarea mutata', loForm.grdFacturi.Height = lnHeightMutat, 'asteptat=' + TRANSFORM(lnHeightMutat) + ' obtinut=' + TRANSFORM(loForm.grdFacturi.Height)
*=== T4: persistenta ===
lnTopMutat = loForm.Sfsplitterv1.Top
loForm.Release()
DO PrTest WITH 'T4 fisierul ini a fost creat la Release (pozitie schimbata)', FILE(gcTempIni)
LOCAL lnCitit
lnCitit = VAL(NVL(getini(m.gcTempIni, 'efactura', 'import_splitter_top'), ''))
DO PrTest WITH 'T4 cheia import_splitter_top scrisa cu pozitia mutata', m.lnCitit = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' citit=' + TRANSFORM(lnCitit)
SELECT crsFacturi
GO TOP
LOCAL loForm2
loForm2 = CREATEOBJECT('frm_import_efactura', .T.)
loForm2.WindowType = 0
loForm2.Show()
DO PrTest WITH 'T4 forma noua reia pozitia salvata', loForm2.Sfsplitterv1.Top = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' obtinut=' + TRANSFORM(loForm2.Sfsplitterv1.Top)
LOCAL lcIniDupaRestaurare
lcIniDupaRestaurare = FILETOSTR(m.gcTempIni)
loForm2.Release()
DO PrTest WITH 'T4 forma deschisa/inchisa fara mutare nu rescrie ini-ul', FILETOSTR(m.gcTempIni) == m.lcIniDupaRestaurare
*=== T6: calea reala (CREATEOBJECT + Show(1) modal) - pica pe codul vechi (clamp calculat pe inaltimea dinainte de maximizare) ===
LOCAL lnPozT6
lnPozT6 = 480
=setini(m.gcTempIni, "efactura", "import_splitter_top", TRANSFORM(m.lnPozT6))
PUBLIC goFormT6, gnPozCapturataT6
gnPozCapturataT6 = -1
SELECT crsFacturi
GO TOP
goFormT6 = CREATEOBJECT('frm_import_efactura', .T.)
LOCAL loTmrT6
loTmrT6 = CREATEOBJECT('tmrCaptureazaT6')
loTmrT6.Enabled = .T.
goFormT6.Show(1)
DO PrTest WITH 'T6 calea reala: Sfsplitterv1.Top restaurat dupa Show(1) modal', gnPozCapturataT6 = m.lnPozT6, 'asteptat=' + TRANSFORM(lnPozT6) + ' obtinut=' + TRANSFORM(gnPozCapturataT6)
RELEASE goFormT6, gnPozCapturataT6
*=== T8: dupa deschiderea maximizata cu pozitie salvata, grila de sus ajunge exact la splitter; mutare in sus pana aproape de minim nu da eroare ===
=setini(m.gcTempIni, "efactura", "import_splitter_top", "670")
PUBLIC goFormT8, gcRezT8
gcRezT8 = ""
SELECT crsFacturi
GO TOP
goFormT8 = CREATEOBJECT("frm_import_efactura", .T.)
LOCAL loTmrT8
loTmrT8 = CREATEOBJECT("tmrCaptureazaT8")
loTmrT8.Enabled = .T.
goFormT8.Show(1)
DO PrLogLocal WITH " T8 geometrie: " + gcRezT8
DO PrTest WITH "T8 grdFacturi.Top+Height = Sfsplitterv1.Top", LEFT(gcRezT8, 6) == "GAP=0 ", gcRezT8
DO PrTest WITH "T8 mutare in sus pana aproape de minim fara eroare", "ERR=0" $ gcRezT8, gcRezT8
RELEASE goFormT8, gcRezT8
IF USED('crsFacturi')
USE IN crsFacturi
ENDIF
IF USED('crsDetaliiFacturi')
USE IN crsDetaliiFacturi
ENDIF
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
DO PrTest WITH 'cleanup: crsFacturi/crsDetaliiFacturi inchise, ini temporar sters', !USED('crsFacturi') AND !USED('crsDetaliiFacturi') AND !FILE(gcTempIni)
LOCAL loFH, lnCol0, lnSty0
loFH = CREATEOBJECT('Form')
loFH.NewObject('splH', 'sfsplitterv_panou', 'D:\ROA\ROACONT\COMUN\clase\sfsplitter.vcx')
lnCol0 = loFH.splH.BackColor
lnSty0 = loFH.splH.BackStyle
DO PrTest WITH 'T9 stare initiala 200,215,230 si BackStyle 1', lnCol0 = RGB(200,215,230) AND lnSty0 = 1
loFH.splH.MouseEnter()
DO PrTest WITH 'T9 MouseEnter: BackColor albastru, BackStyle 1', loFH.splH.BackColor = RGB(0,120,215) AND loFH.splH.BackStyle = 1
loFH.splH.MouseLeave()
DO PrTest WITH 'T9 MouseLeave: valorile initiale', loFH.splH.BackColor = lnCol0 AND loFH.splH.BackStyle = lnSty0
loFH.Release()
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
CATCH TO loEx
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
TRY
IF USED('crsFacturi')
USE IN crsFacturi
ENDIF
IF USED('crsDetaliiFacturi')
USE IN crsDetaliiFacturi
ENDIF
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
CATCH
ENDTRY
ENDTRY
QUIT
**********************************************************
PROCEDURE PrTest
LPARAMETERS tcEticheta, tlOk, tcDetalii
IF tlOk
gnPass = gnPass + 1
ELSE
gnFail = gnFail + 1
ENDIF
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')')
ENDPROC
**********************************************************
PROCEDURE PrLogLocal
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
ENDPROC
**********************************************************
* mock_amessagebox.prg cere HarnessLog (definit normal in ui_harness.prg, neincarcat aici)
PROCEDURE HarnessLog
LPARAMETERS tcMsg
DO PrLogLocal WITH tcMsg
ENDPROC
**********************************************************
PROCEDURE PrErrLocal
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC
**********************************************************
* T6: goFormT6.Show(1) e modal (blocheaza pana la Release) - captureaza Sfsplitterv1.Top dupa
* ce maximizarea reala s-a aplicat, apoi inchide forma ca testul sa poata continua.
DEFINE CLASS tmrCaptureazaT6 AS Timer
Interval = 300
Enabled = .F.
PROCEDURE Timer
This.Enabled = .F.
IF TYPE('goFormT6') = 'O'
gnPozCapturataT6 = goFormT6.Sfsplitterv1.Top
goFormT6.Release()
ENDIF
ENDPROC
ENDDEFINE
**********************************************************
* T8: captureaza geometria dupa maximizare si incearca o mutare in sus (MouseMove) pana aproape de minim
DEFINE CLASS tmrCaptureazaT8 AS Timer
Interval = 300
Enabled = .F.
PROCEDURE Timer
This.Enabled = .F.
LOCAL lnErr, lnGap, lnTop
IF TYPE('goFormT8') = 'O'
WITH goFormT8
lnGap = .Sfsplitterv1.Top - (.grdFacturi.Top + .grdFacturi.Height)
gcRezT8 = "GAP=" + TRANSFORM(lnGap) + " grdF.Top=" + TRANSFORM(.grdFacturi.Top) + " grdF.H=" + TRANSFORM(.grdFacturi.Height) + ;
" spl.Top=" + TRANSFORM(.Sfsplitterv1.Top) + " det.Top=" + TRANSFORM(.grdDetaliiFacturi.Top) + " det.H=" + TRANSFORM(.grdDetaliiFacturi.Height) + " "
lnErr = 0
TRY
lnTop = .grdFacturi.Top + 100 + 5
.Sfsplitterv1.MouseMove(1, 0, 50, lnTop)
CATCH
lnErr = 1
ENDTRY
gcRezT8 = gcRezT8 + "ERR=" + TRANSFORM(lnErr) + " spl.Top dupa=" + TRANSFORM(.Sfsplitterv1.Top) + " grdF.H dupa=" + TRANSFORM(.grdFacturi.Height)
.Release()
ENDWITH
ENDIF
ENDPROC
ENDDEFINE

View File

@@ -0,0 +1,186 @@
* test_splitter_h.prg
* sfsplitterh_panou (sfsplitter.vcx), splitter orizontal (vertical ca linie) intre Object1 (stanga) si Object2 (dreapta).
* Forma sintetica fara DB: edtStanga (Left < splitter, neatins), edt1 = Object1, spl, edt2 = Object2, edtDreapta (Left >= marginea dreapta a splitterului).
* T1 MoveSplitterToPosition(+delta): splitter, Object1.Width, Object2.Left cu marginea dreapta neschimbata, control din dreapta mutat, cel din stanga neatins.
* T2 clamp la nObject1MinSize / nObject2MinSize. T3 Save/RestorePosition prin .ini temporar (gcGeneralIniFile).
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h.prg"
* Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h_log.txt
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
CLOSE DATABASES
PUBLIC gcUILog, gnPass, gnFail, gcTempIni, gcGeneralIniFile
gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h_log.txt"
gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_h_temp.ini"
gnPass = 0
gnFail = 0
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\programe\ini.prg' ADDITIVE
SET CLASSLIB TO 'D:\ROA\ROACONT\COMUN\clase\sfsplitter.vcx' ADDITIVE
gcGeneralIniFile = m.gcTempIni
LOCAL loF, loF2, lnLeft0, lnDreaptaMargine0, lnRight0, lnStang0, lnW10, lnPoz
*=== T1: MoveSplitterToPosition(+40) ===
loF = PrMkForm()
DO PrTest WITH 'formular instantiat, clasa sfsplitterh_panou', TYPE('loF') == 'O' AND LOWER(loF.spl.Class) == 'sfsplitterh_panou'
lnLeft0 = loF.spl.Left
lnW10 = loF.edt1.Width
lnDreaptaMargine0 = loF.edt2.Left + loF.edt2.Width
lnRight0 = loF.edtDreapta.Left
lnStang0 = loF.edtStanga.Left
loF.spl.MoveSplitterToPosition(lnLeft0 + 40)
DO PrTest WITH 'T1 splitter.Left +40', loF.spl.Left = lnLeft0 + 40, 'obtinut=' + TRANSFORM(loF.spl.Left)
DO PrTest WITH 'T1 Object1.Width +40', loF.edt1.Width = lnW10 + 40, 'obtinut=' + TRANSFORM(loF.edt1.Width)
DO PrTest WITH 'T1 Object1.Left neschimbat', loF.edt1.Left = 100, 'obtinut=' + TRANSFORM(loF.edt1.Left)
DO PrTest WITH 'T1 Object2.Left +40', loF.edt2.Left = 405 + 40, 'obtinut=' + TRANSFORM(loF.edt2.Left)
DO PrTest WITH 'T1 marginea dreapta Object2 neschimbata', loF.edt2.Left + loF.edt2.Width = lnDreaptaMargine0, 'obtinut=' + TRANSFORM(loF.edt2.Left + loF.edt2.Width)
DO PrTest WITH 'T1 control din dreapta mutat +40', loF.edtDreapta.Left = lnRight0 + 40, 'obtinut=' + TRANSFORM(loF.edtDreapta.Left)
DO PrTest WITH 'T1 control din stanga neatins', loF.edtStanga.Left = lnStang0, 'obtinut=' + TRANSFORM(loF.edtStanga.Left)
DO PrTest WITH 'T1 Anchor-urile restaurate', loF.edt2.Anchor = 13 AND loF.edtDreapta.Anchor = 13 AND loF.spl.Anchor = 13, ;
'edt2=' + TRANSFORM(loF.edt2.Anchor) + ' dreapta=' + TRANSFORM(loF.edtDreapta.Anchor) + ' spl=' + TRANSFORM(loF.spl.Anchor)
*=== T1b: mutare inapoi (-40) readuce layout-ul ===
loF.spl.MoveSplitterToPosition(lnLeft0)
DO PrTest WITH 'T1b revenire: splitter, Object1.Width, Object2.Left', loF.spl.Left = lnLeft0 AND loF.edt1.Width = lnW10 AND loF.edt2.Left = 405
*=== T2: clamp ===
loF.spl.MoveSplitterToPosition(9999)
DO PrTest WITH 'T2 clamp dreapta: Object2.Width = nObject2MinSize', loF.edt2.Width = loF.spl.nObject2MinSize, 'obtinut=' + TRANSFORM(loF.edt2.Width)
DO PrTest WITH 'T2 clamp dreapta: marginea Object2 neschimbata', loF.edt2.Left + loF.edt2.Width = lnDreaptaMargine0
loF.spl.MoveSplitterToPosition(0)
DO PrTest WITH 'T2 clamp stanga: Object1.Width = nObject1MinSize', loF.edt1.Width = loF.spl.nObject1MinSize, 'obtinut=' + TRANSFORM(loF.edt1.Width)
*=== T4: Resize pe Object1 il realiniaza la splitter
loF.spl.RestorePosition()
loF.edt1.Width = 30
DO PrTest WITH 'T4 Resize Object1 -> lipit de splitter', loF.edt1.Left + loF.edt1.Width = loF.spl.Left, 'obtinut=' + TRANSFORM(loF.edt1.Left + loF.edt1.Width) + ' spl=' + TRANSFORM(loF.spl.Left)
loF.Release()
*=== T3: persistenta ===
loF = PrMkForm()
loF.spl.cIniSectiune = 'test'
loF.spl.cIniCheie = 'poz'
loF.spl.SavePosition()
DO PrTest WITH 'T3 SavePosition inainte de RestorePosition nu scrie', !FILE(gcTempIni)
loF.spl.RestorePosition()
DO PrTest WITH 'T3 fara cheie in ini: pozitia de design neschimbata', loF.spl.Left = 400 AND loF.spl.lRestaurat, 'obtinut=' + TRANSFORM(loF.spl.Left)
loF.spl.SavePosition()
DO PrTest WITH 'T3 forma nemutata nu scrie in ini', !FILE(gcTempIni)
loF.spl.MoveSplitterToPosition(loF.spl.Left + 40)
loF.spl.SavePosition()
lnPoz = VAL(NVL(getini(gcTempIni, 'test', 'poz'), ''))
DO PrTest WITH 'T3 dupa mutare SavePosition scrie 440', lnPoz = 440, 'obtinut=' + TRANSFORM(lnPoz)
loF.Release()
loF2 = PrMkForm()
loF2.spl.cIniSectiune = 'test'
loF2.spl.cIniCheie = 'poz'
loF2.spl.RestorePosition()
DO PrTest WITH 'T3 forma noua restaureaza 440', loF2.spl.Left = 440, 'obtinut=' + TRANSFORM(loF2.spl.Left)
DO PrTest WITH 'T3 Object1.Width si Object2.Left urmeaza', loF2.edt1.Width = 340 AND loF2.edt2.Left = 445
DELETE FILE (gcTempIni)
loF2.spl.SavePosition()
DO PrTest WITH 'T3 forma restaurata si nemutata nu rescrie ini', !FILE(gcTempIni)
loF2.Release()
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
LOCAL loFH, lnCol0, lnSty0
loFH = CREATEOBJECT('Form')
loFH.AddObject('splH', 'sfsplitterh_panou')
lnCol0 = loFH.splH.BackColor
lnSty0 = loFH.splH.BackStyle
DO PrTest WITH 'T9 stare initiala 200,215,230 si BackStyle 1', lnCol0 = RGB(200,215,230) AND lnSty0 = 1
loFH.splH.MouseEnter()
DO PrTest WITH 'T9 MouseEnter: BackColor albastru, BackStyle 1', loFH.splH.BackColor = RGB(0,120,215) AND loFH.splH.BackStyle = 1
loFH.splH.MouseLeave()
DO PrTest WITH 'T9 MouseLeave: valorile initiale', loFH.splH.BackColor = lnCol0 AND loFH.splH.BackStyle = lnSty0
loFH.Release()
DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
CATCH TO loEx
DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
TRY
IF FILE(gcTempIni)
DELETE FILE (gcTempIni)
ENDIF
CATCH
ENDTRY
ENDTRY
QUIT
**********************************************************
* Object1 = edt1 (100..400), splitter 400..405, Object2 = edt2 (405..705), edtDreapta la 720, edtStanga la 10
FUNCTION PrMkForm
LOCAL loF
loF = CREATEOBJECT('Form')
loF.WindowType = 0
loF.Width = 800
loF.Height = 300
loF.AddObject('edtStanga', 'EditBox')
loF.AddObject('edt1', 'Container')
loF.AddObject('spl', 'sfsplitterh_panou')
loF.AddObject('edt2', 'EditBox')
loF.AddObject('edtDreapta', 'EditBox')
loF.edtStanga.Move(10, 10, 60, 100)
loF.edt1.Move(100, 10, 300, 100)
loF.spl.Move(400, 10, 5, 100)
loF.edt2.Move(405, 10, 300, 100)
loF.edtDreapta.Move(720, 10, 50, 100)
loF.edtStanga.Visible = .T.
loF.edt1.Visible = .T.
loF.spl.Visible = .T.
loF.edt2.Visible = .T.
loF.edtDreapta.Visible = .T.
loF.edtStanga.Anchor = 13
loF.edt1.Anchor = 13
loF.edt2.Anchor = 13
loF.edtDreapta.Anchor = 13
loF.spl.Anchor = 13
loF.spl.cObject1Name = 'edt1'
loF.spl.cObject2Name = 'edt2'
loF.spl.nObject1MinSize = 100
loF.spl.nObject2MinSize = 80
RETURN loF
ENDFUNC
**********************************************************
PROCEDURE PrTest
LPARAMETERS tcEticheta, tlOk, tcDetalii
IF tlOk
gnPass = gnPass + 1
ELSE
gnFail = gnFail + 1
ENDIF
DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')')
ENDPROC
**********************************************************
PROCEDURE PrLogLocal
LPARAMETERS tcMsg
LOCAL lcL
SET SAFETY OFF
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
ENDPROC
**********************************************************
PROCEDURE PrErrLocal
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
ENDPROC