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