class SVGFlowTestCase(unittest.TestCase): def setUp(self): self.app = QtGui.QApplication(sys.argv) # Create App, keep app defaults (do not load # user-defined defaults). self.fc = App(user_defaults=False) self.filename = 'drawing.svg' def tearDown(self): del self.fc del self.app def test_flow(self): self.fc.import_svg('tests/svg/' + self.filename) names = self.fc.collection.get_names() print names #-------------------------------------- # Total of 1 objects. #-------------------------------------- self.assertEquals(len(names), 1, "Expected 1 object, found %d" % len(names)) #-------------------------------------- # Object's name matches the file name. #-------------------------------------- self.assertEquals( names[0], self.filename, "Expected name == %s, got %s" % (self.filename, names[0])) #--------------------------------------- # Get object by that name, make sure it's a FlatCAMGerber. #--------------------------------------- geo_name = names[0] geo_obj = self.fc.collection.get_by_name(geo_name) self.assertTrue( isinstance(geo_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s" % (geo_name, type(geo_obj))) #---------------------------------------- # Object's GUI matches Object's options #---------------------------------------- # TODO: Open GUI with double-click on object. # Opens the Object's GUI, populates it. geo_obj.build_ui() for option, value in geo_obj.options.iteritems(): try: form_field = geo_obj.form_fields[option] except KeyError: print( "**********************************************************\n" "* WARNING: Option '{}' has no form field\n" "**********************************************************" "".format(option)) continue self.assertEqual( value, form_field.get_value(), "Option '{}' == {} but form has {}".format( option, value, form_field.get_value())) #------------------------------------ # Open the UI, make CNCObject #------------------------------------ geo_obj.build_ui() ui = geo_obj.ui assert isinstance(ui, GeometryObjectUI) # Just for the IDE ui.generate_cnc_button.click() # Click # Work is done in a separate thread and results are # passed via events to the main event loop which is # not running. Run only for pending events. # # I'm not sure why, but running it only once does # not catch the new object. Might be a timing issue. # http://pyqt.sourceforge.net/Docs/PyQt4/qeventloop.html#details for _ in range(2): sleep(0.1) self.app.processEvents() #--------------------------------------------- # Check that only 1 object has been created. #--------------------------------------------- names = self.fc.collection.get_names() self.assertEqual(len(names), 2, "Expected 2 objects, found %d" % len(names)) #------------------------------------------------------- # Make sure the CNC Job Object has the correct name #------------------------------------------------------- cnc_name = geo_name + "_cnc" self.assertTrue(cnc_name in names, "Object named %s not found." % geo_name) #------------------------------------------------------- # Get the object make sure it's a CNC Job object #------------------------------------------------------- cnc_obj = self.fc.collection.get_by_name(cnc_name) self.assertTrue(isinstance(cnc_obj, FlatCAMCNCjob), "Expected a FlatCAMCNCJob, got %s" % type(geo_obj)) #----------------------------------------- # Export G-Code, check output #----------------------------------------- assert isinstance(cnc_obj, FlatCAMCNCjob) output_filename = "" # get system temporary file(try create it and delete also) with tempfile.NamedTemporaryFile(prefix='unittest.', suffix="." + cnc_name + '.gcode', delete=True) as tmp_file: output_filename = tmp_file.name cnc_obj.export_gcode(output_filename) self.assertTrue(os.path.isfile(output_filename)) os.remove(output_filename) print names
class PolyPaintTestCase(unittest.TestCase): def setUp(self): self.app = QtGui.QApplication(sys.argv) # Create App, keep app defaults (do not load # user-defined defaults). self.fc = App(user_defaults=False) def tearDown(self): for _ in range(2): self.app.processEvents() # NOTE: These are creating problems... # del self.fc # del self.app def test_poly_paint_svg_all(self): print("*********************************") print("* svg_all *") print("*********************************") # Clear workspace self.fc.on_file_new() for _ in range(2): self.app.processEvents() # Open SVG with polygons self.fc.import_svg('tests/svg/drawing.svg') name = self.fc.collection.get_names()[0] self.fc.collection.set_active(name) geo_obj = self.fc.collection.get_by_name(name) # Paint all polygons geo_obj.paint_poly_all(5, 0.2, 1) sleep(5) # Todo: Do not base it on fixed time. for _ in range(2): self.app.processEvents() # New object should be available names = self.fc.collection.get_names() self.assertEqual(len(names), 2) # Verify new geometry makes sense painted = self.fc.collection.get_by_name(names[-1]) for geo in painted.solid_geometry: # Correct Type self.assertTrue(isinstance(geo, LineString)) # Lots of points (Should be 1000s) self.assertGreater(len(geo.coords), 2) def test_poly_paint_svg_click(self): print("*********************************") print("* svg_click *") print("*********************************") # Clear workspace self.fc.on_file_new() for _ in range(2): self.app.processEvents() # Open SVG with polygons self.fc.import_svg('tests/svg/drawing.svg') name = self.fc.collection.get_names()[0] self.fc.collection.set_active(name) geo_obj = self.fc.collection.get_by_name(name) # Paint all polygons geo_obj.paint_poly_single_click([300, 700], 5, 0.2, 1) sleep(5) for _ in range(2): self.app.processEvents() # New object should be available names = self.fc.collection.get_names() sleep(1) self.assertEqual(len(names), 2) # Verify new geometry makes sense painted = self.fc.collection.get_by_name(names[-1]) for geo in painted.solid_geometry: # Correct Type self.assertTrue(isinstance(geo, LineString)) # Lots of points (Should be 1000s) self.assertGreater(len(geo.coords), 2) def test_poly_paint_noncopper_all(self): print("*********************************") print("* noncopper_all *") print("*********************************") # Clear workspace self.fc.on_file_new() for _ in range(2): self.app.processEvents() self.fc.open_gerber('tests/gerber_files/simple1.gbr') sleep(1) for _ in range(2): self.app.processEvents() name = self.fc.collection.get_names()[0] gerber_obj = self.fc.collection.get_by_name(name) self.fc.collection.set_active(name) gerber_obj.on_generatenoncopper_button_click() sleep(1) for _ in range(2): self.app.processEvents() # New object should be available names = self.fc.collection.get_names() sleep(1) self.assertEqual(len(names), 2) geoname = "simple1.gbr_noncopper" geo_obj = self.fc.collection.get_by_name(geoname) self.fc.collection.set_active(geoname) geo_obj.paint_poly_all(0.02, 0.2, 0) sleep(5) for _ in range(2): self.app.processEvents() # New object should be available names = self.fc.collection.get_names() sleep(1) self.assertEqual(len(names), 3) # Verify new geometry makes sense painted = self.fc.collection.get_by_name(names[-1]) for geo in painted.solid_geometry: # Correct Type self.assertTrue(isinstance(geo, LineString)) # Lots of points (Should be 1000s) self.assertGreater(len(geo.coords), 2) def test_poly_paint_noncopper_click(self): print("*********************************") print("* noncopper_click *") print("*********************************") # Clear workspace self.fc.on_file_new() for _ in range(2): self.app.processEvents() self.fc.open_gerber('tests/gerber_files/simple1.gbr') sleep(1) for _ in range(2): self.app.processEvents() name = self.fc.collection.get_names()[0] gerber_obj = self.fc.collection.get_by_name(name) self.fc.collection.set_active(name) gerber_obj.on_generatenoncopper_button_click() sleep(1) for _ in range(2): self.app.processEvents() # New object should be available names = self.fc.collection.get_names() sleep(1) self.assertEqual(len(names), 2) geoname = "simple1.gbr_noncopper" geo_obj = self.fc.collection.get_by_name(geoname) self.fc.collection.set_active(geoname) geo_obj.paint_poly_single_click([2.7, 1.0], 0.02, 0.2, 0) sleep(5) for _ in range(2): self.app.processEvents() # New object should be available names = self.fc.collection.get_names() sleep(1) self.assertEqual(len(names), 3) # Verify new geometry makes sense painted = self.fc.collection.get_by_name(names[-1]) for geo in painted.solid_geometry: # Correct Type self.assertTrue(isinstance(geo, LineString)) # Lots of points (Should be 1000s) self.assertGreater(len(geo.coords), 2)
class SVGFlowTestCase(unittest.TestCase): def setUp(self): self.app = QtGui.QApplication(sys.argv) # Create App, keep app defaults (do not load # user-defined defaults). self.fc = App(user_defaults=False) self.filename = 'drawing.svg' def tearDown(self): del self.fc del self.app def test_flow(self): self.fc.import_svg('tests/svg/' + self.filename) names = self.fc.collection.get_names() print names #-------------------------------------- # Total of 1 objects. #-------------------------------------- self.assertEquals(len(names), 1, "Expected 1 object, found %d" % len(names)) #-------------------------------------- # Object's name matches the file name. #-------------------------------------- self.assertEquals(names[0], self.filename, "Expected name == %s, got %s" % (self.filename, names[0])) #--------------------------------------- # Get object by that name, make sure it's a FlatCAMGerber. #--------------------------------------- geo_name = names[0] geo_obj = self.fc.collection.get_by_name(geo_name) self.assertTrue(isinstance(geo_obj, FlatCAMGeometry), "Expected FlatCAMGeometry, instead, %s is %s" % (geo_name, type(geo_obj))) #---------------------------------------- # Object's GUI matches Object's options #---------------------------------------- # TODO: Open GUI with double-click on object. # Opens the Object's GUI, populates it. geo_obj.build_ui() for option, value in geo_obj.options.iteritems(): try: form_field = geo_obj.form_fields[option] except KeyError: print ("**********************************************************\n" "* WARNING: Option '{}' has no form field\n" "**********************************************************" "".format(option)) continue self.assertEqual(value, form_field.get_value(), "Option '{}' == {} but form has {}".format( option, value, form_field.get_value() )) #------------------------------------ # Open the UI, make CNCObject #------------------------------------ geo_obj.build_ui() ui = geo_obj.ui assert isinstance(ui, GeometryObjectUI) # Just for the IDE ui.generate_cnc_button.click() # Click # Work is done in a separate thread and results are # passed via events to the main event loop which is # not running. Run only for pending events. # # I'm not sure why, but running it only once does # not catch the new object. Might be a timing issue. # http://pyqt.sourceforge.net/Docs/PyQt4/qeventloop.html#details for _ in range(2): sleep(0.1) self.app.processEvents() #--------------------------------------------- # Check that only 1 object has been created. #--------------------------------------------- names = self.fc.collection.get_names() self.assertEqual(len(names), 2, "Expected 2 objects, found %d" % len(names)) #------------------------------------------------------- # Make sure the CNC Job Object has the correct name #------------------------------------------------------- cnc_name = geo_name + "_cnc" self.assertTrue(cnc_name in names, "Object named %s not found." % geo_name) #------------------------------------------------------- # Get the object make sure it's a CNC Job object #------------------------------------------------------- cnc_obj = self.fc.collection.get_by_name(cnc_name) self.assertTrue(isinstance(cnc_obj, FlatCAMCNCjob), "Expected a FlatCAMCNCJob, got %s" % type(geo_obj)) #----------------------------------------- # Export G-Code, check output #----------------------------------------- assert isinstance(cnc_obj, FlatCAMCNCjob) output_filename = "" # get system temporary file(try create it and delete also) with tempfile.NamedTemporaryFile(prefix='unittest.', suffix="." + cnc_name + '.gcode', delete=True) as tmp_file: output_filename = tmp_file.name cnc_obj.export_gcode(output_filename) self.assertTrue(os.path.isfile(output_filename)) os.remove(output_filename) print names