xref: /AOO41X/test/testuno/source/fvt/uno/sw/field/CheckDateTimeField.java (revision eba4d44a33e5be0b2528d5a9a6f0dcbf65adaa0d)
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.assertEquals;
24*eba4d44aSLiu Zhe import static org.junit.Assert.assertTrue;
25*eba4d44aSLiu Zhe 
26*eba4d44aSLiu Zhe import java.util.Calendar;
27*eba4d44aSLiu Zhe 
28*eba4d44aSLiu Zhe import org.junit.After;
29*eba4d44aSLiu Zhe import org.junit.AfterClass;
30*eba4d44aSLiu Zhe import org.junit.Before;
31*eba4d44aSLiu Zhe import org.junit.BeforeClass;
32*eba4d44aSLiu Zhe import org.junit.Test;
33*eba4d44aSLiu Zhe import org.openoffice.test.common.FileUtil;
34*eba4d44aSLiu Zhe import org.openoffice.test.common.Testspace;
35*eba4d44aSLiu Zhe import org.openoffice.test.uno.UnoApp;
36*eba4d44aSLiu Zhe 
37*eba4d44aSLiu Zhe import com.sun.star.beans.PropertyValue;
38*eba4d44aSLiu Zhe import com.sun.star.beans.XPropertySet;
39*eba4d44aSLiu Zhe import com.sun.star.container.XEnumeration;
40*eba4d44aSLiu Zhe import com.sun.star.container.XEnumerationAccess;
41*eba4d44aSLiu Zhe import com.sun.star.frame.XStorable;
42*eba4d44aSLiu Zhe import com.sun.star.lang.XMultiServiceFactory;
43*eba4d44aSLiu Zhe import com.sun.star.text.XTextDocument;
44*eba4d44aSLiu Zhe import com.sun.star.text.XTextField;
45*eba4d44aSLiu Zhe import com.sun.star.text.XTextFieldsSupplier;
46*eba4d44aSLiu Zhe import com.sun.star.uno.UnoRuntime;
47*eba4d44aSLiu Zhe import com.sun.star.util.DateTime;
48*eba4d44aSLiu Zhe /**
49*eba4d44aSLiu Zhe  * Test Date and Time Field can be created and Load
50*eba4d44aSLiu Zhe  * @author test
51*eba4d44aSLiu Zhe  *
52*eba4d44aSLiu Zhe  */
53*eba4d44aSLiu Zhe public class CheckDateTimeField {
54*eba4d44aSLiu Zhe 
55*eba4d44aSLiu Zhe 
56*eba4d44aSLiu Zhe 
57*eba4d44aSLiu Zhe 	private String tempPath = "uno/sw/temp/" ;
58*eba4d44aSLiu Zhe 	private String tempFileName =  String.valueOf(System.currentTimeMillis());
59*eba4d44aSLiu Zhe 	private static final UnoApp app = new UnoApp();
60*eba4d44aSLiu Zhe 
61*eba4d44aSLiu Zhe 	private XTextDocument document = null;
62*eba4d44aSLiu Zhe 	@Before
setUpDocument()63*eba4d44aSLiu Zhe 	public void setUpDocument() throws Exception {
64*eba4d44aSLiu Zhe 		document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.newDocument("swriter"));
65*eba4d44aSLiu Zhe 	}
66*eba4d44aSLiu Zhe 
67*eba4d44aSLiu Zhe 	@After
tearDownDocument()68*eba4d44aSLiu Zhe 	public void tearDownDocument() {
69*eba4d44aSLiu Zhe 	     app.closeDocument(document);
70*eba4d44aSLiu Zhe 		 FileUtil.deleteFile(Testspace.getFile(tempPath));
71*eba4d44aSLiu Zhe 	}
72*eba4d44aSLiu Zhe 
73*eba4d44aSLiu Zhe 
74*eba4d44aSLiu Zhe 
75*eba4d44aSLiu Zhe 	@BeforeClass
setUpConnection()76*eba4d44aSLiu Zhe 	public static void setUpConnection() throws Exception {
77*eba4d44aSLiu Zhe 		app.start();
78*eba4d44aSLiu Zhe 	}
79*eba4d44aSLiu Zhe 
80*eba4d44aSLiu Zhe 	@AfterClass
tearDownConnection()81*eba4d44aSLiu Zhe 	public static void tearDownConnection() throws InterruptedException, Exception {
82*eba4d44aSLiu Zhe 		app.close();
83*eba4d44aSLiu Zhe 	}
84*eba4d44aSLiu Zhe 
85*eba4d44aSLiu Zhe 
86*eba4d44aSLiu Zhe 
87*eba4d44aSLiu Zhe 	/**
88*eba4d44aSLiu Zhe 	 * Test Time field can be created correctly.
89*eba4d44aSLiu Zhe 	 * 1.Create a Time in new document
90*eba4d44aSLiu Zhe 	 * 2.Verify the Time is created by check the date hour in the new document
91*eba4d44aSLiu Zhe 	 * 3.Save and close the new document to doc format
92*eba4d44aSLiu Zhe 	 * 4.Reload the new save doc file, check the  time field
93*eba4d44aSLiu Zhe 	 * @throws Exception
94*eba4d44aSLiu Zhe 	 */
95*eba4d44aSLiu Zhe 
96*eba4d44aSLiu Zhe 	@Test
testCreateTimeFieldSaveDoc()97*eba4d44aSLiu Zhe 	public void testCreateTimeFieldSaveDoc() throws Exception {
98*eba4d44aSLiu Zhe 
99*eba4d44aSLiu Zhe 		String url = Testspace.getUrl(tempPath + tempFileName + ".doc");
100*eba4d44aSLiu Zhe 		PropertyValue[] propsValue = new PropertyValue[1];
101*eba4d44aSLiu Zhe 		propsValue[0] = new PropertyValue();
102*eba4d44aSLiu Zhe 		propsValue[0].Name = "FilterName";
103*eba4d44aSLiu Zhe 		propsValue[0].Value = "MS Word 97";
104*eba4d44aSLiu Zhe 
105*eba4d44aSLiu Zhe 		createTimeFiled(document, url, propsValue);
106*eba4d44aSLiu Zhe 	}
107*eba4d44aSLiu Zhe 	/**
108*eba4d44aSLiu Zhe 	 * Test Time Field can be created correctly.
109*eba4d44aSLiu Zhe 	 * 1.Create a Time Field in new document
110*eba4d44aSLiu Zhe 	 * 2.Verify the Time Field is created by check the date hour in the new document
111*eba4d44aSLiu Zhe 	 * 3.Save and close the new document to doc format
112*eba4d44aSLiu Zhe 	 * 4.Reload the new save odt file, check the Time Field
113*eba4d44aSLiu Zhe 	 * @throws Exception
114*eba4d44aSLiu Zhe 	 */
115*eba4d44aSLiu Zhe 	@Test
testCreateTimeFieldSaveODT()116*eba4d44aSLiu Zhe 	public void testCreateTimeFieldSaveODT() throws Exception {
117*eba4d44aSLiu Zhe 
118*eba4d44aSLiu Zhe 		String url = Testspace.getUrl(tempPath + tempFileName + ".odt");
119*eba4d44aSLiu Zhe 		PropertyValue[] propsValue = new PropertyValue[0];
120*eba4d44aSLiu Zhe 		createTimeFiled(document, url, propsValue);
121*eba4d44aSLiu Zhe 
122*eba4d44aSLiu Zhe 	}
123*eba4d44aSLiu Zhe 
createTimeFiled(XTextDocument document, String url, PropertyValue[] propsValue)124*eba4d44aSLiu Zhe 	private void createTimeFiled(XTextDocument document, String url, PropertyValue[] propsValue) throws Exception {
125*eba4d44aSLiu Zhe 		XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document);
126*eba4d44aSLiu Zhe 		XTextField  dateFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.DateTime"));
127*eba4d44aSLiu Zhe 
128*eba4d44aSLiu Zhe 
129*eba4d44aSLiu Zhe 		XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, dateFiled);
130*eba4d44aSLiu Zhe 		props.setPropertyValue("IsDate", false);
131*eba4d44aSLiu Zhe 
132*eba4d44aSLiu Zhe 		document.getText().insertTextContent(document.getText().getEnd(), dateFiled, false);
133*eba4d44aSLiu Zhe 		DateTime dateField = (DateTime) props.getPropertyValue("DateTimeValue");
134*eba4d44aSLiu Zhe 
135*eba4d44aSLiu Zhe 		String dateString = document.getText().getString();
136*eba4d44aSLiu Zhe 		assertTrue("Verify time field is creatd, by verify it's hour",  dateString.indexOf(String.valueOf(dateField.Hours).trim()) != -1);
137*eba4d44aSLiu Zhe 		assertTrue("Verify time field is creatd, by verify it's minutes",  dateString.indexOf(String.valueOf(dateField.Minutes).trim()) != -1);
138*eba4d44aSLiu Zhe 		int expectHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
139*eba4d44aSLiu Zhe 		assertEquals("Verify time field is creatd, value is right, by compare Hour", expectHour, dateField.Hours);
140*eba4d44aSLiu Zhe 		XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
141*eba4d44aSLiu Zhe 		store.storeAsURL(url, propsValue);
142*eba4d44aSLiu Zhe 		app.closeDocument(document);
143*eba4d44aSLiu Zhe 		document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url));
144*eba4d44aSLiu Zhe 		XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document);
145*eba4d44aSLiu Zhe 		XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields();
146*eba4d44aSLiu Zhe 		XEnumeration enumeration = xEnumeratedFields.createEnumeration();
147*eba4d44aSLiu Zhe 		while (enumeration.hasMoreElements()) {
148*eba4d44aSLiu Zhe 			  Object field =  enumeration.nextElement();
149*eba4d44aSLiu Zhe 				XPropertySet props2 = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field);
150*eba4d44aSLiu Zhe 				DateTime dateField2 = (DateTime) props2.getPropertyValue("DateTimeValue");
151*eba4d44aSLiu Zhe 				assertEquals("Verify time field is creatd correct by save and reload.", expectHour, dateField2.Hours);
152*eba4d44aSLiu Zhe 		}
153*eba4d44aSLiu Zhe 
154*eba4d44aSLiu Zhe 
155*eba4d44aSLiu Zhe 	}
156*eba4d44aSLiu Zhe 	/**
157*eba4d44aSLiu Zhe 	 * Test Date Field can be created correctly.
158*eba4d44aSLiu Zhe 	 * 1.Create a Date in new document
159*eba4d44aSLiu Zhe 	 * 2.Verify the Date is created by check the date hour in the new document
160*eba4d44aSLiu Zhe 	 * 3.Save and close the new document to doc format
161*eba4d44aSLiu Zhe 	 * 4.Reload the new save doc file, check the  Date field
162*eba4d44aSLiu Zhe 	 * @throws Exception
163*eba4d44aSLiu Zhe 	 */
164*eba4d44aSLiu Zhe 
165*eba4d44aSLiu Zhe 	@Test
testCreateDateFieldSaveDoc()166*eba4d44aSLiu Zhe 	public void testCreateDateFieldSaveDoc() throws Exception {
167*eba4d44aSLiu Zhe 
168*eba4d44aSLiu Zhe 		String url = Testspace.getUrl(tempPath + tempFileName + ".doc");
169*eba4d44aSLiu Zhe 		PropertyValue[] propsValue = new PropertyValue[1];
170*eba4d44aSLiu Zhe 		propsValue[0] = new PropertyValue();
171*eba4d44aSLiu Zhe 		propsValue[0].Name = "FilterName";
172*eba4d44aSLiu Zhe 		propsValue[0].Value = "MS Word 97";
173*eba4d44aSLiu Zhe 
174*eba4d44aSLiu Zhe 		createDateFiled(document, url, propsValue);
175*eba4d44aSLiu Zhe 	}
176*eba4d44aSLiu Zhe 	/**
177*eba4d44aSLiu Zhe 	 * Test Date Field can be created correctly.
178*eba4d44aSLiu Zhe 	 * 1.Create a Date field in new document
179*eba4d44aSLiu Zhe 	 * 2.Verify the dateField is created by check the date hour in the new document
180*eba4d44aSLiu Zhe 	 * 3.Save and close the new document to doc format
181*eba4d44aSLiu Zhe 	 * 4.Reload the new save odt file, check the date  field
182*eba4d44aSLiu Zhe 	 * @throws Exception
183*eba4d44aSLiu Zhe 	 */
184*eba4d44aSLiu Zhe 	@Test
testCreateDateFieldSaveODT()185*eba4d44aSLiu Zhe 	public void testCreateDateFieldSaveODT() throws Exception {
186*eba4d44aSLiu Zhe 
187*eba4d44aSLiu Zhe 		String url = Testspace.getUrl(tempPath + tempFileName + ".odt");
188*eba4d44aSLiu Zhe 		PropertyValue[] propsValue = new PropertyValue[0];
189*eba4d44aSLiu Zhe 		createDateFiled(document, url, propsValue);
190*eba4d44aSLiu Zhe 
191*eba4d44aSLiu Zhe 	}
createDateFiled(XTextDocument document, String url, PropertyValue[] propsValue)192*eba4d44aSLiu Zhe 	private void createDateFiled(XTextDocument document, String url, PropertyValue[] propsValue) throws Exception {
193*eba4d44aSLiu Zhe 		XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document);
194*eba4d44aSLiu Zhe 		XTextField  dateFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.DateTime"));
195*eba4d44aSLiu Zhe 
196*eba4d44aSLiu Zhe 
197*eba4d44aSLiu Zhe 		XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, dateFiled);
198*eba4d44aSLiu Zhe 		props.setPropertyValue("IsDate", true);
199*eba4d44aSLiu Zhe 
200*eba4d44aSLiu Zhe 		document.getText().insertTextContent(document.getText().getEnd(), dateFiled, false);
201*eba4d44aSLiu Zhe 		DateTime dateField = (DateTime) props.getPropertyValue("DateTimeValue");
202*eba4d44aSLiu Zhe 
203*eba4d44aSLiu Zhe 		String dateString = document.getText().getString();
204*eba4d44aSLiu Zhe 		assertTrue("Verify date field is creatd, by verify it's Month",  dateString.indexOf(String.valueOf(dateField.Month).trim()) != -1);
205*eba4d44aSLiu Zhe 		assertTrue("Verify date field is creatd, by verify it's Day",  dateString.indexOf(String.valueOf(dateField.Day).trim()) != -1);
206*eba4d44aSLiu Zhe 		int expectDay = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
207*eba4d44aSLiu Zhe 		assertEquals("Verify date field is creatd, value is right, by compare Day", expectDay, dateField.Day);
208*eba4d44aSLiu Zhe 		XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
209*eba4d44aSLiu Zhe 		store.storeAsURL(url, propsValue);
210*eba4d44aSLiu Zhe 		app.closeDocument(document);
211*eba4d44aSLiu Zhe 		document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url));
212*eba4d44aSLiu Zhe 		XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document);
213*eba4d44aSLiu Zhe 		XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields();
214*eba4d44aSLiu Zhe 		XEnumeration enumeration = xEnumeratedFields.createEnumeration();
215*eba4d44aSLiu Zhe 		while (enumeration.hasMoreElements()) {
216*eba4d44aSLiu Zhe 			  Object field =  enumeration.nextElement();
217*eba4d44aSLiu Zhe 				XPropertySet props2 = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field);
218*eba4d44aSLiu Zhe 				DateTime dateField2 = (DateTime) props2.getPropertyValue("DateTimeValue");
219*eba4d44aSLiu Zhe 				assertEquals("Verify date field is creatd correct by save and reload.", expectDay, dateField2.Day);
220*eba4d44aSLiu Zhe 		}
221*eba4d44aSLiu Zhe 
222*eba4d44aSLiu Zhe 	}
223*eba4d44aSLiu Zhe 
224*eba4d44aSLiu Zhe 
225*eba4d44aSLiu Zhe 
226*eba4d44aSLiu Zhe 
227*eba4d44aSLiu Zhe }
228