/************************************************************** * * 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.text.XTextDocument; import com.sun.star.text.XTextField; import com.sun.star.text.XTextFieldsSupplier; import com.sun.star.uno.UnoRuntime; public class TitleField { private static final UnoApp app = new UnoApp(); private static XTextDocument odtDocument = null; private static XTextDocument docDocument = null; private static String odtSample = "uno/sw/field/Test_Sample.odt"; private static String docSample = "uno/sw/field/Test_Sample.doc"; private static String odtSaveAsDocSample = "uno/sw/field/odtSaveAsDoc.doc"; private static String docSaveAsODTSample = "uno/sw/field/docSaveAsODT.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 Title Field Can created and Saved in odt file * 1.launch a odt document * 2.Create a title 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 testTitleFieldODT() throws Throwable { odtDocument = SWUtil.openDocument(Testspace.prepareData(odtSample), app); String titleStr = "Title Test"; createTitleFiled(odtDocument); assertTrue("Verify Title field is created use exist Title", isContainTitleField(odtDocument, titleStr)); assertTrue("Verify Title field is created use exist Title, can get text from document", isContainTitleText(odtDocument, titleStr)); //Set Title SWUtil.setDocumentProperty(odtDocument, "Title", titleStr); //Verify after set Title assertTrue("Verify Title field is created, can get text from document", isContainTitleText(odtDocument, titleStr)); odtDocument = SWUtil.saveAndReload(odtDocument, app); //verify after save and reload assertTrue("Verify Title field is created, after save, still exist.", isContainTitleField(odtDocument, titleStr)); assertTrue("Verify Title field is created, can get text from document after saved.", isContainTitleText(odtDocument, titleStr)); SWUtil.saveAsDoc(odtDocument, Testspace.getUrl(odtSaveAsDocSample)); app.closeDocument(odtDocument); docDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(odtSaveAsDocSample), app); assertTrue("Verify Title field is created, after saved to doc format, field still exist.", isContainTitleField(docDocument, titleStr)); assertTrue("Verify Title field is created, after saved to doc format, can get text from document", isContainTitleText(docDocument, titleStr)); app.closeDocument(docDocument); } /** * Test Title Field Can created and Saved in Doc file * 1.launch a doc document * 2.Create a Title field at end of this page * 3.Save and Reopen this document, check Title field * 3.Save as odt format and reload * @throws Throwable */ // @Test // public void testPageCountFieldDOC() throws Throwable { // docDocument = SWUtil.openDocument(Testspace.prepareData(docSample), app); // String TitleStr = "Title Test"; // SWUtil.setDocumentProperty(docDocument, "Title", TitleStr); // createTitleFiled(docDocument); // // assertTrue("Verify Title field is created.", isContainTitleField(docDocument, TitleStr)); // assertTrue("Verify Title field is created, can get text from document", // isContainTitleText(docDocument, TitleStr)); // // docDocument = SWUtil.saveAndReload(docDocument, app); // //verify after save and reload // assertTrue("Verify Title field is created, after save, still exist.", isContainTitleField(docDocument, TitleStr)); // assertTrue("Verify Title field is created, can get text from document after saved.", // isContainTitleText(docDocument, TitleStr)); // SWUtil.saveAsODT(docDocument, Testspace.getUrl(docSaveAsODTSample)); // app.closeDocument(docDocument); // odtDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(docSaveAsODTSample), app); // assertTrue("Verify Title field is created, after saved to doc format, field still exist.", isContainTitleField(odtDocument, TitleStr)); // assertTrue("Verify Title field is created, after saved to doc format, can get text from document", // isContainTitleText(odtDocument, TitleStr)); // app.closeDocument(odtDocument); // } /** * Create a Title field at start of this document * @param document * @throws Exception */ private void createTitleFiled(XTextDocument document) throws Exception { XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); XTextField TitleField = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.docinfo.Title")); SWUtil.moveCuror2Start(document); document.getText().insertTextContent(document.getText().getStart(), TitleField, true); } /** * Check is contain Title content at start of this document * * @param document * @param content * @return */ private boolean isContainTitleText(XTextDocument document, String content) { String documentString = document.getText().getString().trim(); return documentString.indexOf(content) == 0; } /** * Check is contain Title field * @param document * @throws Exception */ private boolean isContainTitleField(XTextDocument document, String content) 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); String strContent = (String) props.getPropertyValue("CurrentPresentation"); return content.equals(strContent); } return false; } }