From 16819e29bbfa7e4b9a51f8a4df1878df4267c0e5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 26 Jan 2016 15:07:29 +0100 Subject: [PATCH] + write unit tests for Spreadsheet and expression stuff --- src/Mod/Spreadsheet/App/CMakeLists.txt | 2 +- src/Mod/Spreadsheet/CMakeLists.txt | 1 + src/Mod/Spreadsheet/TestSpreadsheet.py | 106 +++++++++++++++++++++++++ src/Mod/Test/TestApp.py | 1 + src/Mod/Test/TestGui.py | 1 + 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/Mod/Spreadsheet/TestSpreadsheet.py diff --git a/src/Mod/Spreadsheet/App/CMakeLists.txt b/src/Mod/Spreadsheet/App/CMakeLists.txt index 7ab5f20fd6..1173078d7c 100644 --- a/src/Mod/Spreadsheet/App/CMakeLists.txt +++ b/src/Mod/Spreadsheet/App/CMakeLists.txt @@ -61,7 +61,7 @@ target_link_libraries(Spreadsheet ${Spreadsheet_LIBS}) fc_target_copy_resource(Spreadsheet ${CMAKE_SOURCE_DIR}/src/Mod/Spreadsheet ${CMAKE_BINARY_DIR}/Mod/Spreadsheet - Init.py) + Init.py TestSpreadsheet.py) SET_BIN_DIR(Spreadsheet Spreadsheet /Mod/Spreadsheet) SET_PYTHON_PREFIX_SUFFIX(Spreadsheet) diff --git a/src/Mod/Spreadsheet/CMakeLists.txt b/src/Mod/Spreadsheet/CMakeLists.txt index b2bb46362c..49956c3ad6 100644 --- a/src/Mod/Spreadsheet/CMakeLists.txt +++ b/src/Mod/Spreadsheet/CMakeLists.txt @@ -8,6 +8,7 @@ INSTALL( FILES Init.py InitGui.py + TestSpreadsheet.py DESTINATION Mod/Spreadsheet ) diff --git a/src/Mod/Spreadsheet/TestSpreadsheet.py b/src/Mod/Spreadsheet/TestSpreadsheet.py new file mode 100644 index 0000000000..4dd19d93e5 --- /dev/null +++ b/src/Mod/Spreadsheet/TestSpreadsheet.py @@ -0,0 +1,106 @@ +# (c) Juergen Riegel (juergen.riegel@web.de) 2007 LGPL + +import os +import sys +import unittest +import FreeCAD +import Part +import Sketcher +from FreeCAD import Base + +v = Base.Vector + +#---------------------------------------------------------------------------------- +# define the functions to test the FreeCAD Spreadsheet module and expression engine +#---------------------------------------------------------------------------------- + + +class SpreadsheetCases(unittest.TestCase): + def setUp(self): + # set up a planar face with 2 triangles + self.doc = FreeCAD.newDocument() + + def testAlias(self): + """ Playing with aliases """ + sheet = self.doc.addObject("Spreadsheet::Sheet","Calc") + sheet.setAlias("A1","Test") + self.assertEqual(sheet.getAlias("A1"),"Test") + + sheet.set("A1","4711") + self.doc.recompute() + self.assertEqual(sheet.get("Test"),4711) + self.assertEqual(sheet.get("Test"),sheet.get("A1")) + + def testAmbiguousAlias(self): + """ Try to set the same alias twice (bug #2402) """ + sheet = self.doc.addObject("Spreadsheet::Sheet","Calc") + sheet.setAlias("A1","Test") + try: + sheet.setAlias("A2","Test") + self.fail("An ambiguous alias was set which shouldn't be allowed") + except: + self.assertEqual(sheet.getAlias("A2"),None) + + def testClearAlias(self): + """ This was causing a crash """ + sheet = self.doc.addObject("Spreadsheet::Sheet","Calc") + sheet.setAlias("A1","Test") + sheet.setAlias("A1","") + self.assertEqual(sheet.getAlias("A1"),None) + + def testSetInvalidAlias(self): + """ Try to use a cell address as alias name """ + sheet = self.doc.addObject("Spreadsheet::Sheet","Calc") + try: + sheet.setAlias("A1","B1") + except: + self.assertEqual(sheet.getAlias("A1"),None) + else: + self.fail("A cell address was used aa alias which shouldn't be allowed") + + def testPlacementName(self): + """ Object name is equal to property name (bug #2389) """ + if not FreeCAD.GuiUp: + return + + import FreeCADGui + o = self.doc.addObject("Part::FeaturePython","Placement") + FreeCADGui.Selection.addSelection(o) + + def testInvoluteGear(self): + """ Support of boolean or integer values """ + try: + import InvoluteGearFeature + except ImportError: + return + InvoluteGearFeature.makeInvoluteGear('InvoluteGear') + self.doc.recompute() + sketch=self.doc.addObject('Sketcher::SketchObject','Sketch') + sketch.addGeometry(Part.Line(v(0,0,0),v(10,10,0)),False) + sketch.addConstraint(Sketcher.Constraint('Distance',0,65.285388)) + sketch.setExpression('Constraints[0]', 'InvoluteGear.NumberOfTeeth') + self.doc.recompute() + self.assertEqual(sketch.State,'Up-to-date') + + def testSketcher(self): + """ Mixup of Label and Name (bug #2407)""" + sketch=self.doc.addObject('Sketcher::SketchObject','Sketch') + sheet=self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.setAlias('A1', 'Length') + self.doc.recompute() + sheet.set('A1', '47,11') + self.doc.recompute() + + index=sketch.addGeometry(Part.Line(v(0,0,0),v(10,10,0)),False) + sketch.addConstraint(Sketcher.Constraint('Distance',index,14.0)) + self.doc.recompute() + sketch.setExpression('Constraints[0]', u'Spreadsheet.Length') + self.doc.recompute() + sheet.Label="Calc" + self.doc.recompute() + self.assertEqual(sketch.ExpressionEngine[0][1],'Calc.Length') + self.assertEqual(sketch.State,'Up-to-date') + + def tearDown(self): + #closing doc + FreeCAD.closeDocument(self.doc.Name) diff --git a/src/Mod/Test/TestApp.py b/src/Mod/Test/TestApp.py index b57bafb4e5..accb90d84d 100644 --- a/src/Mod/Test/TestApp.py +++ b/src/Mod/Test/TestApp.py @@ -49,6 +49,7 @@ def All(): suite.addTest(unittest.defaultTestLoader.loadTestsFromName("TestSketcherApp")) suite.addTest(unittest.defaultTestLoader.loadTestsFromName("TestPartApp")) suite.addTest(unittest.defaultTestLoader.loadTestsFromName("TestPartDesignApp")) + suite.addTest(unittest.defaultTestLoader.loadTestsFromName("TestSpreadsheet")) # gui tests of modules if (FreeCAD.GuiUp == 1): suite.addTest(unittest.defaultTestLoader.loadTestsFromName("TestSketcherGui")) diff --git a/src/Mod/Test/TestGui.py b/src/Mod/Test/TestGui.py index d4ee87aa46..4a340f1b27 100644 --- a/src/Mod/Test/TestGui.py +++ b/src/Mod/Test/TestGui.py @@ -51,6 +51,7 @@ class TestCmd: QtUnitGui.addTest("TestSketcherApp") QtUnitGui.addTest("TestPartApp") QtUnitGui.addTest("TestPartDesignApp") + QtUnitGui.addTest("TestSpreadsheet") QtUnitGui.addTest("Workbench") QtUnitGui.addTest("Menu") QtUnitGui.addTest("Menu.MenuDeleteCases")