diff options
Diffstat (limited to 'gerbonara/gerber/tests')
-rw-r--r-- | gerbonara/gerber/tests/image_support.py | 1 | ||||
-rw-r--r-- | gerbonara/gerber/tests/test_excellon.py | 22 | ||||
-rw-r--r-- | gerbonara/gerber/tests/test_rs274x.py | 11 |
3 files changed, 33 insertions, 1 deletions
diff --git a/gerbonara/gerber/tests/image_support.py b/gerbonara/gerber/tests/image_support.py index a50e243..1dfd34a 100644 --- a/gerbonara/gerber/tests/image_support.py +++ b/gerbonara/gerber/tests/image_support.py @@ -73,6 +73,7 @@ def gerbv_export(in_gbr, out_svg, export_format='svg', origin=(0, 0), size=(6, 6 with tempfile.NamedTemporaryFile('w') as f: if override_unit_spec: units, zeros, digits = override_unit_spec + print(f'{Path(in_gbr).name}: overriding excellon unit spec to {units=} {zeros=} {digits=}') units = 0 if units == 'inch' else 1 zeros = {None: 0, 'leading': 1, 'trailing': 2}[zeros] unit_spec = textwrap.dedent(f'''(cons 'attribs (list diff --git a/gerbonara/gerber/tests/test_excellon.py b/gerbonara/gerber/tests/test_excellon.py index fb25d8f..d89c0a0 100644 --- a/gerbonara/gerber/tests/test_excellon.py +++ b/gerbonara/gerber/tests/test_excellon.py @@ -18,7 +18,7 @@ from ..utils import Inch, MM REFERENCE_FILES = { 'easyeda/Gerber_Drill_NPTH.DRL': (None, None), 'easyeda/Gerber_Drill_PTH.DRL': (None, 'easyeda/Gerber_TopLayer.GTL'), - # Altium uses an excellon format specification format that gerbv doesn't understand, so we have to fix that. + # Altium uses an excellon format specification format that gerbv doesn't understand, so we have to fix that. 'altium-composite-drill/NC Drill/LimeSDR-QPCIe_1v2-SlotHoles.TXT': (('mm', 'leading', 4), None), 'altium-composite-drill/NC Drill/LimeSDR-QPCIe_1v2-RoundHoles.TXT': (('mm', 'leading', 4), 'altium-composite-drill/Gerber/LimeSDR-QPCIe_1v2.GTL'), 'pcb-rnd/power-art.xln': (None, 'pcb-rnd/power-art.gtl'), @@ -40,6 +40,7 @@ REFERENCE_FILES = { def test_round_trip(reference, tmpfile): reference, (unit_spec, _) = reference tmp = tmpfile('Output excellon', '.drl') + print('unit spec', unit_spec) ExcellonFile.open(reference).save(tmp) @@ -50,6 +51,25 @@ def test_round_trip(reference, tmpfile): @filter_syntax_warnings @pytest.mark.parametrize('reference', list(REFERENCE_FILES.items()), indirect=True) +def test_idempotence(reference, tmpfile): + reference, (unit_spec, _) = reference + + if reference.name == '80101_0125_F200_ContourPlated.ncd': + # this file contains a duplicate tool definition that we optimize out on our second pass. + # TODO see whether we can change things so we optimize this out on the first pass already. I'm not sure what + # went wrong there. + pytest.skip() + + tmp_1 = tmpfile('First generation output', '.drl') + tmp_2 = tmpfile('Second generation output', '.drl') + + ExcellonFile.open(reference).save(tmp_1) + ExcellonFile.open(tmp_1).save(tmp_2) + + assert tmp_1.read_text() == tmp_2.read_text() + +@filter_syntax_warnings +@pytest.mark.parametrize('reference', list(REFERENCE_FILES.items()), indirect=True) def test_gerber_alignment(reference, tmpfile, print_on_error): reference, (unit_spec, gerber) = reference tmp = tmpfile('Output excellon', '.drl') diff --git a/gerbonara/gerber/tests/test_rs274x.py b/gerbonara/gerber/tests/test_rs274x.py index 83148a5..fdd9a81 100644 --- a/gerbonara/gerber/tests/test_rs274x.py +++ b/gerbonara/gerber/tests/test_rs274x.py @@ -275,6 +275,17 @@ def test_round_trip(reference, tmpfile): assert hist[9] == 0 assert hist[3:].sum() < 5e-5*hist.size +@filter_syntax_warnings +@pytest.mark.parametrize('reference', REFERENCE_FILES, indirect=True) +def test_idempotence(reference, tmpfile): + tmp_gbr_1 = tmpfile('First generation output', '.gbr') + tmp_gbr_2 = tmpfile('Second generation output', '.gbr') + + GerberFile.open(reference).save(tmp_gbr_1) + GerberFile.open(tmp_gbr_1).save(tmp_gbr_2) + assert tmp_gbr_1.read_text() == tmp_gbr_2.read_text() + + TEST_ANGLES = [90, 180, 270, 30, 1.5, 10, 360, 1024, -30, -90] TEST_OFFSETS = [(0, 0), (100, 0), (0, 100), (2, 0), (10, 100)] |