summaryrefslogtreecommitdiff
path: root/gerber/tests/test_cam.py
diff options
context:
space:
mode:
authorjaseg <git@jaseg.de>2021-06-06 13:25:45 +0200
committerjaseg <git@jaseg.de>2021-06-06 13:25:45 +0200
commit5a5ba2b709f01b2100cd767a25a41737541ad53c (patch)
tree6362ca960945e08d4a77b7f059e971e6099217c9 /gerber/tests/test_cam.py
parent8bad573131e4c91782425d81a141dd656b622d7b (diff)
parent72257258edf16cbda691483ef1fa722192ac0d38 (diff)
downloadgerbonara-5a5ba2b709f01b2100cd767a25a41737541ad53c.tar.gz
gerbonara-5a5ba2b709f01b2100cd767a25a41737541ad53c.tar.bz2
gerbonara-5a5ba2b709f01b2100cd767a25a41737541ad53c.zip
Graft pcb-tools upstream onto gerbonara tree
Diffstat (limited to 'gerber/tests/test_cam.py')
-rw-r--r--gerber/tests/test_cam.py151
1 files changed, 151 insertions, 0 deletions
diff --git a/gerber/tests/test_cam.py b/gerber/tests/test_cam.py
new file mode 100644
index 0000000..8a71a32
--- /dev/null
+++ b/gerber/tests/test_cam.py
@@ -0,0 +1,151 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Author: Hamilton Kibbe <ham@hamiltonkib.be>
+
+import pytest
+
+from ..cam import CamFile, FileSettings
+
+
+def test_filesettings_defaults():
+ """ Test FileSettings default values
+ """
+ fs = FileSettings()
+ assert fs.format == (2, 5)
+ assert fs.notation == "absolute"
+ assert fs.zero_suppression == "trailing"
+ assert fs.units == "inch"
+
+
+def test_filesettings_dict():
+ """ Test FileSettings Dict
+ """
+ fs = FileSettings()
+ assert fs["format"] == (2, 5)
+ assert fs["notation"] == "absolute"
+ assert fs["zero_suppression"] == "trailing"
+ assert fs["units"] == "inch"
+
+
+def test_filesettings_assign():
+ """ Test FileSettings attribute assignment
+ """
+ fs = FileSettings()
+ fs.units = "test1"
+ fs.notation = "test2"
+ fs.zero_suppression = "test3"
+ fs.format = "test4"
+ assert fs.units == "test1"
+ assert fs.notation == "test2"
+ assert fs.zero_suppression == "test3"
+ assert fs.format == "test4"
+
+
+def test_filesettings_dict_assign():
+ """ Test FileSettings dict-style attribute assignment
+ """
+ fs = FileSettings()
+ fs["units"] = "metric"
+ fs["notation"] = "incremental"
+ fs["zero_suppression"] = "leading"
+ fs["format"] = (1, 2)
+ assert fs.units == "metric"
+ assert fs.notation == "incremental"
+ assert fs.zero_suppression == "leading"
+ assert fs.format == (1, 2)
+
+
+def test_camfile_init():
+ """ Smoke test CamFile test
+ """
+ cf = CamFile()
+
+
+def test_camfile_settings():
+ """ Test CamFile Default Settings
+ """
+ cf = CamFile()
+ assert cf.settings == FileSettings()
+
+
+def test_bounds_override_smoketest():
+ cf = CamFile()
+ cf.bounds
+
+
+def test_zeros():
+ """ Test zero/zero_suppression interaction
+ """
+ fs = FileSettings()
+ assert fs.zero_suppression == "trailing"
+ assert fs.zeros == "leading"
+
+ fs["zero_suppression"] = "leading"
+ assert fs.zero_suppression == "leading"
+ assert fs.zeros == "trailing"
+
+ fs.zero_suppression = "trailing"
+ assert fs.zero_suppression == "trailing"
+ assert fs.zeros == "leading"
+
+ fs["zeros"] = "trailing"
+ assert fs.zeros == "trailing"
+ assert fs.zero_suppression == "leading"
+
+ fs.zeros = "leading"
+ assert fs.zeros == "leading"
+ assert fs.zero_suppression == "trailing"
+
+ fs = FileSettings(zeros="leading")
+ assert fs.zeros == "leading"
+ assert fs.zero_suppression == "trailing"
+
+ fs = FileSettings(zero_suppression="leading")
+ assert fs.zeros == "trailing"
+ assert fs.zero_suppression == "leading"
+
+ fs = FileSettings(zeros="leading", zero_suppression="trailing")
+ assert fs.zeros == "leading"
+ assert fs.zero_suppression == "trailing"
+
+ fs = FileSettings(zeros="trailing", zero_suppression="leading")
+ assert fs.zeros == "trailing"
+ assert fs.zero_suppression == "leading"
+
+
+def test_filesettings_validation():
+ """ Test FileSettings constructor argument validation
+ """
+ # absolute-ish is not a valid notation
+ pytest.raises(ValueError, FileSettings, "absolute-ish", "inch", None, (2, 5), None)
+
+ # degrees kelvin isn't a valid unit for a CAM file
+ pytest.raises(
+ ValueError, FileSettings, "absolute", "degrees kelvin", None, (2, 5), None
+ )
+
+ pytest.raises(
+ ValueError, FileSettings, "absolute", "inch", "leading", (2, 5), "leading"
+ )
+
+ # Technnically this should be an error, but Eangle files often do this incorrectly so we
+ # allow it
+ # pytest.raises(ValueError, FileSettings, 'absolute',
+ # 'inch', 'following', (2, 5), None)
+
+ pytest.raises(
+ ValueError, FileSettings, "absolute", "inch", None, (2, 5), "following"
+ )
+ pytest.raises(ValueError, FileSettings, "absolute", "inch", None, (2, 5, 6), None)
+
+
+def test_key_validation():
+ fs = FileSettings()
+ pytest.raises(KeyError, fs.__getitem__, "octopus")
+ pytest.raises(KeyError, fs.__setitem__, "octopus", "do not care")
+ pytest.raises(ValueError, fs.__setitem__, "notation", "absolute-ish")
+ pytest.raises(ValueError, fs.__setitem__, "units", "degrees kelvin")
+ pytest.raises(ValueError, fs.__setitem__, "zero_suppression", "following")
+ pytest.raises(ValueError, fs.__setitem__, "zeros", "following")
+ pytest.raises(ValueError, fs.__setitem__, "format", (2, 5, 6))