summaryrefslogtreecommitdiff
path: root/gerbonara/gerber/tests
diff options
context:
space:
mode:
authorjaseg <git@jaseg.de>2022-01-29 02:42:29 +0100
committerjaseg <git@jaseg.de>2022-01-29 02:42:29 +0100
commit35f24607fe65385370cd6e267ea5afffbfbd1e34 (patch)
tree9958f1cf3f4b78d58ad84ad34464c130957cd03e /gerbonara/gerber/tests
parent39756077b4930b1eee4c029dbce1dacb23a21559 (diff)
downloadgerbonara-35f24607fe65385370cd6e267ea5afffbfbd1e34.tar.gz
gerbonara-35f24607fe65385370cd6e267ea5afffbfbd1e34.tar.bz2
gerbonara-35f24607fe65385370cd6e267ea5afffbfbd1e34.zip
Layer matcher WIP
Diffstat (limited to 'gerbonara/gerber/tests')
-rw-r--r--gerbonara/gerber/tests/test_layers.py76
1 files changed, 42 insertions, 34 deletions
diff --git a/gerbonara/gerber/tests/test_layers.py b/gerbonara/gerber/tests/test_layers.py
index 62ef522..482d340 100644
--- a/gerbonara/gerber/tests/test_layers.py
+++ b/gerbonara/gerber/tests/test_layers.py
@@ -31,11 +31,11 @@ REFERENCE_DIRS = {
'IRNASIoTbank1.2.Bot': 'bottom copper',
'IRNASIoTbank1.2.Drill': 'drill plated',
'IRNASIoTbank1.2.Info': None,
- 'IRNASIoTbank1.2.Outline': 'drill outline',
+ 'IRNASIoTbank1.2.Outline': 'mechanical outline',
'IRNASIoTbank1.2.PasteBot': 'bottom paste',
'IRNASIoTbank1.2.PasteTop': 'top paste',
- 'IRNASIoTbank1.2.PosiBot': 'bottom silkscreen',
- 'IRNASIoTbank1.2.PosiTop': 'top silkscreen',
+ 'IRNASIoTbank1.2.PosiBot': 'bottom silk',
+ 'IRNASIoTbank1.2.PosiTop': 'top silk',
'IRNASIoTbank1.2.StopBot': 'bottom mask',
'IRNASIoTbank1.2.StopTop': 'top mask',
'IRNASIoTbank1.2.Tool': None,
@@ -45,7 +45,7 @@ REFERENCE_DIRS = {
'allegro': {
'08_057494d-ipc356.ipc': None,
- '08_057494d.rou': 'drill outline',
+ '08_057494d.rou': 'mechanical outline',
'Read_Me.1': None,
'art_param.txt': None,
'assy1.art': None,
@@ -73,7 +73,7 @@ REFERENCE_DIRS = {
'MINNOWMAX_REVA2_PUBLIC_TOPSIDE.pdf': None,
'MinnowMax_RevA1_IPC356A.ipc': None,
'MinnowMax_RevA1_DRILL/MinnowMax_RevA1_NCDRILL.drl': 'drill unknown',
- 'MinnowMax_RevA1_DRILL/MinnowMax_RevA1_NCROUTE.rou': 'drill outline',
+ 'MinnowMax_RevA1_DRILL/MinnowMax_RevA1_NCROUTE.rou': 'drill unknown',
'MinnowMax_RevA1_DRILL/nc_param.txt': None,
'MinnowMax_RevA1_DRILL/ncdrill.log': None,
'MinnowMax_RevA1_DRILL/ncroute.log': None,
@@ -116,15 +116,15 @@ REFERENCE_DIRS = {
'Gerber/LimeSDR-QPCIe_1v2.GBO': 'bottom silk',
'Gerber/LimeSDR-QPCIe_1v2.GBP': 'bottom paste',
'Gerber/LimeSDR-QPCIe_1v2.GBS': 'bottom mask',
- 'Gerber/LimeSDR-QPCIe_1v2.GM1': 'dirll outlinej',
+ 'Gerber/LimeSDR-QPCIe_1v2.GM1': 'mechanical outline',
'Gerber/LimeSDR-QPCIe_1v2.GM14': None,
'Gerber/LimeSDR-QPCIe_1v2.GM15': None,
'Gerber/LimeSDR-QPCIe_1v2.GPB': None,
'Gerber/LimeSDR-QPCIe_1v2.GPT': None,
- 'Gerber/LimeSDR-QPCIe_1v2.GTL': 'bottom copper',
- 'Gerber/LimeSDR-QPCIe_1v2.GTO': 'bottom silk',
- 'Gerber/LimeSDR-QPCIe_1v2.GTP': 'bottom paste',
- 'Gerber/LimeSDR-QPCIe_1v2.GTS': 'bottom mask',
+ 'Gerber/LimeSDR-QPCIe_1v2.GTL': 'top copper',
+ 'Gerber/LimeSDR-QPCIe_1v2.GTO': 'top silk',
+ 'Gerber/LimeSDR-QPCIe_1v2.GTP': 'top paste',
+ 'Gerber/LimeSDR-QPCIe_1v2.GTS': 'top mask',
'Gerber/LimeSDR-QPCIe_1v2.REP': None,
'Gerber/LimeSDR-QPCIe_1v2.RUL': None,
'Gerber/LimeSDR-QPCIe_1v2.apr': None,
@@ -134,22 +134,23 @@ REFERENCE_DIRS = {
'NC Drill/LimeSDR-QPCIe_1v2.LDP': None,
},
- 'diptrace': {
- 'mainboard.drl': 'drill plated',
- 'mainboard_BoardOutline.gbr': 'drill outline',
- 'mainboard_Bottom.gbr': 'bottom copper',
- 'mainboard_BottomMask.gbr': 'bottom mask',
- 'mainboard_Top.gbr': 'top copper',
- 'mainboard_TopMask.gbr': 'top mask',
- 'mainboard_TopSilk.gbr': 'top silk',
- },
+# TODO there are three designs in this folder. make test work with that.
+# 'diptrace': {
+# 'mainboard.drl': 'drill plated',
+# 'mainboard_BoardOutline.gbr': 'mechanical outline',
+# 'mainboard_Bottom.gbr': 'bottom copper',
+# 'mainboard_BottomMask.gbr': 'bottom mask',
+# 'mainboard_Top.gbr': 'top copper',
+# 'mainboard_TopMask.gbr': 'top mask',
+# 'mainboard_TopSilk.gbr': 'top silk',
+# },
'eagle-newer': {
'copper_bottom.gbr': 'bottom copper',
'copper_top.gbr': 'top copper',
'drills.xln': 'drill unknown',
'gerber_job.gbrjob': None,
- 'profile.gbr': 'drill outline',
+ 'profile.gbr': 'mechanical outline',
'silkscreen_bottom.gbr': 'bottom silk',
'silkscreen_top.gbr': 'top silk',
'soldermask_bottom.gbr': 'bottom mask',
@@ -163,7 +164,7 @@ REFERENCE_DIRS = {
'copper_inner_l2.gbr': 'inner_2 copper',
'copper_inner_l3.gbr': 'inner_3 copper',
'copper_top_l1.gbr': 'top copper',
- 'profile.gbr': 'drill outline',
+ 'profile.gbr': 'mechanical outline',
'silkscreen_bottom.gbr': 'bottom silk',
'silkscreen_top.gbr': 'top silk',
'soldermask_bottom.gbr': 'bottom mask',
@@ -173,7 +174,7 @@ REFERENCE_DIRS = {
},
'easyeda': {
- 'Gerber_BoardOutline.GKO': 'drill outline',
+ 'Gerber_BoardOutline.GKO': 'mechanical outline',
'Gerber_BottomLayer.GBL': 'bottom copper',
'Gerber_BottomSolderMaskLayer.GBS': 'bottom mask',
'Gerber_Drill_NPTH.DRL': 'drill nonplated',
@@ -190,7 +191,7 @@ REFERENCE_DIRS = {
},
'fritzing': {
- 'combined.GKO': 'drill outline',
+ 'combined.GKO': 'mechanical outline',
'combined.gbl': 'bottom copper',
'combined.gbo': 'bottom silk',
'combined.gbs': 'bottom mask',
@@ -222,7 +223,7 @@ REFERENCE_DIRS = {
'power-art.gbo': 'bottom silk',
'power-art.gbp': 'bottom paste',
'power-art.gbs': 'bottom mask',
- 'power-art.gko': 'drill outline',
+ 'power-art.gko': 'mechanical outline',
'power-art.gtl': 'top copper',
'power-art.gto': 'top silk',
'power-art.gtp': 'top paste',
@@ -232,7 +233,7 @@ REFERENCE_DIRS = {
},
'siemens': {
- '80101_0125_F200_ContourPlated.ncd': 'drill outline',
+ '80101_0125_F200_ContourPlated.ncd': 'mechanical outline',
'80101_0125_F200_DrillDrawingThrough.gdo': None,
'80101_0125_F200_L01_Top.gdo': 'top copper',
'80101_0125_F200_L02.gdo': 'inner_2 copper',
@@ -257,7 +258,7 @@ REFERENCE_DIRS = {
},
'siemens-2': {
- 'Gerber/BoardOutlline.gdo': 'drill outline',
+ 'Gerber/BoardOutlline.gdo': 'mechanical outline',
'Gerber/DrillDrawingThrough.gdo': None,
'Gerber/EtchLayerBottom.gdo': 'bottom copper',
'Gerber/EtchLayerTop.gdo': 'top copper',
@@ -267,7 +268,7 @@ REFERENCE_DIRS = {
'Gerber/SolderPasteTop.gdo': 'top paste',
'Gerber/SoldermaskBottom.gdo': 'bottom mask',
'Gerber/SoldermaskTop.gdo': 'top mask',
- 'NCDrill/ContourPlated.ncd': 'drill outline',
+ 'NCDrill/ContourPlated.ncd': 'mechanical outline',
'NCDrill/ThruHoleNonPlated.ncd': 'drill nonplated',
'NCDrill/ThruHolePlated.ncd': 'drill plated',
},
@@ -278,7 +279,7 @@ REFERENCE_DIRS = {
'design_export.gbo': 'bottom silk',
'design_export.gbp': 'bottom paste',
'design_export.gbs': 'bottom mask',
- 'design_export.gko': 'drill outline',
+ 'design_export.gko': 'mechanical outline',
'design_export.gtl': 'top copper',
'design_export.gto': 'top silk',
'design_export.gtp': 'top paste',
@@ -295,27 +296,34 @@ def test_layer_classifier(ref_dir):
path = reference_path(ref_dir)
print('Reference path is', path)
file_map = { filename: role for filename, role in file_map.items() if role is not None }
- rev_file_map = { value: key for key, value in file_map.items() }
+ rev_file_map = { tuple(value.split()): key for key, value in file_map.items() }
drill_files = { filename: role for filename, role in file_map.items() if role.startswith('drill') }
stack = LayerStack.from_directory(path)
+ print('loaded layers:', ', '.join(f'{side} {use}' for side, use in stack.graphic_layers))
for side in 'top', 'bottom':
for layer in 'copper', 'silk', 'mask', 'paste':
+ if 'allegro-2' in ref_dir and layer in ('silk', 'mask', 'paste'):
+ # This particular example has very poorly named files
+ continue
if (side, layer) in rev_file_map:
assert (side, layer) in stack
found = stack[side, layer]
assert isinstance(found, GerberFile)
- assert found.filename == Path(rev_file_map[side, layer]).name
+ assert found.original_path.name == Path(rev_file_map[side, layer]).name
else: # not in file_map
assert (side, layer) not in stack
- for filename, role in drill_files:
- assert any(layer.filename == Path(filename).name for layer in stack.drill_layers)
- assert len(stack.drill_layers) == len(drill_files)
+ assert len(stack.drill_layers) == len(drill_files)
+
+ for filename, role in drill_files.items():
+ print('drill:', filename, role)
+ print([(layer.original_path, layer.original_path == Path(filename).name) for layer in stack.drill_layers])
+ assert any(layer.original_path.name == Path(filename).name for layer in stack.drill_layers)
- for layer in stack.drill_files:
+ for layer in stack.drill_layers:
assert isinstance(layer, ExcellonFile)