/************************************************************** | |
* | |
* 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 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
* | |
*************************************************************/ | |
package fvt.uno.sw.field; | |
import static org.junit.Assert.*; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Before; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
import org.openoffice.test.common.Testspace; | |
import org.openoffice.test.uno.UnoApp; | |
import testlib.uno.SWUtil; | |
import com.sun.star.beans.XPropertySet; | |
import com.sun.star.container.XEnumeration; | |
import com.sun.star.container.XEnumerationAccess; | |
import com.sun.star.lang.XMultiServiceFactory; | |
import com.sun.star.style.NumberingType; | |
import com.sun.star.text.XTextDocument; | |
import com.sun.star.text.XTextField; | |
import com.sun.star.text.XTextFieldsSupplier; | |
import com.sun.star.uno.UnoRuntime; | |
public class PageCountField { | |
private static final UnoApp app = new UnoApp(); | |
private static XTextDocument odtDocument = null; | |
private static XTextDocument docDocument = null; | |
private static String odtSample = "uno/sw/field/PageCountField.odt"; | |
private static String docSample = "uno/sw/field/PageCountField.doc"; | |
private static String odtSaveAsDocSample = "uno/sw/field/PageCountFieldNewSave.doc"; | |
private static String docSaveAsODTSample = "uno/sw/field/PageCountFieldNewSave.odt"; | |
@Before | |
public void setUpDocument() throws Exception { | |
} | |
@After | |
public void tearDownDocument() { | |
} | |
@BeforeClass | |
public static void setUpConnection() throws Exception { | |
app.start(); | |
} | |
@AfterClass | |
public static void tearDownConnection() throws InterruptedException, | |
Exception { | |
app.close(); | |
} | |
/** | |
* | |
* Test Page count Field Can created and Saved in odt file | |
* 1.launch a odt document | |
* 2.Create a page count field at end of this page | |
* 3.Save and Reopen this document | |
* 4.Save it as doc format and reload | |
* @throws Throwable | |
*/ | |
@Test | |
public void testPageCountFieldODT() throws Throwable { | |
odtDocument = SWUtil.openDocument(Testspace.prepareData(odtSample), app); | |
createPageCountField(odtDocument); | |
int PageCount = getPageCount(odtDocument); | |
assertEquals("Verify page count created in exist odt sample file.", 3, PageCount); | |
odtDocument = SWUtil.saveAndReload(odtDocument, app); | |
assertTrue("Test page count field still exist after odt sample file saved", isContainPageCountField(odtDocument)); | |
PageCount = getPageCount(odtDocument); | |
assertEquals("Verify page count value still exist after saved.", 3, PageCount); | |
SWUtil.saveAsDoc(odtDocument, Testspace.getUrl(odtSaveAsDocSample)); | |
app.closeDocument(odtDocument); | |
docDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(odtSaveAsDocSample), app); | |
assertTrue("Test page count field still exist after odt sample file save as doc format", isContainPageCountField(docDocument)); | |
PageCount = getPageCount(docDocument); | |
assertEquals("Verify page count value still exist after saved as doc format.", 3, PageCount); | |
app.closeDocument(docDocument); | |
} | |
/** | |
* Test Page count Field Can created and Saved in Doc file | |
* 1.launch a doc document | |
* 2.Create a page count field at end of this page | |
* 3.Save and Reopen this document, check page count field | |
* 3.Save as odt format and reload | |
* @throws Throwable | |
*/ | |
@Test | |
public void testPageCountFieldDOC() throws Throwable { | |
docDocument = SWUtil.openDocument(Testspace.prepareData(docSample), app); | |
createPageCountField(docDocument); | |
int PageCount = getPageCount(docDocument); | |
assertEquals("Verify page count created in exist doc sample file.", 4, PageCount); | |
docDocument = SWUtil.saveAndReload(docDocument, app); | |
assertTrue("Test page count field still exist after doc sample file saved", isContainPageCountField(docDocument)); | |
PageCount = getPageCount(docDocument); | |
assertEquals("Verify page count value still exist after saved.", 4, PageCount); | |
SWUtil.saveAsODT(docDocument, Testspace.getUrl(docSaveAsODTSample)); | |
app.closeDocument(docDocument); | |
odtDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(docSaveAsODTSample), app); | |
assertTrue("Test page count field still exist after doc sample file save as odt format", isContainPageCountField(odtDocument)); | |
PageCount = getPageCount(odtDocument); | |
assertEquals("Verify page count value still exist after saved as doc format.", 4, PageCount); | |
app.closeDocument(odtDocument); | |
} | |
/** | |
* Create a page count field at start of this document | |
* @param document | |
* @throws Exception | |
*/ | |
private void createPageCountField(XTextDocument document) throws Exception { | |
XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); | |
XTextField PageCountField = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.PageCount")); | |
XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, PageCountField); | |
props.setPropertyValue("NumberingType", NumberingType.ARABIC);//Set page count display as Arabic | |
SWUtil.moveCuror2Start(document); | |
document.getText().insertTextContent(document.getText().getStart(), PageCountField, true); | |
} | |
/** | |
* Get the page count by getText | |
* This page count is at end of this document | |
* @param document | |
* @return | |
*/ | |
private int getPageCount(XTextDocument document) { | |
String documentString = document.getText().getString().trim(); | |
String strNum = String.valueOf(documentString.charAt(0)); | |
int count = Integer.valueOf(strNum); | |
return count; | |
} | |
/** | |
* Check is contain page count field | |
* @param document | |
* @throws Exception | |
*/ | |
private boolean isContainPageCountField(XTextDocument document) throws Exception { | |
XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); | |
XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields(); | |
XEnumeration enumeration = xEnumeratedFields.createEnumeration(); | |
while (enumeration.hasMoreElements()) { | |
Object field = enumeration.nextElement(); | |
XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field); | |
short countType = (Short) props.getPropertyValue("NumberingType"); | |
return countType == NumberingType.ARABIC; | |
} | |
return false; | |
} | |
} |