#! /usr/bin/env python # -*- coding: utf-8 -*- # Author: Hamilton Kibbe from .tests import * from ..gerber_statements import * from ..cam import FileSettings def test_FSParamStmt_factory(): """ Test FSParamStruct factory """ stmt = {'param': 'FS', 'zero': 'L', 'notation': 'A', 'x': '27'} fs = FSParamStmt.from_dict(stmt) assert_equal(fs.param, 'FS') assert_equal(fs.zero_suppression, 'leading') assert_equal(fs.notation, 'absolute') assert_equal(fs.format, (2, 7)) stmt = {'param': 'FS', 'zero': 'T', 'notation': 'I', 'x': '27'} fs = FSParamStmt.from_dict(stmt) assert_equal(fs.param, 'FS') assert_equal(fs.zero_suppression, 'trailing') assert_equal(fs.notation, 'incremental') assert_equal(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_equal(stmt.param, param) assert_equal(stmt.zero_suppression, zeros) assert_equal(stmt.notation, notation) assert_equal(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_equal(fs.to_gerber(), '%FSLAX27Y27*%') stmt = {'param': 'FS', 'zero': 'T', 'notation': 'I', 'x': '25'} fs = FSParamStmt.from_dict(stmt) assert_equal(fs.to_gerber(), '%FSTIX25Y25*%') settings = FileSettings(zero_suppression='leading', notation='absolute') assert_equal(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_equal(str(fs), '') stmt = {'param': 'FS', 'zero': 'T', 'notation': 'I', 'x': '25'} fs = FSParamStmt.from_dict(stmt) assert_equal(str(fs), '') 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_equal(mo.param, 'MO') assert_equal(mo.mode, 'inch') stmts = [{'param': 'MO', 'mo': 'MM'}, {'param': 'MO', 'mo': 'mm'}, ] for stmt in stmts: mo = MOParamStmt.from_dict(stmt) assert_equal(mo.param, 'MO') assert_equal(mo.mode, 'metric') stmt = {'param': 'MO'} mo = MOParamStmt.from_dict(stmt) assert_equal(mo.mode, None) stmt = {'param': 'MO', 'mo': 'degrees kelvin'} assert_raises(ValueError, MOParamStmt.from_dict, stmt) def test_MOParamStmt(): """ Test MOParamStmt initialization """ param = 'MO' mode = 'inch' stmt = MOParamStmt(param, mode) assert_equal(stmt.param, param) for mode in ['inch', 'metric']: stmt = MOParamStmt(param, mode) assert_equal(stmt.mode, mode) def test_MOParamStmt_dump(): """ Test MOParamStmt to_gerber() """ stmt = {'param': 'MO', 'mo': 'IN'} mo = MOParamStmt.from_dict(stmt) assert_equal(mo.to_gerber(), '%MOIN*%') stmt = {'param': 'MO', 'mo': 'MM'} mo = MOParamStmt.from_dict(stmt) assert_equal(mo.to_gerber(), '%MOMM*%') def test_MOParamStmt_string(): """ Test MOParamStmt.__str__() """ stmt = {'param': 'MO', 'mo': 'IN'} mo = MOParamStmt.from_dict(stmt) assert_equal(str(mo), '') stmt = {'param': 'MO', 'mo': 'MM'} mo = MOParamStmt.from_dict(stmt) assert_equal(str(mo), '') def test_IPParamStmt_factory(): """ Test IPParamStruct factory """ stmt = {'param': 'IP', 'ip': 'POS'} ip = IPParamStmt.from_dict(stmt) assert_equal(ip.ip, 'positive') stmt = {'param': 'IP', 'ip': 'NEG'} ip = IPParamStmt.from_dict(stmt) assert_equal(ip.ip, 'negative') def test_IPParamStmt(): """ Test IPParamStmt initialization """ param = 'IP' for ip in ['positive', 'negative']: stmt = IPParamStmt(param, ip) assert_equal(stmt.param, param) assert_equal(stmt.ip, ip) def test_IPParamStmt_dump(): """ Test IPParamStmt to_gerber() """ stmt = {'param': 'IP', 'ip': 'POS'} ip = IPParamStmt.from_dict(stmt) assert_equal(ip.to_gerber(), '%IPPOS*%') stmt = {'param': 'IP', 'ip': 'NEG'} ip = IPParamStmt.from_dict(stmt) assert_equal(ip.to_gerber(), '%IPNEG*%') def test_IPParamStmt_string(): stmt = {'param': 'IP', 'ip': 'POS'} ip = IPParamStmt.from_dict(stmt) assert_equal(str(ip), '') stmt = {'param': 'IP', 'ip': 'NEG'} ip = IPParamStmt.from_dict(stmt) assert_equal(str(ip), '') def test_IRParamStmt_factory(): stmt = {'param': 'IR', 'angle': '45'} ir = IRParamStmt.from_dict(stmt) assert_equal(ir.param, 'IR') assert_equal(ir.angle, 45) def test_IRParamStmt_dump(): stmt = {'param': 'IR', 'angle': '45'} ir = IRParamStmt.from_dict(stmt) assert_equal(ir.to_gerber(), '%IR45*%') def test_IRParamStmt_string(): stmt = {'param': 'IR', 'angle': '45'} ir = IRParamStmt.from_dict(stmt) assert_equal(str(ir), '') def test_OFParamStmt_factory(): """ Test OFParamStmt factory """ stmt = {'param': 'OF', 'a': '0.1234567', 'b': '0.1234567'} of = OFParamStmt.from_dict(stmt) assert_equal(of.a, 0.1234567) assert_equal(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_equal(stmt.param, param) assert_equal(stmt.a, val) assert_equal(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_equal(of.to_gerber(), '%OFA0.12345B0.12345*%') def test_OFParamStmt_string(): """ Test OFParamStmt __str__ """ stmt = {'param': 'OF', 'a': '0.123456', 'b': '0.123456'} of = OFParamStmt.from_dict(stmt) assert_equal(str(of), '') def test_SFParamStmt_factory(): stmt = {'param': 'SF', 'a': '1.4', 'b': '0.9'} sf = SFParamStmt.from_dict(stmt) assert_equal(sf.param, 'SF') assert_equal(sf.a, 1.4) assert_equal(sf.b, 0.9) def test_SFParamStmt_dump(): stmt = {'param': 'SF', 'a': '1.4', 'b': '0.9'} sf = SFParamStmt.from_dict(stmt) assert_equal(sf.to_gerber(), '%SFA1.4B0.9*%') def test_SFParamStmt_string(): stmt = {'param': 'SF', 'a': '1.4', 'b': '0.9'} sf = SFParamStmt.from_dict(stmt) assert_equal(str(sf), '') def test_LPParamStmt_factory(): """ Test LPParamStmt factory """ stmt = {'param': 'LP', 'lp': 'C'} lp = LPParamStmt.from_dict(stmt) assert_equal(lp.lp, 'clear') stmt = {'param': 'LP', 'lp': 'D'} lp = LPParamStmt.from_dict(stmt) assert_equal(lp.lp, 'dark') def test_LPParamStmt_dump(): """ Test LPParamStmt to_gerber() """ stmt = {'param': 'LP', 'lp': 'C'} lp = LPParamStmt.from_dict(stmt) assert_equal(lp.to_gerber(), '%LPC*%') stmt = {'param': 'LP', 'lp': 'D'} lp = LPParamStmt.from_dict(stmt) assert_equal(lp.to_gerber(), '%LPD*%') def test_LPParamStmt_string(): """ Test LPParamStmt.__str__() """ stmt = {'param': 'LP', 'lp': 'D'} lp = LPParamStmt.from_dict(stmt) assert_equal(str(lp), '') stmt = {'param': 'LP', 'lp': 'C'} lp = LPParamStmt.from_dict(stmt) assert_equal(str(lp), '') 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 }) assert_equal(len(s.primitives), 10) assert_true(isinstance(s.primitives[0], AMCommentPrimitive)) assert_true(isinstance(s.primitives[1], AMCirclePrimitive)) assert_true(isinstance(s.primitives[2], AMVectorLinePrimitive)) assert_true(isinstance(s.primitives[3], AMCenterLinePrimitive)) assert_true(isinstance(s.primitives[4], AMLowerLeftLinePrimitive)) assert_true(isinstance(s.primitives[5], AMOutlinePrimitive)) assert_true(isinstance(s.primitives[6], AMPolygonPrimitive)) assert_true(isinstance(s.primitives[7], AMMoirePrimitive)) assert_true(isinstance(s.primitives[8], AMThermalPrimitive)) assert_true(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.to_inch() assert_equal(s.primitives[0].position, (1., 1.)) assert_equal(s.primitives[0].diameter, 1.) macro = '5,1,8,1,1,1,0*%' s = AMParamStmt.from_dict({'param': 'AM', 'name': name, 'macro': macro }) s.to_metric() assert_equal(s.primitives[0].position, (25.4, 25.4)) assert_equal(s.primitives[0].diameter, 25.4) def test_AMParamStmt_dump(): name = 'POLYGON' macro = '5,1,8,25.4,25.4,25.4,0*%' s = AMParamStmt.from_dict({'param': 'AM', 'name': name, 'macro': macro }) assert_equal(s.to_gerber(), '%AMPOLYGON*5,1,8,25.4,25.4,25.4,0.0*%') 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 }) assert_equal(str(s), '') def test_ASParamStmt_factory(): stmt = {'param': 'AS', 'mode': 'AXBY'} s = ASParamStmt.from_dict(stmt) assert_equal(s.param, 'AS') assert_equal(s.mode, 'AXBY') def test_ASParamStmt_dump(): stmt = {'param': 'AS', 'mode': 'AXBY'} s = ASParamStmt.from_dict(stmt) assert_equal(s.to_gerber(), '%ASAXBY*%') def test_ASParamStmt_string(): stmt = {'param': 'AS', 'mode': 'AXBY'} s = ASParamStmt.from_dict(stmt) assert_equal(str(s), '') def test_INParamStmt_factory(): """ Test INParamStmt factory """ stmt = {'param': 'IN', 'name': 'test'} inp = INParamStmt.from_dict(stmt) assert_equal(inp.name, 'test') def test_INParamStmt_dump(): """ Test INParamStmt to_gerber() """ stmt = {'param': 'IN', 'name': 'test'} inp = INParamStmt.from_dict(stmt) assert_equal(inp.to_gerber(), '%INtest*%') def test_INParamStmt_string(): stmt = {'param': 'IN', 'name': 'test'} inp = INParamStmt.from_dict(stmt) assert_equal(str(inp), '') def test_LNParamStmt_factory(): """ Test LNParamStmt factory """ stmt = {'param': 'LN', 'name': 'test'} lnp = LNParamStmt.from_dict(stmt) assert_equal(lnp.name, 'test') def test_LNParamStmt_dump(): """ Test LNParamStmt to_gerber() """ stmt = {'param': 'LN', 'name': 'test'} lnp = LNParamStmt.from_dict(stmt) assert_equal(lnp.to_gerber(), '%LNtest*%') def test_LNParamStmt_string(): stmt = {'param': 'LN', 'name': 'test'} lnp = LNParamStmt.from_dict(stmt) assert_equal(str(lnp), '') def test_comment_stmt(): """ Test comment statement """ stmt = CommentStmt('A comment') assert_equal(stmt.type, 'COMMENT') assert_equal(stmt.comment, 'A comment') def test_comment_stmt_dump(): """ Test CommentStmt to_gerber() """ stmt = CommentStmt('A comment') assert_equal(stmt.to_gerber(), 'G04A comment*') def test_comment_stmt_string(): stmt = CommentStmt('A comment') assert_equal(str(stmt), '') def test_eofstmt(): """ Test EofStmt """ stmt = EofStmt() assert_equal(stmt.type, 'EOF') def test_eofstmt_dump(): """ Test EofStmt to_gerber() """ stmt = EofStmt() assert_equal(stmt.to_gerber(), 'M02*') def test_eofstmt_string(): assert_equal(str(EofStmt()), '') def test_quadmodestmt_factory(): """ Test QuadrantModeStmt.from_gerber() """ line = 'G74*' stmt = QuadrantModeStmt.from_gerber(line) assert_equal(stmt.type, 'QuadrantMode') assert_equal(stmt.mode, 'single-quadrant') line = 'G75*' stmt = QuadrantModeStmt.from_gerber(line) assert_equal(stmt.mode, 'multi-quadrant') def test_quadmodestmt_validation(): """ Test QuadrantModeStmt input validation """ line = 'G76*' assert_raises(ValueError, QuadrantModeStmt.from_gerber, line) assert_raises(ValueError, QuadrantModeStmt, 'quadrant-ful') def test_quadmodestmt_dump(): """ Test QuadrantModeStmt.to_gerber() """ for line in ('G74*', 'G75*',): stmt = QuadrantModeStmt.from_gerber(line) assert_equal(stmt.to_gerber(), line) def test_regionmodestmt_factory(): """ Test RegionModeStmt.from_gerber() """ line = 'G36*' stmt = RegionModeStmt.from_gerber(line) assert_equal(stmt.type, 'RegionMode') assert_equal(stmt.mode, 'on') line = 'G37*' stmt = RegionModeStmt.from_gerber(line) assert_equal(stmt.mode, 'off') def test_regionmodestmt_validation(): """ Test RegionModeStmt input validation """ line = 'G38*' assert_raises(ValueError, RegionModeStmt.from_gerber, line) assert_raises(ValueError, RegionModeStmt, 'off-ish') def test_regionmodestmt_dump(): """ Test RegionModeStmt.to_gerber() """ for line in ('G36*', 'G37*',): stmt = RegionModeStmt.from_gerber(line) assert_equal(stmt.to_gerber(), line) def test_unknownstmt(): """ Test UnknownStmt """ line = 'G696969*' stmt = UnknownStmt(line) assert_equal(stmt.type, 'UNKNOWN') assert_equal(stmt.line, line) def test_unknownstmt_dump(): """ Test UnknownStmt.to_gerber() """ lines = ('G696969*', 'M03*',) for line in lines: stmt = UnknownStmt(line) assert_equal(stmt.to_gerber(), line) def test_statement_string(): """ Test Statement.__str__() """ stmt = Statement('PARAM') assert_equal(str(stmt), '') stmt.test='PASS' assert_equal(str(stmt), '') def test_ADParamStmt_factory(): """ Test ADParamStmt factory """ stmt = {'param': 'AD', 'd': 0, 'shape': 'C'} ad = ADParamStmt.from_dict(stmt) assert_equal(ad.d, 0) assert_equal(ad.shape, 'C') stmt = {'param': 'AD', 'd': 1, 'shape': 'R'} ad = ADParamStmt.from_dict(stmt) assert_equal(ad.d, 1) assert_equal(ad.shape, 'R') def test_ADParamStmt_conversion(): stmt = {'param': 'AD', 'd': 0, 'shape': 'C', 'modifiers': '25.4X25.4,25.4X25.4'} ad = ADParamStmt.from_dict(stmt) ad.to_inch() assert_equal(ad.modifiers[0], (1., 1.)) assert_equal(ad.modifiers[1], (1., 1.)) stmt = {'param': 'AD', 'd': 0, 'shape': 'C', 'modifiers': '1X1,1X1'} ad = ADParamStmt.from_dict(stmt) ad.to_metric() assert_equal(ad.modifiers[0], (25.4, 25.4)) assert_equal(ad.modifiers[1], (25.4, 25.4)) def test_ADParamStmt_dump(): stmt = {'param': 'AD', 'd': 0, 'shape': 'C'} ad = ADParamStmt.from_dict(stmt) assert_equal(ad.to_gerber(), '%ADD0C*%') stmt = {'param': 'AD', 'd': 0, 'shape': 'C', 'modifiers': '1X1,1X1'} ad = ADParamStmt.from_dict(stmt) assert_equal(ad.to_gerber(), '%ADD0C,1X1,1X1*%') def test_ADPamramStmt_string(): stmt = {'param': 'AD', 'd': 0, 'shape': 'C'} ad = ADParamStmt.from_dict(stmt) assert_equal(str(ad), '') stmt = {'param': 'AD', 'd': 0, 'shape': 'R'} ad = ADParamStmt.from_dict(stmt) assert_equal(str(ad), '') stmt = {'param': 'AD', 'd': 0, 'shape': 'O'} ad = ADParamStmt.from_dict(stmt) assert_equal(str(ad), '') stmt = {'param': 'AD', 'd': 0, 'shape': 'test'} ad = ADParamStmt.from_dict(stmt) assert_equal(str(ad), '') def test_MIParamStmt_factory(): stmt = {'param': 'MI', 'a': 1, 'b': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(mi.a, 1) assert_equal(mi.b, 1) def test_MIParamStmt_dump(): stmt = {'param': 'MI', 'a': 1, 'b': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(mi.to_gerber(), '%MIA1B1*%') stmt = {'param': 'MI', 'a': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(mi.to_gerber(), '%MIA1B0*%') stmt = {'param': 'MI', 'b': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(mi.to_gerber(), '%MIA0B1*%') def test_MIParamStmt_string(): stmt = {'param': 'MI', 'a': 1, 'b': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(str(mi), '') stmt = {'param': 'MI', 'b': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(str(mi), '') stmt = {'param': 'MI', 'a': 1} mi = MIParamStmt.from_dict(stmt) assert_equal(str(mi), '') def test_coordstmt_ctor(): cs = CoordStmt('G04', 0.0, 0.1, 0.2, 0.3, 'D01', FileSettings()) assert_equal(cs.function, 'G04') assert_equal(cs.x, 0.0) assert_equal(cs.y, 0.1) assert_equal(cs.i, 0.2) assert_equal(cs.j, 0.3) assert_equal(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_equal(cs.function, 'G04') assert_equal(cs.x, 0.0) assert_equal(cs.y, 0.1) assert_equal(cs.i, 0.2) assert_equal(cs.j, 0.3) assert_equal(cs.op, 'D01') def test_coordstmt_dump(): cs = CoordStmt('G04', 0.0, 0.1, 0.2, 0.3, 'D01', FileSettings()) assert_equal(cs.to_gerber(FileSettings()), 'G04X0Y001I002J003D01*') def test_coordstmt_conversion(): cs = CoordStmt('G71', 25.4, 25.4, 25.4, 25.4, 'D01', FileSettings()) cs.to_inch() assert_equal(cs.x, 1.) assert_equal(cs.y, 1.) assert_equal(cs.i, 1.) assert_equal(cs.j, 1.) assert_equal(cs.function, 'G70') cs = CoordStmt('G70', 1., 1., 1., 1., 'D01', FileSettings()) cs.to_metric() assert_equal(cs.x, 25.4) assert_equal(cs.y, 25.4) assert_equal(cs.i, 25.4) assert_equal(cs.j, 25.4) assert_equal(cs.function, 'G71') def test_coordstmt_string(): cs = CoordStmt('G04', 0, 1, 2, 3, 'D01', FileSettings()) assert_equal(str(cs), '') cs = CoordStmt('G04', None, None, None, None, 'D02', FileSettings()) assert_equal(str(cs), '') cs = CoordStmt('G04', None, None, None, None, 'D03', FileSettings()) assert_equal(str(cs), '') cs = CoordStmt('G04', None, None, None, None, 'TEST', FileSettings()) assert_equal(str(cs), '') def test_aperturestmt_ctor(): ast = ApertureStmt(3, False) assert_equal(ast.d, 3) assert_equal(ast.deprecated, False) ast = ApertureStmt(4, True) assert_equal(ast.d, 4) assert_equal(ast.deprecated, True) ast = ApertureStmt(4, 1) assert_equal(ast.d, 4) assert_equal(ast.deprecated, True) ast = ApertureStmt(3) assert_equal(ast.d, 3) assert_equal(ast.deprecated, False) def test_aperturestmt_dump(): ast = ApertureStmt(3, False) assert_equal(ast.to_gerber(), 'D3*') ast = ApertureStmt(3, True) assert_equal(ast.to_gerber(), 'G54D3*') assert_equal(str(ast), '')