75 lines
4.2 KiB
Markdown
75 lines
4.2 KiB
Markdown
# Kompatibilitäts-Testkorpus
|
||
|
||
Kleine BAS- und FRM-Referenzprogramme mit unabhängig begründeter Sollausgabe.
|
||
`cargo test --locked -p tb-cli --test compat` übersetzt sie, führt sie ohne
|
||
Terminal durch die TBVM und vergleicht jeden Lauf mit seiner `.out`.
|
||
Jeder Fall läuft zweimal. Mehrere deklarierte Bildschirmgrößen besitzen
|
||
jeweils eine eigene `<name>.<cols>x<rows>.out`.
|
||
|
||
Snapshots enthalten das getrimmte Textbild und bei abweichenden Farben eine
|
||
Attributebene. UTF-8 und LF sind verbindlich. PRINT-Leerzeichen sind auch am
|
||
Zeilenende signifikant; `.gitattributes` schützt `.out` vor Konvertierung.
|
||
Breite Zeichen erscheinen einmal, ihre Fortsetzungszellen werden nicht als
|
||
zusätzliches Leerzeichen ausgegeben. Die Farbdiagnose nennt Bildschirmspalten.
|
||
|
||
Kopfzeilen stehen bei BAS am Anfang, bei FRM in den ersten acht Codezeilen:
|
||
|
||
- `tb-screen: 80x25` ist Pflicht; mehrere Größen werden durch Kommas getrennt.
|
||
- `tb-resize: nach 1 auf 120x40` liefert eine einzelne Größenänderung nach
|
||
dem angegebenen Host-Zustellpunkt.
|
||
- `tb-keys:` beschreibt Tasten; `<TAB>`, `<ENTER>`, `<ESC>`, `<F1>` bis `<F12>`
|
||
und Pfeiltasten sind benannt, `+`/`^`/`%` stehen für Shift/Ctrl/Alt.
|
||
- `tb-events:` ordnet Tasten, Maus, Zeit und Resize ausdrücklich, etwa
|
||
`key:<TAB> | resize:100x30 | mouse:down,1,0,4,25 | time:250ms`.
|
||
Mausfelder sind Art, Taste, Modifikatoren, Zeile, Spalte (einsbasiert).
|
||
`time:` rückt die virtuelle Uhr um den Wert vor; ohne Zeitschritt steht sie
|
||
bei 0. `mouse:up` und `mouse:move` ergänzen Loslassen und Bewegung.
|
||
- `tb-clock: 25ms/Zustellpunkt` ist die alternative Uhr für TIMER-Traps;
|
||
der Harness verbietet fehlende Trap-Uhren und die Mischung mit tb-events.
|
||
- `tb-tempdir` führt Dateiprogramme in einem frischen leeren Arbeitsverzeichnis
|
||
aus und entfernt es danach, auch beim Entrollen eines Testfehlers.
|
||
- `tb-tz: +00:00` setzt eine feste Zone, `tb-tz: unknown` prüft UTC-Rückfall.
|
||
Datums-/Zeitproben setzen ihre Werte oder prüfen ausdrücklich Invarianten;
|
||
Zufall verwendet eine feste Saat.
|
||
|
||
`release-formular.frm` verbindet Fokuswechsel, Mausklick, Menü und Resize
|
||
mit farbiger Unicode-Ausgabe. Das Soll folgt den Handlern
|
||
`Lost;Got;Click;Menu;`, `COLOR 14,1` (e1) und `LOCATE 2,90` nach Resize auf
|
||
100×30. Der Test verändert gezielt ein Zeichen und ein Attribut in der
|
||
Erwartung und muss beides erkennen. Das Soll wird nicht aus dem VM-Istwert
|
||
gewonnen. Bestehende `formular.frm`-/Listen-/Timerfälle prüfen zusätzlich
|
||
die sichtbare Formularzeichnung und modale Übergänge.
|
||
|
||
Die Programme `eingabefortschritt`, `timezoneknown` und `timezonefallback`
|
||
prüfen Codepoints, gemeinsame Dateileseposition und Zonenzustand. Späterer
|
||
Zonenausfall und Erholung werden mit einer ersetzbaren Quelle geprüft,
|
||
ohne die Rechnerzeitzone zu ändern.
|
||
|
||
## Erforderliche Release-Grundabnahme
|
||
|
||
```sh
|
||
python3 tests/support/release-abnahme.py --vbdos-repo /absoluter/pfad/zu/vbdos
|
||
```
|
||
|
||
Der Aufruf funktioniert auch außerhalb des Checkouts mit absolutem Skriptpfad.
|
||
Er benötigt Python 3, Cargo/Rust sowie Git und tar für den Fremdbestand.
|
||
Er lädt nichts herunter. Der Git-Bestand muss HEAD
|
||
`1cdd2b32b829fe1721d0b6aecc433abc47a96fb6` enthalten; der Test exportiert exakt
|
||
diese Revision in temporäre Verzeichnisse, sodass lokale Änderungen am
|
||
Fremdcheckout nicht in die Prüfung eingehen.
|
||
|
||
Zuerst läuft der erforderliche Fremdtest mit `--include-ignored`, danach
|
||
Workspace-Regressionen, Inventarbericht, Format, Clippy und die vorhandenen
|
||
Compile-/VM-Benchmarks. Jeder Fehler beendet den Aufruf erfolglos. Ohne
|
||
Bestand oder mit falscher Revision entsteht kein bestandener Release-Nachweis.
|
||
Der normale Entwicklertest darf den Fremdtest weiter ignorieren; er allein
|
||
ist keine Release-Abnahme. Das ignorierte Golden-Erzeugungswerkzeug wird vom
|
||
Release-Aufruf niemals gestartet. Bestehende Sollwerte werden nur nach
|
||
Prüfung ihrer Spec-/Referenzgrundlage geändert.
|
||
|
||
Fallzuordnung, Eingabefolgen, Referenzrevision und Messwerte stehen im Change
|
||
`phase-6-01-kompatibilitaet-und-leistungsabnahme` in `abnahmematrix.md` und
|
||
`verification.md` (nach Archivierung unter `openspec/changes/archive/`).
|
||
Diese Grundabnahme ersetzt keine native EXE-/TBL-, reale Terminalmatrix-
|
||
oder Gitea-Releaseprüfung; diese folgen mit Phase-6-Changes 02–07.
|