gerbonara/gerber/tests/test_gerber_statements.py
Paulo Henrique Silva ef589a0640
Migrate to pytest (#111)
* Migrate to pytest

All tests were update to use pytest.

Tests were alse black formatted. Eventually all code
will be black formatted but need to merge some PRs first.
2019-11-26 00:37:41 -03:00

959 lines
24 KiB
Python

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Hamilton Kibbe <ham@hamiltonkib.be>
import pytest
from ..gerber_statements import *
from ..cam import FileSettings
def test_Statement_smoketest():
stmt = Statement("Test")
assert stmt.type == "Test"
stmt.to_metric()
assert "units=metric" in str(stmt)
stmt.to_inch()
assert "units=inch" in str(stmt)
stmt.to_metric()
stmt.offset(1, 1)
assert "type=Test" in str(stmt)
def test_FSParamStmt_factory():
""" Test FSParamStruct factory
"""
stmt = {"param": "FS", "zero": "L", "notation": "A", "x": "27"}
fs = FSParamStmt.from_dict(stmt)
assert fs.param == "FS"
assert fs.zero_suppression == "leading"
assert fs.notation == "absolute"
assert fs.format == (2, 7)
stmt = {"param": "FS", "zero": "T", "notation": "I", "x": "27"}
fs = FSParamStmt.from_dict(stmt)
assert fs.param == "FS"
assert fs.zero_suppression == "trailing"
assert fs.notation == "incremental"
assert fs.format == (2, 7)
def test_FSParamStmt():
""" Test FSParamStmt initialization
"""
param = "FS"
zeros = "trailing"
notation = "absolute"
fmt = (2, 5)
stmt = FSParamStmt(param, zeros, notation, fmt)
assert stmt.param == param
assert stmt.zero_suppression == zeros
assert stmt.notation == notation
assert stmt.format == fmt
def test_FSParamStmt_dump():
""" Test FSParamStmt to_gerber()
"""
stmt = {"param": "FS", "zero": "L", "notation": "A", "x": "27"}
fs = FSParamStmt.from_dict(stmt)
assert fs.to_gerber() == "%FSLAX27Y27*%"
stmt = {"param": "FS", "zero": "T", "notation": "I", "x": "25"}
fs = FSParamStmt.from_dict(stmt)
assert fs.to_gerber() == "%FSTIX25Y25*%"
settings = FileSettings(zero_suppression="leading", notation="absolute")
assert fs.to_gerber(settings) == "%FSLAX25Y25*%"
def test_FSParamStmt_string():
""" Test FSParamStmt.__str__()
"""
stmt = {"param": "FS", "zero": "L", "notation": "A", "x": "27"}
fs = FSParamStmt.from_dict(stmt)
assert str(fs) == "<Format Spec: 2:7 leading zero suppression absolute notation>"
stmt = {"param": "FS", "zero": "T", "notation": "I", "x": "25"}
fs = FSParamStmt.from_dict(stmt)
assert (
str(fs) == "<Format Spec: 2:5 trailing zero suppression incremental notation>"
)
def test_MOParamStmt_factory():
""" Test MOParamStruct factory
"""
stmts = [{"param": "MO", "mo": "IN"}, {"param": "MO", "mo": "in"}]
for stmt in stmts:
mo = MOParamStmt.from_dict(stmt)
assert mo.param == "MO"
assert mo.mode == "inch"
stmts = [{"param": "MO", "mo": "MM"}, {"param": "MO", "mo": "mm"}]
for stmt in stmts:
mo = MOParamStmt.from_dict(stmt)
assert mo.param == "MO"
assert mo.mode == "metric"
stmt = {"param": "MO"}
mo = MOParamStmt.from_dict(stmt)
assert mo.mode == None
stmt = {"param": "MO", "mo": "degrees kelvin"}
pytest.raises(ValueError, MOParamStmt.from_dict, stmt)
def test_MOParamStmt():
""" Test MOParamStmt initialization
"""
param = "MO"
mode = "inch"
stmt = MOParamStmt(param, mode)
assert stmt.param == param
for mode in ["inch", "metric"]:
stmt = MOParamStmt(param, mode)
assert stmt.mode == mode
def test_MOParamStmt_dump():
""" Test MOParamStmt to_gerber()
"""
stmt = {"param": "MO", "mo": "IN"}
mo = MOParamStmt.from_dict(stmt)
assert mo.to_gerber() == "%MOIN*%"
stmt = {"param": "MO", "mo": "MM"}
mo = MOParamStmt.from_dict(stmt)
assert mo.to_gerber() == "%MOMM*%"
def test_MOParamStmt_conversion():
stmt = {"param": "MO", "mo": "MM"}
mo = MOParamStmt.from_dict(stmt)
mo.to_inch()
assert mo.mode == "inch"
stmt = {"param": "MO", "mo": "IN"}
mo = MOParamStmt.from_dict(stmt)
mo.to_metric()
assert mo.mode == "metric"
def test_MOParamStmt_string():
""" Test MOParamStmt.__str__()
"""
stmt = {"param": "MO", "mo": "IN"}
mo = MOParamStmt.from_dict(stmt)
assert str(mo) == "<Mode: inches>"
stmt = {"param": "MO", "mo": "MM"}
mo = MOParamStmt.from_dict(stmt)
assert str(mo) == "<Mode: millimeters>"
def test_IPParamStmt_factory():
""" Test IPParamStruct factory
"""
stmt = {"param": "IP", "ip": "POS"}
ip = IPParamStmt.from_dict(stmt)
assert ip.ip == "positive"
stmt = {"param": "IP", "ip": "NEG"}
ip = IPParamStmt.from_dict(stmt)
assert ip.ip == "negative"
def test_IPParamStmt():
""" Test IPParamStmt initialization
"""
param = "IP"
for ip in ["positive", "negative"]:
stmt = IPParamStmt(param, ip)
assert stmt.param == param
assert stmt.ip == ip
def test_IPParamStmt_dump():
""" Test IPParamStmt to_gerber()
"""
stmt = {"param": "IP", "ip": "POS"}
ip = IPParamStmt.from_dict(stmt)
assert ip.to_gerber() == "%IPPOS*%"
stmt = {"param": "IP", "ip": "NEG"}
ip = IPParamStmt.from_dict(stmt)
assert ip.to_gerber() == "%IPNEG*%"
def test_IPParamStmt_string():
stmt = {"param": "IP", "ip": "POS"}
ip = IPParamStmt.from_dict(stmt)
assert str(ip) == "<Image Polarity: positive>"
stmt = {"param": "IP", "ip": "NEG"}
ip = IPParamStmt.from_dict(stmt)
assert str(ip) == "<Image Polarity: negative>"
def test_IRParamStmt_factory():
stmt = {"param": "IR", "angle": "45"}
ir = IRParamStmt.from_dict(stmt)
assert ir.param == "IR"
assert ir.angle == 45
def test_IRParamStmt_dump():
stmt = {"param": "IR", "angle": "45"}
ir = IRParamStmt.from_dict(stmt)
assert ir.to_gerber() == "%IR45*%"
def test_IRParamStmt_string():
stmt = {"param": "IR", "angle": "45"}
ir = IRParamStmt.from_dict(stmt)
assert str(ir) == "<Image Angle: 45>"
def test_OFParamStmt_factory():
""" Test OFParamStmt factory
"""
stmt = {"param": "OF", "a": "0.1234567", "b": "0.1234567"}
of = OFParamStmt.from_dict(stmt)
assert of.a == 0.1234567
assert of.b == 0.1234567
def test_OFParamStmt():
""" Test IPParamStmt initialization
"""
param = "OF"
for val in [0.0, -3.4567]:
stmt = OFParamStmt(param, val, val)
assert stmt.param == param
assert stmt.a == val
assert stmt.b == val
def test_OFParamStmt_dump():
""" Test OFParamStmt to_gerber()
"""
stmt = {"param": "OF", "a": "0.123456", "b": "0.123456"}
of = OFParamStmt.from_dict(stmt)
assert of.to_gerber() == "%OFA0.12345B0.12345*%"
def test_OFParamStmt_conversion():
stmt = {"param": "OF", "a": "2.54", "b": "25.4"}
of = OFParamStmt.from_dict(stmt)
of.units = "metric"
# No effect
of.to_metric()
assert of.a == 2.54
assert of.b == 25.4
of.to_inch()
assert of.units == "inch"
assert of.a == 0.1
assert of.b == 1.0
# No effect
of.to_inch()
assert of.a == 0.1
assert of.b == 1.0
stmt = {"param": "OF", "a": "0.1", "b": "1.0"}
of = OFParamStmt.from_dict(stmt)
of.units = "inch"
# No effect
of.to_inch()
assert of.a == 0.1
assert of.b == 1.0
of.to_metric()
assert of.units == "metric"
assert of.a == 2.54
assert of.b == 25.4
# No effect
of.to_metric()
assert of.a == 2.54
assert of.b == 25.4
def test_OFParamStmt_offset():
s = OFParamStmt("OF", 0, 0)
s.offset(1, 0)
assert s.a == 1.0
assert s.b == 0.0
s.offset(0, 1)
assert s.a == 1.0
assert s.b == 1.0
def test_OFParamStmt_string():
""" Test OFParamStmt __str__
"""
stmt = {"param": "OF", "a": "0.123456", "b": "0.123456"}
of = OFParamStmt.from_dict(stmt)
assert str(of) == "<Offset: X: 0.123456 Y: 0.123456 >"
def test_SFParamStmt_factory():
stmt = {"param": "SF", "a": "1.4", "b": "0.9"}
sf = SFParamStmt.from_dict(stmt)
assert sf.param == "SF"
assert sf.a == 1.4
assert sf.b == 0.9
def test_SFParamStmt_dump():
stmt = {"param": "SF", "a": "1.4", "b": "0.9"}
sf = SFParamStmt.from_dict(stmt)
assert sf.to_gerber() == "%SFA1.4B0.9*%"
def test_SFParamStmt_conversion():
stmt = {"param": "OF", "a": "2.54", "b": "25.4"}
of = SFParamStmt.from_dict(stmt)
of.units = "metric"
of.to_metric()
# No effect
assert of.a == 2.54
assert of.b == 25.4
of.to_inch()
assert of.units == "inch"
assert of.a == 0.1
assert of.b == 1.0
# No effect
of.to_inch()
assert of.a == 0.1
assert of.b == 1.0
stmt = {"param": "OF", "a": "0.1", "b": "1.0"}
of = SFParamStmt.from_dict(stmt)
of.units = "inch"
# No effect
of.to_inch()
assert of.a == 0.1
assert of.b == 1.0
of.to_metric()
assert of.units == "metric"
assert of.a == 2.54
assert of.b == 25.4
# No effect
of.to_metric()
assert of.a == 2.54
assert of.b == 25.4
def test_SFParamStmt_offset():
s = SFParamStmt("OF", 0, 0)
s.offset(1, 0)
assert s.a == 1.0
assert s.b == 0.0
s.offset(0, 1)
assert s.a == 1.0
assert s.b == 1.0
def test_SFParamStmt_string():
stmt = {"param": "SF", "a": "1.4", "b": "0.9"}
sf = SFParamStmt.from_dict(stmt)
assert str(sf) == "<Scale Factor: X: 1.4 Y: 0.9>"
def test_LPParamStmt_factory():
""" Test LPParamStmt factory
"""
stmt = {"param": "LP", "lp": "C"}
lp = LPParamStmt.from_dict(stmt)
assert lp.lp == "clear"
stmt = {"param": "LP", "lp": "D"}
lp = LPParamStmt.from_dict(stmt)
assert lp.lp == "dark"
def test_LPParamStmt_dump():
""" Test LPParamStmt to_gerber()
"""
stmt = {"param": "LP", "lp": "C"}
lp = LPParamStmt.from_dict(stmt)
assert lp.to_gerber() == "%LPC*%"
stmt = {"param": "LP", "lp": "D"}
lp = LPParamStmt.from_dict(stmt)
assert lp.to_gerber() == "%LPD*%"
def test_LPParamStmt_string():
""" Test LPParamStmt.__str__()
"""
stmt = {"param": "LP", "lp": "D"}
lp = LPParamStmt.from_dict(stmt)
assert str(lp) == "<Level Polarity: dark>"
stmt = {"param": "LP", "lp": "C"}
lp = LPParamStmt.from_dict(stmt)
assert str(lp) == "<Level Polarity: clear>"
def test_AMParamStmt_factory():
name = "DONUTVAR"
macro = """0 Test Macro. *
1,1,1.5,0,0*
20,1,0.9,0,0.45,12,0.45,0*
21,1,6.8,1.2,3.4,0.6,0*
22,1,6.8,1.2,0,0,0*
4,1,4,0.1,0.1,0.5,0.1,0.5,0.5,0.1,0.5,0.1,0.1,0*
5,1,8,0,0,8,0*
6,0,0,5,0.5,0.5,2,0.1,6,0*
7,0,0,7,6,0.2,0*
8,THIS IS AN UNSUPPORTED PRIMITIVE*
"""
s = AMParamStmt.from_dict({"param": "AM", "name": name, "macro": macro})
s.build()
assert len(s.primitives) == 10
assert isinstance(s.primitives[0], AMCommentPrimitive)
assert isinstance(s.primitives[1], AMCirclePrimitive)
assert isinstance(s.primitives[2], AMVectorLinePrimitive)
assert isinstance(s.primitives[3], AMCenterLinePrimitive)
assert isinstance(s.primitives[4], AMLowerLeftLinePrimitive)
assert isinstance(s.primitives[5], AMOutlinePrimitive)
assert isinstance(s.primitives[6], AMPolygonPrimitive)
assert isinstance(s.primitives[7], AMMoirePrimitive)
assert isinstance(s.primitives[8], AMThermalPrimitive)
assert isinstance(s.primitives[9], AMUnsupportPrimitive)
def testAMParamStmt_conversion():
name = "POLYGON"
macro = "5,1,8,25.4,25.4,25.4,0*"
s = AMParamStmt.from_dict({"param": "AM", "name": name, "macro": macro})
s.build()
s.units = "metric"
# No effect
s.to_metric()
assert s.primitives[0].position == (25.4, 25.4)
assert s.primitives[0].diameter == 25.4
s.to_inch()
assert s.units == "inch"
assert s.primitives[0].position == (1.0, 1.0)
assert s.primitives[0].diameter == 1.0
# No effect
s.to_inch()
assert s.primitives[0].position == (1.0, 1.0)
assert s.primitives[0].diameter == 1.0
macro = "5,1,8,1,1,1,0*"
s = AMParamStmt.from_dict({"param": "AM", "name": name, "macro": macro})
s.build()
s.units = "inch"
# No effect
s.to_inch()
assert s.primitives[0].position == (1.0, 1.0)
assert s.primitives[0].diameter == 1.0
s.to_metric()
assert s.units == "metric"
assert s.primitives[0].position == (25.4, 25.4)
assert s.primitives[0].diameter == 25.4
# No effect
s.to_metric()
assert s.primitives[0].position == (25.4, 25.4)
assert s.primitives[0].diameter == 25.4
def test_AMParamStmt_dump():
name = "POLYGON"
macro = "5,1,8,25.4,25.4,25.4,0.0"
s = AMParamStmt.from_dict({"param": "AM", "name": name, "macro": macro})
s.build()
assert s.to_gerber() == "%AMPOLYGON*5,1,8,25.4,25.4,25.4,0.0*%"
# TODO - Store Equations and update on unit change...
s = AMParamStmt.from_dict(
{"param": "AM", "name": "OC8", "macro": "5,1,8,0,0,1.08239X$1,22.5"}
)
s.build()
# assert_equal(s.to_gerber(), '%AMOC8*5,1,8,0,0,1.08239X$1,22.5*%')
assert s.to_gerber() == "%AMOC8*5,1,8,0,0,0,22.5*%"
def test_AMParamStmt_string():
name = "POLYGON"
macro = "5,1,8,25.4,25.4,25.4,0*"
s = AMParamStmt.from_dict({"param": "AM", "name": name, "macro": macro})
s.build()
assert str(s) == "<Aperture Macro POLYGON: 5,1,8,25.4,25.4,25.4,0*>"
def test_ASParamStmt_factory():
stmt = {"param": "AS", "mode": "AXBY"}
s = ASParamStmt.from_dict(stmt)
assert s.param == "AS"
assert s.mode == "AXBY"
def test_ASParamStmt_dump():
stmt = {"param": "AS", "mode": "AXBY"}
s = ASParamStmt.from_dict(stmt)
assert s.to_gerber() == "%ASAXBY*%"
def test_ASParamStmt_string():
stmt = {"param": "AS", "mode": "AXBY"}
s = ASParamStmt.from_dict(stmt)
assert str(s) == "<Axis Select: AXBY>"
def test_INParamStmt_factory():
""" Test INParamStmt factory
"""
stmt = {"param": "IN", "name": "test"}
inp = INParamStmt.from_dict(stmt)
assert inp.name == "test"
def test_INParamStmt_dump():
""" Test INParamStmt to_gerber()
"""
stmt = {"param": "IN", "name": "test"}
inp = INParamStmt.from_dict(stmt)
assert inp.to_gerber() == "%INtest*%"
def test_INParamStmt_string():
stmt = {"param": "IN", "name": "test"}
inp = INParamStmt.from_dict(stmt)
assert str(inp) == "<Image Name: test>"
def test_LNParamStmt_factory():
""" Test LNParamStmt factory
"""
stmt = {"param": "LN", "name": "test"}
lnp = LNParamStmt.from_dict(stmt)
assert lnp.name == "test"
def test_LNParamStmt_dump():
""" Test LNParamStmt to_gerber()
"""
stmt = {"param": "LN", "name": "test"}
lnp = LNParamStmt.from_dict(stmt)
assert lnp.to_gerber() == "%LNtest*%"
def test_LNParamStmt_string():
stmt = {"param": "LN", "name": "test"}
lnp = LNParamStmt.from_dict(stmt)
assert str(lnp) == "<Level Name: test>"
def test_comment_stmt():
""" Test comment statement
"""
stmt = CommentStmt("A comment")
assert stmt.type == "COMMENT"
assert stmt.comment == "A comment"
def test_comment_stmt_dump():
""" Test CommentStmt to_gerber()
"""
stmt = CommentStmt("A comment")
assert stmt.to_gerber() == "G04A comment*"
def test_comment_stmt_string():
stmt = CommentStmt("A comment")
assert str(stmt) == "<Comment: A comment>"
def test_eofstmt():
""" Test EofStmt
"""
stmt = EofStmt()
assert stmt.type == "EOF"
def test_eofstmt_dump():
""" Test EofStmt to_gerber()
"""
stmt = EofStmt()
assert stmt.to_gerber() == "M02*"
def test_eofstmt_string():
assert str(EofStmt()) == "<EOF Statement>"
def test_quadmodestmt_factory():
""" Test QuadrantModeStmt.from_gerber()
"""
line = "G74*"
stmt = QuadrantModeStmt.from_gerber(line)
assert stmt.type == "QuadrantMode"
assert stmt.mode == "single-quadrant"
line = "G75*"
stmt = QuadrantModeStmt.from_gerber(line)
assert stmt.mode == "multi-quadrant"
def test_quadmodestmt_validation():
""" Test QuadrantModeStmt input validation
"""
line = "G76*"
pytest.raises(ValueError, QuadrantModeStmt.from_gerber, line)
pytest.raises(ValueError, QuadrantModeStmt, "quadrant-ful")
def test_quadmodestmt_dump():
""" Test QuadrantModeStmt.to_gerber()
"""
for line in ("G74*", "G75*"):
stmt = QuadrantModeStmt.from_gerber(line)
assert stmt.to_gerber() == line
def test_regionmodestmt_factory():
""" Test RegionModeStmt.from_gerber()
"""
line = "G36*"
stmt = RegionModeStmt.from_gerber(line)
assert stmt.type == "RegionMode"
assert stmt.mode == "on"
line = "G37*"
stmt = RegionModeStmt.from_gerber(line)
assert stmt.mode == "off"
def test_regionmodestmt_validation():
""" Test RegionModeStmt input validation
"""
line = "G38*"
pytest.raises(ValueError, RegionModeStmt.from_gerber, line)
pytest.raises(ValueError, RegionModeStmt, "off-ish")
def test_regionmodestmt_dump():
""" Test RegionModeStmt.to_gerber()
"""
for line in ("G36*", "G37*"):
stmt = RegionModeStmt.from_gerber(line)
assert stmt.to_gerber() == line
def test_unknownstmt():
""" Test UnknownStmt
"""
line = "G696969*"
stmt = UnknownStmt(line)
assert stmt.type == "UNKNOWN"
assert stmt.line == line
def test_unknownstmt_dump():
""" Test UnknownStmt.to_gerber()
"""
lines = ("G696969*", "M03*")
for line in lines:
stmt = UnknownStmt(line)
assert stmt.to_gerber() == line
def test_statement_string():
""" Test Statement.__str__()
"""
stmt = Statement("PARAM")
assert "type=PARAM" in str(stmt)
stmt.test = "PASS"
assert "test=PASS" in str(stmt)
assert "type=PARAM" in str(stmt)
def test_ADParamStmt_factory():
""" Test ADParamStmt factory
"""
stmt = {"param": "AD", "d": 0, "shape": "C"}
ad = ADParamStmt.from_dict(stmt)
assert ad.d == 0
assert ad.shape == "C"
stmt = {"param": "AD", "d": 1, "shape": "R"}
ad = ADParamStmt.from_dict(stmt)
assert ad.d == 1
assert ad.shape == "R"
stmt = {"param": "AD", "d": 1, "shape": "C", "modifiers": "1.42"}
ad = ADParamStmt.from_dict(stmt)
assert ad.d == 1
assert ad.shape == "C"
assert ad.modifiers == [(1.42,)]
stmt = {"param": "AD", "d": 1, "shape": "C", "modifiers": "1.42X"}
ad = ADParamStmt.from_dict(stmt)
assert ad.d == 1
assert ad.shape == "C"
assert ad.modifiers == [(1.42,)]
stmt = {"param": "AD", "d": 1, "shape": "R", "modifiers": "1.42X1.24"}
ad = ADParamStmt.from_dict(stmt)
assert ad.d == 1
assert ad.shape == "R"
assert ad.modifiers == [(1.42, 1.24)]
def test_ADParamStmt_conversion():
stmt = {"param": "AD", "d": 0, "shape": "C", "modifiers": "25.4X25.4,25.4X25.4"}
ad = ADParamStmt.from_dict(stmt)
ad.units = "metric"
# No effect
ad.to_metric()
assert ad.modifiers[0] == (25.4, 25.4)
assert ad.modifiers[1] == (25.4, 25.4)
ad.to_inch()
assert ad.units == "inch"
assert ad.modifiers[0] == (1.0, 1.0)
assert ad.modifiers[1] == (1.0, 1.0)
# No effect
ad.to_inch()
assert ad.modifiers[0] == (1.0, 1.0)
assert ad.modifiers[1] == (1.0, 1.0)
stmt = {"param": "AD", "d": 0, "shape": "C", "modifiers": "1X1,1X1"}
ad = ADParamStmt.from_dict(stmt)
ad.units = "inch"
# No effect
ad.to_inch()
assert ad.modifiers[0] == (1.0, 1.0)
assert ad.modifiers[1] == (1.0, 1.0)
ad.to_metric()
assert ad.modifiers[0] == (25.4, 25.4)
assert ad.modifiers[1] == (25.4, 25.4)
# No effect
ad.to_metric()
assert ad.modifiers[0] == (25.4, 25.4)
assert ad.modifiers[1] == (25.4, 25.4)
def test_ADParamStmt_dump():
stmt = {"param": "AD", "d": 0, "shape": "C"}
ad = ADParamStmt.from_dict(stmt)
assert ad.to_gerber() == "%ADD0C*%"
stmt = {"param": "AD", "d": 0, "shape": "C", "modifiers": "1X1,1X1"}
ad = ADParamStmt.from_dict(stmt)
assert ad.to_gerber() == "%ADD0C,1X1,1X1*%"
def test_ADPamramStmt_string():
stmt = {"param": "AD", "d": 0, "shape": "C"}
ad = ADParamStmt.from_dict(stmt)
assert str(ad) == "<Aperture Definition: 0: circle>"
stmt = {"param": "AD", "d": 0, "shape": "R"}
ad = ADParamStmt.from_dict(stmt)
assert str(ad) == "<Aperture Definition: 0: rectangle>"
stmt = {"param": "AD", "d": 0, "shape": "O"}
ad = ADParamStmt.from_dict(stmt)
assert str(ad) == "<Aperture Definition: 0: obround>"
stmt = {"param": "AD", "d": 0, "shape": "test"}
ad = ADParamStmt.from_dict(stmt)
assert str(ad) == "<Aperture Definition: 0: test>"
def test_MIParamStmt_factory():
stmt = {"param": "MI", "a": 1, "b": 1}
mi = MIParamStmt.from_dict(stmt)
assert mi.a == 1
assert mi.b == 1
def test_MIParamStmt_dump():
stmt = {"param": "MI", "a": 1, "b": 1}
mi = MIParamStmt.from_dict(stmt)
assert mi.to_gerber() == "%MIA1B1*%"
stmt = {"param": "MI", "a": 1}
mi = MIParamStmt.from_dict(stmt)
assert mi.to_gerber() == "%MIA1B0*%"
stmt = {"param": "MI", "b": 1}
mi = MIParamStmt.from_dict(stmt)
assert mi.to_gerber() == "%MIA0B1*%"
def test_MIParamStmt_string():
stmt = {"param": "MI", "a": 1, "b": 1}
mi = MIParamStmt.from_dict(stmt)
assert str(mi) == "<Image Mirror: A=1 B=1>"
stmt = {"param": "MI", "b": 1}
mi = MIParamStmt.from_dict(stmt)
assert str(mi) == "<Image Mirror: A=0 B=1>"
stmt = {"param": "MI", "a": 1}
mi = MIParamStmt.from_dict(stmt)
assert str(mi) == "<Image Mirror: A=1 B=0>"
def test_coordstmt_ctor():
cs = CoordStmt("G04", 0.0, 0.1, 0.2, 0.3, "D01", FileSettings())
assert cs.function == "G04"
assert cs.x == 0.0
assert cs.y == 0.1
assert cs.i == 0.2
assert cs.j == 0.3
assert cs.op == "D01"
def test_coordstmt_factory():
stmt = {
"function": "G04",
"x": "0",
"y": "001",
"i": "002",
"j": "003",
"op": "D01",
}
cs = CoordStmt.from_dict(stmt, FileSettings())
assert cs.function == "G04"
assert cs.x == 0.0
assert cs.y == 0.1
assert cs.i == 0.2
assert cs.j == 0.3
assert cs.op == "D01"
def test_coordstmt_dump():
cs = CoordStmt("G04", 0.0, 0.1, 0.2, 0.3, "D01", FileSettings())
assert cs.to_gerber(FileSettings()) == "G04X0Y001I002J003D01*"
def test_coordstmt_conversion():
cs = CoordStmt("G71", 25.4, 25.4, 25.4, 25.4, "D01", FileSettings())
cs.units = "metric"
# No effect
cs.to_metric()
assert cs.x == 25.4
assert cs.y == 25.4
assert cs.i == 25.4
assert cs.j == 25.4
assert cs.function == "G71"
cs.to_inch()
assert cs.units == "inch"
assert cs.x == 1.0
assert cs.y == 1.0
assert cs.i == 1.0
assert cs.j == 1.0
assert cs.function == "G70"
# No effect
cs.to_inch()
assert cs.x == 1.0
assert cs.y == 1.0
assert cs.i == 1.0
assert cs.j == 1.0
assert cs.function == "G70"
cs = CoordStmt("G70", 1.0, 1.0, 1.0, 1.0, "D01", FileSettings())
cs.units = "inch"
# No effect
cs.to_inch()
assert cs.x == 1.0
assert cs.y == 1.0
assert cs.i == 1.0
assert cs.j == 1.0
assert cs.function == "G70"
cs.to_metric()
assert cs.x == 25.4
assert cs.y == 25.4
assert cs.i == 25.4
assert cs.j == 25.4
assert cs.function == "G71"
# No effect
cs.to_metric()
assert cs.x == 25.4
assert cs.y == 25.4
assert cs.i == 25.4
assert cs.j == 25.4
assert cs.function == "G71"
def test_coordstmt_offset():
c = CoordStmt("G71", 0, 0, 0, 0, "D01", FileSettings())
c.offset(1, 0)
assert c.x == 1.0
assert c.y == 0.0
assert c.i == 1.0
assert c.j == 0.0
c.offset(0, 1)
assert c.x == 1.0
assert c.y == 1.0
assert c.i == 1.0
assert c.j == 1.0
def test_coordstmt_string():
cs = CoordStmt("G04", 0, 1, 2, 3, "D01", FileSettings())
assert (
str(cs) == "<Coordinate Statement: Fn: G04 X: 0 Y: 1 I: 2 J: 3 Op: Lights On>"
)
cs = CoordStmt("G04", None, None, None, None, "D02", FileSettings())
assert str(cs) == "<Coordinate Statement: Fn: G04 Op: Lights Off>"
cs = CoordStmt("G04", None, None, None, None, "D03", FileSettings())
assert str(cs) == "<Coordinate Statement: Fn: G04 Op: Flash>"
cs = CoordStmt("G04", None, None, None, None, "TEST", FileSettings())
assert str(cs) == "<Coordinate Statement: Fn: G04 Op: TEST>"
def test_aperturestmt_ctor():
ast = ApertureStmt(3, False)
assert ast.d == 3
assert ast.deprecated == False
ast = ApertureStmt(4, True)
assert ast.d == 4
assert ast.deprecated == True
ast = ApertureStmt(4, 1)
assert ast.d == 4
assert ast.deprecated == True
ast = ApertureStmt(3)
assert ast.d == 3
assert ast.deprecated == False
def test_aperturestmt_dump():
ast = ApertureStmt(3, False)
assert ast.to_gerber() == "D3*"
ast = ApertureStmt(3, True)
assert ast.to_gerber() == "G54D3*"
assert str(ast) == "<Aperture: 3>"