Some cleanup to shell tests.

This commit is contained in:
Juan Pablo Caram
2016-07-03 15:59:25 -04:00
parent b4017cfec2
commit a9b4ff767b
3 changed files with 83 additions and 14 deletions

View File

@@ -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

View File

@@ -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:

View File

@@ -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" %