diff options
author | kadertarlan <kadertarlan1@gmail.com> | 2015-12-18 05:51:32 +0200 |
---|---|---|
committer | jan iversen <jani@documentfoundation.org> | 2015-12-18 12:00:04 +0000 |
commit | 214b0c8356ab88e75cb4bbc2ad3109ee536dcd70 (patch) | |
tree | 3fcba46b70cd20a158107533a044e760bbaaa29f /sw/qa/python | |
parent | 6f1e25133e31dbd8942e669bd658b43869f6dddc (diff) |
Java unittest(CheckCrossReferences.java) converted to Python unittest
Change-Id: I9b856c9ffd7b3b380b2c1ba37c7c07355423c1f5
Reviewed-on: https://gerrit.libreoffice.org/20786
Reviewed-by: jan iversen <jani@documentfoundation.org>
Tested-by: jan iversen <jani@documentfoundation.org>
Diffstat (limited to 'sw/qa/python')
-rw-r--r-- | sw/qa/python/check_cross_references.py | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/sw/qa/python/check_cross_references.py b/sw/qa/python/check_cross_references.py new file mode 100644 index 000000000000..da6006eb79bf --- /dev/null +++ b/sw/qa/python/check_cross_references.py @@ -0,0 +1,234 @@ +''' + 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/. + + This file incorporates work covered by the following license notice: + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed + with this work for additional information regarding copyright + ownership. The ASF licenses this file to you under the Apache + License, Version 2.0 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.apache.org/licenses/LICENSE-2.0 . +''' +import unittest +import unohelper +import os +from com.sun.star.lang import XMultiServiceFactory +from com.sun.star.text import XTextDocument +from com.sun.star.text import XTextField +from com.sun.star.container import XEnumeration +from com.sun.star.util import XRefreshable +from com.sun.star.container import XEnumerationAccess +from com.sun.star.beans import XPropertySet +from com.sun.star.text import XTextFieldsSupplier +from com.sun.star.container import XNamed +from com.sun.star.text.ReferenceFieldPart import NUMBER +from com.sun.star.text.ReferenceFieldPart import NUMBER_NO_CONTEXT +from com.sun.star.text.ReferenceFieldPart import NUMBER_FULL_CONTEXT +from com.sun.star.text.ReferenceFieldSource import BOOKMARK +from com.sun.star.text.ReferenceFieldPart import TEXT +from org.libreoffice.unotest import UnoInProcess + +class CheckCrossReferences(unittest.TestCase): + + @classmethod + def setUpClass(cls): + cls._uno = UnoInProcess() + cls._uno.setUp() + cls.document = cls._uno.openWriterTemplateDoc("CheckCrossReferences.odt") + cls.xParaEnum = None + cls.xPortionEnum= None + cls.xFieldsRefresh= None + + @classmethod + def tearDownClass(cls): + cls._uno.tearDown() + + + def getNextField(self): + while True: + while self.xPortionEnum == None: + if (not(self.xParaEnum.hasMoreElements())): + self.fail("Cannot retrieve next field.") + + aPara = self.xParaEnum.nextElement() + self.xPortionEnum = aPara.createEnumeration() + + if ( self.xPortionEnum == None ): + break + + while self.xPortionEnum.hasMoreElements(): + xPortionProps = self.xPortionEnum.nextElement() + sPortionType = str(xPortionProps.getPropertyValue( "TextPortionType" )) + if ( sPortionType == "TextField" ): + xField = xPortionProps.getPropertyValue( "TextField" ) + self.assertTrue(xField) #Cannot retrieve next field + return xField + + self.xPortionEnum = None + return None #unreachable + + def getFieldProps(self,xField): + xProps = xField + self.assertTrue("Cannot retrieve field properties.", xProps) + return xProps + + def checkField(self, xField , xProps, nFormat, aExpectedFieldResult ): + # set requested format + xProps.setPropertyValue("ReferenceFieldPart", int(nFormat)) + + # refresh fields in order to get new format applied + self.xFieldsRefresh.refresh() + aFieldResult = xField.getPresentation(False) + self.assertEqual(aExpectedFieldResult, aFieldResult) #set reference field format doesn't result in correct field result + + def test_checkCrossReferences(self): + xParaEnumAccess = self.document.getText() + self.xParaEnum = xParaEnumAccess.createEnumeration(); + + #get field refresher + xFieldSupp = self.__class__.document + self.xFieldsRefresh = xFieldSupp.getTextFields() + + #check first reference field + #strings for checking + FieldResult1 = "*i*" + FieldResult2 = "+b+*i*" + FieldResult3 = "-1-+b+*i*" + FieldResult4 = "1" + FieldResult5 = "1" + FieldResult6 = "A.1" + FieldResult7 = "2(a)" + FieldResult8 = "2(b)" + FieldResult9 = "2" + FieldResult10 = "1(a)" + FieldResult11 = "(b)" + FieldResult12 = "(a)" + + #variables for current field + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult2 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult1 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult3 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult1 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult1 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult3 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult3 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult1 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult3 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult5 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult4 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult6 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult4 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult4 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult6 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult6 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult4 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult6 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult7 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult12 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult7 ) + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult8 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult11 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult8 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult9 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult9 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult9 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult4 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult4 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult4 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult10 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult12 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult10 ) + + xField = self.getNextField() + xProps = self.getFieldProps(xField) + self.checkField( xField, xProps, NUMBER, FieldResult12 ) + self.checkField( xField, xProps, NUMBER_NO_CONTEXT, FieldResult12 ) + self.checkField( xField, xProps, NUMBER_FULL_CONTEXT, FieldResult7 ) + + #insert a certain cross-reference bookmark and a reference field to this bookmark + # restart paragraph enumeration + xParaEnumAccess = self.__class__.document.getText() + self.xParaEnum = xParaEnumAccess.createEnumeration() + + # iterate on the paragraphs to find certain paragraph to insert the bookmark + while self.xParaEnum.hasMoreElements(): + xParaTextRange = self.xParaEnum.nextElement() + + if xParaTextRange.getString() == "J" : + break + else: + xParaTextRange = None + + self.assertTrue(xParaTextRange) #Cannot find paragraph to insert cross-reference bookmark + + #insert bookmark + xFac = self.__class__.document + cBookmarkName = "__RefNumPara__47114711" + xBookmark = xFac.createInstance( "com.sun.star.text.Bookmark" ) + + if xBookmark != None: + xName = xBookmark + xName.setName( cBookmarkName ) + xBookmark.attach(xParaTextRange.getStart()) + + # insert reference field, which references the inserted bookmark + xNewField = xFac.createInstance( "com.sun.star.text.TextField.GetReference" ) + + if xNewField != None: + xFieldProps = xNewField + xFieldProps.setPropertyValue( "ReferenceFieldPart", int(TEXT)) + xFieldProps.setPropertyValue( "ReferenceFieldSource", int(BOOKMARK)) + xFieldProps.setPropertyValue( "SourceName", cBookmarkName ) + xFieldTextRange = self.xParaEnum.nextElement() + xNewField.attach(xFieldTextRange.getEnd()) + self.xFieldsRefresh.refresh() + + #check inserted reference field + xField = xNewField + self.assertTrue("J", xField.getPresentation(False)) #inserted reference field doesn't has correct field result + + xParaTextRange.getStart().setString( "Hallo new bookmark: ") + self.xFieldsRefresh.refresh() + self.assertEqual("Hallo new bookmark: J", xField.getPresentation(False)) #inserted reference field doesn't has correct field result + + +if __name__ == "__main__": + unittest.main() + |