Sfoglia il codice sorgente

Merged in sopak/flatcam/tcl-commands (pull request #41)

Tcl command tests
jpcgt 9 anni fa
parent
commit
2e31d9aa48

+ 18 - 0
tests/tclCommands/__init__.py

@@ -0,0 +1,18 @@
+import pkgutil
+import sys
+
+# allowed command tests (please append them alphabetically ordered)
+from test_TclCommandAddPolygon import *
+from test_TclCommandAddPolyline import *
+from test_TclCommandCncjob import *
+from test_TclCommandDrillcncjob import *
+from test_TclCommandExportGcode import *
+from test_TclCommandExteriors import *
+from test_TclCommandImportSvg import *
+from test_TclCommandInteriors import *
+from test_TclCommandIsolate import *
+from test_TclCommandNew import *
+from test_TclCommandNewGeometry  import *
+from test_TclCommandOpenExcellon import *
+from test_TclCommandOpenGerber import *
+from test_TclCommandPaintPolygon import *

+ 18 - 0
tests/tclCommands/test_TclCommandAddPolygon.py

@@ -0,0 +1,18 @@
+from FlatCAMObj import FlatCAMGeometry
+
+
+def test_add_polygon(self):
+    """
+    Test add polygon into geometry
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('new_geometry "%s"' % self.geometry_name)
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))
+
+    points = '0 0 20 0 10 10 0 10'
+
+    self.fc.exec_command_test('add_polygon "%s" %s' % (self.geometry_name, points))

+ 18 - 0
tests/tclCommands/test_TclCommandAddPolyline.py

@@ -0,0 +1,18 @@
+from FlatCAMObj import FlatCAMGeometry
+
+
+def test_add_polyline(self):
+    """
+    Test add polyline into geometry
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('new_geometry "%s"' % self.geometry_name)
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))
+
+    points = '0 0 20 0 10 10 0 10 33 33'
+
+    self.fc.exec_command_test('add_polyline "%s" %s' % (self.geometry_name, points))

+ 17 - 0
tests/tclCommands/test_TclCommandCncjob.py

@@ -0,0 +1,17 @@
+from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry, FlatCAMObj
+from test_TclCommandIsolate import *
+
+def test_cncjob(self):
+    """
+    Test cncjob
+    :param self:
+    :return:
+    """
+
+    # reuse isolate tests
+    test_isolate(self)
+
+    self.fc.exec_command_test('cncjob %s_iso -tooldia 0.5 -z_cut 0.05 -z_move 3 -feedrate 300' % self.gerber_top_name)
+    cam_top_obj = self.fc.collection.get_by_name(self.gerber_top_name + '_iso_cnc')
+    self.assertTrue(isinstance(cam_top_obj, FlatCAMObj), "Expected FlatCAMObj, instead, %s is %s"
+                    % (self.gerber_top_name + '_iso_cnc', type(cam_top_obj)))

+ 18 - 0
tests/tclCommands/test_TclCommandDrillcncjob.py

@@ -0,0 +1,18 @@
+from FlatCAMObj import FlatCAMObj
+from test_TclCommandOpenExcellon import *
+
+
+def test_drillcncjob(self):
+    """
+    Test cncjob
+    :param self:
+    :return:
+    """
+    # reuse open excellontests
+    test_open_excellon(self)
+
+    self.fc.exec_command_test('drillcncjob %s -tools all -drillz 0.5 -travelz 3 -feedrate 300'
+                              % self.excellon_name)
+    cam_top_obj = self.fc.collection.get_by_name(self.excellon_name + '_cnc')
+    self.assertTrue(isinstance(cam_top_obj, FlatCAMObj), "Expected FlatCAMObj, instead, %s is %s"
+                    % (self.excellon_name + '_cnc', type(cam_top_obj)))

+ 33 - 0
tests/tclCommands/test_TclCommandExportGcode.py

@@ -0,0 +1,33 @@
+import os
+import tempfile
+
+from test_TclCommandCncjob import *
+from test_TclCommandDrillcncjob import *
+
+
+def test_export_gcodecncjob(self):
+    """
+    Test cncjob
+    :param self:
+    :return:
+    """
+
+    # reuse tests
+    test_cncjob(self)
+    test_drillcncjob(self)
+
+    with tempfile.NamedTemporaryFile(prefix='unittest.', suffix="." + self.excellon_name + '.gcode', delete=True)\
+            as tmp_file:
+        output_filename = tmp_file.name
+    self.fc.exec_command_test('write_gcode "%s" "%s"' % (self.excellon_name + '_cnc', output_filename))
+    self.assertTrue(os.path.isfile(output_filename))
+    os.remove(output_filename)
+
+    with tempfile.NamedTemporaryFile(prefix='unittest.', suffix="." + self.gerber_top_name + '.gcode', delete=True)\
+            as tmp_file:
+        output_filename = tmp_file.name
+    self.fc.exec_command_test('write_gcode "%s" "%s"' % (self.gerber_top_name + '_iso_cnc', output_filename))
+    self.assertTrue(os.path.isfile(output_filename))
+    os.remove(output_filename)
+
+    # TODO check what is inside files , it should  be same every time

+ 24 - 0
tests/tclCommands/test_TclCommandExteriors.py

@@ -0,0 +1,24 @@
+from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry
+
+
+def test_exteriors(self):
+    """
+    Test exteriors
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('open_gerber %s/%s -outname %s'
+                              % (self.gerber_files, self.cutout_filename, self.gerber_cutout_name))
+    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 interiors and delete isolated traces
+    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'))
+    obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_iso_exterior')
+    self.assertTrue(isinstance(obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.gerber_cutout_name + '_iso_exterior', type(obj)))

+ 60 - 0
tests/tclCommands/test_TclCommandImportSvg.py

@@ -0,0 +1,60 @@
+from os import listdir
+
+from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry
+
+
+def test_import_svg(self):
+    """
+    Test all SVG files inside svg directory.
+    Problematic SVG files shold be put there as test reference.
+    :param self:
+    :return:
+    """
+
+    file_list = listdir(self.svg_files)
+
+    for svg_file in file_list:
+
+        # import  without outname
+        self.fc.exec_command_test('import_svg "%s/%s"' % (self.svg_files, svg_file))
+
+        obj = self.fc.collection.get_by_name(svg_file)
+        self.assertTrue(isinstance(obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                        % (svg_file, type(obj)))
+
+        # import  with outname
+        outname = '%s-%s' % (self.geometry_name, svg_file)
+        self.fc.exec_command_test('import_svg "%s/%s" -outname "%s"' % (self.svg_files, svg_file, outname))
+
+        obj = self.fc.collection.get_by_name(outname)
+        self.assertTrue(isinstance(obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                        % (outname, type(obj)))
+
+    names = self.fc.collection.get_names()
+    self.assertEqual(len(names), len(file_list)*2,
+                     "Expected %d objects, found %d" % (len(file_list)*2, len(file_list)))
+
+
+def test_import_svg_as_geometry(self):
+
+    self.fc.exec_command_test('import_svg "%s/%s" -type geometry -outname "%s"'
+                              % (self.svg_files, self.svg_filename, self.geometry_name))
+
+    obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(obj, FlatCAMGeometry) and not isinstance(obj, FlatCAMGerber),
+                    "Expected FlatCAMGeometry, instead, %s is %s" % (self.geometry_name, type(obj)))
+
+
+def test_import_svg_as_gerber(self):
+
+    self.fc.exec_command_test('import_svg "%s/%s" -type gerber -outname "%s"'
+                              % (self.svg_files, self.svg_filename, self.gerber_name))
+
+    obj = self.fc.collection.get_by_name(self.gerber_name)
+    self.assertTrue(isinstance(obj, FlatCAMGerber),
+                    "Expected FlatCAMGerber, instead, %s is %s" % (self.gerber_name, type(obj)))
+
+    self.fc.exec_command_test('isolate "%s"' % self.gerber_name)
+    obj = self.fc.collection.get_by_name(self.gerber_name+'_iso')
+    self.assertTrue(isinstance(obj, FlatCAMGeometry),
+                    "Expected FlatCAMGeometry, instead, %s is %s" % (self.gerber_name+'_iso', type(obj)))

+ 24 - 0
tests/tclCommands/test_TclCommandInteriors.py

@@ -0,0 +1,24 @@
+from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry
+
+
+def test_interiors(self):
+    """
+    Test interiors
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('open_gerber %s/%s -outname %s'
+                              % (self.gerber_files, self.cutout_filename, self.gerber_cutout_name))
+    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)))
+
+    # interiors and delete isolated traces
+    self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_cutout_name, self.engraver_diameter))
+    self.fc.exec_command_test('interiors %s -outname %s'
+                              % (self.gerber_cutout_name + '_iso', self.gerber_cutout_name + '_iso_interior'))
+    self.fc.exec_command_test('delete %s' % (self.gerber_cutout_name + '_iso'))
+    obj = self.fc.collection.get_by_name(self.gerber_cutout_name + '_iso_interior')
+    self.assertTrue(isinstance(obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.gerber_cutout_name + '_iso_interior', type(obj)))

+ 21 - 0
tests/tclCommands/test_TclCommandIsolate.py

@@ -0,0 +1,21 @@
+from FlatCAMObj import FlatCAMGerber, FlatCAMGeometry
+
+
+def test_isolate(self):
+    """
+    Test isolate gerber
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('open_gerber %s/%s -outname %s'
+                              % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
+    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)))
+
+    # isolate traces
+    self.fc.exec_command_test('isolate %s -dia %f' % (self.gerber_top_name, self.engraver_diameter))
+    geometry_top_obj = self.fc.collection.get_by_name(self.gerber_top_name+'_iso')
+    self.assertTrue(isinstance(geometry_top_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.gerber_top_name+'_iso', type(geometry_top_obj)))

+ 48 - 0
tests/tclCommands/test_TclCommandNew.py

@@ -0,0 +1,48 @@
+from FlatCAMObj import FlatCAMGeometry
+
+
+def test_new(self):
+    """
+    Test new project
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('new_geometry "%s"' % self.geometry_name)
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))
+
+    self.fc.exec_command_test('proc testproc {} { puts "testresult" }')
+
+    result = self.fc.exec_command_test('testproc')
+
+    self.assertEqual(result, "testresult",'testproc should return "testresult"')
+
+    self.fc.exec_command_test('set_sys units MM')
+    self.fc.exec_command_test('new')
+
+    # object should not exists anymore
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertIsNone(geometry_obj, "Expected object to be None, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))
+
+    # TODO after new it should  delete all procedures and variables, we need to make sure "testproc" does not exists
+
+    # Test it again  with same names
+
+    self.fc.exec_command_test('set_sys units MM')
+    self.fc.exec_command_test('new')
+
+    self.fc.exec_command_test('new_geometry "%s"' % self.geometry_name)
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))
+
+    self.fc.exec_command_test('set_sys units MM')
+    self.fc.exec_command_test('new')
+
+    # object should not exists anymore
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertIsNone(geometry_obj, "Expected object to be None, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))

+ 14 - 0
tests/tclCommands/test_TclCommandNewGeometry.py

@@ -0,0 +1,14 @@
+from FlatCAMObj import FlatCAMGeometry
+
+
+def test_new_geometry(self):
+    """
+    Test create new geometry
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('new_geometry "%s"' % self.geometry_name)
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))

+ 15 - 0
tests/tclCommands/test_TclCommandOpenExcellon.py

@@ -0,0 +1,15 @@
+from FlatCAMObj import FlatCAMExcellon
+
+
+def test_open_excellon(self):
+    """
+    Test open excellon file
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('open_excellon %s/%s -outname %s'
+                              % (self.gerber_files, self.excellon_filename, self.excellon_name))
+    excellon_obj = self.fc.collection.get_by_name(self.excellon_name)
+    self.assertTrue(isinstance(excellon_obj, FlatCAMExcellon), "Expected FlatCAMExcellon, instead, %s is %s"
+                    % (self.excellon_name, type(excellon_obj)))

+ 25 - 0
tests/tclCommands/test_TclCommandOpenGerber.py

@@ -0,0 +1,25 @@
+from FlatCAMObj import FlatCAMGerber
+
+
+def test_open_gerber(self):
+    """
+    Test open gerber file
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('open_gerber %s/%s -outname %s'
+                              % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
+    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))
+    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)))
+
+    #just read with  original name
+    self.fc.exec_command_test('open_gerber %s/%s'
+                              % (self.gerber_files, self.copper_top_filename))

+ 25 - 0
tests/tclCommands/test_TclCommandPaintPolygon.py

@@ -0,0 +1,25 @@
+from FlatCAMObj import FlatCAMGeometry
+
+
+def test_paint_polygon(self):
+    """
+    Test create paint polygon geometry
+    :param self:
+    :return:
+    """
+
+    self.fc.exec_command_test('new_geometry "%s"' % self.geometry_name)
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name)
+    self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+                    % (self.geometry_name, type(geometry_obj)))
+
+    points = '0 0 20 0 10 10 0 10'
+
+    self.fc.exec_command_test('add_polygon "%s" %s' % (self.geometry_name, points))
+
+    # TODO rename to paint_polygon in future oop command implementation
+    self.fc.exec_command_test('paint_poly "%s" 5 5 2 0.5' % (self.geometry_name))
+    geometry_obj = self.fc.collection.get_by_name(self.geometry_name+'_paint')
+    # TODO uncoment check after oop implementation, because of threading inside paint poly
+    #self.assertTrue(isinstance(geometry_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s"
+    #                % (self.geometry_name+'_paint', type(geometry_obj)))

+ 8 - 70
tests/test_tcl_shell.py

@@ -31,6 +31,10 @@ class TclShellTest(unittest.TestCase):
     cutout_diameter = 3
     drill_diameter = 0.8
 
+    # load test methods to split huge test file into smaller pieces
+    # reason for this is reuse one test window only,
+    from tests.tclCommands import *
+
     @classmethod
     def setUpClass(self):
 
@@ -41,6 +45,10 @@ class TclShellTest(unittest.TestCase):
         self.fc = App(user_defaults=False)
         self.fc.ui.shell_dock.show()
 
+    def setUp(self):
+        self.fc.exec_command_test('set_sys units MM')
+        self.fc.exec_command_test('new')
+
     @classmethod
     def tearDownClass(self):
         self.fc.tcl=None
@@ -69,10 +77,6 @@ class TclShellTest(unittest.TestCase):
 
         # open  gerber files top, bottom and cutout
 
-
-        self.fc.exec_command_test('set_sys units MM')
-        self.fc.exec_command_test('new')
-
         self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
         gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
         self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
@@ -161,9 +165,6 @@ class TclShellTest(unittest.TestCase):
 
     def test_open_gerber(self):
 
-        self.fc.exec_command_test('set_sys units MM')
-        self.fc.exec_command_test('new')
-
         self.fc.exec_command_test('open_gerber %s/%s -outname %s' % (self.gerber_files, self.copper_top_filename, self.gerber_top_name))
         gerber_top_obj = self.fc.collection.get_by_name(self.gerber_top_name)
         self.assertTrue(isinstance(gerber_top_obj, FlatCAMGerber),
@@ -172,8 +173,6 @@ class TclShellTest(unittest.TestCase):
 
     def test_excellon_flow(self):
 
-        self.fc.exec_command_test('set_sys units MM')
-        self.fc.exec_command_test('new')
         self.fc.exec_command_test('open_excellon %s/%s -outname %s' % (self.gerber_files, self.excellon_filename, self.excellon_name))
         excellon_obj = self.fc.collection.get_by_name(self.excellon_name)
         self.assertTrue(isinstance(excellon_obj, FlatCAMExcellon),
@@ -184,64 +183,3 @@ class TclShellTest(unittest.TestCase):
         self.fc.exec_command_test('mirror %s -box %s -axis X' % (self.excellon_name, self.gerber_cutout_name))
 
         # TODO: tests for tcl
-
-    def test_import_svg(self):
-        """
-        Test all SVG files inside svg directory.
-        Problematic SVG files shold be put there as test reference.
-        :return:
-        """
-
-        self.fc.exec_command_test('set_sys units MM')
-        self.fc.exec_command_test('new')
-
-        file_list = listdir(self.svg_files)
-
-        for svg_file in file_list:
-
-            # import  without outname
-            self.fc.exec_command_test('import_svg "%s/%s"' % (self.svg_files, svg_file))
-
-            obj = self.fc.collection.get_by_name(svg_file)
-            self.assertTrue(isinstance(obj, FlatCAMGeometry),
-                        "Expected FlatCAMGeometry, instead, %s is %s" %
-                        (svg_file, type(obj)))
-
-            # import  with outname
-            outname='%s-%s' % (self.geometry_name, svg_file)
-            self.fc.exec_command_test('import_svg "%s/%s" -outname "%s"' % (self.svg_files, svg_file, outname))
-
-            obj = self.fc.collection.get_by_name(outname)
-            self.assertTrue(isinstance(obj, FlatCAMGeometry),
-                        "Expected FlatCAMGeometry, instead, %s is %s" %
-                        (outname, type(obj)))
-
-        names = self.fc.collection.get_names()
-        self.assertEqual(len(names), len(file_list)*2,
-                         "Expected %d objects, found %d" % (len(file_list)*2, len(file_list)))
-
-    def test_import_svg_as_geometry(self):
-        self.fc.exec_command_test('set_sys units MM')
-        self.fc.exec_command_test('new')
-        self.fc.exec_command_test('import_svg "%s/%s" -type geometry -outname "%s"' % (self.svg_files, self.svg_filename, self.geometry_name))
-
-        obj = self.fc.collection.get_by_name(self.geometry_name)
-        self.assertTrue(isinstance(obj, FlatCAMGeometry) and not isinstance(obj, FlatCAMGerber),
-                    "Expected FlatCAMGeometry, instead, %s is %s" %
-                    (self.geometry_name, type(obj)))
-
-    def test_import_svg_as_gerber(self):
-        self.fc.exec_command_test('set_sys units MM')
-        self.fc.exec_command_test('new')
-        self.fc.exec_command_test('import_svg "%s/%s" -type gerber -outname "%s"' % (self.svg_files, self.svg_filename, self.gerber_name))
-
-        obj = self.fc.collection.get_by_name(self.gerber_name)
-        self.assertTrue(isinstance(obj, FlatCAMGerber),
-                    "Expected FlatCAMGerber, instead, %s is %s" %
-                    (self.gerber_name, type(obj)))
-
-        self.fc.exec_command_test('isolate "%s"' % self.gerber_name)
-        obj = self.fc.collection.get_by_name(self.gerber_name+'_iso')
-        self.assertTrue(isinstance(obj, FlatCAMGeometry),
-                    "Expected FlatCAMGeometry, instead, %s is %s" %
-                    (self.gerber_name+'_iso', type(obj)))