Files
ocr_scanner/test/spec-match.test.js
T
vchuserandClaude Opus 5 1ec3ca4054 Ersetze deutsche Bezeichner durch englische im Quelltext
Projektvorgabe: Kommentare und Oberflaechentexte deutsch, Bezeichner im Code
englisch. Betroffen: src/barcode.js (vorbereitungsPromise -> readyPromise,
inkl. Verweis-Kommentar in ocr.js), sowie lokale Variablen in
test/spec-match.test.js, test/session.test.js und test/pipeline.test.js
(u.a. ocrAufgerufen -> ocrCalled, gefunden bei vollstaendigem Durchgang
aller Test-Dateien). Testbeschreibungen (Prosa) und Kommentare bleiben
unangetastet - nur echte Bezeichner wurden umbenannt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 18:24:30 +02:00

85 lines
3.3 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { KNOWN, emptySpec, canonical, matchKnown, specsCompatible } from '../src/spec.js';
test('canonical bildet verwechselbare Zeichen auf einen Vertreter ab', () => {
assert.equal(canonical('PC4-24O0'), canonical('PC4-2400'));
assert.equal(canonical('1RX8'), canonical('IRX8'));
assert.equal(canonical('BGB'), canonical('868'));
assert.equal(canonical('LRDIMM'), canonical('1RD1MM'));
});
test('canonical laesst D unangetastet, damit 4DRx4 erhalten bleibt', () => {
assert.notEqual(canonical('4DRX4'), canonical('40RX4'));
});
test('matchKnown findet den exakten Wert', () => {
assert.equal(matchKnown('PC4-2400', KNOWN.speed), 'PC4-2400');
assert.equal(matchKnown('lrdimm', KNOWN.formFactor), 'LRDIMM');
});
test('matchKnown repariert eine Verwechslung', () => {
assert.equal(matchKnown('PC4-24O0', KNOWN.speed), 'PC4-2400');
assert.equal(matchKnown('4DRX4', KNOWN.rank), '4DRx4');
});
test('matchKnown liefert null bei unbekanntem Wert', () => {
assert.equal(matchKnown('PC4-9999', KNOWN.speed), null);
assert.equal(matchKnown('', KNOWN.speed), null);
});
test('matchKnown funktioniert auch mit Zahlenlisten', () => {
assert.equal(matchKnown('64', KNOWN.capacityGb), 64);
assert.equal(matchKnown('6A', KNOWN.capacityGb), null);
});
test('specsCompatible vergleicht nur beidseitig gesetzte Felder', () => {
const full = { capacityGb: 64, formFactor: 'LRDIMM', rank: '4DRx4', speed: 'PC4-2400', partNumber: 'M386A8K40BM1-CRC4Y', dateCode: '1908' };
const withoutPartNumber = { ...full, partNumber: null, dateCode: null };
assert.equal(specsCompatible(full, withoutPartNumber), true);
});
test('specsCompatible erkennt einen echten Unterschied', () => {
const a = { ...emptySpec(), capacityGb: 64, speed: 'PC4-2400' };
const b = { ...emptySpec(), capacityGb: 32, speed: 'PC4-2400' };
assert.equal(specsCompatible(a, b), false);
});
test('specsCompatible trennt gleiche Spec mit unterschiedlicher Teilenummer', () => {
const samsung = { ...emptySpec(), capacityGb: 64, speed: 'PC4-2400', partNumber: 'M386A8K40BM1-CRC4Y' };
const hynix = { ...emptySpec(), capacityGb: 64, speed: 'PC4-2400', partNumber: 'HMAA8GL7AMR4N-UH' };
assert.equal(specsCompatible(samsung, hynix), false);
});
test('specsCompatible toleriert eine Verwechslung in der Teilenummer', () => {
const a = { ...emptySpec(), capacityGb: 64, partNumber: 'M386A8K40BM1-CRC4Y' };
const b = { ...emptySpec(), capacityGb: 64, partNumber: 'M386A8K4OBM1-CRC4Y' };
assert.equal(specsCompatible(a, b), true);
});
test('matchKnown findet einen Zahlenwert in der Liste', () => {
assert.equal(matchKnown(64, KNOWN.capacityGb), 64);
assert.equal(matchKnown(128, KNOWN.capacityGb), 128);
});
test('canonical behandelt Zahlen wie Zeichenketten', () => {
assert.equal(canonical(64), canonical('64'));
assert.equal(canonical(128), canonical('128'));
});
test('canonical mit null ergibt Leerzeichenkette', () => {
assert.equal(canonical(null), '');
});
test('canonical mit undefined ergibt Leerzeichenkette', () => {
assert.equal(canonical(undefined), '');
});
test('matchKnown mit null ergibt null', () => {
assert.equal(matchKnown(null, KNOWN.capacityGb), null);
});
test('matchKnown mit undefined ergibt null', () => {
assert.equal(matchKnown(undefined, KNOWN.capacityGb), null);
});