[Libreoffice-commits] core.git: solenv/gbuild sw/PythonTest_sw_python.mk sw/qa unotest/source

David Ostrovsky david at ostrovsky.org
Sat Apr 27 00:58:29 PDT 2013


 solenv/gbuild/PythonTest.mk                      |    2 
 sw/PythonTest_sw_python.mk                       |    3 
 sw/qa/python/var_fields.py                       |  123 +++++++++++++++++++++++
 unotest/source/python/org/libreoffice/unotest.py |    6 -
 4 files changed, 132 insertions(+), 2 deletions(-)

New commits:
commit 3c0a9bb59ed19b2f4492defd84d023c5e169d777
Author: David Ostrovsky <david at ostrovsky.org>
Date:   Sat Apr 27 11:33:21 2013 +0200

    fdo#55814 migrate java unit test to python
    
    Change-Id: Ib7ef29354f5d43abd9e67745dd6d3fccaec8612e

diff --git a/solenv/gbuild/PythonTest.mk b/solenv/gbuild/PythonTest.mk
index 46803af..b81e321 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 a5a632c..cbddfc5 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 0000000..6ba89ab
--- /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 5862484..3ec016a 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):


More information about the Libreoffice-commits mailing list