diff options
Diffstat (limited to 'sw/qa/python/xtext.py')
-rw-r--r-- | sw/qa/python/xtext.py | 93 |
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: |