Some cleanup to shell tests.
This commit is contained in:
@@ -789,28 +789,31 @@ class App(QtCore.QObject):
|
|||||||
|
|
||||||
def exec_command_test(self, text, reraise=True):
|
def exec_command_test(self, text, reraise=True):
|
||||||
"""
|
"""
|
||||||
|
Same as exec_command(...) with additional control over exceptions.
|
||||||
Handles input from the shell. See FlatCAMApp.setup_shell for shell commands.
|
Handles input from the shell. See FlatCAMApp.setup_shell for shell commands.
|
||||||
|
|
||||||
:param text: Input command
|
:param text: Input command
|
||||||
:param reraise: raise exception and not hide it, used mainly in unittests
|
:param reraise: Re-raise TclError exceptions in Python (mostly for unitttests).
|
||||||
:return: output if there was any
|
:return: Output from the command
|
||||||
"""
|
"""
|
||||||
|
|
||||||
text = str(text)
|
text = str(text)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.shell.open_proccessing()
|
self.shell.open_proccessing() # Disables input box.
|
||||||
result = self.tcl.eval(str(text))
|
result = self.tcl.eval(str(text))
|
||||||
if result != 'None':
|
if result != 'None':
|
||||||
self.shell.append_output(result + '\n')
|
self.shell.append_output(result + '\n')
|
||||||
|
|
||||||
except Tkinter.TclError, e:
|
except Tkinter.TclError, e:
|
||||||
#this will display more precise answer if something in TCL shell fail
|
# This will display more precise answer if something in TCL shell fails
|
||||||
result = self.tcl.eval("set errorInfo")
|
result = self.tcl.eval("set errorInfo")
|
||||||
self.log.error("Exec command Exception: %s" % (result + '\n'))
|
self.log.error("Exec command Exception: %s" % (result + '\n'))
|
||||||
self.shell.append_error('ERROR: ' + result + '\n')
|
self.shell.append_error('ERROR: ' + result + '\n')
|
||||||
#show error in console and just return or in test raise exception
|
# Show error in console and just return or in test raise exception
|
||||||
if reraise:
|
if reraise:
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
self.shell.close_proccessing()
|
self.shell.close_proccessing()
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ class FlatCAMObj(QtCore.QObject):
|
|||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
"""
|
"""
|
||||||
|
Constructor.
|
||||||
|
|
||||||
:param name: Name of the object given by the user.
|
:param name: Name of the object given by the user.
|
||||||
:return: FlatCAMObj
|
:return: FlatCAMObj
|
||||||
@@ -57,6 +58,9 @@ class FlatCAMObj(QtCore.QObject):
|
|||||||
``self.options`` is only updated, not overwritten. This ensures that
|
``self.options`` is only updated, not overwritten. This ensures that
|
||||||
options set by the app do not vanish when reading the objects
|
options set by the app do not vanish when reading the objects
|
||||||
from a project file.
|
from a project file.
|
||||||
|
|
||||||
|
:param d: Dictionary with attributes to set.
|
||||||
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for attr in self.ser_attrs:
|
for attr in self.ser_attrs:
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class TclShellTest(unittest.TestCase):
|
|||||||
|
|
||||||
cls.setup = True
|
cls.setup = True
|
||||||
cls.app = QtGui.QApplication(sys.argv)
|
cls.app = QtGui.QApplication(sys.argv)
|
||||||
|
|
||||||
# Create App, keep app defaults (do not load
|
# Create App, keep app defaults (do not load
|
||||||
# user-defined defaults).
|
# user-defined defaults).
|
||||||
cls.fc = App(user_defaults=False)
|
cls.fc = App(user_defaults=False)
|
||||||
@@ -54,6 +55,7 @@ class TclShellTest(unittest.TestCase):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
|
|
||||||
cls.fc.tcl = None
|
cls.fc.tcl = None
|
||||||
cls.app.closeAllWindows()
|
cls.app.closeAllWindows()
|
||||||
del cls.fc
|
del cls.fc
|
||||||
@@ -61,46 +63,106 @@ class TclShellTest(unittest.TestCase):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def test_set_get_units(self):
|
def test_set_get_units(self):
|
||||||
|
"""
|
||||||
|
Tests setting and getting units via the ``set_sys`` command,
|
||||||
|
and persistance after ``new`` command.
|
||||||
|
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
|
||||||
|
# MM
|
||||||
self.fc.exec_command_test('set_sys units MM')
|
self.fc.exec_command_test('set_sys units MM')
|
||||||
self.fc.exec_command_test('new')
|
self.fc.exec_command_test('new')
|
||||||
|
|
||||||
|
# IN
|
||||||
self.fc.exec_command_test('set_sys units IN')
|
self.fc.exec_command_test('set_sys units IN')
|
||||||
self.fc.exec_command_test('new')
|
self.fc.exec_command_test('new')
|
||||||
units=self.fc.exec_command_test('get_sys units')
|
|
||||||
|
#----------------------------------------
|
||||||
|
# Units must be IN
|
||||||
|
#----------------------------------------
|
||||||
|
units = self.fc.exec_command_test('get_sys units')
|
||||||
self.assertEquals(units, "IN")
|
self.assertEquals(units, "IN")
|
||||||
|
|
||||||
|
# MM
|
||||||
self.fc.exec_command_test('set_sys units MM')
|
self.fc.exec_command_test('set_sys units MM')
|
||||||
self.fc.exec_command_test('new')
|
self.fc.exec_command_test('new')
|
||||||
units=self.fc.exec_command_test('get_sys units')
|
|
||||||
|
#----------------------------------------
|
||||||
|
# Units must be MM
|
||||||
|
#----------------------------------------
|
||||||
|
units = self.fc.exec_command_test('get_sys units')
|
||||||
self.assertEquals(units, "MM")
|
self.assertEquals(units, "MM")
|
||||||
|
|
||||||
def test_gerber_flow(self):
|
def test_gerber_flow(self):
|
||||||
|
"""
|
||||||
|
Typical workflow from Gerber to GCode.
|
||||||
|
|
||||||
# open gerber files top, bottom and cutout
|
:return: None
|
||||||
|
"""
|
||||||
|
|
||||||
self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
|
gbr_cmd = 'open_gerber {path}/{filename} -outname {outname}'
|
||||||
|
|
||||||
|
#-----------------------------------------
|
||||||
|
# Open top layer and check for object type
|
||||||
|
#-----------------------------------------
|
||||||
|
cmd = gbr_cmd.format(
|
||||||
|
path=self.gerber_files,
|
||||||
|
filename=self.copper_top_filename,
|
||||||
|
outname=self.gerber_top_name)
|
||||||
|
self.fc.exec_command_test(cmd)
|
||||||
gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
|
gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
|
||||||
self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
|
self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
|
||||||
"Expected FlatCAMGerber, instead, %s is %s" %
|
"Expected FlatCAMGerber, instead, %s is %s" %
|
||||||
(self.gerber_top_name, type(gerber_top_obj)))
|
(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))
|
#--------------------------------------------
|
||||||
|
# Open bottom layer and check for object type
|
||||||
|
#--------------------------------------------
|
||||||
|
cmd = gbr_cmd.format(
|
||||||
|
path=self.gerber_files,
|
||||||
|
filename=self.copper_bottom_filename,
|
||||||
|
outname=self.gerber_bottom_name)
|
||||||
|
self.fc.exec_command_test(cmd)
|
||||||
gerber_bottom_obj = self.fc.collection.get_by_name(self.gerber_bottom_name)
|
gerber_bottom_obj = self.fc.collection.get_by_name(self.gerber_bottom_name)
|
||||||
self.assertTrue(isinstance(gerber_bottom_obj, FlatCAMGerber),
|
self.assertTrue(isinstance(gerber_bottom_obj, FlatCAMGerber),
|
||||||
"Expected FlatCAMGerber, instead, %s is %s" %
|
"Expected FlatCAMGerber, instead, %s is %s" %
|
||||||
(self.gerber_bottom_name, type(gerber_bottom_obj)))
|
(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))
|
#--------------------------------------------
|
||||||
|
# Open cutout layer and check for object type
|
||||||
|
#--------------------------------------------
|
||||||
|
cmd = gbr_cmd.format(
|
||||||
|
path=self.gerber_files,
|
||||||
|
filename=self.cutout_filename,
|
||||||
|
outname=self.gerber_cutout_name
|
||||||
|
)
|
||||||
|
self.fc.exec_command_test(cmd)
|
||||||
gerber_cutout_obj = self.fc.collection.get_by_name(self.gerber_cutout_name)
|
gerber_cutout_obj = self.fc.collection.get_by_name(self.gerber_cutout_name)
|
||||||
self.assertTrue(isinstance(gerber_cutout_obj, FlatCAMGerber),
|
self.assertTrue(isinstance(gerber_cutout_obj, FlatCAMGerber),
|
||||||
"Expected FlatCAMGerber, instead, %s is %s" %
|
"Expected FlatCAMGerber, instead, %s is %s" %
|
||||||
(self.gerber_cutout_name, type(gerber_cutout_obj)))
|
(self.gerber_cutout_name, type(gerber_cutout_obj)))
|
||||||
|
|
||||||
# exteriors delete and join geometries for top layer
|
# exteriors delete and join geometries for top layer
|
||||||
self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_cutout_name, self.engraver_diameter))
|
cmd = 'isolate {objname} -dia {dia}'.format(
|
||||||
self.fc.exec_command_test('exteriors %s -outname %s' % (self.gerber_cutout_name + '_iso', self.gerber_cutout_name + '_iso_exterior'))
|
objname=self.gerber_cutout_name,
|
||||||
self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_iso'))
|
dia=self.engraver_diameter)
|
||||||
|
self.fc.exec_command_test(cmd)
|
||||||
|
|
||||||
|
cmd = 'exteriors {objname} -outname {outname}'.format(
|
||||||
|
objname=self.gerber_cutout_name + '_iso',
|
||||||
|
outname=self.gerber_cutout_name + '_iso_exterior')
|
||||||
|
self.fc.exec_command_test(cmd)
|
||||||
|
|
||||||
|
cmd = 'delete {objname}'.format(
|
||||||
|
objname=self.gerber_cutout_name + '_iso')
|
||||||
|
self.fc.exec_command_test(cmd)
|
||||||
|
|
||||||
|
# TODO: Check deleteb object is gone.
|
||||||
|
|
||||||
|
#--------------------------------------------
|
||||||
|
# Exteriors of cutout layer, check type
|
||||||
|
#--------------------------------------------
|
||||||
obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_iso_exterior')
|
obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_iso_exterior')
|
||||||
self.assertTrue(isinstance(obj, FlatCAMGeometry),
|
self.assertTrue(isinstance(obj, FlatCAMGeometry),
|
||||||
"Expected FlatCAMGeometry, instead, %s is %s" %
|
"Expected FlatCAMGeometry, instead, %s is %s" %
|
||||||
|
|||||||
Reference in New Issue
Block a user