sync SVN r18237

This commit is contained in:
2026-09-30 20:06:18 +03:00
parent b7dd1ac0a5
commit c9bca5d4df
4 changed files with 30 additions and 3 deletions

View File

@@ -216,7 +216,7 @@ s. **Dialoguri native care nu apar in log si nu sunt prinse de `ON ERROR`/mock-u
dupa numele clasei — VFP foloseste clase `vfp9...` si pentru shell-ul principal si pentru
dialogurile proprii), captureaza PNG + textul fiecarui control copil (`WM_GETTEXT`) la orice
fereastra noua, si omoara procesul la iesire (`finally`, niciodata ramas viu). **Interzis strict:
input real** (`keybd_event`/`SetForegroundWindow`/`SendInput`/`mouse_event`) — masina e
input real** (`keybd_event`/`SetForegroundWindow`/`SendInput`/`mouse_event`; exceptia controlata: sectiunea "Mouse real" de mai jos) — masina e
partajata, un input injectat la nivel de sistem ajunge in orice fereastra are focus in acel
moment, nu neaparat in dialogul tintit (patit: un ESCAPE injectat a intrerupt sesiunea IDE a
utilizatorului, aflat in lucru in paralel). `-AutoDismiss` foloseste STRICT mesaje Windows
@@ -226,3 +226,26 @@ s. **Dialoguri native care nu apar in log si nu sunt prinse de `ON ERROR`/mock-u
raman oricum de incredere, indiferent de rezultatul dismiss-ului. Watchdog-ul sterge singur
`.fxp`-ul vechi la lansare - capcana completa (de ce e obligatoriu) in `depanare_testare_vfp.md`
sectiunea 7.
## Mouse real: tragere, hover, controale fara fereastra
- **Apelul direct de metode nu dovedeste UI-ul.** `obj.MouseMove(1, ...)` / `obj.MouseDown(...)` din test trec si cand
in aplicatie nu merge nimic: nu verifica cine primeste evenimentul (un copil il poate inghiti) si nici pierderea
`MouseMove` cand cursorul iese din controlul fara fereastra. Pentru tragere/hover: mouse real.
- **Mouse real = exceptie de la interdictia de input real de mai sus**, admisa DOAR cu toate conditiile:
acordul lui Marius pentru rulare (sau masina de test separata, `masini-dezvoltare-testare.md`); driver EXTERN
procesului VFP (PowerShell: `SetCursorPos` + `mouse_event`) - `mouse_event` din acelasi proces VFP (program sau
Timer) agata testul cu butonul apasat; butonul stang eliberat in `finally`; coordonate calculate din formular
(`OBJTOCLIENT` + `ClientToScreen` pe `Thisform.HWnd`), formular maximizat. Sincronizare test <-> driver prin
fisiere-semnal. Model: `efactura_import\drv_splitter_mouse.ps1` + `test_splitter_mouse.prg`
(`-Poz <n> -Desch <k> -Dx <px>`).
- **Dovada = valori, nu proprietati.** Logheaza pozitia (`Top`, dimensiunea obiectelor vecine) inainte/dupa tragere;
pentru culori citeste pixelul de pe ecran (`GetPixel` pe DC-ul ferestrei) - `BackColor` nu spune ce se deseneaza
(hover ramas activ, `BackStyle`).
- **Fluxul real de deschidere, de mai multe ori.** Deschide formularul exact ca programul apelant (ex.
`CREATEOBJECT(...)` + `Show(1)` modal, maximizat), nu `WindowType = 0` + `Show()`: ordinea Resize/Show difera si
rezultatul la fel. Repeta deschidere -> actiune -> inchidere de 2-3 ori in aceeasi sesiune; testeaza si punctele
diferite de apucare (margine vs. mijloc).
- **Ini temporar.** Pozitii/optiuni salvate (`setini` pe `gcGeneralIniFile`) se redirecteaza pe un ini temporar
inainte de instantiere; altfel testul scrie in `D:\ROA\settings.ini` al utilizatorului
(`test_import_efactura_smoke.prg` inca o face).