summaryrefslogtreecommitdiffstats
path: root/sw/qa/python/xtext.py
diff options
context:
space:
mode:
Diffstat (limited to 'sw/qa/python/xtext.py')
-rw-r--r--sw/qa/python/xtext.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/sw/qa/python/xtext.py b/sw/qa/python/xtext.py
new file mode 100644
index 000000000..6d82647bf
--- /dev/null
+++ b/sw/qa/python/xtext.py
@@ -0,0 +1,93 @@
+#! /usr/bin/env python
+# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+import unittest
+
+from org.libreoffice.unotest import UnoInProcess
+from com.sun.star.lang import IllegalArgumentException
+
+class TestXText(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls._uno = UnoInProcess()
+ cls._uno.setUp()
+ cls._uno.openEmptyWriterDoc()
+
+ @classmethod
+ def tearDownClass(cls):
+ cls._uno.tearDown()
+
+ def test_insert_and_remove_annotations(self):
+ x_text = self._uno.getDoc().getText()
+ self.assertIsNotNone(x_text)
+
+ # Insert annotation field
+ x_annotation = self.create_annotation("John Doe")
+ x_cursor = x_text.createTextCursor()
+ x_text.insertTextContent(x_cursor, x_annotation, False)
+
+ # And the same once again, actually not inserted
+ x_text.insertTextContent(x_cursor, x_annotation, False)
+
+ # no exception if we try to replace object by itself:
+ # this did throw in the past, but only because the inserted
+ # UNO annotation had a core object assigned, but no document
+ # which insertTextContent then didn't like on another call.
+ x_text.insertTextContent(x_cursor, x_annotation, True)
+
+ # We expect just one annotation actually
+ self.check_annotations(["John Doe"])
+
+ x_annotation_2 = self.create_annotation("Richard Roe")
+ x_text.insertTextContent(x_cursor, x_annotation_2, True)
+ self.check_annotations(["Richard Roe"])
+
+ x_annotation_3 = self.create_annotation("Jane Roe")
+ x_text.insertTextContent(x_cursor, x_annotation_3, True)
+ self.check_annotations(["Jane Roe", "Richard Roe"])
+
+ # Remove annotations
+ x_text.removeTextContent(x_annotation_3)
+ self.check_annotations(["Richard Roe"])
+ x_text.removeTextContent(x_annotation_2)
+ self.check_annotations([])
+
+ # Remove _already removed_ ones again
+ # TODO: unexpected behaviour, it should throw an exception,
+ # but let's nail down current behaviour
+ # NOTE: reported as tdf#123404
+ x_text.removeTextContent(x_annotation_2)
+ x_text.removeTextContent(x_annotation)
+
+ self.check_annotations([])
+
+ def create_annotation(self, author):
+ x_annotation = self._uno.getDoc().createInstance("com.sun.star.text.TextField.Annotation")
+ self.assertIsNotNone(x_annotation)
+ x_annotation.setPropertyValue("Author", author)
+ return x_annotation
+
+ def check_annotations(self, authors):
+ x_fields_enum = self._uno.getDoc().getTextFields().createEnumeration()
+
+ annotations_found = 0
+
+ for x_field, author in zip(x_fields_enum, authors):
+ self.assertTrue(x_field.supportsService("com.sun.star.text.TextField.Annotation"))
+ self.assertEqual(x_field.getPropertyValue("Author"), author)
+ annotations_found += 1
+
+ self.assertEqual(annotations_found, len(authors))
+
+if __name__ == '__main__':
+ unittest.main()
+
+# vim: set shiftwidth=4 softtabstop=4 expandtab: