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):
"""
Same as exec_command(...) with additional control over exceptions.
Handles input from the shell. See FlatCAMApp.setup_shell for shell commands.
:param text: Input command
:param reraise: raise exception and not hide it, used mainly in unittests
:return: output if there was any
:param reraise: Re-raise TclError exceptions in Python (mostly for unitttests).
:return: Output from the command
"""
text = str(text)
try:
self.shell.open_proccessing()
self.shell.open_proccessing() # Disables input box.
result = self.tcl.eval(str(text))
if result != 'None':
self.shell.append_output(result + '\n')
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")
self.log.error("Exec command Exception: %s" % (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:
raise e
finally:
self.shell.close_proccessing()
pass

View File

@ -25,6 +25,7 @@ class FlatCAMObj(QtCore.QObject):
def __init__(self, name):
"""
Constructor.
:param name: Name of the object given by the user.
:return: FlatCAMObj
@ -57,6 +58,9 @@ class FlatCAMObj(QtCore.QObject):
``self.options`` is only updated, not overwritten. This ensures that
options set by the app do not vanish when reading the objects
from a project file.
:param d: Dictionary with attributes to set.
:return: None
"""
for attr in self.ser_attrs:

View File

@ -43,6 +43,7 @@ class TclShellTest(unittest.TestCase):
cls.setup = True
cls.app = QtGui.QApplication(sys.argv)
# Create App, keep app defaults (do not load
# user-defined defaults).
cls.fc = App(user_defaults=False)
@ -54,6 +55,7 @@ class TclShellTest(unittest.TestCase):
@classmethod
def tearDownClass(cls):
cls.fc.tcl = None
cls.app.closeAllWindows()
del cls.fc
@ -61,46 +63,106 @@ class TclShellTest(unittest.TestCase):
pass
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('new')
# IN
self.fc.exec_command_test('set_sys units IN')
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")
# MM
self.fc.exec_command_test('set_sys units MM')
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")
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)
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))
#--------------------------------------------
# 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)
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))
#--------------------------------------------
# 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)
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'))
cmd = 'isolate {objname} -dia {dia}'.format(
objname=self.gerber_cutout_name,
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')
self.assertTrue(isinstance(obj, FlatCAMGeometry),
"Expected FlatCAMGeometry, instead, %s is %s" %