summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2013-04-27 11:33:21 +0200
committerDavid Ostrovsky <david@ostrovsky.org>2013-04-27 11:56:30 +0200
commit3c0a9bb59ed19b2f4492defd84d023c5e169d777 (patch)
tree35b0e4c0a506684b0841ab8a591271af9afb5d90
parentefc4761686b9c566d9a45fb9ab3984d7704603ba (diff)
fdo#55814 migrate java unit test to python
Change-Id: Ib7ef29354f5d43abd9e67745dd6d3fccaec8612e
-rw-r--r--solenv/gbuild/PythonTest.mk2
-rw-r--r--sw/PythonTest_sw_python.mk3
-rw-r--r--sw/qa/python/var_fields.py123
-rw-r--r--unotest/source/python/org/libreoffice/unotest.py6
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):