diff options
author | David Ostrovsky <david@ostrovsky.org> | 2013-04-27 11:33:21 +0200 |
---|---|---|
committer | David Ostrovsky <david@ostrovsky.org> | 2013-04-27 11:56:30 +0200 |
commit | 3c0a9bb59ed19b2f4492defd84d023c5e169d777 (patch) | |
tree | 35b0e4c0a506684b0841ab8a591271af9afb5d90 | |
parent | efc4761686b9c566d9a45fb9ab3984d7704603ba (diff) |
fdo#55814 migrate java unit test to python
Change-Id: Ib7ef29354f5d43abd9e67745dd6d3fccaec8612e
-rw-r--r-- | solenv/gbuild/PythonTest.mk | 2 | ||||
-rw-r--r-- | sw/PythonTest_sw_python.mk | 3 | ||||
-rw-r--r-- | sw/qa/python/var_fields.py | 123 | ||||
-rw-r--r-- | unotest/source/python/org/libreoffice/unotest.py | 6 |
4 files changed, 132 insertions, 2 deletions
diff --git a/solenv/gbuild/PythonTest.mk b/solenv/gbuild/PythonTest.mk index 46803af5b7c8..b81e321869ca 100644 --- a/solenv/gbuild/PythonTest.mk +++ b/solenv/gbuild/PythonTest.mk @@ -32,6 +32,7 @@ ifneq ($(DISABLE_PYTHON),TRUE) $(call gb_PythonTest_get_target,%) : $(call gb_Output_announce,$*,$(true),PYT,2) $(call gb_Helper_abbreviate_dirs,\ + rm -rf $(dir $(call gb_PythonTest_get_target,$*)) && \ mkdir -p $(dir $(call gb_PythonTest_get_target,$*)) && \ $(if $(gb_CppunitTest__interactive),, \ $(if $(value gb_CppunitTest_postprocess), \ @@ -40,6 +41,7 @@ $(call gb_PythonTest_get_target,%) : URE_BOOTSTRAP=vnd.sun.star.pathname:$(gb_DEVINSTALLROOT)/program/fundamentalrc \ PYTHONPATH=$(PYPATH) \ UserInstallation="$(call gb_Helper_make_url,$(OUTDIR)/unittest)" \ + TestUserDir="$(call gb_Helper_make_url,$(dir $(call gb_PythonTest_get_target,$*)))" \ $(gb_CppunitTest_GDBTRACE) $(gb_CppunitTest_VALGRINDTOOL) $(gb_PythonTest_COMMAND) \ $(MODULES) \ $(if $(gb_CppunitTest__interactive),, \ diff --git a/sw/PythonTest_sw_python.mk b/sw/PythonTest_sw_python.mk index a5a632c2ef52..cbddfc513c8e 100644 --- a/sw/PythonTest_sw_python.mk +++ b/sw/PythonTest_sw_python.mk @@ -10,8 +10,9 @@ $(eval $(call gb_PythonTest_PythonTest,sw_python)) $(eval $(call gb_PythonTest_add_modules,sw_python,$(SRCDIR)/sw/qa/python,\ - set_expression \ get_expression \ + set_expression \ + var_fields \ )) # vim: set noet sw=4 ts=4: diff --git a/sw/qa/python/var_fields.py b/sw/qa/python/var_fields.py new file mode 100644 index 000000000000..6ba89abecbd6 --- /dev/null +++ b/sw/qa/python/var_fields.py @@ -0,0 +1,123 @@ +import unittest +import os +from org.libreoffice.unotest import UnoInProcess +from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK + +class TestVarFields(unittest.TestCase): + _uno = None + _xDoc = None + + @classmethod + def setUpClass(cls): + cls._uno = UnoInProcess() + cls._uno.setUp() + cls._xDoc = cls._uno.openEmptyWriterDoc() + + @classmethod + def tearDownClass(cls): + cls._uno.tearDown() + + def test_var_fields(self): + """Reproduce fdo#55814. + + Note: this test was migrated from java (the steps numbering too) + sw/qa/complex/writer/VarFields.java + + Embarrassing, FixMe, TODO: + Unlike in java, this test doesn't overwrite the field condition. + Apparently xDoc.refresh() is somehow broken (from python), because doing the update + manually does overwrite the condition: + 1. run the python test with make verbose=t PythonTest_sw_python + 2. open created document with + ./install/program/soffice.bin workdir/unxlngx6.pro/PythonTest/sw_python/VarFields.odt + 3. check that TextSection's condition still has the right value: "foo EQ 1" + 4. Update field with Tool=>Update=>Fields (or [F9]) + 5. check that TextSection's condition was overriden: "0" + """ + xDoc = self.__class__._xDoc + xBodyText = xDoc.getText() + xCursor = xBodyText.createTextCursor() + # 0. create text field + xField = xDoc.createInstance("com.sun.star.text.textfield.SetExpression") + # 1. fill it with properties + self.__class__._uno.setProperties(xField, + {"Content": "0", + "IsVisible": True, + "Hint": "trying to reproduce fdo#55814", + "SubType": 0, # VAR + "Value": 0.0 + }) + # 2. create master field + xMaster = xDoc.createInstance("com.sun.star.text.fieldmaster.SetExpression") + # 3. set name of the master field to "foo" + xMaster.setPropertyValue("Name", "foo") + # 4. get Dependent Field + # no op in python ;-) + # 5. connect real field to the master + xField.attachTextFieldMaster(xMaster) + # 6. insert text field into the document + xBodyText.insertTextContent(xCursor, xField, False) + # 7. retrieve paragraph cursor + xParagraphCursor = xCursor + xParagraphCursor.gotoEndOfParagraph(False) # not selectd + # 8. enter new line + xBodyText.insertControlCharacter(xCursor, PARAGRAPH_BREAK, False) + # 9. create new text section + xTextSection = xDoc.createInstance("com.sun.star.text.TextSection") + # 10. fill the properties of section + self.__class__._uno.checkProperties( + xTextSection, + {"Condition": "foo EQ 1", + "IsVisible": False, + }, + self + ) + # 11. Insert some text to be content on the section + xBodyText.insertString(xCursor, + "The quick brown fox jumps over the lazy dog", + True) + # 12. insert section + xBodyText.insertTextContent(xCursor, xTextSection, True) + # 12.1 insert new paragraph. Note: that's here the difference + xParagraphCursor.gotoEndOfParagraph(False) # not select + # TODO: how to leave the section now? + xBodyText.insertControlCharacter(xCursor, PARAGRAPH_BREAK, False ) + xBodyText.insertString(xCursor, "new paragraph", False) + # 13. Access fields to refresh the document + xEnumerationAccess = xDoc.getTextFields() + # 14. refresh document to update the fields + xDoc.refresh() + # 15. retrieve the field + xFieldEnum = xEnumerationAccess.createEnumeration() + # Note: we have only one field here, that why nextElement() is just fine here + xPropSet = xFieldEnum.nextElement() + # check + readContent = xPropSet.getPropertyValue("Content") + self.assertEqual("0", readContent) + readContent = xPropSet.getPropertyValue("Value") + self.assertEqual(0.0, readContent) + # 16. change the value of the field from 0 to 1 and check + self.__class__._uno.checkProperties( + xPropSet, + {"Value": 1.0, + "Content": "1" + }, + self + ) + # 17. refresh document to update the fields again + xDoc.refresh() + # 18. store document + url = os.path.join(os.environ["TestUserDir"], "VarFields.odt") + xDoc.storeToURL(url, tuple(list(range(0)))) + # 19. retrieve the section + xPropSet = xDoc.getTextSections().getByIndex(0) + # 20. retrieve the condition property of that section + readContent = xPropSet.getPropertyValue("Condition") + # 21. check + # expected: + self.assertEqual("foo EQ 1", readContent) + # reality: + #self.assertEqual("0", readContent) + +if __name__ == '__main__': + unittest.main() diff --git a/unotest/source/python/org/libreoffice/unotest.py b/unotest/source/python/org/libreoffice/unotest.py index 586248466931..3ec016adfda4 100644 --- a/unotest/source/python/org/libreoffice/unotest.py +++ b/unotest/source/python/org/libreoffice/unotest.py @@ -127,7 +127,7 @@ class OfficeConnection(object): def getContext(self): return self.xContext -class UnoConnection: +class UnoRemoteConnection: def __init__(self, args): self.args = args self.connection = None @@ -187,6 +187,10 @@ class UnoInProcess: value = obj.getPropertyValue(k) test.assertEqual(value, v) + def setProperties(self, obj, dict): + for k,v in dict.items(): + obj.setPropertyValue(k, v) + def postTest(self): assert(self.xContext) def tearDown(self): |