flatcam/tests/test_excellon.py

331 lines
9.9 KiB
Python

import unittest
from flatcamParsers.ParseExcellon import Excellon
from flatcamParsers.ParseGerber import Gerber
class ExcellonNumberParseTestInch(unittest.TestCase):
# Inch base format: 00.0000
# LEADING ZEROS
# With leading zeros, when you type in a coordinate,
# the leading zeros must always be included. Trailing zeros
# are unneeded and may be left off. The CNC-7 will automatically add them.
# TRAILING ZEROS
# You must show all zeros to the right of the number and can omit
# all zeros to the left of the number. The CNC-7 will count the number
# of digits you typed and automatically fill in the missing zeros.
def test_inch_leading_6digit(self):
excellon = Excellon()
self.assertEqual(excellon.zeros, "L")
self.assertEqual(excellon.parse_number("123456"), 12.3456)
def test_inch_leading_5digit(self):
excellon = Excellon()
self.assertEqual(excellon.parse_number("12345"), 12.345)
def test_inch_leading_15digit(self):
excellon = Excellon()
self.assertEqual(excellon.parse_number("012345"), 1.2345)
def test_inch_leading_51digit(self):
excellon = Excellon()
self.assertEqual(excellon.parse_number("123450"), 12.345)
def test_inch_trailing_6digit(self):
excellon = Excellon()
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("123456"), 12.3456)
def test_inch_trailing_5digit(self):
excellon = Excellon()
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("12345"), 1.2345)
def test_inch_trailing_15digit(self):
excellon = Excellon()
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("012345"), 1.2345)
def test_inch_trailing_51digit(self):
excellon = Excellon()
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("123450"), 12.345)
class ExcellonNumberParseTestMetric(unittest.TestCase):
# Metric base format: 000.000
# LEADING ZEROS
# With leading zeros, when you type in a coordinate,
# the leading zeros must always be included. Trailing zeros
# are unneeded and may be left off. The CNC-7 will automatically add them.
# TRAILING ZEROS
# You must show all zeros to the right of the number and can omit
# all zeros to the left of the number. The CNC-7 will count the number
# of digits you typed and automatically fill in the missing zeros.
def test_inch_leading_6digit(self):
excellon = Excellon()
excellon.units = "mm"
self.assertEqual(excellon.parse_number("123456"), 123.456)
def test_inch_leading_5digit(self):
excellon = Excellon()
excellon.units = "mm"
self.assertEqual(excellon.parse_number("12345"), 123.45)
def test_inch_leading_15digit(self):
excellon = Excellon()
excellon.units = "mm"
self.assertEqual(excellon.parse_number("012345"), 12.345)
def test_inch_leading_51digit(self):
excellon = Excellon()
excellon.units = "mm"
self.assertEqual(excellon.parse_number("123450"), 123.45)
def test_inch_trailing_6digit(self):
excellon = Excellon()
excellon.units = "mm"
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("123456"), 123.456)
def test_inch_trailing_5digit(self):
excellon = Excellon()
excellon.units = "mm"
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("12345"), 12.345)
def test_inch_trailing_15digit(self):
excellon = Excellon()
excellon.units = "mm"
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("012345"), 12.345)
def test_inch_trailing_51digit(self):
excellon = Excellon()
excellon.units = "mm"
excellon.zeros = "T"
self.assertEqual(excellon.parse_number("123450"), 123.45)
class ExcellonFormatM72Test(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
M72
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "in")
self.assertEqual(self.excellon.zeros, "L")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (90.0, 11.75))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (30.25, 10.5))
class ExcellonFormatM71Test(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
M71
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "mm")
self.assertEqual(self.excellon.zeros, "L")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (900.0, 117.5))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (302.5, 105.0))
class ExcellonFormatINCHLZTest(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
INCH,LZ
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "in")
self.assertEqual(self.excellon.zeros, "L")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (90.0, 11.75))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (30.25, 10.5))
class ExcellonFormatINCHTest(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
INCH,LZ
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "in")
self.assertEqual(self.excellon.zeros, "L")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (90.0, 11.75))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (30.25, 10.5))
class ExcellonFormatINCHTZTest(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
INCH,TZ
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "in")
self.assertEqual(self.excellon.zeros, "T")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (0.9, 1.175))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (3.025, 1.05))
class ExcellonFormatMETRICLZTest(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
METRIC,LZ
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "mm")
self.assertEqual(self.excellon.zeros, "L")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (900.0, 117.5))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (302.5, 105.0))
class ExcellonFormatMETRICTest(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
METRIC,LZ
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "mm")
self.assertEqual(self.excellon.zeros, "L")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (900.0, 117.5))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (302.5, 105.0))
class ExcellonFormatMETRICTZTest(unittest.TestCase):
def setUp(self):
self.excellon = Excellon()
code = """
M48
METRIC,TZ
T1C.02362F197S550
T2C.03543F197S550
M95
T1
X9000Y11750
X30250Y10500
"""
code = code.split('\n')
self.excellon.parse_lines(code)
def test_format(self):
self.assertEqual(self.excellon.units.lower(), "mm")
self.assertEqual(self.excellon.zeros, "T")
def test_coords(self):
# For X9000 add the missing 00 on the right. Then divide by 10000.
self.assertEqual(self.excellon.drills[0]["point"].coords[0], (9.0, 11.75))
self.assertEqual(self.excellon.drills[1]["point"].coords[0], (30.25, 10.5))
if __name__ == '__main__':
unittest.main()