summaryrefslogtreecommitdiff
path: root/gerber/tests/test_excellon_statements.py
diff options
context:
space:
mode:
Diffstat (limited to 'gerber/tests/test_excellon_statements.py')
-rw-r--r--gerber/tests/test_excellon_statements.py734
1 files changed, 0 insertions, 734 deletions
diff --git a/gerber/tests/test_excellon_statements.py b/gerber/tests/test_excellon_statements.py
deleted file mode 100644
index 41fe294..0000000
--- a/gerber/tests/test_excellon_statements.py
+++ /dev/null
@@ -1,734 +0,0 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# Author: Hamilton Kibbe <ham@hamiltonkib.be>
-
-import pytest
-from ..excellon_statements import *
-from ..cam import FileSettings
-
-
-def test_excellon_statement_implementation():
- stmt = ExcellonStatement()
- pytest.raises(NotImplementedError, stmt.from_excellon, None)
- pytest.raises(NotImplementedError, stmt.to_excellon)
-
-
-def test_excellontstmt():
- """ Smoke test ExcellonStatement
- """
- stmt = ExcellonStatement()
- stmt.to_inch()
- stmt.to_metric()
- stmt.offset()
-
-
-def test_excellontool_factory():
- """ Test ExcellonTool factory methods
- """
- exc_line = "T8F01B02S00003H04Z05C0.12500"
- settings = FileSettings(
- format=(2, 5), zero_suppression="trailing", units="inch", notation="absolute"
- )
- tool = ExcellonTool.from_excellon(exc_line, settings)
- assert tool.number == 8
- assert tool.diameter == 0.125
- assert tool.feed_rate == 1
- assert tool.retract_rate == 2
- assert tool.rpm == 3
- assert tool.max_hit_count == 4
- assert tool.depth_offset == 5
-
- stmt = {
- "number": 8,
- "feed_rate": 1,
- "retract_rate": 2,
- "rpm": 3,
- "diameter": 0.125,
- "max_hit_count": 4,
- "depth_offset": 5,
- }
- tool = ExcellonTool.from_dict(settings, stmt)
- assert tool.number == 8
- assert tool.diameter == 0.125
- assert tool.feed_rate == 1
- assert tool.retract_rate == 2
- assert tool.rpm == 3
- assert tool.max_hit_count == 4
- assert tool.depth_offset == 5
-
-
-def test_excellontool_dump():
- """ Test ExcellonTool to_excellon()
- """
- exc_lines = [
- "T01F0S0C0.01200",
- "T02F0S0C0.01500",
- "T03F0S0C0.01968",
- "T04F0S0C0.02800",
- "T05F0S0C0.03300",
- "T06F0S0C0.03800",
- "T07F0S0C0.04300",
- "T08F0S0C0.12500",
- "T09F0S0C0.13000",
- "T08B01F02H03S00003C0.12500Z04",
- "T01F0S300.999C0.01200",
- ]
- settings = FileSettings(
- format=(2, 5), zero_suppression="trailing", units="inch", notation="absolute"
- )
- for line in exc_lines:
- tool = ExcellonTool.from_excellon(line, settings)
- assert tool.to_excellon() == line
-
-
-def test_excellontool_order():
- settings = FileSettings(
- format=(2, 5), zero_suppression="trailing", units="inch", notation="absolute"
- )
- line = "T8F00S00C0.12500"
- tool1 = ExcellonTool.from_excellon(line, settings)
- line = "T8C0.12500F00S00"
- tool2 = ExcellonTool.from_excellon(line, settings)
- assert tool1.diameter == tool2.diameter
- assert tool1.feed_rate == tool2.feed_rate
- assert tool1.rpm == tool2.rpm
-
-
-def test_excellontool_conversion():
- tool = ExcellonTool.from_dict(
- FileSettings(units="metric"), {"number": 8, "diameter": 25.4}
- )
- tool.to_inch()
- assert tool.diameter == 1.0
- tool = ExcellonTool.from_dict(
- FileSettings(units="inch"), {"number": 8, "diameter": 1.0}
- )
- tool.to_metric()
- assert tool.diameter == 25.4
-
- # Shouldn't change units if we're already using target units
- tool = ExcellonTool.from_dict(
- FileSettings(units="inch"), {"number": 8, "diameter": 25.4}
- )
- tool.to_inch()
- assert tool.diameter == 25.4
- tool = ExcellonTool.from_dict(
- FileSettings(units="metric"), {"number": 8, "diameter": 1.0}
- )
- tool.to_metric()
- assert tool.diameter == 1.0
-
-
-def test_excellontool_repr():
- tool = ExcellonTool.from_dict(FileSettings(), {"number": 8, "diameter": 0.125})
- assert str(tool) == "<ExcellonTool 08: 0.125in. dia.>"
- tool = ExcellonTool.from_dict(
- FileSettings(units="metric"), {"number": 8, "diameter": 0.125}
- )
- assert str(tool) == "<ExcellonTool 08: 0.125mm dia.>"
-
-
-def test_excellontool_equality():
- t = ExcellonTool.from_dict(FileSettings(), {"number": 8, "diameter": 0.125})
- t1 = ExcellonTool.from_dict(FileSettings(), {"number": 8, "diameter": 0.125})
- assert t == t1
- t1 = ExcellonTool.from_dict(
- FileSettings(units="metric"), {"number": 8, "diameter": 0.125}
- )
- assert t != t1
-
-
-def test_toolselection_factory():
- """ Test ToolSelectionStmt factory method
- """
- stmt = ToolSelectionStmt.from_excellon("T01")
- assert stmt.tool == 1
- assert stmt.compensation_index == None
- stmt = ToolSelectionStmt.from_excellon("T0223")
- assert stmt.tool == 2
- assert stmt.compensation_index == 23
- stmt = ToolSelectionStmt.from_excellon("T042")
- assert stmt.tool == 42
- assert stmt.compensation_index == None
-
-
-def test_toolselection_dump():
- """ Test ToolSelectionStmt to_excellon()
- """
- lines = ["T01", "T0223", "T10", "T09", "T0000"]
- for line in lines:
- stmt = ToolSelectionStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_z_axis_infeed_rate_factory():
- """ Test ZAxisInfeedRateStmt factory method
- """
- stmt = ZAxisInfeedRateStmt.from_excellon("F01")
- assert stmt.rate == 1
- stmt = ZAxisInfeedRateStmt.from_excellon("F2")
- assert stmt.rate == 2
- stmt = ZAxisInfeedRateStmt.from_excellon("F03")
- assert stmt.rate == 3
-
-
-def test_z_axis_infeed_rate_dump():
- """ Test ZAxisInfeedRateStmt to_excellon()
- """
- inputs = [("F01", "F01"), ("F2", "F02"), ("F00003", "F03")]
- for input_rate, expected_output in inputs:
- stmt = ZAxisInfeedRateStmt.from_excellon(input_rate)
- assert stmt.to_excellon() == expected_output
-
-
-def test_coordinatestmt_factory():
- """ Test CoordinateStmt factory method
- """
- settings = FileSettings(
- format=(2, 5), zero_suppression="trailing", units="inch", notation="absolute"
- )
-
- line = "X0278207Y0065293"
- stmt = CoordinateStmt.from_excellon(line, settings)
- assert stmt.x == 2.78207
- assert stmt.y == 0.65293
-
- # line = 'X02945'
- # stmt = CoordinateStmt.from_excellon(line)
- # assert_equal(stmt.x, 2.945)
-
- # line = 'Y00575'
- # stmt = CoordinateStmt.from_excellon(line)
- # assert_equal(stmt.y, 0.575)
-
- settings = FileSettings(
- format=(2, 4), zero_suppression="leading", units="inch", notation="absolute"
- )
-
- line = "X9660Y4639"
- stmt = CoordinateStmt.from_excellon(line, settings)
- assert stmt.x == 0.9660
- assert stmt.y == 0.4639
- assert stmt.to_excellon(settings) == "X9660Y4639"
- assert stmt.units == "inch"
-
- settings.units = "metric"
- stmt = CoordinateStmt.from_excellon(line, settings)
- assert stmt.units == "metric"
-
-
-def test_coordinatestmt_dump():
- """ Test CoordinateStmt to_excellon()
- """
- lines = [
- "X278207Y65293",
- "X243795",
- "Y82528",
- "Y86028",
- "X251295Y81528",
- "X2525Y78",
- "X255Y575",
- "Y52",
- "X2675",
- "Y575",
- "X2425",
- "Y52",
- "X23",
- ]
- settings = FileSettings(
- format=(2, 4), zero_suppression="leading", units="inch", notation="absolute"
- )
- for line in lines:
- stmt = CoordinateStmt.from_excellon(line, settings)
- assert stmt.to_excellon(settings) == line
-
-
-def test_coordinatestmt_conversion():
-
- settings = FileSettings()
- settings.units = "metric"
- stmt = CoordinateStmt.from_excellon("X254Y254", settings)
-
- # No effect
- stmt.to_metric()
- assert stmt.x == 25.4
- assert stmt.y == 25.4
-
- stmt.to_inch()
- assert stmt.units == "inch"
- assert stmt.x == 1.0
- assert stmt.y == 1.0
-
- # No effect
- stmt.to_inch()
- assert stmt.x == 1.0
- assert stmt.y == 1.0
-
- settings.units = "inch"
- stmt = CoordinateStmt.from_excellon("X01Y01", settings)
-
- # No effect
- stmt.to_inch()
- assert stmt.x == 1.0
- assert stmt.y == 1.0
-
- stmt.to_metric()
- assert stmt.units == "metric"
- assert stmt.x == 25.4
- assert stmt.y == 25.4
-
- # No effect
- stmt.to_metric()
- assert stmt.x == 25.4
- assert stmt.y == 25.4
-
-
-def test_coordinatestmt_offset():
- stmt = CoordinateStmt.from_excellon("X01Y01", FileSettings())
- stmt.offset()
- assert stmt.x == 1
- assert stmt.y == 1
- stmt.offset(1, 0)
- assert stmt.x == 2.0
- assert stmt.y == 1.0
- stmt.offset(0, 1)
- assert stmt.x == 2.0
- assert stmt.y == 2.0
-
-
-def test_coordinatestmt_string():
- settings = FileSettings(
- format=(2, 4), zero_suppression="leading", units="inch", notation="absolute"
- )
- stmt = CoordinateStmt.from_excellon("X9660Y4639", settings)
- assert str(stmt) == "<Coordinate Statement: X: 0.966 Y: 0.4639 >"
-
-
-def test_repeathole_stmt_factory():
- stmt = RepeatHoleStmt.from_excellon(
- "R0004X015Y32", FileSettings(zeros="leading", units="inch")
- )
- assert stmt.count == 4
- assert stmt.xdelta == 1.5
- assert stmt.ydelta == 32
- assert stmt.units == "inch"
-
- stmt = RepeatHoleStmt.from_excellon(
- "R0004X015Y32", FileSettings(zeros="leading", units="metric")
- )
- assert stmt.units == "metric"
-
-
-def test_repeatholestmt_dump():
- line = "R4X015Y32"
- stmt = RepeatHoleStmt.from_excellon(line, FileSettings())
- assert stmt.to_excellon(FileSettings()) == line
-
-
-def test_repeatholestmt_conversion():
- line = "R4X0254Y254"
- settings = FileSettings()
- settings.units = "metric"
- stmt = RepeatHoleStmt.from_excellon(line, settings)
-
- # No effect
- stmt.to_metric()
- assert stmt.xdelta == 2.54
- assert stmt.ydelta == 25.4
-
- stmt.to_inch()
- assert stmt.units == "inch"
- assert stmt.xdelta == 0.1
- assert stmt.ydelta == 1.0
-
- # no effect
- stmt.to_inch()
- assert stmt.xdelta == 0.1
- assert stmt.ydelta == 1.0
-
- line = "R4X01Y1"
- settings.units = "inch"
- stmt = RepeatHoleStmt.from_excellon(line, settings)
-
- # no effect
- stmt.to_inch()
- assert stmt.xdelta == 1.0
- assert stmt.ydelta == 10.0
-
- stmt.to_metric()
- assert stmt.units == "metric"
- assert stmt.xdelta == 25.4
- assert stmt.ydelta == 254.0
-
- # No effect
- stmt.to_metric()
- assert stmt.xdelta == 25.4
- assert stmt.ydelta == 254.0
-
-
-def test_repeathole_str():
- stmt = RepeatHoleStmt.from_excellon("R4X015Y32", FileSettings())
- assert str(stmt) == "<Repeat Hole: 4 times, offset X: 1.5 Y: 32>"
-
-
-def test_commentstmt_factory():
- """ Test CommentStmt factory method
- """
- line = ";Layer_Color=9474304"
- stmt = CommentStmt.from_excellon(line)
- assert stmt.comment == line[1:]
-
- line = ";FILE_FORMAT=2:5"
- stmt = CommentStmt.from_excellon(line)
- assert stmt.comment == line[1:]
-
- line = ";TYPE=PLATED"
- stmt = CommentStmt.from_excellon(line)
- assert stmt.comment == line[1:]
-
-
-def test_commentstmt_dump():
- """ Test CommentStmt to_excellon()
- """
- lines = [";Layer_Color=9474304", ";FILE_FORMAT=2:5", ";TYPE=PLATED"]
- for line in lines:
- stmt = CommentStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_header_begin_stmt():
- stmt = HeaderBeginStmt()
- assert stmt.to_excellon(None) == "M48"
-
-
-def test_header_end_stmt():
- stmt = HeaderEndStmt()
- assert stmt.to_excellon(None) == "M95"
-
-
-def test_rewindstop_stmt():
- stmt = RewindStopStmt()
- assert stmt.to_excellon(None) == "%"
-
-
-def test_z_axis_rout_position_stmt():
- stmt = ZAxisRoutPositionStmt()
- assert stmt.to_excellon(None) == "M15"
-
-
-def test_retract_with_clamping_stmt():
- stmt = RetractWithClampingStmt()
- assert stmt.to_excellon(None) == "M16"
-
-
-def test_retract_without_clamping_stmt():
- stmt = RetractWithoutClampingStmt()
- assert stmt.to_excellon(None) == "M17"
-
-
-def test_cutter_compensation_off_stmt():
- stmt = CutterCompensationOffStmt()
- assert stmt.to_excellon(None) == "G40"
-
-
-def test_cutter_compensation_left_stmt():
- stmt = CutterCompensationLeftStmt()
- assert stmt.to_excellon(None) == "G41"
-
-
-def test_cutter_compensation_right_stmt():
- stmt = CutterCompensationRightStmt()
- assert stmt.to_excellon(None) == "G42"
-
-
-def test_endofprogramstmt_factory():
- settings = FileSettings(units="inch")
- stmt = EndOfProgramStmt.from_excellon("M30X01Y02", settings)
- assert stmt.x == 1.0
- assert stmt.y == 2.0
- assert stmt.units == "inch"
- settings.units = "metric"
- stmt = EndOfProgramStmt.from_excellon("M30X01", settings)
- assert stmt.x == 1.0
- assert stmt.y == None
- assert stmt.units == "metric"
- stmt = EndOfProgramStmt.from_excellon("M30Y02", FileSettings())
- assert stmt.x == None
- assert stmt.y == 2.0
-
-
-def test_endofprogramStmt_dump():
- lines = ["M30X01Y02"]
- for line in lines:
- stmt = EndOfProgramStmt.from_excellon(line, FileSettings())
- assert stmt.to_excellon(FileSettings()) == line
-
-
-def test_endofprogramstmt_conversion():
- settings = FileSettings()
- settings.units = "metric"
- stmt = EndOfProgramStmt.from_excellon("M30X0254Y254", settings)
- # No effect
- stmt.to_metric()
- assert stmt.x == 2.54
- assert stmt.y == 25.4
-
- stmt.to_inch()
- assert stmt.units == "inch"
- assert stmt.x == 0.1
- assert stmt.y == 1.0
-
- # No effect
- stmt.to_inch()
- assert stmt.x == 0.1
- assert stmt.y == 1.0
-
- settings.units = "inch"
- stmt = EndOfProgramStmt.from_excellon("M30X01Y1", settings)
-
- # No effect
- stmt.to_inch()
- assert stmt.x == 1.0
- assert stmt.y == 10.0
-
- stmt.to_metric()
- assert stmt.units == "metric"
- assert stmt.x == 25.4
- assert stmt.y == 254.0
-
- # No effect
- stmt.to_metric()
- assert stmt.x == 25.4
- assert stmt.y == 254.0
-
-
-def test_endofprogramstmt_offset():
- stmt = EndOfProgramStmt(1, 1)
- stmt.offset()
- assert stmt.x == 1
- assert stmt.y == 1
- stmt.offset(1, 0)
- assert stmt.x == 2.0
- assert stmt.y == 1.0
- stmt.offset(0, 1)
- assert stmt.x == 2.0
- assert stmt.y == 2.0
-
-
-def test_unitstmt_factory():
- """ Test UnitStmt factory method
- """
- line = "INCH,LZ"
- stmt = UnitStmt.from_excellon(line)
- assert stmt.units == "inch"
- assert stmt.zeros == "leading"
-
- line = "INCH,TZ"
- stmt = UnitStmt.from_excellon(line)
- assert stmt.units == "inch"
- assert stmt.zeros == "trailing"
-
- line = "METRIC,LZ"
- stmt = UnitStmt.from_excellon(line)
- assert stmt.units == "metric"
- assert stmt.zeros == "leading"
-
- line = "METRIC,TZ"
- stmt = UnitStmt.from_excellon(line)
- assert stmt.units == "metric"
- assert stmt.zeros == "trailing"
-
-
-def test_unitstmt_dump():
- """ Test UnitStmt to_excellon()
- """
- lines = ["INCH,LZ", "INCH,TZ", "METRIC,LZ", "METRIC,TZ"]
- for line in lines:
- stmt = UnitStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_unitstmt_conversion():
- stmt = UnitStmt.from_excellon("METRIC,TZ")
- stmt.to_inch()
- assert stmt.units == "inch"
-
- stmt = UnitStmt.from_excellon("INCH,TZ")
- stmt.to_metric()
- assert stmt.units == "metric"
-
-
-def test_incrementalmode_factory():
- """ Test IncrementalModeStmt factory method
- """
- line = "ICI,ON"
- stmt = IncrementalModeStmt.from_excellon(line)
- assert stmt.mode == "on"
-
- line = "ICI,OFF"
- stmt = IncrementalModeStmt.from_excellon(line)
- assert stmt.mode == "off"
-
-
-def test_incrementalmode_dump():
- """ Test IncrementalModeStmt to_excellon()
- """
- lines = ["ICI,ON", "ICI,OFF"]
- for line in lines:
- stmt = IncrementalModeStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_incrementalmode_validation():
- """ Test IncrementalModeStmt input validation
- """
- pytest.raises(ValueError, IncrementalModeStmt, "OFF-ISH")
-
-
-def test_versionstmt_factory():
- """ Test VersionStmt factory method
- """
- line = "VER,1"
- stmt = VersionStmt.from_excellon(line)
- assert stmt.version == 1
-
- line = "VER,2"
- stmt = VersionStmt.from_excellon(line)
- assert stmt.version == 2
-
-
-def test_versionstmt_dump():
- """ Test VersionStmt to_excellon()
- """
- lines = ["VER,1", "VER,2"]
- for line in lines:
- stmt = VersionStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_versionstmt_validation():
- """ Test VersionStmt input validation
- """
- pytest.raises(ValueError, VersionStmt, 3)
-
-
-def test_formatstmt_factory():
- """ Test FormatStmt factory method
- """
- line = "FMAT,1"
- stmt = FormatStmt.from_excellon(line)
- assert stmt.format == 1
-
- line = "FMAT,2"
- stmt = FormatStmt.from_excellon(line)
- assert stmt.format == 2
-
-
-def test_formatstmt_dump():
- """ Test FormatStmt to_excellon()
- """
- lines = ["FMAT,1", "FMAT,2"]
- for line in lines:
- stmt = FormatStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_formatstmt_validation():
- """ Test FormatStmt input validation
- """
- pytest.raises(ValueError, FormatStmt, 3)
-
-
-def test_linktoolstmt_factory():
- """ Test LinkToolStmt factory method
- """
- line = "1/2/3/4"
- stmt = LinkToolStmt.from_excellon(line)
- assert stmt.linked_tools == [1, 2, 3, 4]
-
- line = "01/02/03/04"
- stmt = LinkToolStmt.from_excellon(line)
- assert stmt.linked_tools == [1, 2, 3, 4]
-
-
-def test_linktoolstmt_dump():
- """ Test LinkToolStmt to_excellon()
- """
- lines = ["1/2/3/4", "5/6/7"]
- for line in lines:
- stmt = LinkToolStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_measmodestmt_factory():
- """ Test MeasuringModeStmt factory method
- """
- line = "M72"
- stmt = MeasuringModeStmt.from_excellon(line)
- assert stmt.units == "inch"
-
- line = "M71"
- stmt = MeasuringModeStmt.from_excellon(line)
- assert stmt.units == "metric"
-
-
-def test_measmodestmt_dump():
- """ Test MeasuringModeStmt to_excellon()
- """
- lines = ["M71", "M72"]
- for line in lines:
- stmt = MeasuringModeStmt.from_excellon(line)
- assert stmt.to_excellon() == line
-
-
-def test_measmodestmt_validation():
- """ Test MeasuringModeStmt input validation
- """
- pytest.raises(ValueError, MeasuringModeStmt.from_excellon, "M70")
- pytest.raises(ValueError, MeasuringModeStmt, "millimeters")
-
-
-def test_measmodestmt_conversion():
- line = "M72"
- stmt = MeasuringModeStmt.from_excellon(line)
- assert stmt.units == "inch"
- stmt.to_metric()
- assert stmt.units == "metric"
-
- line = "M71"
- stmt = MeasuringModeStmt.from_excellon(line)
- assert stmt.units == "metric"
- stmt.to_inch()
- assert stmt.units == "inch"
-
-
-def test_routemode_stmt():
- stmt = RouteModeStmt()
- assert stmt.to_excellon(FileSettings()) == "G00"
-
-
-def test_linearmode_stmt():
- stmt = LinearModeStmt()
- assert stmt.to_excellon(FileSettings()) == "G01"
-
-
-def test_drillmode_stmt():
- stmt = DrillModeStmt()
- assert stmt.to_excellon(FileSettings()) == "G05"
-
-
-def test_absolutemode_stmt():
- stmt = AbsoluteModeStmt()
- assert stmt.to_excellon(FileSettings()) == "G90"
-
-
-def test_unknownstmt():
- stmt = UnknownStmt("TEST")
- assert stmt.stmt == "TEST"
- assert str(stmt) == "<Unknown Statement: TEST>"
-
-
-def test_unknownstmt_dump():
- stmt = UnknownStmt("TEST")
- assert stmt.to_excellon(FileSettings()) == "TEST"