/************************************************************** * * 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.assertEquals; import static org.junit.Assert.assertTrue; 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 PageNumberField { private static final UnoApp app = new UnoApp(); private static XTextDocument odtDocument = null; private static XTextDocument docDocument = null; private static String odtSample = "uno/sw/field/PageNumberFieldTest.odt"; private static String docSample = "uno/sw/field/PageNumberFieldTest.doc"; private static String odtSaveAsDocSample = "uno/sw/field/PageNumberFieldTest_1.doc"; private static String docSaveAsODTSample = "uno/sw/field/PageNumberFieldTest_1.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(); } /** * There is a bug : Bug 120625 * Test Page Number Field Can created and Saved in odt file * 1.launch a odt document * 2.Create a page number 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 testPageNumberFieldODT() throws Throwable { odtDocument = SWUtil.openDocument(Testspace.prepareData(odtSample), app); createPageNumberFiled(odtDocument); int pageNumber = getPageNumber(odtDocument); assertEquals("Verify page number created in exist odt sample file.", 3, pageNumber); odtDocument = SWUtil.saveAndReload(odtDocument, app); assertTrue("Test page number field still exist after odt sample file saved", isContainPageNumberField(odtDocument)); pageNumber = getPageNumber(odtDocument); assertEquals("Verify page number value still exist after saved.", 3, pageNumber); SWUtil.saveAsDoc(odtDocument, Testspace.getUrl(odtSaveAsDocSample)); app.closeDocument(odtDocument); docDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(odtSaveAsDocSample), app); assertTrue("Test page number field still exist after odt sample file save as doc format", isContainPageNumberField(docDocument)); pageNumber = getPageNumber(docDocument); assertEquals("Verify page number value still exist after saved as doc format.", 3, pageNumber); app.closeDocument(docDocument); } /** * Bug 120625 * Test Page Number Field Can created and Saved in Doc file * 1.launch a doc document * 2.Create a page number field at end of this page * 3.Save and Reopen this document, check page number field * 3.Save as odt format and reload * @throws Throwable */ @Test public void testPageNumberFieldDOC() throws Throwable { docDocument = SWUtil.openDocument(Testspace.prepareData(docSample), app); createPageNumberFiled(docDocument); int pageNumber = getPageNumber(docDocument); assertEquals("Verify page number created in exist doc sample file.", 2, pageNumber); docDocument = SWUtil.saveAndReload(docDocument, app); assertTrue("Test page number field still exist after doc sample file saved", isContainPageNumberField(docDocument)); pageNumber = getPageNumber(docDocument); assertEquals("Verify page number value still exist after saved.", 2, pageNumber); SWUtil.saveAsODT(docDocument, Testspace.getUrl(docSaveAsODTSample)); app.closeDocument(docDocument); odtDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(docSaveAsODTSample), app); assertTrue("Test page number field still exist after doc sample file save as odt format", isContainPageNumberField(odtDocument)); pageNumber = getPageNumber(odtDocument); assertEquals("Verify page number value still exist after saved as doc format.", 2, pageNumber); app.closeDocument(odtDocument); } /** * Create a page number field at end of this document * @param document * @throws Exception */ private void createPageNumberFiled(XTextDocument document) throws Exception { XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); XTextField pageNumberFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.PageNumber")); XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, pageNumberFiled); props.setPropertyValue("NumberingType", NumberingType.ARABIC);//Set page number display as Arabic SWUtil.moveCuror2End(document); document.getText().insertTextContent(document.getText().getEnd(), pageNumberFiled, true); } /** * Get the page number by getText * This page number is at end of this document * @param document * @return */ private int getPageNumber(XTextDocument document) { try { Thread.sleep(5*1000); //sleep before get page number field, there is a bug:120625 } catch (InterruptedException e) { e.printStackTrace(); } String documentString = document.getText().getString().trim(); int length = documentString.length(); String strNum = String.valueOf(documentString.charAt(length -1)); int number = Integer.valueOf(strNum); return number; } /** * Check is contain page number field * @param document * @throws Exception */ private boolean isContainPageNumberField(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 numberType = (Short) props.getPropertyValue("NumberingType"); return numberType == 4; } return false; } }