Phase 6: Kompatibilitaetsabnahme abschliessen und archivieren
This commit is contained in:
@@ -1,27 +1,74 @@
|
||||
# Kompatibilitäts-Testkorpus
|
||||
|
||||
Kleine Referenzprogramme mit dokumentierter erwarteter Ausgabe. Jede
|
||||
`name.bas` hat eine `name.out` mit der exakten Konsolenausgabe (UTF-8,
|
||||
LF-Zeilenenden). **Achtung:** PRINT gibt Zahlen mit führendem Leerzeichen
|
||||
(bzw. `-`) und nachgestelltem Leerzeichen aus — auch am Zeilenende. Die
|
||||
`.out`-Dateien enthalten daher signifikante Leerzeichen am Zeilenende;
|
||||
Editoren dürfen sie nicht wegtrimmen; `.gitattributes` schützt die Dateien
|
||||
vor Zeilenenden-Konvertierung.
|
||||
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`.
|
||||
|
||||
Ab Phase 2 führt ein Test-Harness (`cargo test`) jede Datei per
|
||||
`tbc run` aus und vergleicht die Ausgabe. Bis dahin dienen die
|
||||
`.out`-Dateien als festgehaltene Verhaltensspezifikation — wo möglich am
|
||||
Vorbild (Emulator) verifiziert, sonst nach Referenzlage rekonstruiert
|
||||
und mit `TODO verify` im Programmkopf markiert.
|
||||
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.
|
||||
|
||||
Konventionen:
|
||||
- Nur Konsolen-E/A (keine Forms) bis Phase 4
|
||||
- Kein Zufall/Zeit, außer der Test fixiert die Saat (`RANDOMIZE` mit
|
||||
Konstante) bzw. prüft nur Invarianten
|
||||
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 den TerminalBasic-Vertrag für Codepoints, gemeinsame Dateileseposition
|
||||
und den sichtbaren Zonenzustand. `tb-tz: +00:00` setzt eine bekannte UTC-Zone,
|
||||
`tb-tz: unknown` erzwingt den UTC-Rückfall. Späterer Ausfall und Erholung
|
||||
werden zusätzlich mit einer ersetzbaren Zonenquelle in den Laufzeit- und
|
||||
VM-Tests geprüft, ohne die Zeitzone des Rechners zu verändern.
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user