Kaydet (Commit) 214b0c83 authored tarafından kadertarlan's avatar kadertarlan Kaydeden (comit) jan iversen

Java unittest(CheckCrossReferences.java) converted to Python unittest

Change-Id: I9b856c9ffd7b3b380b2c1ba37c7c07355423c1f5
Reviewed-on: https://gerrit.libreoffice.org/20786Reviewed-by: 's avatarjan iversen <jani@documentfoundation.org>
Tested-by: 's avatarjan iversen <jani@documentfoundation.org>
üst 6f1e2513
......@@ -29,7 +29,6 @@ $(eval $(call gb_JunitTest_add_sourcefiles,sw_complex,\
sw/qa/complex/checkColor/CheckChangeColor \
sw/qa/complex/indeterminateState/CheckIndeterminateState \
sw/qa/complex/writer/CheckBookmarks \
sw/qa/complex/writer/CheckCrossReferences \
sw/qa/complex/writer/CheckIndexedPropertyValues \
sw/qa/complex/writer/CheckNamedPropertyValues \
sw/qa/complex/writer/CheckTable \
......
......@@ -17,6 +17,7 @@ $(eval $(call gb_PythonTest_add_modules,sw_python,$(SRCDIR)/sw/qa/python,\
check_index \
check_flies \
check_fields \
check_cross_references \
check_styles \
check_table \
get_expression \
......
/*
* 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 .
*/
package complex.writer;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.text.XTextDocument;
import com.sun.star.uno.UnoRuntime;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openoffice.test.OfficeConnection;
import static org.junit.Assert.*;
public class CheckCrossReferences {
private com.sun.star.container.XEnumeration xParaEnum;
private com.sun.star.container.XEnumeration xPortionEnum;
private com.sun.star.util.XRefreshable xFieldsRefresh;
public com.sun.star.text.XTextField getNextField()
throws com.sun.star.uno.Exception
{
while (true) {
while (xPortionEnum == null) {
if (!xParaEnum.hasMoreElements())
fail("Cannot retrieve next field.");
com.sun.star.container.XEnumerationAccess aPara =
UnoRuntime.queryInterface(
com.sun.star.container.XEnumerationAccess.class, xParaEnum.nextElement());
xPortionEnum = aPara.createEnumeration();
}
if ( xPortionEnum == null )
break;
while ( xPortionEnum.hasMoreElements() ) {
com.sun.star.beans.XPropertySet xPortionProps =
UnoRuntime.queryInterface(
com.sun.star.beans.XPropertySet.class , xPortionEnum.nextElement());
final String sPortionType =
xPortionProps.getPropertyValue( "TextPortionType" ).toString();
if ( sPortionType.equals( "TextField") ) {
com.sun.star.text.XTextField xField = UnoRuntime.queryInterface(
com.sun.star.text.XTextField.class,
xPortionProps.getPropertyValue( "TextField" ) );
assertNotNull("Cannot retrieve next field.", xField);
return xField;
}
}
xPortionEnum = null;
}
return null; // unreachable
}
public com.sun.star.beans.XPropertySet getFieldProps(
com.sun.star.text.XTextField xField ) {
com.sun.star.beans.XPropertySet xProps =
UnoRuntime.queryInterface(
com.sun.star.beans.XPropertySet.class, xField );
assertNotNull("Cannot retrieve field properties.", xProps);
return xProps;
}
public void checkField( com.sun.star.text.XTextField xField,
com.sun.star.beans.XPropertySet xProps,
short nFormat,
String aExpectedFieldResult )
throws com.sun.star.uno.Exception
{
// set requested format
xProps.setPropertyValue("ReferenceFieldPart", Short.valueOf(nFormat));
// refresh fields in order to get new format applied
xFieldsRefresh.refresh();
String aFieldResult = xField.getPresentation( false );
assertEquals( "set reference field format doesn't result in correct field result",
aExpectedFieldResult, aFieldResult);
}
@Test public void checkCrossReferences() throws com.sun.star.uno.Exception {
// setup paragraph enumeration
{
com.sun.star.container.XEnumerationAccess xParaEnumAccess =
UnoRuntime.queryInterface(
com.sun.star.container.XEnumerationAccess.class, document.getText());
xParaEnum = xParaEnumAccess.createEnumeration();
}
// get field refresher
{
com.sun.star.text.XTextFieldsSupplier xFieldSupp =
UnoRuntime.queryInterface(
com.sun.star.text.XTextFieldsSupplier.class, document);
xFieldsRefresh = UnoRuntime.queryInterface(
com.sun.star.util.XRefreshable.class, xFieldSupp.getTextFields());
}
// check first reference field
{
// strings for checking
final String FieldResult1 = "*i*";
final String FieldResult2 = "+b+*i*";
final String FieldResult3 = "-1-+b+*i*";
final String FieldResult4 = "1";
final String FieldResult5 = "1";
final String FieldResult6 = "A.1";
final String FieldResult7 = "2(a)";
final String FieldResult8 = "2(b)";
final String FieldResult9 = "2";
final String FieldResult10 = "1(a)";
final String FieldResult11 = "(b)";
final String FieldResult12 = "(a)";
// variables for current field
com.sun.star.text.XTextField xField = null;
com.sun.star.beans.XPropertySet xProps = null;
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult2 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult1 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult3 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult1 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult1 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult3 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult3 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult1 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult3 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult5 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult4 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult6 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult4 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult4 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult6 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult6 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult4 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult6 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult7 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult12 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult7 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult8 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult11 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult8 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult9 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult9 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult9 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult4 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult4 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult4 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult10 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult12 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult10 );
xField = getNextField();
xProps = getFieldProps( xField );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FieldResult12 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FieldResult12 );
checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FieldResult7 );
}
// insert a certain cross-reference bookmark and a reference field to this bookmark
{
// restart paragraph enumeration
com.sun.star.container.XEnumerationAccess xParaEnumAccess =
UnoRuntime.queryInterface(
com.sun.star.container.XEnumerationAccess.class, document.getText());
xParaEnum = xParaEnumAccess.createEnumeration();
// iterate on the paragraphs to find certain paragraph to insert the bookmark
com.sun.star.text.XTextRange xParaTextRange = null;
while ( xParaEnum.hasMoreElements() ) {
xParaTextRange = UnoRuntime.queryInterface(
com.sun.star.text.XTextRange.class, xParaEnum.nextElement());
if ( xParaTextRange.getString().equals( "J" ) ) {
break;
}
else {
xParaTextRange = null;
}
}
assertNotNull(
"Cannot find paragraph to insert cross-reference bookmark.",
xParaTextRange);
// insert bookmark
XMultiServiceFactory xFac = UnoRuntime.queryInterface(
XMultiServiceFactory.class, document);
final String cBookmarkName = "__RefNumPara__47114711";
com.sun.star.text.XTextContent xBookmark =
UnoRuntime.queryInterface(
com.sun.star.text.XTextContent.class,
xFac.createInstance( "com.sun.star.text.Bookmark" ) );
if ( xBookmark != null ) {
com.sun.star.container.XNamed xName =
UnoRuntime.queryInterface(
com.sun.star.container.XNamed.class, xBookmark );
xName.setName( cBookmarkName );
xBookmark.attach(xParaTextRange.getStart());
}
// insert reference field, which references the inserted bookmark
com.sun.star.text.XTextContent xNewField =
UnoRuntime.queryInterface(
com.sun.star.text.XTextContent.class,
xFac.createInstance( "com.sun.star.text.TextField.GetReference" ) );
if ( xNewField != null ) {
com.sun.star.beans.XPropertySet xFieldProps =
UnoRuntime.queryInterface(
com.sun.star.beans.XPropertySet.class, xNewField );
xFieldProps.setPropertyValue( "ReferenceFieldPart", Short.valueOf(com.sun.star.text.ReferenceFieldPart.TEXT) );
xFieldProps.setPropertyValue( "ReferenceFieldSource", Short.valueOf(com.sun.star.text.ReferenceFieldSource.BOOKMARK) );
xFieldProps.setPropertyValue( "SourceName", cBookmarkName );
com.sun.star.text.XTextRange xFieldTextRange =
UnoRuntime.queryInterface(
com.sun.star.text.XTextRange.class, xParaEnum.nextElement());
xNewField.attach(xFieldTextRange.getEnd());
xFieldsRefresh.refresh();
}
// check inserted reference field
com.sun.star.text.XTextField xField =
UnoRuntime.queryInterface(
com.sun.star.text.XTextField.class, xNewField );
assertEquals( "inserted reference field doesn't has correct field result",
"J", xField.getPresentation( false ) );
xParaTextRange.getStart().setString( "Hallo new bookmark: " );
xFieldsRefresh.refresh();
assertEquals( "inserted reference field doesn't has correct field result",
"Hallo new bookmark: J", xField.getPresentation( false ) );
}
}
@Before public void setUpDocument() {
document = util.WriterTools.loadTextDoc(
UnoRuntime.queryInterface(
XMultiServiceFactory.class,
connection.getComponentContext().getServiceManager()),
TestDocument.getUrl("CheckCrossReferences.odt"));
}
@After public void tearDownDocument() {
util.DesktopTools.closeDoc(document);
}
private XTextDocument document = null;
@BeforeClass public static void setUpConnection() throws Exception {
connection.setUp();
}
@AfterClass public static void tearDownConnection()
throws InterruptedException, com.sun.star.uno.Exception
{
connection.tearDown();
}
private static final OfficeConnection connection = new OfficeConnection();
}
'''
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()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment