Jelajahi Sumber

Some cleanup to shell tests.

Juan Pablo Caram 9 tahun lalu
induk
melakukan
a9b4ff767b
3 mengubah file dengan 85 tambahan dan 16 penghapusan
  1. 8 5
      FlatCAMApp.py
  2. 4 0
      FlatCAMObj.py
  3. 73 11
      tests/test_tcl_shell.py

+ 8 - 5
FlatCAMApp.py

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

+ 4 - 0
FlatCAMObj.py

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

+ 73 - 11
tests/test_tcl_shell.py

@@ -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):
-
-        # open  gerber files top, bottom and cutout
-
-        self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
+        """
+        Typical workflow from Gerber to GCode.
+
+        :return: None
+        """
+
+        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" %