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