Rileva la family table di assiemi e chiude i punti oscuri residui del parser .asm
AsmRecordReader.LeggiMembri ora lancia InvalidDataException quando un assieme e' esso stesso un'istanza di family table (members descriverebbe solo una rappresentazione, non le istanze sorelle) invece di restituire un risultato sbagliato in silenzio - il chiamante ripiega sull'euristica testuale, che risolve gia' correttamente il caso. Aggiunti due controlli di coerenza analoghi (conteggio grezzo vs interpretato dei record ConfigName; occorrenze multiple di "members"), verificati senza falsi positivi su tutti i 350 .asm reali della share. Documentazione riorganizzata per distinguere cio' che e' verificato contro una BOM Creo di riferimento da cio' che e' verificato solo su scala (conteggi), e cio' che resta genuinamente non risolto. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
28a72c80b2
commit
9af426ca1b
3 files changed
+215
-52
No files matched your search
@@ -111,6 +111,39 @@ public class AsmRecordReaderTests
|
||||
Assert.Throws<InvalidDataException>(() => AsmRecordReader.LeggiMembri(dati));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Assieme_family_table_con_generic_name_lancia_eccezione()
|
||||
{
|
||||
// Regressione: 2546220101.asm (docs/formato-asm-record.md §7) e' esso stesso
|
||||
// un'istanza di family table (model_name "2546220101_C01" + generic_name vuoto); il
|
||||
// suo "members" descrive solo questa rappresentazione, non le 4 istanze reali della
|
||||
// BOM Creo. Va segnalato invece di restituire silenziosamente il contenuto sbagliato.
|
||||
byte[] dati = Asm(1, Membro(1, 2, "9244206098"),
|
||||
extra: Bytes(0xe0, 0x01, "model_t_type", 0, 2,
|
||||
0xe0, 0x0a, "model_name", 0, "2546220101_C01", 0,
|
||||
0xe0, 0x0a, "generic_name", 0, 0));
|
||||
|
||||
Assert.Throws<InvalidDataException>(() => AsmRecordReader.LeggiMembri(dati));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Generic_name_senza_suffisso_istanza_non_lancia_eccezione()
|
||||
{
|
||||
// Regressione: su ~7% dei file reali della share compare un record "model_name" +
|
||||
// "generic_name" (vuoto) che NON e' il sintomo della family table di assiemi - il
|
||||
// valore non ha il suffisso "_C0n" delle istanze (es. e' un codice qualunque non
|
||||
// correlato al nome del file). In quei casi "members" e' letto correttamente e va
|
||||
// usato normalmente, non bloccato per un falso positivo.
|
||||
byte[] dati = Asm(1, Membro(1, 2, "9244206098"),
|
||||
extra: Bytes(0xe0, 0x01, "model_t_type", 0, 2,
|
||||
0xe0, 0x0a, "model_name", 0, "9244230117", 0,
|
||||
0xe0, 0x0a, "generic_name", 0, 0));
|
||||
|
||||
var membri = AsmRecordReader.LeggiMembri(dati);
|
||||
|
||||
Assert.Single(membri);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sezione_members_assente_lancia_eccezione()
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user