From d0f836ecfadacbaea20fc6a3ceebd455e96e1307 Mon Sep 17 00:00:00 2001 From: jaseg Date: Sun, 13 Jun 2021 20:33:19 +0200 Subject: [PATCH] Port old pcb-tools-extension unit tests to pytest --- .../gerber/tests/panelize}/__init__.py | 0 .../tests/panelize}/data/ref_drill_inch.txt | 0 .../tests/panelize}/data/ref_drill_metric.txt | 0 .../tests/panelize}/data/ref_dxf_complex.dxf | 0 .../tests/panelize}/data/ref_dxf_metric.dxf | 0 .../tests/panelize}/data/ref_gerber_inch.gtl | 0 .../panelize}/data/ref_gerber_metric.gtl | 0 .../data/ref_gerber_single_quadrant.gtl | 0 .../panelize}/expects/RS2724x_offset.gtl | 0 .../panelize}/expects/RS2724x_rotate.gtl | 0 .../tests/panelize}/expects/RS2724x_save.gtl | 0 .../expects/RS2724x_single_quadrant.gtl | 0 .../panelize}/expects/RS2724x_to_inch.gtl | 0 .../panelize}/expects/RS2724x_to_metric.gtl | 0 .../panelize}/expects/dxf_complex_fill.gtl | 0 .../expects/dxf_complex_fill_flip.gtl | 0 .../tests/panelize}/expects/dxf_offset.gtl | 0 .../panelize}/expects/dxf_rectangle_inch.gtl | 0 .../expects/dxf_rectangle_metric.gtl | 0 .../tests/panelize}/expects/dxf_rotate.gtl | 0 .../tests/panelize}/expects/dxf_save_fill.gtl | 0 .../expects/dxf_save_fill_simple.gtl | 0 .../tests/panelize}/expects/dxf_save_line.gtl | 0 .../tests/panelize}/expects/dxf_save_line.txt | 0 .../panelize}/expects/dxf_save_mousebites.gtl | 0 .../panelize}/expects/dxf_save_mousebites.txt | 0 .../tests/panelize}/expects/dxf_to_inch.gtl | 0 .../panelize}/expects/excellon_offset.txt | 0 .../panelize}/expects/excellon_rotate.txt | 0 .../tests/panelize}/expects/excellon_save.txt | 0 .../panelize}/expects/excellon_to_inch.txt | 0 .../panelize}/expects/excellon_to_metric.txt | 0 .../tests/panelize}/test_am_expression.py | 10 +- gerbonara/gerber/tests/panelize/test_dxf.py | 132 +++++++++++++++ .../gerber/tests/panelize/test_excellon.py | 60 +++++++ .../gerber/tests/panelize/test_rs274x.py | 66 ++++++++ .../gerber/tests/panelize}/test_utility.py | 4 +- tests/test_dxf.py | 153 ------------------ tests/test_excellon.py | 72 --------- tests/test_rs274x.py | 76 --------- 40 files changed, 263 insertions(+), 310 deletions(-) rename {tests => gerbonara/gerber/tests/panelize}/__init__.py (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_drill_inch.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_drill_metric.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_dxf_complex.dxf (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_dxf_metric.dxf (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_gerber_inch.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_gerber_metric.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/data/ref_gerber_single_quadrant.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/RS2724x_offset.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/RS2724x_rotate.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/RS2724x_save.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/RS2724x_single_quadrant.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/RS2724x_to_inch.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/RS2724x_to_metric.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_complex_fill.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_complex_fill_flip.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_offset.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_rectangle_inch.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_rectangle_metric.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_rotate.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_save_fill.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_save_fill_simple.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_save_line.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_save_line.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_save_mousebites.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_save_mousebites.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/dxf_to_inch.gtl (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/excellon_offset.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/excellon_rotate.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/excellon_save.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/excellon_to_inch.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/expects/excellon_to_metric.txt (100%) rename {tests => gerbonara/gerber/tests/panelize}/test_am_expression.py (96%) create mode 100644 gerbonara/gerber/tests/panelize/test_dxf.py create mode 100644 gerbonara/gerber/tests/panelize/test_excellon.py create mode 100644 gerbonara/gerber/tests/panelize/test_rs274x.py rename {tests => gerbonara/gerber/tests/panelize}/test_utility.py (95%) delete mode 100644 tests/test_dxf.py delete mode 100644 tests/test_excellon.py delete mode 100644 tests/test_rs274x.py diff --git a/tests/__init__.py b/gerbonara/gerber/tests/panelize/__init__.py similarity index 100% rename from tests/__init__.py rename to gerbonara/gerber/tests/panelize/__init__.py diff --git a/tests/data/ref_drill_inch.txt b/gerbonara/gerber/tests/panelize/data/ref_drill_inch.txt similarity index 100% rename from tests/data/ref_drill_inch.txt rename to gerbonara/gerber/tests/panelize/data/ref_drill_inch.txt diff --git a/tests/data/ref_drill_metric.txt b/gerbonara/gerber/tests/panelize/data/ref_drill_metric.txt similarity index 100% rename from tests/data/ref_drill_metric.txt rename to gerbonara/gerber/tests/panelize/data/ref_drill_metric.txt diff --git a/tests/data/ref_dxf_complex.dxf b/gerbonara/gerber/tests/panelize/data/ref_dxf_complex.dxf similarity index 100% rename from tests/data/ref_dxf_complex.dxf rename to gerbonara/gerber/tests/panelize/data/ref_dxf_complex.dxf diff --git a/tests/data/ref_dxf_metric.dxf b/gerbonara/gerber/tests/panelize/data/ref_dxf_metric.dxf similarity index 100% rename from tests/data/ref_dxf_metric.dxf rename to gerbonara/gerber/tests/panelize/data/ref_dxf_metric.dxf diff --git a/tests/data/ref_gerber_inch.gtl b/gerbonara/gerber/tests/panelize/data/ref_gerber_inch.gtl similarity index 100% rename from tests/data/ref_gerber_inch.gtl rename to gerbonara/gerber/tests/panelize/data/ref_gerber_inch.gtl diff --git a/tests/data/ref_gerber_metric.gtl b/gerbonara/gerber/tests/panelize/data/ref_gerber_metric.gtl similarity index 100% rename from tests/data/ref_gerber_metric.gtl rename to gerbonara/gerber/tests/panelize/data/ref_gerber_metric.gtl diff --git a/tests/data/ref_gerber_single_quadrant.gtl b/gerbonara/gerber/tests/panelize/data/ref_gerber_single_quadrant.gtl similarity index 100% rename from tests/data/ref_gerber_single_quadrant.gtl rename to gerbonara/gerber/tests/panelize/data/ref_gerber_single_quadrant.gtl diff --git a/tests/expects/RS2724x_offset.gtl b/gerbonara/gerber/tests/panelize/expects/RS2724x_offset.gtl similarity index 100% rename from tests/expects/RS2724x_offset.gtl rename to gerbonara/gerber/tests/panelize/expects/RS2724x_offset.gtl diff --git a/tests/expects/RS2724x_rotate.gtl b/gerbonara/gerber/tests/panelize/expects/RS2724x_rotate.gtl similarity index 100% rename from tests/expects/RS2724x_rotate.gtl rename to gerbonara/gerber/tests/panelize/expects/RS2724x_rotate.gtl diff --git a/tests/expects/RS2724x_save.gtl b/gerbonara/gerber/tests/panelize/expects/RS2724x_save.gtl similarity index 100% rename from tests/expects/RS2724x_save.gtl rename to gerbonara/gerber/tests/panelize/expects/RS2724x_save.gtl diff --git a/tests/expects/RS2724x_single_quadrant.gtl b/gerbonara/gerber/tests/panelize/expects/RS2724x_single_quadrant.gtl similarity index 100% rename from tests/expects/RS2724x_single_quadrant.gtl rename to gerbonara/gerber/tests/panelize/expects/RS2724x_single_quadrant.gtl diff --git a/tests/expects/RS2724x_to_inch.gtl b/gerbonara/gerber/tests/panelize/expects/RS2724x_to_inch.gtl similarity index 100% rename from tests/expects/RS2724x_to_inch.gtl rename to gerbonara/gerber/tests/panelize/expects/RS2724x_to_inch.gtl diff --git a/tests/expects/RS2724x_to_metric.gtl b/gerbonara/gerber/tests/panelize/expects/RS2724x_to_metric.gtl similarity index 100% rename from tests/expects/RS2724x_to_metric.gtl rename to gerbonara/gerber/tests/panelize/expects/RS2724x_to_metric.gtl diff --git a/tests/expects/dxf_complex_fill.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_complex_fill.gtl similarity index 100% rename from tests/expects/dxf_complex_fill.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_complex_fill.gtl diff --git a/tests/expects/dxf_complex_fill_flip.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_complex_fill_flip.gtl similarity index 100% rename from tests/expects/dxf_complex_fill_flip.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_complex_fill_flip.gtl diff --git a/tests/expects/dxf_offset.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_offset.gtl similarity index 100% rename from tests/expects/dxf_offset.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_offset.gtl diff --git a/tests/expects/dxf_rectangle_inch.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_rectangle_inch.gtl similarity index 100% rename from tests/expects/dxf_rectangle_inch.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_rectangle_inch.gtl diff --git a/tests/expects/dxf_rectangle_metric.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_rectangle_metric.gtl similarity index 100% rename from tests/expects/dxf_rectangle_metric.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_rectangle_metric.gtl diff --git a/tests/expects/dxf_rotate.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_rotate.gtl similarity index 100% rename from tests/expects/dxf_rotate.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_rotate.gtl diff --git a/tests/expects/dxf_save_fill.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_save_fill.gtl similarity index 100% rename from tests/expects/dxf_save_fill.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_save_fill.gtl diff --git a/tests/expects/dxf_save_fill_simple.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_save_fill_simple.gtl similarity index 100% rename from tests/expects/dxf_save_fill_simple.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_save_fill_simple.gtl diff --git a/tests/expects/dxf_save_line.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_save_line.gtl similarity index 100% rename from tests/expects/dxf_save_line.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_save_line.gtl diff --git a/tests/expects/dxf_save_line.txt b/gerbonara/gerber/tests/panelize/expects/dxf_save_line.txt similarity index 100% rename from tests/expects/dxf_save_line.txt rename to gerbonara/gerber/tests/panelize/expects/dxf_save_line.txt diff --git a/tests/expects/dxf_save_mousebites.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_save_mousebites.gtl similarity index 100% rename from tests/expects/dxf_save_mousebites.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_save_mousebites.gtl diff --git a/tests/expects/dxf_save_mousebites.txt b/gerbonara/gerber/tests/panelize/expects/dxf_save_mousebites.txt similarity index 100% rename from tests/expects/dxf_save_mousebites.txt rename to gerbonara/gerber/tests/panelize/expects/dxf_save_mousebites.txt diff --git a/tests/expects/dxf_to_inch.gtl b/gerbonara/gerber/tests/panelize/expects/dxf_to_inch.gtl similarity index 100% rename from tests/expects/dxf_to_inch.gtl rename to gerbonara/gerber/tests/panelize/expects/dxf_to_inch.gtl diff --git a/tests/expects/excellon_offset.txt b/gerbonara/gerber/tests/panelize/expects/excellon_offset.txt similarity index 100% rename from tests/expects/excellon_offset.txt rename to gerbonara/gerber/tests/panelize/expects/excellon_offset.txt diff --git a/tests/expects/excellon_rotate.txt b/gerbonara/gerber/tests/panelize/expects/excellon_rotate.txt similarity index 100% rename from tests/expects/excellon_rotate.txt rename to gerbonara/gerber/tests/panelize/expects/excellon_rotate.txt diff --git a/tests/expects/excellon_save.txt b/gerbonara/gerber/tests/panelize/expects/excellon_save.txt similarity index 100% rename from tests/expects/excellon_save.txt rename to gerbonara/gerber/tests/panelize/expects/excellon_save.txt diff --git a/tests/expects/excellon_to_inch.txt b/gerbonara/gerber/tests/panelize/expects/excellon_to_inch.txt similarity index 100% rename from tests/expects/excellon_to_inch.txt rename to gerbonara/gerber/tests/panelize/expects/excellon_to_inch.txt diff --git a/tests/expects/excellon_to_metric.txt b/gerbonara/gerber/tests/panelize/expects/excellon_to_metric.txt similarity index 100% rename from tests/expects/excellon_to_metric.txt rename to gerbonara/gerber/tests/panelize/expects/excellon_to_metric.txt diff --git a/tests/test_am_expression.py b/gerbonara/gerber/tests/panelize/test_am_expression.py similarity index 96% rename from tests/test_am_expression.py rename to gerbonara/gerber/tests/panelize/test_am_expression.py index cf30ab7..bed04a6 100644 --- a/tests/test_am_expression.py +++ b/gerbonara/gerber/tests/panelize/test_am_expression.py @@ -4,10 +4,10 @@ # Copyright 2019 Hiroshi Murayama import unittest -from gerbonara.gerber.panelize.am_expression import * -from gerbonara.gerber.panelize.am_expression import AMOperatorExpression as Op -from gerbonara.gerber.utils import inch, metric -from gerbonara.gerber.am_read import read_macro +from ...panelize.am_expression import * +from ...panelize.am_expression import AMOperatorExpression as Op +from ...utils import inch, metric +from ...am_read import read_macro class TestAMConstantExpression(unittest.TestCase): def setUp(self): @@ -204,5 +204,3 @@ class TestEvalMacro(unittest.TestCase): gerber += '${0}={1}*'.format(-number, expressions[0].to_gerber()) return gerber -if __name__ == '__main__': - unittest.main() diff --git a/gerbonara/gerber/tests/panelize/test_dxf.py b/gerbonara/gerber/tests/panelize/test_dxf.py new file mode 100644 index 0000000..dfd59d2 --- /dev/null +++ b/gerbonara/gerber/tests/panelize/test_dxf.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2019 Hiroshi Murayama + +import os +import tempfile +from pathlib import Path +from contextlib import contextmanager +import unittest +from ... import panelize +from ...utils import inch, metric + + +class TestExcellon(unittest.TestCase): + @classmethod + def setUpClass(cls): + here = Path(__file__).parent + cls.EXPECTSDIR = here / 'expects' + + cls.METRIC_FILE = here / 'data' / 'ref_dxf_metric.dxf' + cls.INCH_FILE = here / 'data' / 'ref_dxf_inch.dxf' + cls.COMPLEX_FILE = here / 'data' / 'ref_dxf_complex.dxf' + + @contextmanager + def _check_result(self, reference_fn): + with tempfile.NamedTemporaryFile('rb') as tmp_out: + yield tmp_out.name + + actual = tmp_out.read() + expected = (self.EXPECTSDIR / reference_fn).read_bytes() + self.assertEqual(actual, expected) + + def test_save_line(self): + with self._check_result('dxf_save_line.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.draw_mode = dxf.DM_LINE + dxf.width = 0.2 + dxf.write(outfile) + + def test_save_fill(self): + with self._check_result('dxf_save_fill.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.draw_mode = dxf.DM_FILL + dxf.write(outfile) + + def test_save_fill_simple(self): + with self._check_result('dxf_save_fill_simple.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.draw_mode = dxf.DM_FILL + dxf.fill_mode = dxf.FM_SIMPLE + dxf.write(outfile) + + def test_save_mousebites(self): + with self._check_result('dxf_save_mousebites.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.draw_mode = dxf.DM_MOUSE_BITES + dxf.width = 0.5 + dxf.pitch = 1.4 + dxf.write(outfile) + + def test_save_excellon(self): + with self._check_result('dxf_save_line.txt') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.draw_mode = dxf.DM_LINE + dxf.format = (3,3) + dxf.width = 0.2 + dxf.write(outfile, filetype=dxf.FT_EXCELLON) + + def test_save_excellon_mousebites(self): + with self._check_result('dxf_save_mousebites.txt') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.draw_mode = dxf.DM_MOUSE_BITES + dxf.format = (3, 3) + dxf.width = 0.5 + dxf.pitch = 1.4 + dxf.write(outfile, filetype=dxf.FT_EXCELLON) + + def test_to_inch(self): + with self._check_result('dxf_to_inch.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.to_inch() + dxf.format = (2, 5) + dxf.write(outfile) + + def _test_to_metric(self): + with self._check_result('dxf_to_metric.gtl') as outfile: + dxf = panelize.read(self.INCH_FILE) + dxf.to_metric() + dxf.format = (3, 5) + dxf.write(outfile) + + def test_offset(self): + with self._check_result('dxf_offset.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.offset(11, 5) + dxf.write(outfile) + + def test_rotate(self): + with self._check_result('dxf_rotate.gtl') as outfile: + dxf = panelize.read(self.METRIC_FILE) + dxf.rotate(20, (10, 10)) + dxf.write(outfile) + + def test_rectangle_metric(self): + with self._check_result('dxf_rectangle_metric.gtl') as outfile: + dxf = panelize.DxfFile.rectangle(width=10, height=10, units='metric') + dxf.write(outfile) + + def test_rectangle_inch(self): + with self._check_result('dxf_rectangle_inch.gtl') as outfile: + dxf = panelize.DxfFile.rectangle(width=inch(10), height=inch(10), units='inch') + dxf.write(outfile) + + def test_complex_fill(self): + with self._check_result('dxf_complex_fill.gtl') as outfile: + dxf = panelize.read(self.COMPLEX_FILE) + dxf.draw_mode = dxf.DM_FILL + dxf.write(outfile) + + def test_complex_fill_flip(self): + with self._check_result('dxf_complex_fill_flip.gtl') as outfile: + ctx = panelize.GerberComposition() + base = panelize.rectangle(width=100, height=100, left=0, bottom=0, units='metric') + base.draw_mode = base.DM_FILL + ctx.merge(base) + dxf = panelize.read(self.COMPLEX_FILE) + dxf.negate_polarity() + dxf.draw_mode = dxf.DM_FILL + ctx.merge(dxf) + ctx.dump(outfile) + diff --git a/gerbonara/gerber/tests/panelize/test_excellon.py b/gerbonara/gerber/tests/panelize/test_excellon.py new file mode 100644 index 0000000..1d255cc --- /dev/null +++ b/gerbonara/gerber/tests/panelize/test_excellon.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2019 Hiroshi Murayama + +import os +import tempfile +from pathlib import Path +from contextlib import contextmanager +import unittest +from ... import panelize + +class TestExcellon(unittest.TestCase): + @classmethod + def setUpClass(cls): + here = Path(__file__).parent + cls.EXPECTSDIR = here / 'expects' + cls.METRIC_FILE = here / 'data' / 'ref_drill_metric.txt' + cls.INCH_FILE = here / 'data' / 'ref_drill_inch.txt' + + @contextmanager + def _check_result(self, reference_fn): + with tempfile.NamedTemporaryFile('rb') as tmp_out: + yield tmp_out.name + + actual = tmp_out.read() + expected = (self.EXPECTSDIR / reference_fn).read_bytes() + self.assertEqual(actual, expected) + + def test_save(self): + with self._check_result('excellon_save.txt') as outfile: + drill = panelize.read(self.METRIC_FILE) + drill.write(outfile) + + def test_to_inch(self): + with self._check_result('excellon_to_inch.txt') as outfile: + drill = panelize.read(self.METRIC_FILE) + drill.to_inch() + drill.format = (2, 4) + drill.write(outfile) + + def test_to_metric(self): + with self._check_result('excellon_to_metric.txt') as outfile: + drill = panelize.read(self.INCH_FILE) + drill.to_metric() + drill.format = (3, 3) + drill.write(outfile) + + def test_offset(self): + with self._check_result('excellon_offset.txt') as outfile: + drill = panelize.read(self.METRIC_FILE) + drill.offset(11, 5) + drill.write(outfile) + + def test_rotate(self): + with self._check_result('excellon_rotate.txt') as outfile: + drill = panelize.read(self.METRIC_FILE) + drill.rotate(20, (10, 10)) + drill.write(outfile) + diff --git a/gerbonara/gerber/tests/panelize/test_rs274x.py b/gerbonara/gerber/tests/panelize/test_rs274x.py new file mode 100644 index 0000000..85748a3 --- /dev/null +++ b/gerbonara/gerber/tests/panelize/test_rs274x.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2019 Hiroshi Murayama + +import os +import tempfile +from pathlib import Path +from contextlib import contextmanager +import unittest +from ... import panelize + +class TestRs274x(unittest.TestCase): + @classmethod + def setUpClass(cls): + here = Path(__file__).parent + cls.EXPECTSDIR = here / 'expects' + cls.METRIC_FILE = here / 'data' / 'ref_gerber_metric.gtl' + cls.INCH_FILE = here / 'data' / 'ref_gerber_inch.gtl' + cls.SQ_FILE = here / 'data' / 'ref_gerber_single_quadrant.gtl' + + @contextmanager + def _check_result(self, reference_fn): + with tempfile.NamedTemporaryFile('rb') as tmp_out: + yield tmp_out.name + + actual = tmp_out.read() + expected = (self.EXPECTSDIR / reference_fn).read_bytes() + self.assertEqual(actual, expected) + + def test_save(self): + with self._check_result('RS2724x_save.gtl') as outfile: + gerber = panelize.read(self.METRIC_FILE) + gerber.write(outfile) + + def test_to_inch(self): + with self._check_result('RS2724x_to_inch.gtl') as outfile: + gerber = panelize.read(self.METRIC_FILE) + gerber.to_inch() + gerber.format = (2,5) + gerber.write(outfile) + + def test_to_metric(self): + with self._check_result('RS2724x_to_metric.gtl') as outfile: + gerber = panelize.read(self.INCH_FILE) + gerber.to_metric() + gerber.format = (3, 4) + gerber.write(outfile) + + def test_offset(self): + with self._check_result('RS2724x_offset.gtl') as outfile: + gerber = panelize.read(self.METRIC_FILE) + gerber.offset(11, 5) + gerber.write(outfile) + + def test_rotate(self): + with self._check_result('RS2724x_rotate.gtl') as outfile: + gerber = panelize.read(self.METRIC_FILE) + gerber.rotate(20, (10,10)) + gerber.write(outfile) + + def test_single_quadrant(self): + with self._check_result('RS2724x_single_quadrant.gtl') as outfile: + gerber = panelize.read(self.SQ_FILE) + gerber.write(outfile) + diff --git a/tests/test_utility.py b/gerbonara/gerber/tests/panelize/test_utility.py similarity index 95% rename from tests/test_utility.py rename to gerbonara/gerber/tests/panelize/test_utility.py index d7a4101..b32af8b 100644 --- a/tests/test_utility.py +++ b/gerbonara/gerber/tests/panelize/test_utility.py @@ -5,7 +5,7 @@ import unittest -from gerbonara.gerber.panelize.utility import * +from ...panelize.utility import * from math import sqrt class TestUtility(unittest.TestCase): @@ -61,5 +61,3 @@ class TestUtility(unittest.TestCase): self.assertFalse(is_equal_point(p1, p0, 0.001)) self.assertFalse(is_equal_point(p1, p0)) -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_dxf.py b/tests/test_dxf.py deleted file mode 100644 index e138320..0000000 --- a/tests/test_dxf.py +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright 2019 Hiroshi Murayama - -import os -import unittest -from gerbonara.gerber import panelize -from gerbonara.gerber.utils import inch, metric - - -class TestExcellon(unittest.TestCase): - @classmethod - def setUpClass(cls): - os.chdir(os.path.dirname(__file__)) - cls.INDIR = 'data' - cls.OUTDIR = 'outputs' - cls.EXPECTSDIR = 'expects' - cls.OUTPREFIX = 'dxf_' - cls.METRIC_FILE = os.path.join(cls.INDIR, 'ref_dxf_metric.dxf') - cls.INCH_FILE = os.path.join(cls.INDIR, 'ref_dxf_inch.dxf') - cls.COMPLEX_FILE = os.path.join(cls.INDIR, 'ref_dxf_complex.dxf') - try: - os.mkdir(cls.OUTDIR) - except FileExistsError: - pass - - def _checkResult(self, file): - with open(file, 'r') as f: - data = f.read() - with open(os.path.join(self.EXPECTSDIR, os.path.basename(file)), 'r') as f: - expect = f.read() - self.assertEqual(data, expect) - - def test_save_line(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'save_line.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.draw_mode = dxf.DM_LINE - dxf.width = 0.2 - dxf.write(outfile) - self._checkResult(outfile) - - def test_save_fill(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'save_fill.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.draw_mode = dxf.DM_FILL - dxf.write(outfile) - self._checkResult(outfile) - - def test_save_fill_simple(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'save_fill_simple.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.draw_mode = dxf.DM_FILL - dxf.fill_mode = dxf.FM_SIMPLE - dxf.write(outfile) - self._checkResult(outfile) - - def test_save_mousebites(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'save_mousebites.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.draw_mode = dxf.DM_MOUSE_BITES - dxf.width = 0.5 - dxf.pitch = 1.4 - dxf.write(outfile) - self._checkResult(outfile) - - def test_save_excellon(self): - outfile = os.path.join( - self.OUTDIR, self.OUTPREFIX + 'save_line.txt') - dxf = panelize.read(self.METRIC_FILE) - dxf.draw_mode = dxf.DM_LINE - dxf.format = (3,3) - dxf.width = 0.2 - dxf.write(outfile, filetype=dxf.FT_EXCELLON) - self._checkResult(outfile) - - def test_save_excellon_mousebites(self): - outfile = os.path.join( - self.OUTDIR, self.OUTPREFIX + 'save_mousebites.txt') - dxf = panelize.read(self.METRIC_FILE) - dxf.draw_mode = dxf.DM_MOUSE_BITES - dxf.format = (3, 3) - dxf.width = 0.5 - dxf.pitch = 1.4 - dxf.write(outfile, filetype=dxf.FT_EXCELLON) - self._checkResult(outfile) - - def test_to_inch(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'to_inch.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.to_inch() - dxf.format = (2, 5) - dxf.write(outfile) - self._checkResult(outfile) - - def _test_to_metric(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'to_metric.gtl') - dxf = panelize.read(self.INCH_FILE) - dxf.to_metric() - dxf.format = (3, 5) - dxf.write(outfile) - self._checkResult(outfile) - - def test_offset(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'offset.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.offset(11, 5) - dxf.write(outfile) - self._checkResult(outfile) - - def test_rotate(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'rotate.gtl') - dxf = panelize.read(self.METRIC_FILE) - dxf.rotate(20, (10, 10)) - dxf.write(outfile) - self._checkResult(outfile) - - def test_rectangle_metric(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'rectangle_metric.gtl') - dxf = panelize.DxfFile.rectangle(width=10, height=10, units='metric') - dxf.write(outfile) - self._checkResult(outfile) - - def test_rectangle_inch(self): - outfile = os.path.join( - self.OUTDIR, self.OUTPREFIX + 'rectangle_inch.gtl') - dxf = panelize.DxfFile.rectangle(width=inch(10), height=inch(10), units='inch') - dxf.write(outfile) - self._checkResult(outfile) - - def test_complex_fill(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'complex_fill.gtl') - dxf = panelize.read(self.COMPLEX_FILE) - dxf.draw_mode = dxf.DM_FILL - dxf.write(outfile) - self._checkResult(outfile) - - def test_complex_fill_flip(self): - outfile = os.path.join( - self.OUTDIR, self.OUTPREFIX + 'complex_fill_flip.gtl') - ctx = panelize.GerberComposition() - base = panelize.rectangle(width=100, height=100, left=0, bottom=0, units='metric') - base.draw_mode = base.DM_FILL - ctx.merge(base) - dxf = panelize.read(self.COMPLEX_FILE) - dxf.negate_polarity() - dxf.draw_mode = dxf.DM_FILL - ctx.merge(dxf) - ctx.dump(outfile) - self._checkResult(outfile) - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_excellon.py b/tests/test_excellon.py deleted file mode 100644 index 4aa6dcf..0000000 --- a/tests/test_excellon.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright 2019 Hiroshi Murayama - -import os -import unittest -from gerbonara.gerber import panelize - - -class TestExcellon(unittest.TestCase): - @classmethod - def setUpClass(cls): - os.chdir(os.path.dirname(__file__)) - cls.INDIR = 'data' - cls.OUTDIR = 'outputs' - cls.EXPECTSDIR = 'expects' - cls.OUTPREFIX = 'excellon_' - cls.METRIC_FILE = os.path.join(cls.INDIR, 'ref_drill_metric.txt') - cls.INCH_FILE = os.path.join(cls.INDIR, 'ref_drill_inch.txt') - try: - os.mkdir(cls.OUTDIR) - except FileExistsError: - pass - - def _checkResult(self, file): - with open(file, 'r') as f: - data = f.read() - with open(os.path.join(self.EXPECTSDIR, os.path.basename(file)), 'r') as f: - expect = f.read() - self.assertEqual(data, expect) - pass - - def test_save(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'save.txt') - drill = panelize.read(self.METRIC_FILE) - drill.write(outfile) - self._checkResult(outfile) - - def test_to_inch(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'to_inch.txt') - drill = panelize.read(self.METRIC_FILE) - drill.to_inch() - drill.format = (2, 4) - drill.write(outfile) - self._checkResult(outfile) - - def test_to_metric(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'to_metric.txt') - drill = panelize.read(self.INCH_FILE) - drill.to_metric() - drill.format = (3, 3) - drill.write(outfile) - self._checkResult(outfile) - - def test_offset(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'offset.txt') - drill = panelize.read(self.METRIC_FILE) - drill.offset(11, 5) - drill.write(outfile) - self._checkResult(outfile) - - def test_rotate(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'rotate.txt') - drill = panelize.read(self.METRIC_FILE) - drill.rotate(20, (10, 10)) - drill.write(outfile) - self._checkResult(outfile) - - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_rs274x.py b/tests/test_rs274x.py deleted file mode 100644 index 1a1475a..0000000 --- a/tests/test_rs274x.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# Copyright 2019 Hiroshi Murayama - -import os -import unittest -from gerbonara.gerber import panelize - -class TestRs274x(unittest.TestCase): - @classmethod - def setUpClass(cls): - os.chdir(os.path.dirname(__file__)) - cls.INDIR = 'data' - cls.OUTDIR = 'outputs' - cls.EXPECTSDIR = 'expects' - cls.OUTPREFIX = 'RS2724x_' - cls.METRIC_FILE = os.path.join(cls.INDIR, 'ref_gerber_metric.gtl') - cls.INCH_FILE = os.path.join(cls.INDIR, 'ref_gerber_inch.gtl') - cls.SQ_FILE = os.path.join(cls.INDIR, 'ref_gerber_single_quadrant.gtl') - try: - os.mkdir(cls.OUTDIR) - except FileExistsError: - pass - - def _checkResult(self, file): - with open(file, 'r') as f: - data = f.read() - with open(os.path.join(self.EXPECTSDIR, os.path.basename(file)), 'r') as f: - expect = f.read() - self.assertEqual(data, expect) - - def test_save(self): - outfile=os.path.join(self.OUTDIR, self.OUTPREFIX + 'save.gtl') - gerber = panelize.read(self.METRIC_FILE) - gerber.write(outfile) - self._checkResult(outfile) - - def test_to_inch(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'to_inch.gtl') - gerber = panelize.read(self.METRIC_FILE) - gerber.to_inch() - gerber.format = (2,5) - gerber.write(outfile) - self._checkResult(outfile) - - def test_to_metric(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'to_metric.gtl') - gerber = panelize.read(self.INCH_FILE) - gerber.to_metric() - gerber.format = (3, 4) - gerber.write(outfile) - self._checkResult(outfile) - - def test_offset(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'offset.gtl') - gerber = panelize.read(self.METRIC_FILE) - gerber.offset(11, 5) - gerber.write(outfile) - self._checkResult(outfile) - - def test_rotate(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'rotate.gtl') - gerber = panelize.read(self.METRIC_FILE) - gerber.rotate(20, (10,10)) - gerber.write(outfile) - self._checkResult(outfile) - - def test_single_quadrant(self): - outfile = os.path.join(self.OUTDIR, self.OUTPREFIX + 'single_quadrant.gtl') - gerber = panelize.read(self.SQ_FILE) - gerber.write(outfile) - self._checkResult(outfile) - -if __name__ == '__main__': - unittest.main()