These appear in the .asm binary as a family-table instance name (e.g. "R6--_-_U6592<UNI6592>"), not a separate file on disk - only the generic "uni6592.prt" is actually indexed. Extract just the "<UNI...>" content instead of the full instance name, in both the standalone script and the production scanner, so standard hardware stops being silently dropped as "not found in index". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
91 lines
3.4 KiB
C#
91 lines
3.4 KiB
C#
using CadSearchGui;
|
|
|
|
namespace CadSearchGui.Tests;
|
|
|
|
public class AssemblyComponentScannerTests
|
|
{
|
|
private static string ScriviAsmFinto(string testo)
|
|
{
|
|
string percorso = Path.GetTempFileName();
|
|
File.WriteAllBytes(percorso, System.Text.Encoding.Latin1.GetBytes(testo));
|
|
return percorso;
|
|
}
|
|
|
|
[Fact]
|
|
public void Scarta_codici_con_una_sola_occorrenza()
|
|
{
|
|
// "11112222" compare 2 volte (riferimento vero), "99998888" una sola (rumore).
|
|
string percorso = ScriviAsmFinto("blah 11112222 blah 99998888 blah 11112222 fine");
|
|
try
|
|
{
|
|
var codici = AssemblyComponentScanner.EstraiCodiciReferenziati(percorso);
|
|
Assert.Contains("11112222", codici);
|
|
Assert.DoesNotContain("99998888", codici);
|
|
}
|
|
finally { File.Delete(percorso); }
|
|
}
|
|
|
|
[Fact]
|
|
public void Riconosce_sotto_assiemi_con_suffisso_stile_D100()
|
|
{
|
|
// Visto su 9244228573.asm: i sotto-assiemi hanno nomi come <codice>_D100/_D200/_D300.
|
|
string percorso = ScriviAsmFinto("x 9244228573_D100 y 9244228573_D100 z 9244228573_D200 9244228573_D200");
|
|
try
|
|
{
|
|
var codici = AssemblyComponentScanner.EstraiCodiciReferenziati(percorso);
|
|
Assert.Contains("9244228573_D100", codici);
|
|
Assert.Contains("9244228573_D200", codici);
|
|
}
|
|
finally { File.Delete(percorso); }
|
|
}
|
|
|
|
[Fact]
|
|
public void Non_estrae_nulla_da_una_sequenza_di_cifre_troppo_lunga()
|
|
{
|
|
// Una sequenza di 15 cifre di fila non contiene nessun confine di parola valido
|
|
// per un blocco di 8-12 cifre: non deve produrre falsi positivi troncati.
|
|
string percorso = ScriviAsmFinto("123456789012345 123456789012345");
|
|
try
|
|
{
|
|
var codici = AssemblyComponentScanner.EstraiCodiciReferenziati(percorso);
|
|
Assert.Empty(codici);
|
|
}
|
|
finally { File.Delete(percorso); }
|
|
}
|
|
|
|
[Fact]
|
|
public void Scarta_id_di_viste_salvate_ModelView()
|
|
{
|
|
// Visto su 9044207061.asm: "ModelView#1073741828" compare più volte ma è un ID
|
|
// interno di vista salvata, non un codice componente.
|
|
string percorso = ScriviAsmFinto("x ModelView#1073741828 y ModelView#1073741828 z");
|
|
try
|
|
{
|
|
var codici = AssemblyComponentScanner.EstraiCodiciReferenziati(percorso);
|
|
Assert.DoesNotContain("1073741828", codici);
|
|
}
|
|
finally { File.Delete(percorso); }
|
|
}
|
|
|
|
[Fact]
|
|
public void Estrae_il_codice_generico_da_istanze_di_family_table_UNI()
|
|
{
|
|
// Visto su 9244228576.asm: le viti normalizzate compaiono come istanza di family
|
|
// table "R12--_-_U6592<UNI6592>", ma il file reale indicizzato è "uni6592.prt".
|
|
string percorso = ScriviAsmFinto(
|
|
"Componente ID 1 (R12--_-_U6592<UNI6592>.PRT) x Componente ID 2 (R12--_-_U6592<UNI6592>.PRT)");
|
|
try
|
|
{
|
|
var codici = AssemblyComponentScanner.EstraiCodiciReferenziati(percorso);
|
|
Assert.Contains("UNI6592", codici);
|
|
Assert.DoesNotContain("R12--_-_U6592<UNI6592>", codici);
|
|
}
|
|
finally { File.Delete(percorso); }
|
|
}
|
|
|
|
[Fact]
|
|
public void File_inesistente_lancia_eccezione_IO() =>
|
|
Assert.Throws<DirectoryNotFoundException>(() =>
|
|
AssemblyComponentScanner.EstraiCodiciReferenziati(@"C:\non\esiste\pippo.asm.1"));
|
|
}
|