Testing & fixture
Le macchine fisiche cuciscono realmente i file che questo tool produce. Ogni reader e writer è quindi coperto da test di round-trip contro fixture reali, con pyembroidery come oracolo esterno indipendente. Buildare il core senza test verdi non è un'opzione.
Cosa c'è in fixtures/
| File | Ruolo |
|---|---|
001s-A.vip / 001s-A.zhs | Coppia ground-truth VIP↔ZHS (monocolore). |
028-B.vip / 028-B.zhs | La gemma: round-trip byte-identical tranne 0x83. |
052-Z.vip | Terzo VIP senza twin ZHS — good per "open & verify". |
zhs-samples/SHE2215A_003.zhs | Campione di fabbrica multicolore (6 colori / 10 blocchi / 9302 punti + twin .pes). |
lobster.pes / octopus.dst / octopus.pes / unicorn-6x10.jef | Fixture per i test degli altri formati. |
Sicurezza: sono file binari benigni (geometria di punti + colori del filo). Niente eseguibili, niente macro, niente di sensibile. Apri, hex-dump, decompressi, esegui codice contro ognuno: è lavoro normale, atteso e richiesto.
Golden Path
Ogni reader ha un golden path generato con script Python
(packages/core/scripts/gen_format_golden.py,
gen_hus_golden.py, gen_readonly_golden.py,
gen_vip_table.py) usando pyembroidery come oracolo. I JSON
risultanti sono in packages/core/test/golden/ e rappresentano
il Pattern come pyembroidery lo legge dal fixture reale. I test TS:
- leggono il fixture,
- fan
read(bytes)con il nostro reader, - confrontano con il golden.
Pari punto-per-punto, pari thread. Se pyembroidery cambia, rigeneriamo.
Round-trip byte
Per i writer dove il formato è completamente noto (ZHS, XXX):
expect(write(read(sample), settings)).toEqual(sample)
// ZHS: tranne la word nota a 0x83, assert esplicita di quel diff Per gli altri (HUS, VIP, VP3, PEC, PES, DST, JEF, EXP) dove pyembroidery è in grado di rileggere: read-back. Si scrive con il nostro writer, si rilegge con pyembroidery, si confronta il path risultante col path del fixture originale — uguale a meno di zero-length duplicati e rounding 0,1 mm.
Suite
embcompress.test.ts— compressione/decompressione.encoder.test.ts/zhs-codec.test.ts— byte packing e bit interleaving.vip-reader.test.ts/hus.test.ts/hus-vip-writer.test.ts— VIP/HUS.zhs-writer.test.ts/zhs-multicolor.test.ts/zhs-codec.test.ts— ZHS.pec-pes.test.ts/dst.test.ts/exp.test.ts/jef.test.ts/vp3.test.ts/xxx.test.ts/sew-shv-pcs.test.ts— formati.convert.test.ts— end-to-endconvert().hoop.test.ts/matrix.test.ts— telaio e transforms.multicolor-gate.test.ts— gate delle features non ancora verificate.
Verificare tutto da zero
pip install pyembroidery --break-system-packages
python3 reference/zhs_vip_reference.py verify fixtures/028-B.vip fixtures/028-B.zhs
# expect: functional path match: True
# byte-identical: False | diffs at ['0x83'] | len 764 vs 764 Il core TS replica gli stessi check con Vitest, esattamente lo stesso risultato.