diff options
Diffstat (limited to 'sw/qa/python/xtext.py')
-rw-r--r-- | sw/qa/python/xtext.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/sw/qa/python/xtext.py b/sw/qa/python/xtext.py new file mode 100644 index 000000000000..5ee5986a5454 --- /dev/null +++ b/sw/qa/python/xtext.py @@ -0,0 +1,89 @@ +#! /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 +import unohelper +from org.libreoffice.unotest import UnoInProcess +from com.sun.star.lang import IllegalArgumentException +from com.sun.star.container import NoSuchElementException +import uno +import time + + +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_insertAndRemoveAnnotations(self): + xText = self._uno.getDoc().getText() + self.assertIsNotNone(xText) + + # Insert annotation field + xAnnotation = self.createAnnotation("John Doe") + xCursor = xText.createTextCursor() + xText.insertTextContent(xCursor, xAnnotation, False) + + # And the same once again, actually not inserted + xText.insertTextContent(xCursor, xAnnotation, False) + + # Exception if we try to replace object by itself + with self.assertRaises(IllegalArgumentException): + xText.insertTextContent(xCursor, xAnnotation, True) + # We expect just one annotation actually + self.checkAnnotations(["John Doe"]) + + xAnnotation2 = self.createAnnotation("Richard Roe") + xText.insertTextContent(xCursor, xAnnotation2, True) + self.checkAnnotations(["Richard Roe"]) + + xAnnotation3 = self.createAnnotation("Jane Roe") + xText.insertTextContent(xCursor, xAnnotation3, True) + self.checkAnnotations(["Jane Roe", "Richard Roe"]) + + # Remove annotations + xText.removeTextContent(xAnnotation3) + self.checkAnnotations(["Richard Roe"]) + xText.removeTextContent(xAnnotation2) + self.checkAnnotations([]) + + # Remove _already removed_ ones again + # TODO: unexpected behaviour, it should throw an exception, + # but let's nail down current behaviour + xText.removeTextContent(xAnnotation2) + xText.removeTextContent(xAnnotation) + + self.checkAnnotations([]) + + def createAnnotation(self, author): + xAnnotation = self._uno.getDoc().createInstance("com.sun.star.text.TextField.Annotation") + self.assertIsNotNone(xAnnotation) + xAnnotation.setPropertyValue("Author", author) + return xAnnotation + + def checkAnnotations(self, authors): + xFieldsEnum = self._uno.getDoc().getTextFields().createEnumeration() + annotationsFound = 0 + for xField, author in zip(xFieldsEnum, authors): + self.assertTrue(xField.supportsService("com.sun.star.text.TextField.Annotation")) + self.assertEqual(xField.getPropertyValue("Author"), author) + annotationsFound += 1 + self.assertEqual(annotationsFound, len(authors)) + +if __name__ == '__main__': + unittest.main() + +# vim: set shiftwidth=4 softtabstop=4 expandtab: |