1*eba4d44aSLiu Zhe /************************************************************** 2*eba4d44aSLiu Zhe * 3*eba4d44aSLiu Zhe * Licensed to the Apache Software Foundation (ASF) under one 4*eba4d44aSLiu Zhe * or more contributor license agreements. See the NOTICE file 5*eba4d44aSLiu Zhe * distributed with this work for additional information 6*eba4d44aSLiu Zhe * regarding copyright ownership. The ASF licenses this file 7*eba4d44aSLiu Zhe * to you under the Apache License, Version 2.0 (the 8*eba4d44aSLiu Zhe * "License"); you may not use this file except in compliance 9*eba4d44aSLiu Zhe * with the License. You may obtain a copy of the License at 10*eba4d44aSLiu Zhe * 11*eba4d44aSLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 12*eba4d44aSLiu Zhe * 13*eba4d44aSLiu Zhe * Unless required by applicable law or agreed to in writing, 14*eba4d44aSLiu Zhe * software distributed under the License is distributed on an 15*eba4d44aSLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*eba4d44aSLiu Zhe * KIND, either express or implied. See the License for the 17*eba4d44aSLiu Zhe * specific language governing permissions and limitations 18*eba4d44aSLiu Zhe * under the License. 19*eba4d44aSLiu Zhe * 20*eba4d44aSLiu Zhe *************************************************************/ 21*eba4d44aSLiu Zhe package fvt.uno.sw.field; 22*eba4d44aSLiu Zhe 23*eba4d44aSLiu Zhe import static org.junit.Assert.assertTrue; 24*eba4d44aSLiu Zhe 25*eba4d44aSLiu Zhe import org.junit.After; 26*eba4d44aSLiu Zhe import org.junit.AfterClass; 27*eba4d44aSLiu Zhe import org.junit.Before; 28*eba4d44aSLiu Zhe import org.junit.BeforeClass; 29*eba4d44aSLiu Zhe import org.junit.Test; 30*eba4d44aSLiu Zhe import org.openoffice.test.common.Testspace; 31*eba4d44aSLiu Zhe import org.openoffice.test.uno.UnoApp; 32*eba4d44aSLiu Zhe 33*eba4d44aSLiu Zhe import testlib.uno.SWUtil; 34*eba4d44aSLiu Zhe 35*eba4d44aSLiu Zhe import com.sun.star.beans.XPropertySet; 36*eba4d44aSLiu Zhe import com.sun.star.container.XEnumeration; 37*eba4d44aSLiu Zhe import com.sun.star.container.XEnumerationAccess; 38*eba4d44aSLiu Zhe import com.sun.star.lang.XMultiServiceFactory; 39*eba4d44aSLiu Zhe import com.sun.star.text.XTextDocument; 40*eba4d44aSLiu Zhe import com.sun.star.text.XTextField; 41*eba4d44aSLiu Zhe import com.sun.star.text.XTextFieldsSupplier; 42*eba4d44aSLiu Zhe import com.sun.star.uno.UnoRuntime; 43*eba4d44aSLiu Zhe public class SubjectField { 44*eba4d44aSLiu Zhe 45*eba4d44aSLiu Zhe private static final UnoApp app = new UnoApp(); 46*eba4d44aSLiu Zhe private static XTextDocument odtDocument = null; 47*eba4d44aSLiu Zhe private static XTextDocument docDocument = null; 48*eba4d44aSLiu Zhe private static String odtSample = "uno/sw/field/SubjectField.odt"; 49*eba4d44aSLiu Zhe private static String docSample = "uno/sw/field/Test_Sample.doc"; 50*eba4d44aSLiu Zhe 51*eba4d44aSLiu Zhe private static String odtSaveAsDocSample = "uno/sw/field/odtSaveAsDOC.doc"; 52*eba4d44aSLiu Zhe private static String docSaveAsODTSample = "uno/sw/field/docSaveAsODT.odt"; 53*eba4d44aSLiu Zhe 54*eba4d44aSLiu Zhe @Before 55*eba4d44aSLiu Zhe public void setUpDocument() throws Exception { 56*eba4d44aSLiu Zhe 57*eba4d44aSLiu Zhe } 58*eba4d44aSLiu Zhe 59*eba4d44aSLiu Zhe @After 60*eba4d44aSLiu Zhe public void tearDownDocument() { 61*eba4d44aSLiu Zhe 62*eba4d44aSLiu Zhe 63*eba4d44aSLiu Zhe } 64*eba4d44aSLiu Zhe 65*eba4d44aSLiu Zhe @BeforeClass 66*eba4d44aSLiu Zhe public static void setUpConnection() throws Exception { 67*eba4d44aSLiu Zhe app.start(); 68*eba4d44aSLiu Zhe } 69*eba4d44aSLiu Zhe 70*eba4d44aSLiu Zhe @AfterClass 71*eba4d44aSLiu Zhe public static void tearDownConnection() throws InterruptedException, 72*eba4d44aSLiu Zhe Exception { 73*eba4d44aSLiu Zhe app.close(); 74*eba4d44aSLiu Zhe } 75*eba4d44aSLiu Zhe 76*eba4d44aSLiu Zhe /** 77*eba4d44aSLiu Zhe * 78*eba4d44aSLiu Zhe * Test Subject Field Can created and Saved in odt file 79*eba4d44aSLiu Zhe * 1.launch a odt document 80*eba4d44aSLiu Zhe * 2.Create a page count field at end of this page 81*eba4d44aSLiu Zhe * 3.Save and Reopen this document 82*eba4d44aSLiu Zhe * 4.Save it as doc format and reload 83*eba4d44aSLiu Zhe * @throws Throwable 84*eba4d44aSLiu Zhe */ 85*eba4d44aSLiu Zhe @Test 86*eba4d44aSLiu Zhe public void testSubjectFieldODT() throws Throwable { 87*eba4d44aSLiu Zhe odtDocument = SWUtil.openDocument(Testspace.prepareData(odtSample), app); 88*eba4d44aSLiu Zhe 89*eba4d44aSLiu Zhe 90*eba4d44aSLiu Zhe String subjectStr = "Test Subject Field"; 91*eba4d44aSLiu Zhe createSubjectFiled(odtDocument); 92*eba4d44aSLiu Zhe 93*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created use exsit subject", isContainSubjectField(odtDocument, "UNO API Subject")); 94*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created use exsit subject, can get text from document", 95*eba4d44aSLiu Zhe isContainSubjectText(odtDocument, "UNO API Subject")); 96*eba4d44aSLiu Zhe //Set subject 97*eba4d44aSLiu Zhe SWUtil.setDocumentProperty(odtDocument, "Subject", subjectStr); 98*eba4d44aSLiu Zhe //Verfiy after set subject 99*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, can get text from document", 100*eba4d44aSLiu Zhe isContainSubjectText(odtDocument, subjectStr)); 101*eba4d44aSLiu Zhe 102*eba4d44aSLiu Zhe odtDocument = SWUtil.saveAndReload(odtDocument, app); 103*eba4d44aSLiu Zhe //verify after save and reload 104*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, after save, still exist.", isContainSubjectField(odtDocument, subjectStr)); 105*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, can get text from document after saved.", 106*eba4d44aSLiu Zhe isContainSubjectText(odtDocument, subjectStr)); 107*eba4d44aSLiu Zhe SWUtil.saveAsDoc(odtDocument, Testspace.getUrl(odtSaveAsDocSample)); 108*eba4d44aSLiu Zhe app.closeDocument(odtDocument); 109*eba4d44aSLiu Zhe docDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(odtSaveAsDocSample), app); 110*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, after saved to doc format, field still exist.", isContainSubjectField(docDocument, subjectStr)); 111*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, after saved to doc format, can get text from document", 112*eba4d44aSLiu Zhe isContainSubjectText(docDocument, subjectStr)); 113*eba4d44aSLiu Zhe app.closeDocument(docDocument); 114*eba4d44aSLiu Zhe } 115*eba4d44aSLiu Zhe 116*eba4d44aSLiu Zhe /** 117*eba4d44aSLiu Zhe * Test Subject Field Can created and Saved in Doc file 118*eba4d44aSLiu Zhe * 1.launch a doc document 119*eba4d44aSLiu Zhe * 2.Create a Subject field at end of this page 120*eba4d44aSLiu Zhe * 3.Save and Reopen this document, check Subject field 121*eba4d44aSLiu Zhe * 3.Save as odt format and reload 122*eba4d44aSLiu Zhe * @throws Throwable 123*eba4d44aSLiu Zhe */ 124*eba4d44aSLiu Zhe @Test 125*eba4d44aSLiu Zhe public void testPageCountFieldDOC() throws Throwable { 126*eba4d44aSLiu Zhe docDocument = SWUtil.openDocument(Testspace.prepareData(docSample), app); 127*eba4d44aSLiu Zhe String subjectStr = "Test Subject Field"; 128*eba4d44aSLiu Zhe SWUtil.setDocumentProperty(docDocument, "Subject", subjectStr); 129*eba4d44aSLiu Zhe createSubjectFiled(docDocument); 130*eba4d44aSLiu Zhe 131*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created.", isContainSubjectField(docDocument, subjectStr)); 132*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, can get text from document", 133*eba4d44aSLiu Zhe isContainSubjectText(docDocument, subjectStr)); 134*eba4d44aSLiu Zhe 135*eba4d44aSLiu Zhe docDocument = SWUtil.saveAndReload(docDocument, app); 136*eba4d44aSLiu Zhe //verify after save and reload 137*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, after save, still exist.", isContainSubjectField(docDocument, subjectStr)); 138*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, can get text from document after saved.", 139*eba4d44aSLiu Zhe isContainSubjectText(docDocument, subjectStr)); 140*eba4d44aSLiu Zhe SWUtil.saveAsODT(docDocument, Testspace.getUrl(docSaveAsODTSample)); 141*eba4d44aSLiu Zhe app.closeDocument(docDocument); 142*eba4d44aSLiu Zhe odtDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(docSaveAsODTSample), app); 143*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, after saved to doc format, field still exist.", isContainSubjectField(odtDocument, subjectStr)); 144*eba4d44aSLiu Zhe assertTrue("Verify Subject field is created, after saved to doc format, can get text from document", 145*eba4d44aSLiu Zhe isContainSubjectText(odtDocument, subjectStr)); 146*eba4d44aSLiu Zhe app.closeDocument(odtDocument); 147*eba4d44aSLiu Zhe } 148*eba4d44aSLiu Zhe 149*eba4d44aSLiu Zhe 150*eba4d44aSLiu Zhe 151*eba4d44aSLiu Zhe /** 152*eba4d44aSLiu Zhe * Create a subject field at start of this document 153*eba4d44aSLiu Zhe * @param document 154*eba4d44aSLiu Zhe * @throws Exception 155*eba4d44aSLiu Zhe */ 156*eba4d44aSLiu Zhe private void createSubjectFiled(XTextDocument document) throws Exception { 157*eba4d44aSLiu Zhe 158*eba4d44aSLiu Zhe XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); 159*eba4d44aSLiu Zhe XTextField subjectField = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.docinfo.Subject")); 160*eba4d44aSLiu Zhe 161*eba4d44aSLiu Zhe 162*eba4d44aSLiu Zhe SWUtil.moveCuror2Start(document); 163*eba4d44aSLiu Zhe document.getText().insertTextContent(document.getText().getStart(), subjectField, true); 164*eba4d44aSLiu Zhe 165*eba4d44aSLiu Zhe } 166*eba4d44aSLiu Zhe 167*eba4d44aSLiu Zhe 168*eba4d44aSLiu Zhe /** 169*eba4d44aSLiu Zhe * Check is contain subject content at start of this document 170*eba4d44aSLiu Zhe * 171*eba4d44aSLiu Zhe * @param document 172*eba4d44aSLiu Zhe * @param content 173*eba4d44aSLiu Zhe * @return 174*eba4d44aSLiu Zhe */ 175*eba4d44aSLiu Zhe private boolean isContainSubjectText(XTextDocument document, String content) { 176*eba4d44aSLiu Zhe String documentString = document.getText().getString().trim(); 177*eba4d44aSLiu Zhe return documentString.indexOf(content) == 0; 178*eba4d44aSLiu Zhe } 179*eba4d44aSLiu Zhe 180*eba4d44aSLiu Zhe /** 181*eba4d44aSLiu Zhe * Check is contain subject field 182*eba4d44aSLiu Zhe * @param document 183*eba4d44aSLiu Zhe * @throws Exception 184*eba4d44aSLiu Zhe */ 185*eba4d44aSLiu Zhe private boolean isContainSubjectField(XTextDocument document, String content) throws Exception { 186*eba4d44aSLiu Zhe XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); 187*eba4d44aSLiu Zhe XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields(); 188*eba4d44aSLiu Zhe XEnumeration enumeration = xEnumeratedFields.createEnumeration(); 189*eba4d44aSLiu Zhe while (enumeration.hasMoreElements()) { 190*eba4d44aSLiu Zhe Object field = enumeration.nextElement(); 191*eba4d44aSLiu Zhe XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field); 192*eba4d44aSLiu Zhe String strContent = (String) props.getPropertyValue("Content"); 193*eba4d44aSLiu Zhe return content.equals(strContent); 194*eba4d44aSLiu Zhe 195*eba4d44aSLiu Zhe } 196*eba4d44aSLiu Zhe return false; 197*eba4d44aSLiu Zhe 198*eba4d44aSLiu Zhe } 199*eba4d44aSLiu Zhe 200*eba4d44aSLiu Zhe } 201