1eba4d44aSLiu Zhe /************************************************************** 2eba4d44aSLiu Zhe * 3eba4d44aSLiu Zhe * Licensed to the Apache Software Foundation (ASF) under one 4eba4d44aSLiu Zhe * or more contributor license agreements. See the NOTICE file 5eba4d44aSLiu Zhe * distributed with this work for additional information 6eba4d44aSLiu Zhe * regarding copyright ownership. The ASF licenses this file 7eba4d44aSLiu Zhe * to you under the Apache License, Version 2.0 (the 8eba4d44aSLiu Zhe * "License"); you may not use this file except in compliance 9eba4d44aSLiu Zhe * with the License. You may obtain a copy of the License at 10eba4d44aSLiu Zhe * 11eba4d44aSLiu Zhe * http://www.apache.org/licenses/LICENSE-2.0 12eba4d44aSLiu Zhe * 13eba4d44aSLiu Zhe * Unless required by applicable law or agreed to in writing, 14eba4d44aSLiu Zhe * software distributed under the License is distributed on an 15eba4d44aSLiu Zhe * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16eba4d44aSLiu Zhe * KIND, either express or implied. See the License for the 17eba4d44aSLiu Zhe * specific language governing permissions and limitations 18eba4d44aSLiu Zhe * under the License. 19eba4d44aSLiu Zhe * 20eba4d44aSLiu Zhe *************************************************************/ 21eba4d44aSLiu Zhe package fvt.uno.sw.field; 22eba4d44aSLiu Zhe 23eba4d44aSLiu Zhe import static org.junit.Assert.assertEquals; 24eba4d44aSLiu Zhe import static org.junit.Assert.assertTrue; 25eba4d44aSLiu Zhe 26eba4d44aSLiu Zhe import java.util.Calendar; 27eba4d44aSLiu Zhe 28eba4d44aSLiu Zhe import org.junit.After; 29eba4d44aSLiu Zhe import org.junit.AfterClass; 30eba4d44aSLiu Zhe import org.junit.Before; 31eba4d44aSLiu Zhe import org.junit.BeforeClass; 32eba4d44aSLiu Zhe import org.junit.Test; 33eba4d44aSLiu Zhe import org.openoffice.test.common.FileUtil; 34eba4d44aSLiu Zhe import org.openoffice.test.common.Testspace; 35eba4d44aSLiu Zhe import org.openoffice.test.uno.UnoApp; 36eba4d44aSLiu Zhe 37eba4d44aSLiu Zhe import com.sun.star.beans.PropertyValue; 38eba4d44aSLiu Zhe import com.sun.star.beans.XPropertySet; 39eba4d44aSLiu Zhe import com.sun.star.container.XEnumeration; 40eba4d44aSLiu Zhe import com.sun.star.container.XEnumerationAccess; 41eba4d44aSLiu Zhe import com.sun.star.frame.XStorable; 42eba4d44aSLiu Zhe import com.sun.star.lang.XMultiServiceFactory; 43eba4d44aSLiu Zhe import com.sun.star.text.XTextDocument; 44eba4d44aSLiu Zhe import com.sun.star.text.XTextField; 45eba4d44aSLiu Zhe import com.sun.star.text.XTextFieldsSupplier; 46eba4d44aSLiu Zhe import com.sun.star.uno.UnoRuntime; 47eba4d44aSLiu Zhe import com.sun.star.util.DateTime; 48eba4d44aSLiu Zhe /** 49eba4d44aSLiu Zhe * Test Date and Time Field can be created and Load 50eba4d44aSLiu Zhe * @author test 51eba4d44aSLiu Zhe * 52eba4d44aSLiu Zhe */ 53eba4d44aSLiu Zhe public class CheckDateTimeField { 54eba4d44aSLiu Zhe 55eba4d44aSLiu Zhe 56eba4d44aSLiu Zhe 57eba4d44aSLiu Zhe private String tempPath = "uno/sw/temp/" ; 58eba4d44aSLiu Zhe private String tempFileName = String.valueOf(System.currentTimeMillis()); 59eba4d44aSLiu Zhe private static final UnoApp app = new UnoApp(); 60eba4d44aSLiu Zhe 61eba4d44aSLiu Zhe private XTextDocument document = null; 62eba4d44aSLiu Zhe @Before setUpDocument()63eba4d44aSLiu Zhe public void setUpDocument() throws Exception { 64eba4d44aSLiu Zhe document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.newDocument("swriter")); 65eba4d44aSLiu Zhe } 66eba4d44aSLiu Zhe 67eba4d44aSLiu Zhe @After tearDownDocument()68eba4d44aSLiu Zhe public void tearDownDocument() { 69eba4d44aSLiu Zhe app.closeDocument(document); 70eba4d44aSLiu Zhe FileUtil.deleteFile(Testspace.getFile(tempPath)); 71eba4d44aSLiu Zhe } 72eba4d44aSLiu Zhe 73eba4d44aSLiu Zhe 74eba4d44aSLiu Zhe 75eba4d44aSLiu Zhe @BeforeClass setUpConnection()76eba4d44aSLiu Zhe public static void setUpConnection() throws Exception { 77eba4d44aSLiu Zhe app.start(); 78eba4d44aSLiu Zhe } 79eba4d44aSLiu Zhe 80eba4d44aSLiu Zhe @AfterClass tearDownConnection()81eba4d44aSLiu Zhe public static void tearDownConnection() throws InterruptedException, Exception { 82eba4d44aSLiu Zhe app.close(); 83eba4d44aSLiu Zhe } 84eba4d44aSLiu Zhe 85eba4d44aSLiu Zhe 86eba4d44aSLiu Zhe 87eba4d44aSLiu Zhe /** 88eba4d44aSLiu Zhe * Test Time field can be created correctly. 89eba4d44aSLiu Zhe * 1.Create a Time in new document 90eba4d44aSLiu Zhe * 2.Verify the Time is created by check the date hour in the new document 91eba4d44aSLiu Zhe * 3.Save and close the new document to doc format 92eba4d44aSLiu Zhe * 4.Reload the new save doc file, check the time field 93eba4d44aSLiu Zhe * @throws Exception 94eba4d44aSLiu Zhe */ 95eba4d44aSLiu Zhe 96eba4d44aSLiu Zhe @Test testCreateTimeFieldSaveDoc()97eba4d44aSLiu Zhe public void testCreateTimeFieldSaveDoc() throws Exception { 98eba4d44aSLiu Zhe 99eba4d44aSLiu Zhe String url = Testspace.getUrl(tempPath + tempFileName + ".doc"); 100eba4d44aSLiu Zhe PropertyValue[] propsValue = new PropertyValue[1]; 101eba4d44aSLiu Zhe propsValue[0] = new PropertyValue(); 102eba4d44aSLiu Zhe propsValue[0].Name = "FilterName"; 103eba4d44aSLiu Zhe propsValue[0].Value = "MS Word 97"; 104eba4d44aSLiu Zhe 105eba4d44aSLiu Zhe createTimeFiled(document, url, propsValue); 106eba4d44aSLiu Zhe } 107eba4d44aSLiu Zhe /** 108eba4d44aSLiu Zhe * Test Time Field can be created correctly. 109eba4d44aSLiu Zhe * 1.Create a Time Field in new document 110eba4d44aSLiu Zhe * 2.Verify the Time Field is created by check the date hour in the new document 111eba4d44aSLiu Zhe * 3.Save and close the new document to doc format 112eba4d44aSLiu Zhe * 4.Reload the new save odt file, check the Time Field 113eba4d44aSLiu Zhe * @throws Exception 114eba4d44aSLiu Zhe */ 115eba4d44aSLiu Zhe @Test testCreateTimeFieldSaveODT()116eba4d44aSLiu Zhe public void testCreateTimeFieldSaveODT() throws Exception { 117eba4d44aSLiu Zhe 118eba4d44aSLiu Zhe String url = Testspace.getUrl(tempPath + tempFileName + ".odt"); 119eba4d44aSLiu Zhe PropertyValue[] propsValue = new PropertyValue[0]; 120eba4d44aSLiu Zhe createTimeFiled(document, url, propsValue); 121eba4d44aSLiu Zhe 122eba4d44aSLiu Zhe } 123eba4d44aSLiu Zhe createTimeFiled(XTextDocument document, String url, PropertyValue[] propsValue)124eba4d44aSLiu Zhe private void createTimeFiled(XTextDocument document, String url, PropertyValue[] propsValue) throws Exception { 125eba4d44aSLiu Zhe XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); 126eba4d44aSLiu Zhe XTextField dateFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.DateTime")); 127eba4d44aSLiu Zhe 128eba4d44aSLiu Zhe 129eba4d44aSLiu Zhe XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, dateFiled); 130eba4d44aSLiu Zhe props.setPropertyValue("IsDate", false); 131eba4d44aSLiu Zhe 132eba4d44aSLiu Zhe document.getText().insertTextContent(document.getText().getEnd(), dateFiled, false); 133eba4d44aSLiu Zhe DateTime dateField = (DateTime) props.getPropertyValue("DateTimeValue"); 134eba4d44aSLiu Zhe 135eba4d44aSLiu Zhe String dateString = document.getText().getString(); 136*dcaf07f7SJohn Bampton assertTrue("Verify time field is created, by verify it's hour", dateString.indexOf(String.valueOf(dateField.Hours).trim()) != -1); 137*dcaf07f7SJohn Bampton assertTrue("Verify time field is created, by verify it's minutes", dateString.indexOf(String.valueOf(dateField.Minutes).trim()) != -1); 138eba4d44aSLiu Zhe int expectHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); 139*dcaf07f7SJohn Bampton assertEquals("Verify time field is created, value is right, by compare Hour", expectHour, dateField.Hours); 140eba4d44aSLiu Zhe XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); 141eba4d44aSLiu Zhe store.storeAsURL(url, propsValue); 142eba4d44aSLiu Zhe app.closeDocument(document); 143eba4d44aSLiu Zhe document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url)); 144eba4d44aSLiu Zhe XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); 145eba4d44aSLiu Zhe XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields(); 146eba4d44aSLiu Zhe XEnumeration enumeration = xEnumeratedFields.createEnumeration(); 147eba4d44aSLiu Zhe while (enumeration.hasMoreElements()) { 148eba4d44aSLiu Zhe Object field = enumeration.nextElement(); 149eba4d44aSLiu Zhe XPropertySet props2 = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field); 150eba4d44aSLiu Zhe DateTime dateField2 = (DateTime) props2.getPropertyValue("DateTimeValue"); 151*dcaf07f7SJohn Bampton assertEquals("Verify time field is created correct by save and reload.", expectHour, dateField2.Hours); 152eba4d44aSLiu Zhe } 153eba4d44aSLiu Zhe 154eba4d44aSLiu Zhe 155eba4d44aSLiu Zhe } 156eba4d44aSLiu Zhe /** 157eba4d44aSLiu Zhe * Test Date Field can be created correctly. 158eba4d44aSLiu Zhe * 1.Create a Date in new document 159eba4d44aSLiu Zhe * 2.Verify the Date is created by check the date hour in the new document 160eba4d44aSLiu Zhe * 3.Save and close the new document to doc format 161eba4d44aSLiu Zhe * 4.Reload the new save doc file, check the Date field 162eba4d44aSLiu Zhe * @throws Exception 163eba4d44aSLiu Zhe */ 164eba4d44aSLiu Zhe 165eba4d44aSLiu Zhe @Test testCreateDateFieldSaveDoc()166eba4d44aSLiu Zhe public void testCreateDateFieldSaveDoc() throws Exception { 167eba4d44aSLiu Zhe 168eba4d44aSLiu Zhe String url = Testspace.getUrl(tempPath + tempFileName + ".doc"); 169eba4d44aSLiu Zhe PropertyValue[] propsValue = new PropertyValue[1]; 170eba4d44aSLiu Zhe propsValue[0] = new PropertyValue(); 171eba4d44aSLiu Zhe propsValue[0].Name = "FilterName"; 172eba4d44aSLiu Zhe propsValue[0].Value = "MS Word 97"; 173eba4d44aSLiu Zhe 174eba4d44aSLiu Zhe createDateFiled(document, url, propsValue); 175eba4d44aSLiu Zhe } 176eba4d44aSLiu Zhe /** 177eba4d44aSLiu Zhe * Test Date Field can be created correctly. 178eba4d44aSLiu Zhe * 1.Create a Date field in new document 179eba4d44aSLiu Zhe * 2.Verify the dateField is created by check the date hour in the new document 180eba4d44aSLiu Zhe * 3.Save and close the new document to doc format 181eba4d44aSLiu Zhe * 4.Reload the new save odt file, check the date field 182eba4d44aSLiu Zhe * @throws Exception 183eba4d44aSLiu Zhe */ 184eba4d44aSLiu Zhe @Test testCreateDateFieldSaveODT()185eba4d44aSLiu Zhe public void testCreateDateFieldSaveODT() throws Exception { 186eba4d44aSLiu Zhe 187eba4d44aSLiu Zhe String url = Testspace.getUrl(tempPath + tempFileName + ".odt"); 188eba4d44aSLiu Zhe PropertyValue[] propsValue = new PropertyValue[0]; 189eba4d44aSLiu Zhe createDateFiled(document, url, propsValue); 190eba4d44aSLiu Zhe 191eba4d44aSLiu Zhe } createDateFiled(XTextDocument document, String url, PropertyValue[] propsValue)192eba4d44aSLiu Zhe private void createDateFiled(XTextDocument document, String url, PropertyValue[] propsValue) throws Exception { 193eba4d44aSLiu Zhe XMultiServiceFactory sevriceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, document); 194eba4d44aSLiu Zhe XTextField dateFiled = (XTextField)UnoRuntime.queryInterface(XTextField.class, sevriceFactory.createInstance("com.sun.star.text.textfield.DateTime")); 195eba4d44aSLiu Zhe 196eba4d44aSLiu Zhe 197eba4d44aSLiu Zhe XPropertySet props = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, dateFiled); 198eba4d44aSLiu Zhe props.setPropertyValue("IsDate", true); 199eba4d44aSLiu Zhe 200eba4d44aSLiu Zhe document.getText().insertTextContent(document.getText().getEnd(), dateFiled, false); 201eba4d44aSLiu Zhe DateTime dateField = (DateTime) props.getPropertyValue("DateTimeValue"); 202eba4d44aSLiu Zhe 203eba4d44aSLiu Zhe String dateString = document.getText().getString(); 204*dcaf07f7SJohn Bampton assertTrue("Verify date field is created, by verify it's Month", dateString.indexOf(String.valueOf(dateField.Month).trim()) != -1); 205*dcaf07f7SJohn Bampton assertTrue("Verify date field is created, by verify it's Day", dateString.indexOf(String.valueOf(dateField.Day).trim()) != -1); 206eba4d44aSLiu Zhe int expectDay = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); 207*dcaf07f7SJohn Bampton assertEquals("Verify date field is created, value is right, by compare Day", expectDay, dateField.Day); 208eba4d44aSLiu Zhe XStorable store = (XStorable) UnoRuntime.queryInterface(XStorable.class, document); 209eba4d44aSLiu Zhe store.storeAsURL(url, propsValue); 210eba4d44aSLiu Zhe app.closeDocument(document); 211eba4d44aSLiu Zhe document = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, app.loadDocumentFromURL(url)); 212eba4d44aSLiu Zhe XTextFieldsSupplier fieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(XTextFieldsSupplier.class, document); 213eba4d44aSLiu Zhe XEnumerationAccess xEnumeratedFields = fieldsSupplier.getTextFields(); 214eba4d44aSLiu Zhe XEnumeration enumeration = xEnumeratedFields.createEnumeration(); 215eba4d44aSLiu Zhe while (enumeration.hasMoreElements()) { 216eba4d44aSLiu Zhe Object field = enumeration.nextElement(); 217eba4d44aSLiu Zhe XPropertySet props2 = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, field); 218eba4d44aSLiu Zhe DateTime dateField2 = (DateTime) props2.getPropertyValue("DateTimeValue"); 219*dcaf07f7SJohn Bampton assertEquals("Verify date field is created correct by save and reload.", expectDay, dateField2.Day); 220eba4d44aSLiu Zhe } 221eba4d44aSLiu Zhe 222eba4d44aSLiu Zhe } 223eba4d44aSLiu Zhe 224eba4d44aSLiu Zhe 225eba4d44aSLiu Zhe 226eba4d44aSLiu Zhe 227eba4d44aSLiu Zhe } 228