implement basic set of tests for tcl_shell, need to be completed
This commit is contained in:
26
tests/gerber_files/detector_contour.gbr
Normal file
26
tests/gerber_files/detector_contour.gbr
Normal file
@@ -0,0 +1,26 @@
|
||||
G04 MADE WITH FRITZING*
|
||||
G04 WWW.FRITZING.ORG*
|
||||
G04 DOUBLE SIDED*
|
||||
G04 HOLES PLATED*
|
||||
G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
|
||||
%ASAXBY*%
|
||||
%FSLAX23Y23*%
|
||||
%MOIN*%
|
||||
%OFA0B0*%
|
||||
%SFA1.0B1.0*%
|
||||
%ADD10R,1.771650X1.181100*%
|
||||
%ADD11C,0.008000*%
|
||||
%ADD10C,0.008*%
|
||||
%LNCONTOUR*%
|
||||
G90*
|
||||
G70*
|
||||
G54D10*
|
||||
G54D11*
|
||||
X4Y1177D02*
|
||||
X1768Y1177D01*
|
||||
X1768Y4D01*
|
||||
X4Y4D01*
|
||||
X4Y1177D01*
|
||||
D02*
|
||||
G04 End of contour*
|
||||
M02*
|
||||
2146
tests/gerber_files/detector_copper_bottom.gbr
Normal file
2146
tests/gerber_files/detector_copper_bottom.gbr
Normal file
File diff suppressed because it is too large
Load Diff
71
tests/gerber_files/detector_copper_top.gbr
Normal file
71
tests/gerber_files/detector_copper_top.gbr
Normal file
@@ -0,0 +1,71 @@
|
||||
G04 MADE WITH FRITZING*
|
||||
G04 WWW.FRITZING.ORG*
|
||||
G04 DOUBLE SIDED*
|
||||
G04 HOLES PLATED*
|
||||
G04 CONTOUR ON CENTER OF CONTOUR VECTOR*
|
||||
%ASAXBY*%
|
||||
%FSLAX23Y23*%
|
||||
%MOIN*%
|
||||
%OFA0B0*%
|
||||
%SFA1.0B1.0*%
|
||||
%ADD10C,0.075000*%
|
||||
%ADD11C,0.099055*%
|
||||
%ADD12C,0.078740*%
|
||||
%ADD13R,0.075000X0.075000*%
|
||||
%ADD14C,0.024000*%
|
||||
%ADD15C,0.020000*%
|
||||
%LNCOPPER1*%
|
||||
G90*
|
||||
G70*
|
||||
G54D10*
|
||||
X1149Y872D03*
|
||||
X1349Y872D03*
|
||||
X749Y722D03*
|
||||
X749Y522D03*
|
||||
X1149Y522D03*
|
||||
X1449Y522D03*
|
||||
X1149Y422D03*
|
||||
X1449Y422D03*
|
||||
X1149Y322D03*
|
||||
X1449Y322D03*
|
||||
X1149Y222D03*
|
||||
X1449Y222D03*
|
||||
X949Y472D03*
|
||||
X949Y72D03*
|
||||
G54D11*
|
||||
X749Y972D03*
|
||||
X599Y972D03*
|
||||
X349Y322D03*
|
||||
X349Y472D03*
|
||||
X349Y672D03*
|
||||
X349Y822D03*
|
||||
G54D10*
|
||||
X699Y122D03*
|
||||
X699Y322D03*
|
||||
G54D12*
|
||||
X699Y222D03*
|
||||
X949Y972D03*
|
||||
X749Y622D03*
|
||||
X1049Y222D03*
|
||||
X1249Y872D03*
|
||||
G54D13*
|
||||
X1149Y872D03*
|
||||
X1149Y522D03*
|
||||
G54D14*
|
||||
X952Y946D02*
|
||||
X1045Y249D01*
|
||||
G54D15*
|
||||
X776Y695D02*
|
||||
X721Y695D01*
|
||||
X721Y750D01*
|
||||
X776Y750D01*
|
||||
X776Y695D01*
|
||||
D02*
|
||||
X671Y150D02*
|
||||
X726Y150D01*
|
||||
X726Y95D01*
|
||||
X671Y95D01*
|
||||
X671Y150D01*
|
||||
D02*
|
||||
G04 End of Copper1*
|
||||
M02*
|
||||
46
tests/gerber_files/detector_drill.txt
Normal file
46
tests/gerber_files/detector_drill.txt
Normal file
@@ -0,0 +1,46 @@
|
||||
; NON-PLATED HOLES START AT T1
|
||||
; THROUGH (PLATED) HOLES START AT T100
|
||||
M48
|
||||
INCH
|
||||
T1C0.125984
|
||||
T100C0.031496
|
||||
T101C0.035000
|
||||
T102C0.059055
|
||||
%
|
||||
T1
|
||||
X001488Y010223
|
||||
X001488Y001223
|
||||
X016488Y001223
|
||||
X016488Y010223
|
||||
T100
|
||||
X009488Y009723
|
||||
X007488Y006223
|
||||
X012488Y008723
|
||||
X010488Y002223
|
||||
X006988Y002223
|
||||
T101
|
||||
X014488Y004223
|
||||
X006988Y003223
|
||||
X013488Y008723
|
||||
X011488Y008723
|
||||
X007488Y005223
|
||||
X014488Y003223
|
||||
X014488Y002223
|
||||
X011488Y005223
|
||||
X009488Y000723
|
||||
X011488Y004223
|
||||
X006988Y001223
|
||||
X009488Y004723
|
||||
X007488Y007223
|
||||
X011488Y003223
|
||||
X014488Y005223
|
||||
X011488Y002223
|
||||
T102
|
||||
X003488Y008223
|
||||
X003488Y004723
|
||||
X007488Y009723
|
||||
X003488Y006723
|
||||
X005988Y009723
|
||||
X003488Y003223
|
||||
T00
|
||||
M30
|
||||
155
tests/test_tcl_shell.py
Normal file
155
tests/test_tcl_shell.py
Normal file
@@ -0,0 +1,155 @@
|
||||
import sys
|
||||
import unittest
|
||||
from PyQt4 import QtGui
|
||||
from FlatCAMApp import App
|
||||
from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry, FlatCAMCNCjob, FlatCAMExcellon
|
||||
from ObjectUI import GerberObjectUI, GeometryObjectUI
|
||||
from time import sleep
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
class TclShellCommandTest(unittest.TestCase):
|
||||
|
||||
gerber_files = 'tests/gerber_files'
|
||||
copper_bottom_filename = 'detector_copper_bottom.gbr'
|
||||
copper_top_filename = 'detector_copper_top.gbr'
|
||||
cutout_filename = 'detector_contour.gbr'
|
||||
excellon_filename = 'detector_drill.txt'
|
||||
excellon_name = "excellon"
|
||||
gerber_top_name = "top"
|
||||
gerber_bottom_name = "bottom"
|
||||
gerber_cutout_name = "cutout"
|
||||
engraver_diameter = 0.3
|
||||
cutout_diameter = 3
|
||||
drill_diameter = 0.8
|
||||
|
||||
def setUp(self):
|
||||
self.app = QtGui.QApplication(sys.argv)
|
||||
|
||||
# Create App, keep app defaults (do not load
|
||||
# user-defined defaults).
|
||||
self.fc = App(user_defaults=False)
|
||||
|
||||
def tearDown(self):
|
||||
del self.fc
|
||||
del self.app
|
||||
|
||||
def test_set_get_units(self):
|
||||
|
||||
self.fc.exec_command_test('set_sys units IN')
|
||||
self.fc.exec_command_test('new')
|
||||
units=self.fc.exec_command_test('get_sys units')
|
||||
self.assertEquals(units, "IN")
|
||||
|
||||
self.fc.exec_command_test('set_sys units MM')
|
||||
self.fc.exec_command_test('new')
|
||||
units=self.fc.exec_command_test('get_sys units')
|
||||
self.assertEquals(units, "MM")
|
||||
|
||||
def test_gerber_flow(self):
|
||||
|
||||
# open gerber files top, bottom and cutout
|
||||
|
||||
self.fc.exec_command_test('set_sys units MM')
|
||||
self.fc.exec_command_test('new')
|
||||
|
||||
self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
|
||||
gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
|
||||
self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
|
||||
"Expected FlatCAMGerber, instead, %s is %s" %
|
||||
(self.gerber_top_name, type(gerber_top_obj)))
|
||||
|
||||
self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_bottom_filename, self.gerber_bottom_name))
|
||||
gerber_bottom_obj = self.fc.collection.get_by_name(self.gerber_bottom_name)
|
||||
self.assertTrue(isinstance(gerber_bottom_obj, FlatCAMGerber),
|
||||
"Expected FlatCAMGerber, instead, %s is %s" %
|
||||
(self.gerber_bottom_name, type(gerber_bottom_obj)))
|
||||
|
||||
self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.cutout_filename, self.gerber_cutout_name))
|
||||
gerber_cutout_obj = self.fc.collection.get_by_name(self.gerber_cutout_name)
|
||||
self.assertTrue(isinstance(gerber_cutout_obj, FlatCAMGerber),
|
||||
"Expected FlatCAMGerber, instead, %s is %s" %
|
||||
(self.gerber_cutout_name, type(gerber_cutout_obj)))
|
||||
|
||||
# exteriors delete and join geometries for top layer
|
||||
self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_cutout_name, self.engraver_diameter))
|
||||
self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_iso', self.gerber_cutout_name + '_iso_exterior'))
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_iso'))
|
||||
obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_iso_exterior')
|
||||
self.assertTrue(isinstance(obj, FlatCAMGeometry),
|
||||
"Expected FlatCAMGeometry, instead, %s is %s" %
|
||||
(self.gerber_cutout_name + '_iso_exterior', type(obj)))
|
||||
|
||||
# mirror bottom gerbers
|
||||
self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.gerber_bottom_name, self.gerber_cutout_name))
|
||||
self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.gerber_cutout_name, self.gerber_cutout_name))
|
||||
|
||||
# exteriors delete and join geometries for bottom layer
|
||||
self.fc.exec_command_test('isolate %s -dia %f -outname %s' % (self.gerber_cutout_name, self.engraver_diameter, self.gerber_cutout_name + '_bottom_iso'))
|
||||
self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_bottom_iso', self.gerber_cutout_name + '_bottom_iso_exterior'))
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_bottom_iso'))
|
||||
obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_bottom_iso_exterior')
|
||||
self.assertTrue(isinstance(obj, FlatCAMGeometry),
|
||||
"Expected FlatCAMGeometry, instead, %s is %s" %
|
||||
(self.gerber_cutout_name + '_bottom_iso_exterior', type(obj)))
|
||||
|
||||
# at this stage we should have 5 objects
|
||||
names = self.fc.collection.get_names()
|
||||
self.assertEqual(len(names), 5,
|
||||
"Expected 5 objects, found %d" % len(names))
|
||||
|
||||
# isolate traces
|
||||
self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_top_name, self.engraver_diameter))
|
||||
self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_bottom_name, self.engraver_diameter))
|
||||
|
||||
# join isolated geometries for top and bottom
|
||||
self.fc.exec_command_test('join_geometries %s %s %s' % (self.gerber_top_name + '_join_iso', self.gerber_top_name + '_iso', self.gerber_cutout_name + '_iso_exterior'))
|
||||
self.fc.exec_command_test('join_geometries %s %s %s' % (self.gerber_bottom_name + '_join_iso', self.gerber_bottom_name + '_iso', self.gerber_cutout_name + '_bottom_iso_exterior'))
|
||||
|
||||
# at this stage we should have 9 objects
|
||||
names = self.fc.collection.get_names()
|
||||
self.assertEqual(len(names), 9,
|
||||
"Expected 9 objects, found %d" % len(names))
|
||||
|
||||
# clean unused isolations
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_bottom_name + '_iso'))
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_top_name + '_iso'))
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_iso_exterior'))
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_bottom_iso_exterior'))
|
||||
|
||||
# at this stage we should have 5 objects again
|
||||
names = self.fc.collection.get_names()
|
||||
self.assertEqual(len(names), 5,
|
||||
"Expected 5 objects, found %d" % len(names))
|
||||
|
||||
# geocutout bottom test (it cuts to same object)
|
||||
self.fc.exec_command_test('isolate %s -dia %f -outname %s' % (self.gerber_cutout_name, self.cutout_diameter, self.gerber_cutout_name + '_bottom_iso'))
|
||||
self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_bottom_iso', self.gerber_cutout_name + '_bottom_iso_exterior'))
|
||||
self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_bottom_iso'))
|
||||
obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_bottom_iso_exterior')
|
||||
self.assertTrue(isinstance(obj, FlatCAMGeometry),
|
||||
"Expected FlatCAMGeometry, instead, %s is %s" %
|
||||
(self.gerber_cutout_name + '_bottom_iso_exterior', type(obj)))
|
||||
self.fc.exec_command_test('geocutout %s -dia %f -gapsize 0.3 -gaps 4' % (self.gerber_cutout_name + '_bottom_iso_exterior', self.cutout_diameter))
|
||||
|
||||
# at this stage we should have 6 objects
|
||||
names = self.fc.collection.get_names()
|
||||
self.assertEqual(len(names), 6,
|
||||
"Expected 6 objects, found %d" % len(names))
|
||||
|
||||
# TODO: tests for tcl
|
||||
|
||||
def test_excellon_flow(self):
|
||||
|
||||
|
||||
self.fc.exec_command_test('set_sys units MM')
|
||||
self.fc.exec_command_test('open_excellon %s/%s -outname %s' % (self.gerber_files, self.excellon_filename, self.excellon_name))
|
||||
excellon_obj = self.fc.collection.get_by_name(self.excellon_name)
|
||||
self.assertTrue(isinstance(excellon_obj, FlatCAMExcellon),
|
||||
"Expected FlatCAMExcellon, instead, %s is %s" %
|
||||
(self.excellon_name, type(excellon_obj)))
|
||||
|
||||
# mirror bottom excellon
|
||||
self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.excellon_name, self.gerber_cutout_name))
|
||||
|
||||
# TODO: tests for tcl
|
||||
Reference in New Issue
Block a user