xref: /AOO41X/test/testuno/source/fvt/uno/sw/field/PageCountField.java (revision eba4d44a33e5be0b2528d5a9a6f0dcbf65adaa0d)
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 
23 import static org.junit.Assert.*;
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 
31 import org.openoffice.test.common.Testspace;
32 import org.openoffice.test.uno.UnoApp;
33 
34 import testlib.uno.SWUtil;
35 
36 import com.sun.star.beans.XPropertySet;
37 import com.sun.star.container.XEnumeration;
38 import com.sun.star.container.XEnumerationAccess;
39 import com.sun.star.lang.XMultiServiceFactory;
40 import com.sun.star.style.NumberingType;
41 import com.sun.star.text.XTextDocument;
42 import com.sun.star.text.XTextField;
43 import com.sun.star.text.XTextFieldsSupplier;
44 import com.sun.star.uno.UnoRuntime;
45 
46 public class PageCountField {
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/PageCountField.odt";
52     private static String docSample = "uno/sw/field/PageCountField.doc";
53 
54     private  static String odtSaveAsDocSample = "uno/sw/field/PageCountFieldNewSave.doc";
55     private static String docSaveAsODTSample = "uno/sw/field/PageCountFieldNewSave.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 
68     @BeforeClass
setUpConnection()69     public static void setUpConnection() throws Exception {
70         app.start();
71     }
72 
73     @AfterClass
tearDownConnection()74     public static void tearDownConnection() throws InterruptedException,
75             Exception {
76         app.close();
77     }
78 
79 
80     /**
81      *
82      * Test Page count Field Can created and Saved in odt file
83      * 1.launch a odt document
84      * 2.Create a page count field at end of this page
85      * 3.Save and Reopen this document
86      * 4.Save it as doc format and reload
87      * @throws Throwable
88      */
89     @Test
testPageCountFieldODT()90     public void testPageCountFieldODT() throws Throwable {
91         odtDocument = SWUtil.openDocument(Testspace.prepareData(odtSample), app);
92         createPageCountField(odtDocument);
93         int PageCount = getPageCount(odtDocument);
94         assertEquals("Verify page count created in exist odt sample file.", 3, PageCount);
95         odtDocument = SWUtil.saveAndReload(odtDocument, app);
96         assertTrue("Test page count field still exist after odt sample file saved", isContainPageCountField(odtDocument));
97         PageCount = getPageCount(odtDocument);
98         assertEquals("Verify page count value still exist after saved.", 3, PageCount);
99         SWUtil.saveAsDoc(odtDocument, Testspace.getUrl(odtSaveAsDocSample));
100         app.closeDocument(odtDocument);
101         docDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(odtSaveAsDocSample), app);
102 
103         assertTrue("Test page count field still exist after odt sample file save as doc format", isContainPageCountField(docDocument));
104         PageCount = getPageCount(docDocument);
105         assertEquals("Verify page count value still exist after saved as doc format.", 3, PageCount);
106         app.closeDocument(docDocument);
107     }
108 
109     /**
110      *  Test Page count Field Can created and Saved in Doc file
111      * 1.launch a doc document
112      * 2.Create a page count field at end of this page
113      * 3.Save and Reopen this document, check page count field
114      * 3.Save as odt format and reload
115      * @throws Throwable
116      */
117     @Test
testPageCountFieldDOC()118     public void testPageCountFieldDOC() throws Throwable {
119         docDocument = SWUtil.openDocument(Testspace.prepareData(docSample), app);
120         createPageCountField(docDocument);
121         int PageCount = getPageCount(docDocument);
122         assertEquals("Verify page count created in exist doc sample file.", 4, PageCount);
123         docDocument = SWUtil.saveAndReload(docDocument, app);
124         assertTrue("Test page count field still exist after doc sample file saved", isContainPageCountField(docDocument));
125         PageCount = getPageCount(docDocument);
126         assertEquals("Verify page count value still exist after saved.", 4, PageCount);
127         SWUtil.saveAsODT(docDocument, Testspace.getUrl(docSaveAsODTSample));
128         app.closeDocument(docDocument);
129         odtDocument = SWUtil.openDocumentFromURL(Testspace.getUrl(docSaveAsODTSample), app);
130 
131         assertTrue("Test page count field still exist after doc sample file save as odt format", isContainPageCountField(odtDocument));
132         PageCount = getPageCount(odtDocument);
133         assertEquals("Verify page count value still exist after saved as doc format.", 4, PageCount);
134         app.closeDocument(odtDocument);
135     }
136 
137 
138 
139     /**
140      * Create a page count field at start of this document
141      * @param document
142      * @throws Exception
143      */
createPageCountField(XTextDocument document)144     private void createPageCountField(XTextDocument document) throws Exception {
145         XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document);
146         XTextField  PageCountField = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.PageCount"));
147 
148         XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, PageCountField);
149         props.setPropertyValue("NumberingType", NumberingType.ARABIC);//Set page count display as Arabic
150 
151         SWUtil.moveCuror2Start(document);
152         document.getText().insertTextContent(document.getText().getStart(), PageCountField, true);
153 
154 
155     }
156     /**
157      * Get the page count by getText
158      * This page count is at end of this document
159      * @param document
160      * @return
161      */
getPageCount(XTextDocument document)162     private int getPageCount(XTextDocument document) {
163         String documentString = document.getText().getString().trim();
164         String strNum = String.valueOf(documentString.charAt(0));
165         int count = Integer.valueOf(strNum);
166         return count;
167     }
168 
169 
170     /**
171      * Check is contain page count field
172      * @param document
173      * @throws Exception
174      */
isContainPageCountField(XTextDocument document)175     private boolean isContainPageCountField(XTextDocument document) throws Exception {
176         XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document);
177         XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields();
178 
179         XEnumeration enumeration = xEnumeratedFields.createEnumeration();
180         while (enumeration.hasMoreElements()) {
181                 Object field =  enumeration.nextElement();
182 
183                 XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field);
184                 short countType = (Short) props.getPropertyValue("NumberingType");
185                 return countType == NumberingType.ARABIC;
186 
187         }
188         return false;
189 
190     }
191 
192 }
193