| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import sys
- import unittest
- from PyQt5 import QtWidgets
- from FlatCAMApp import App
- from FlatCAMObj import FlatCAMGeometry, FlatCAMCNCjob
- from flatcamGUI.ObjectUI import GerberObjectUI, GeometryObjectUI
- from time import sleep
- import os
- import tempfile
- class SVGFlowTestCase(unittest.TestCase):
- def setUp(self):
- self.app = QtWidgets.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.assertEqual(len(names), 1, "Expected 1 object, found %d" % len(names))
- # --------------------------------------
- # Object's name matches the file name.
- # --------------------------------------
- self.assertEqual(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 list(geo_obj.options.items()):
- 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)
|