Some cleanup to shell tests.
This commit is contained in:
parent
b4017cfec2
commit
a9b4ff767b
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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" %
|
||||
|
|
Loading…
Reference in New Issue