diff --git a/src/Mod/Spreadsheet/TestSpreadsheet.py b/src/Mod/Spreadsheet/TestSpreadsheet.py index f51fb47ec..94c9c848f 100644 --- a/src/Mod/Spreadsheet/TestSpreadsheet.py +++ b/src/Mod/Spreadsheet/TestSpreadsheet.py @@ -1,4 +1,5 @@ # (c) 2016 Werner Mayer +# (c) 2016 Eivind Kvedalen # LGPL import os @@ -7,6 +8,7 @@ import unittest import FreeCAD import Part import Sketcher +import tempfile from FreeCAD import Base v = Base.Vector @@ -19,6 +21,59 @@ v = Base.Vector class SpreadsheetCases(unittest.TestCase): def setUp(self): self.doc = FreeCAD.newDocument() + self.TempPath = tempfile.gettempdir() + FreeCAD.Console.PrintLog( ' Using temp path: ' + self.TempPath + '\n') + + def testRemoveRows(self): + """ Removing rows -- check renaming of internal cells """ + sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.set('A3', '123') + sheet.set('A1', '=A3') + sheet.removeRows('2', 1) + self.assertEqual(sheet.getContents("A1"),"=A2") + + def testInsertRows(self): + """ Inserting rows -- check renaming of internal cells """ + sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.set('B1', '=B2') + sheet.set('B2', '124') + sheet.insertRows('2', 1) + self.assertEqual(sheet.getContents("B1"),"=B3") + + def testRenameAlias(self): + """ Test renaming of alias1 to alias2 in a spreadsheet """ + sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.set('B1', '124') + sheet.setAlias('B1', 'alias1') + sheet.set('B2', '=alias1') + self.doc.recompute() + self.assertEqual(sheet.get("alias1"), 124) + self.assertEqual(sheet.get("B1"), 124) + self.assertEqual(sheet.get("B2"), 124) + sheet.setAlias('B1', 'alias2') + self.doc.recompute() + self.assertEqual(sheet.get("alias2"), 124) + self.assertEqual(sheet.getContents("B2"),"=alias2") + + def testRenameAlias2(self): + """ Test renaming of alias1 to alias2 in a spreadsheet, when referenced from another object """ + sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.set('B1', '124') + sheet.setAlias('B1', 'alias1') + box = self.doc.addObject('Part::Box', 'Box') + box.setExpression('Length', 'Spreadsheet.alias1') + sheet.setAlias('B1', 'alias2') + self.assertEqual(box.ExpressionEngine[0][1], "Spreadsheet.alias2"); + + def testRenameAlias3(self): + """ Test renaming of document object referenced from another object """ + sheet = self.doc.addObject('Spreadsheet::Sheet','Spreadsheet') + sheet.set('B1', '124') + sheet.setAlias('B1', 'alias1') + box = self.doc.addObject('Part::Box', 'Box') + box.setExpression('Length', 'Spreadsheet.alias1') + sheet.Label = "Params" + self.assertEqual(box.ExpressionEngine[0][1], "Params.alias1"); def testAlias(self): """ Playing with aliases """ @@ -101,6 +156,35 @@ class SpreadsheetCases(unittest.TestCase): self.assertEqual(sketch.ExpressionEngine[0][1],'Calc.Length') self.assertIn('Up-to-date',sketch.State) + def testCrossDocumentLinks(self): + """ Expressions accross files are not saved (bug #2442) """ + + # Create a box + box = self.doc.addObject('Part::Box', 'Box') + + # Create a second document with a cylinder + doc2 = FreeCAD.newDocument() + cylinder = doc2.addObject('Part::Cylinder', 'Cylinder') + cylinder.setExpression('Radius', 'cube#Cube.Height') + + # Save and close first document + self.doc.saveAs(self.TempPath + os.sep + 'cube.fcstd') + FreeCAD.closeDocument(self.doc.Name) + + # Save and close second document + doc2.saveAs(self.TempPath + os.sep + 'cylinder.fcstd') + FreeCAD.closeDocument(doc2.Name) + + # Open both documents again + self.doc = FreeCAD.openDocument(self.TempPath + os.sep + 'cube.fcstd') + doc2 = FreeCAD.openDocument(self.TempPath + os.sep + 'cylinder.fcstd') + + # Check reference between them + self.assertEqual(doc2.getObject('Cylinder').ExpressionEngine[0][1], 'cube#Cube.Height') + + # Close second document + FreeCAD.closeDocument(doc2.Name) + def tearDown(self): #closing doc FreeCAD.closeDocument(self.doc.Name)