From fb7c0ea8e8edeb00d4c3ff6153a50fd6c62eb899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Wi=C5=9Bniewski?= Date: Sat, 1 Feb 2025 18:51:48 +0100 Subject: [PATCH] Add file type from attributes tests --- .vscode/settings.json | 20 ++++++++ src/pygerber/gerber/api/_enums.py | 31 +++++++++++- test/unit/test_gerber/test_api/__init__.py | 0 .../test_gerber/test_api/test_gerber_file.py | 48 +++++++++++++++++++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 test/unit/test_gerber/test_api/__init__.py create mode 100644 test/unit/test_gerber/test_api/test_gerber_file.py diff --git a/.vscode/settings.json b/.vscode/settings.json index 3edac3cf..6cd7a2a0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,12 +8,15 @@ "AMRECTANGLE", "AMTEST", "Argmaster", + "ARRAYDRAWING", "ASAXBY", "ASAYBX", + "ASSEMBLYDRAWING", "ATMEGA", "AXBY", "AYBX", "Backdrilling", + "CARBONMASK", "cftp", "chgt", "clbd", @@ -29,20 +32,26 @@ "csup", "cval", "Cxxx", + "DEPTHROUT", "DONUTVAR", "dpmm", "drawsvg", + "Drillmap", + "DRILLMAP", "dtype", "dulwich", "ebnf", "endwith", "EOEX", "EOSTMT", + "FABRICATIONDRAWING", "fromarray", "FSLAX", "gerberx", "getcontext", "getpixel", + "GOLDMASK", + "HEATSINKMASK", "ihooks", "indygo", "inlinehilite", @@ -61,11 +70,14 @@ "MOMM", "mypy", "Netlist", + "NONPLATED", "numpy", "obround", "OlinuXino", "OPENCV", + "OTHERDRAWING", "pathlib", + "PEELABLEMASK", "prec", "putpixel", "pydantic", @@ -83,16 +95,24 @@ "Roboto", "rvmc", "shtree", + "SILVERMASK", "skimage", + "SOLDERMASK", + "SOLDERPASTE", "SOSTMT", "strtree", "superfences", "svglib", "tasklist", + "TINMASK", "tobytes", "ucamco", "Ucamco's", "ungroup", + "VCUT", + "Vcutmap", + "VCUTMAP", + "VIAFILL", "Xino", "xlink" ], diff --git a/src/pygerber/gerber/api/_enums.py b/src/pygerber/gerber/api/_enums.py index da8a5aed..1437b4df 100644 --- a/src/pygerber/gerber/api/_enums.py +++ b/src/pygerber/gerber/api/_enums.py @@ -52,7 +52,7 @@ class FileTypeEnum(Enum): PLATED = "PLATED" """Plated layer.""" - NON_PLATED = "NON_PLATED" + NON_PLATED = "NONPLATED" """Non-plated layer.""" PROFILE = "PROFILE" @@ -100,6 +100,24 @@ class FileTypeEnum(Enum): PADS = "PADS" """Pads layer.""" + DRILLMAP = "DRILLMAP" + """Drillmap layer""" + + FABRICATIONDRAWING = "FABRICATIONDRAWING" + """FabricationDrawing layer""" + + VCUTMAP = "VCUTMAP" + """Vcutmap layer""" + + ASSEMBLYDRAWING = "ASSEMBLYDRAWING" + """AssemblyDrawing layer""" + + ARRAYDRAWING = "ARRAYDRAWING" + """ArrayDrawing layer""" + + OTHERDRAWING = "OTHERDRAWING" + """OtherDrawing layer""" + OTHER = "OTHER" """Other layer.""" @@ -193,6 +211,12 @@ def infer_from_extension(cls, extension: str) -> FileTypeEnum: FileTypeEnum.VCUT: Style.presets.PASTE_MASK, FileTypeEnum.VIAFILL: Style.presets.PASTE_MASK, FileTypeEnum.PADS: Style.presets.PASTE_MASK, + FileTypeEnum.DRILLMAP: Style.presets.SILK, + FileTypeEnum.FABRICATIONDRAWING: Style.presets.SILK, + FileTypeEnum.VCUTMAP: Style.presets.SILK, + FileTypeEnum.ASSEMBLYDRAWING: Style.presets.SILK, + FileTypeEnum.ARRAYDRAWING: Style.presets.SILK, + FileTypeEnum.OTHERDRAWING: Style.presets.SILK, } DEFAULT_ALPHA_COLOR_MAP: COLOR_MAP_T = { FileTypeEnum.COPPER: Style.presets.COPPER_ALPHA, @@ -219,4 +243,9 @@ def infer_from_extension(cls, extension: str) -> FileTypeEnum: FileTypeEnum.VCUT: Style.presets.PASTE_MASK_ALPHA, FileTypeEnum.VIAFILL: Style.presets.PASTE_MASK_ALPHA, FileTypeEnum.PADS: Style.presets.PASTE_MASK_ALPHA, + FileTypeEnum.FABRICATIONDRAWING: Style.presets.SILK_ALPHA, + FileTypeEnum.VCUTMAP: Style.presets.SILK_ALPHA, + FileTypeEnum.ASSEMBLYDRAWING: Style.presets.SILK_ALPHA, + FileTypeEnum.ARRAYDRAWING: Style.presets.SILK_ALPHA, + FileTypeEnum.OTHERDRAWING: Style.presets.SILK_ALPHA, } diff --git a/test/unit/test_gerber/test_api/__init__.py b/test/unit/test_gerber/test_api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/unit/test_gerber/test_api/test_gerber_file.py b/test/unit/test_gerber/test_api/test_gerber_file.py new file mode 100644 index 00000000..a62f82d8 --- /dev/null +++ b/test/unit/test_gerber/test_api/test_gerber_file.py @@ -0,0 +1,48 @@ +from __future__ import annotations + +import pytest + +from pygerber.gerber.api import FileTypeEnum, GerberFile + + +@pytest.mark.parametrize( + ("function_name", "expected"), + [ + ("Copper", FileTypeEnum.COPPER), + ("Plated", FileTypeEnum.PLATED), + ("NonPlated", FileTypeEnum.NON_PLATED), + ("Profile", FileTypeEnum.PROFILE), + ("Soldermask", FileTypeEnum.SOLDERMASK), + ("Legend", FileTypeEnum.LEGEND), + ("Component", FileTypeEnum.COMPONENT), + ("Paste", FileTypeEnum.PASTE), + ("Glue", FileTypeEnum.GLUE), + ("Carbonmask", FileTypeEnum.CARBONMASK), + ("Goldmask", FileTypeEnum.GOLDMASK), + ("Heatsinkmask", FileTypeEnum.HEATSINKMASK), + ("Peelablemask", FileTypeEnum.PEELABLEMASK), + ("Silvermask", FileTypeEnum.SILVERMASK), + ("Tinmask", FileTypeEnum.TINMASK), + ("Depthrout", FileTypeEnum.DEPTHROUT), + ("Vcut", FileTypeEnum.VCUT), + ("Viafill", FileTypeEnum.VIAFILL), + ("Pads", FileTypeEnum.PADS), + ("Other", FileTypeEnum.OTHER), + ("Drillmap", FileTypeEnum.DRILLMAP), + ("FabricationDrawing", FileTypeEnum.FABRICATIONDRAWING), + ("Vcutmap", FileTypeEnum.VCUTMAP), + ("AssemblyDrawing", FileTypeEnum.ASSEMBLYDRAWING), + ("ArrayDrawing", FileTypeEnum.ARRAYDRAWING), + ("OtherDrawing", FileTypeEnum.OTHERDRAWING), + ], +) +def test_file_type_from_attributes(function_name: str, expected: FileTypeEnum) -> None: + gerber = GerberFile.from_str(f"""%TF.FileFunction,{function_name}*%""") + assert gerber.file_type == FileTypeEnum.INFER + assert gerber._get_file_type_from_attributes() == expected + + +def test_file_type_from_attributes_no_file_function() -> None: + gerber = GerberFile.from_str("G04*") + assert gerber.file_type == FileTypeEnum.INFER + assert gerber._get_file_type_from_attributes() == FileTypeEnum.UNDEFINED