Files
comun/utile/Teste/efactura_import/test_splitter_h.prg
2026-09-29 16:36:56 +03:00

187 lines
8.0 KiB
Plaintext

* 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