1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski /**
22*b1cdbd2cSJim Jagielski  *
23*b1cdbd2cSJim Jagielski  */
24*b1cdbd2cSJim Jagielski package fvt.uno.sd.file;
25*b1cdbd2cSJim Jagielski import static org.junit.Assert.*;
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski import org.junit.After;
28*b1cdbd2cSJim Jagielski import org.junit.AfterClass;
29*b1cdbd2cSJim Jagielski import org.junit.Before;
30*b1cdbd2cSJim Jagielski import org.junit.BeforeClass;
31*b1cdbd2cSJim Jagielski import org.junit.Test;
32*b1cdbd2cSJim Jagielski import org.openoffice.test.uno.UnoApp;
33*b1cdbd2cSJim Jagielski import org.openoffice.test.common.FileUtil;
34*b1cdbd2cSJim Jagielski import org.openoffice.test.common.Testspace;
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski import com.sun.star.beans.IllegalTypeException;
37*b1cdbd2cSJim Jagielski import com.sun.star.beans.Property;
38*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyAttribute;
39*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyExistException;
40*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue;
41*b1cdbd2cSJim Jagielski import com.sun.star.beans.UnknownPropertyException;
42*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertyContainer;
43*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet;
44*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySetInfo;
45*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess;
46*b1cdbd2cSJim Jagielski import com.sun.star.document.XDocumentProperties;
47*b1cdbd2cSJim Jagielski import com.sun.star.document.XDocumentPropertiesSupplier;
48*b1cdbd2cSJim Jagielski import java.util.Calendar;
49*b1cdbd2cSJim Jagielski import com.sun.star.util.DateTime;
50*b1cdbd2cSJim Jagielski import com.sun.star.util.Date;
51*b1cdbd2cSJim Jagielski import com.sun.star.util.Duration;
52*b1cdbd2cSJim Jagielski import com.sun.star.lang.IllegalArgumentException;
53*b1cdbd2cSJim Jagielski import com.sun.star.lang.WrappedTargetException;
54*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent;
55*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
56*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski /**
59*b1cdbd2cSJim Jagielski  * @author LouQL
60*b1cdbd2cSJim Jagielski  *
61*b1cdbd2cSJim Jagielski  */
62*b1cdbd2cSJim Jagielski public class CheckFileProperties {
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 	private static final UnoApp app = new UnoApp();
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 	private XComponent m_xSDComponent = null;
67*b1cdbd2cSJim Jagielski 	private static String m_filePath = null;
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski 	@Before
setUpDocument()70*b1cdbd2cSJim Jagielski 	public void setUpDocument() throws Exception {
71*b1cdbd2cSJim Jagielski 		if (FileUtil.fileExists(m_filePath)) {//load
72*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
73*b1cdbd2cSJim Jagielski 		} else {//new
74*b1cdbd2cSJim Jagielski 			m_xSDComponent = (XComponent) UnoRuntime.queryInterface(
75*b1cdbd2cSJim Jagielski 					XComponent.class, app.newDocument("simpress"));
76*b1cdbd2cSJim Jagielski 		}
77*b1cdbd2cSJim Jagielski 	}
78*b1cdbd2cSJim Jagielski 
getUserName()79*b1cdbd2cSJim Jagielski 	private String getUserName() throws com.sun.star.uno.Exception
80*b1cdbd2cSJim Jagielski 	{
81*b1cdbd2cSJim Jagielski 		Object configurationProvider = app.getServiceFactory().
82*b1cdbd2cSJim Jagielski 				createInstance("com.sun.star.configuration.ConfigurationProvider");
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 		XMultiServiceFactory msFac = (XMultiServiceFactory)UnoRuntime.queryInterface(
85*b1cdbd2cSJim Jagielski 				XMultiServiceFactory.class, configurationProvider);
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 		PropertyValue[] propValue = new PropertyValue[1];
88*b1cdbd2cSJim Jagielski 		propValue[0] = new PropertyValue();
89*b1cdbd2cSJim Jagielski 		propValue[0].Name = "nodepath";
90*b1cdbd2cSJim Jagielski 		propValue[0].Value = "/org.openoffice.UserProfile/Data";
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 		Object configurationAccess = msFac.createInstanceWithArguments(
93*b1cdbd2cSJim Jagielski 				"com.sun.star.configuration.ConfigurationAccess", propValue);
94*b1cdbd2cSJim Jagielski 		XNameAccess nameAcc = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, configurationAccess);
95*b1cdbd2cSJim Jagielski 		String givenname = (String)nameAcc.getByName("givenname");
96*b1cdbd2cSJim Jagielski 		String sn = (String)nameAcc.getByName("sn");
97*b1cdbd2cSJim Jagielski 		String name = null;
98*b1cdbd2cSJim Jagielski 		if(givenname.length() == 0) name = sn;
99*b1cdbd2cSJim Jagielski 		else	name = givenname+" "+sn;
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 		return name;
102*b1cdbd2cSJim Jagielski 	}
103*b1cdbd2cSJim Jagielski 
getDocumentProperties()104*b1cdbd2cSJim Jagielski 	private XDocumentProperties getDocumentProperties(){
105*b1cdbd2cSJim Jagielski 		XDocumentPropertiesSupplier xDocumentProSupplier = (XDocumentPropertiesSupplier)UnoRuntime.queryInterface(
106*b1cdbd2cSJim Jagielski 				XDocumentPropertiesSupplier.class, this.m_xSDComponent);
107*b1cdbd2cSJim Jagielski 		return xDocumentProSupplier.getDocumentProperties();
108*b1cdbd2cSJim Jagielski 	}
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 	@After
tearDownDocument()111*b1cdbd2cSJim Jagielski 	public void tearDownDocument() {
112*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
113*b1cdbd2cSJim Jagielski 		m_filePath = Testspace.getPath("temp/CheckFileProperties.odp");
114*b1cdbd2cSJim Jagielski 		FileUtil.deleteFile(m_filePath);
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 	}
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski 	@BeforeClass
setUpConnection()119*b1cdbd2cSJim Jagielski 	public static void setUpConnection() throws Exception {
120*b1cdbd2cSJim Jagielski 		app.start();
121*b1cdbd2cSJim Jagielski 		m_filePath = Testspace.getPath("temp/CheckFileProperties.odp");
122*b1cdbd2cSJim Jagielski 		FileUtil.deleteFile(m_filePath);
123*b1cdbd2cSJim Jagielski 	}
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 	@AfterClass
tearDownConnection()126*b1cdbd2cSJim Jagielski 	public static void tearDownConnection() throws InterruptedException,
127*b1cdbd2cSJim Jagielski 			Exception {
128*b1cdbd2cSJim Jagielski 		app.close();
129*b1cdbd2cSJim Jagielski 	}
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	/*
132*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Created*/
133*b1cdbd2cSJim Jagielski 	@Test
testGeneralAuthor()134*b1cdbd2cSJim Jagielski 	public void testGeneralAuthor() throws Exception {
135*b1cdbd2cSJim Jagielski 		String author = getUserName();
136*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
137*b1cdbd2cSJim Jagielski 		xDocPro.setAuthor(author);
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
140*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
141*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
142*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
143*b1cdbd2cSJim Jagielski 		assertEquals("Author should be "+ author, author, xDocPro2.getAuthor());
144*b1cdbd2cSJim Jagielski 	}
145*b1cdbd2cSJim Jagielski 
DateTimeEquals(DateTime datetime1, DateTime datetime2)146*b1cdbd2cSJim Jagielski 	private boolean DateTimeEquals(DateTime datetime1, DateTime datetime2){
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 		if(datetime1.Seconds == datetime2.Seconds &&
149*b1cdbd2cSJim Jagielski 				datetime1.Minutes == datetime2.Minutes &&
150*b1cdbd2cSJim Jagielski 				datetime1.Hours == datetime2.Hours &&
151*b1cdbd2cSJim Jagielski 				datetime1.Day == datetime2.Day &&
152*b1cdbd2cSJim Jagielski 				datetime1.Month == datetime2.Month &&
153*b1cdbd2cSJim Jagielski 				datetime1.Year == datetime2.Year)
154*b1cdbd2cSJim Jagielski 			return true;
155*b1cdbd2cSJim Jagielski 		else
156*b1cdbd2cSJim Jagielski 			return false;
157*b1cdbd2cSJim Jagielski 	}
158*b1cdbd2cSJim Jagielski 
DateEquals(Date date1, Date date2)159*b1cdbd2cSJim Jagielski 	private boolean DateEquals(Date date1, Date date2){
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 		if(date1.Day == date2.Day &&
162*b1cdbd2cSJim Jagielski 		   date1.Month == date2.Month &&
163*b1cdbd2cSJim Jagielski 			date1.Year == date2.Year)
164*b1cdbd2cSJim Jagielski 			return true;
165*b1cdbd2cSJim Jagielski 		else
166*b1cdbd2cSJim Jagielski 			return false;
167*b1cdbd2cSJim Jagielski 	}
168*b1cdbd2cSJim Jagielski 
DurationEquals(Duration d1, Duration d2)169*b1cdbd2cSJim Jagielski 	private boolean DurationEquals(Duration d1, Duration d2){
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 		if(d1.Seconds == d2.Seconds &&
172*b1cdbd2cSJim Jagielski 				d1.Minutes == d2.Minutes &&
173*b1cdbd2cSJim Jagielski 				d1.Hours == d2.Hours &&
174*b1cdbd2cSJim Jagielski 				d1.Days == d2.Days &&
175*b1cdbd2cSJim Jagielski 				d1.Months == d2.Months &&
176*b1cdbd2cSJim Jagielski 				d1.Years == d2.Years)
177*b1cdbd2cSJim Jagielski 			return true;
178*b1cdbd2cSJim Jagielski 		else
179*b1cdbd2cSJim Jagielski 			return false;
180*b1cdbd2cSJim Jagielski 	}
181*b1cdbd2cSJim Jagielski 
getCurrentDateTime()182*b1cdbd2cSJim Jagielski 	private DateTime getCurrentDateTime(){
183*b1cdbd2cSJim Jagielski 		Calendar ca = Calendar.getInstance();
184*b1cdbd2cSJim Jagielski 		DateTime currentDateTime = new DateTime();
185*b1cdbd2cSJim Jagielski 		currentDateTime.Year = (short)ca.get(Calendar.YEAR);
186*b1cdbd2cSJim Jagielski 		currentDateTime.Month = (short)ca.get(Calendar.MONTH);
187*b1cdbd2cSJim Jagielski 		currentDateTime.Day = (short)ca.get(Calendar.DATE);
188*b1cdbd2cSJim Jagielski 		currentDateTime.Minutes = (short)ca.get(Calendar.MINUTE);
189*b1cdbd2cSJim Jagielski 		currentDateTime.Hours = (short)ca.get(Calendar.HOUR);
190*b1cdbd2cSJim Jagielski 		currentDateTime.Seconds = (short)ca.get(Calendar.SECOND);
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 		return currentDateTime;
193*b1cdbd2cSJim Jagielski 	}
194*b1cdbd2cSJim Jagielski 
getCurrentDate()195*b1cdbd2cSJim Jagielski 	private Date getCurrentDate(){
196*b1cdbd2cSJim Jagielski 		Calendar ca = Calendar.getInstance();
197*b1cdbd2cSJim Jagielski 		Date currentDate = new Date();
198*b1cdbd2cSJim Jagielski 		currentDate.Year = (short)ca.get(Calendar.YEAR);
199*b1cdbd2cSJim Jagielski 		currentDate.Month = (short)ca.get(Calendar.MONTH);
200*b1cdbd2cSJim Jagielski 		currentDate.Day = (short)ca.get(Calendar.DATE);
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 		return currentDate;
203*b1cdbd2cSJim Jagielski 	}
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 	/*
206*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Created*/
207*b1cdbd2cSJim Jagielski 	@Test
testGeneralCreationDate()208*b1cdbd2cSJim Jagielski 	public void testGeneralCreationDate() throws Exception {
209*b1cdbd2cSJim Jagielski 		DateTime creationDate = getCurrentDateTime();
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 		xDocPro.setCreationDate(creationDate);
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
216*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
217*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
218*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
219*b1cdbd2cSJim Jagielski 		DateTime result = xDocPro2.getCreationDate();
220*b1cdbd2cSJim Jagielski 		assertTrue("CreationDate should be the same as set", this.DateTimeEquals(creationDate, result));
221*b1cdbd2cSJim Jagielski 	}
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	/*
224*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Modified*/
225*b1cdbd2cSJim Jagielski 	@Test
226*b1cdbd2cSJim Jagielski 	//ModifiedBy will be set each time the file loaded. The value is the one set in Tools->options->User data->Last name
testGeneralModifiedBy()227*b1cdbd2cSJim Jagielski 	public void testGeneralModifiedBy() throws Exception {
228*b1cdbd2cSJim Jagielski 		String modifiedBy = this.getUserName();
229*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
230*b1cdbd2cSJim Jagielski 		xDocPro.setModifiedBy(modifiedBy);
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
234*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
235*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
236*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
237*b1cdbd2cSJim Jagielski 		assertEquals("The file is modified by "+ modifiedBy, modifiedBy, xDocPro2.getModifiedBy());
238*b1cdbd2cSJim Jagielski 	}
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	/*
241*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Modified*/
242*b1cdbd2cSJim Jagielski 	@Test
testGeneralModificationDate()243*b1cdbd2cSJim Jagielski 	public void testGeneralModificationDate() throws Exception {
244*b1cdbd2cSJim Jagielski 		//modification date will be set each time the file saved, so I don't save after set.
245*b1cdbd2cSJim Jagielski 		DateTime modificationDate = getCurrentDateTime();
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 		xDocPro.setModificationDate(modificationDate);
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 		DateTime result = xDocPro.getModificationDate();
252*b1cdbd2cSJim Jagielski 		assertTrue("ModificationDate should be the same as set", this.DateTimeEquals(modificationDate, result));
253*b1cdbd2cSJim Jagielski 	}
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	/*
256*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Last printed*/
257*b1cdbd2cSJim Jagielski 	@Test
testGeneralPrintBy()258*b1cdbd2cSJim Jagielski 	public void testGeneralPrintBy() throws Exception {
259*b1cdbd2cSJim Jagielski 		String printBy = "PrintBy";
260*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski 		xDocPro.setPrintedBy(printBy);
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
265*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
266*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
267*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
268*b1cdbd2cSJim Jagielski 		assertEquals("This document is printed by "+ printBy, printBy, xDocPro2.getPrintedBy());
269*b1cdbd2cSJim Jagielski 	}
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski 	/*
272*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Last printed*/
273*b1cdbd2cSJim Jagielski 	@Test
testGeneralPrintDate()274*b1cdbd2cSJim Jagielski 	public void testGeneralPrintDate() throws Exception {
275*b1cdbd2cSJim Jagielski 		DateTime printDate = getCurrentDateTime();
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski 		xDocPro.setPrintDate(printDate);
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
282*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
283*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
284*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
285*b1cdbd2cSJim Jagielski 		DateTime result = xDocPro2.getPrintDate();
286*b1cdbd2cSJim Jagielski 		assertTrue("PrintDate should be the same as set", this.DateTimeEquals(printDate, result));
287*b1cdbd2cSJim Jagielski 	}
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 	/*
290*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Total editing time*/
291*b1cdbd2cSJim Jagielski 	@Test
testGeneralEditingDuration()292*b1cdbd2cSJim Jagielski 	public void testGeneralEditingDuration() throws Exception {
293*b1cdbd2cSJim Jagielski 		int editingDuration = 60;
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 		xDocPro.setEditingDuration(editingDuration);
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
300*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
301*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
302*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
303*b1cdbd2cSJim Jagielski 		assertEquals("Totally editing time should be "+ editingDuration, editingDuration, xDocPro2.getEditingDuration());
304*b1cdbd2cSJim Jagielski 	}
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 	/*
307*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Revision number*/
308*b1cdbd2cSJim Jagielski 	@Test
testGeneralRevisionNumber()309*b1cdbd2cSJim Jagielski 	public void testGeneralRevisionNumber() throws Exception {
310*b1cdbd2cSJim Jagielski 		short revisionNumber = 10;
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 		xDocPro.setEditingCycles(revisionNumber);
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
317*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
318*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
319*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
320*b1cdbd2cSJim Jagielski 		assertEquals("Revision number should be "+ revisionNumber+1, revisionNumber+1, xDocPro2.getEditingCycles());
321*b1cdbd2cSJim Jagielski 	}
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 	/*
324*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->template*/
325*b1cdbd2cSJim Jagielski 	@Test
testGeneralTemplateName()326*b1cdbd2cSJim Jagielski 	public void testGeneralTemplateName() throws Exception {
327*b1cdbd2cSJim Jagielski 		String templateName = "I'm a template";
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski 		xDocPro.setTemplateName(templateName);
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
334*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
335*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
336*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
337*b1cdbd2cSJim Jagielski 		assertEquals("Template name should be "+ templateName, templateName, xDocPro2.getTemplateName());
338*b1cdbd2cSJim Jagielski 	}
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 	/*
341*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->General->Reset*/
342*b1cdbd2cSJim Jagielski 	@Test
testGeneralReset()343*b1cdbd2cSJim Jagielski 	public void testGeneralReset() throws Exception {
344*b1cdbd2cSJim Jagielski 		String author = "ResetAuthor";
345*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
346*b1cdbd2cSJim Jagielski 		xDocPro.resetUserData(author);
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 		assertEquals("Author should be "+ author, author, xDocPro.getAuthor());
349*b1cdbd2cSJim Jagielski 		assertEquals("Modified should be empty", "", xDocPro.getModifiedBy());
350*b1cdbd2cSJim Jagielski 		assertTrue("ModificationDate should be empty",
351*b1cdbd2cSJim Jagielski 				DateTimeEquals(new DateTime(), xDocPro.getModificationDate()));
352*b1cdbd2cSJim Jagielski 		assertEquals("PrintBy should be empty", "", xDocPro.getPrintedBy());
353*b1cdbd2cSJim Jagielski 		assertTrue("PrintDate should be empty",
354*b1cdbd2cSJim Jagielski 				DateTimeEquals(new DateTime(), xDocPro.getPrintDate()));
355*b1cdbd2cSJim Jagielski 		assertEquals("Totally editing time should be empty", 0, xDocPro.getEditingDuration());
356*b1cdbd2cSJim Jagielski 		assertEquals("Revision number should be empty", 1, xDocPro.getEditingCycles());
357*b1cdbd2cSJim Jagielski 	}
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski 	// UI entry: File->Properties->General->Apply user data
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 	// UI entry: File->Properties->General->digital signature
362*b1cdbd2cSJim Jagielski 
363*b1cdbd2cSJim Jagielski 	//Description begin
364*b1cdbd2cSJim Jagielski 	/*
365*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->Description->Title*/
366*b1cdbd2cSJim Jagielski 	@Test
testDescriptionTitle()367*b1cdbd2cSJim Jagielski 	public void testDescriptionTitle() throws Exception{
368*b1cdbd2cSJim Jagielski 		String title = "titleForTest";
369*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
370*b1cdbd2cSJim Jagielski 		xDocPro.setTitle(title);
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
373*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
374*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
375*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
376*b1cdbd2cSJim Jagielski 		assertEquals("Title should be "+ title, title, xDocPro2.getTitle());
377*b1cdbd2cSJim Jagielski 	}
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski 	/*
380*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->Description->Subject*/
381*b1cdbd2cSJim Jagielski 	@Test
testDescriptionSubject()382*b1cdbd2cSJim Jagielski 	public void testDescriptionSubject() throws Exception{
383*b1cdbd2cSJim Jagielski 		String subject = "subjectForTest";
384*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
385*b1cdbd2cSJim Jagielski 		xDocPro.setSubject(subject);
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
388*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
389*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
390*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
391*b1cdbd2cSJim Jagielski 		assertEquals("Subject should be "+ subject, subject, xDocPro2.getSubject());
392*b1cdbd2cSJim Jagielski 	}
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 	/*
395*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->Description->Keywords*/
396*b1cdbd2cSJim Jagielski 	@Test
testDescriptionKeywords()397*b1cdbd2cSJim Jagielski 	public void testDescriptionKeywords() throws Exception{
398*b1cdbd2cSJim Jagielski 		String[] keywords = {"keyword1", "keyword2"};
399*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
400*b1cdbd2cSJim Jagielski 		xDocPro.setKeywords(keywords);
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
403*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
406*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
407*b1cdbd2cSJim Jagielski 		String[] keywordsResult = xDocPro2.getKeywords();
408*b1cdbd2cSJim Jagielski 		assertEquals("There should be 2 Keywords", 2, keywordsResult.length);
409*b1cdbd2cSJim Jagielski 		for(int i=0;i<keywordsResult.length;i++)
410*b1cdbd2cSJim Jagielski 		{
411*b1cdbd2cSJim Jagielski 			String num = Integer.toString(i+1);
412*b1cdbd2cSJim Jagielski 			assertEquals("The keywords should be keyword"+num, "keyword"+num, keywordsResult[i]);
413*b1cdbd2cSJim Jagielski 		}
414*b1cdbd2cSJim Jagielski 	}
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 	/*
417*b1cdbd2cSJim Jagielski 	 * UI entry: File->Properties->Description->Comments*/
418*b1cdbd2cSJim Jagielski 	@Test
testDescriptionComments()419*b1cdbd2cSJim Jagielski 	public void testDescriptionComments() throws Exception{
420*b1cdbd2cSJim Jagielski 		String comments = "This is the comment.";
421*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro = getDocumentProperties();
422*b1cdbd2cSJim Jagielski 		xDocPro.setDescription(comments);
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski 		app.saveDocument(m_xSDComponent, m_filePath);
425*b1cdbd2cSJim Jagielski 		app.closeDocument(m_xSDComponent);
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 		m_xSDComponent = app.loadDocument(m_filePath);
428*b1cdbd2cSJim Jagielski 		XDocumentProperties xDocPro2 = getDocumentProperties();
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski 		assertEquals("Comments should be "+comments, comments, xDocPro2.getDescription());
431*b1cdbd2cSJim Jagielski 	}
432*b1cdbd2cSJim Jagielski 	//Description end
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 	//custom properties begin
435*b1cdbd2cSJim Jagielski 	//UI entry: File->Properties->Custom properties
addCustomPro(String propertyName, Object value)436*b1cdbd2cSJim Jagielski 		private void addCustomPro(String propertyName, Object value) throws PropertyExistException, IllegalTypeException, IllegalArgumentException{
437*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro = getDocumentProperties();
438*b1cdbd2cSJim Jagielski 			XPropertyContainer proContainer = xDocPro.getUserDefinedProperties();
439*b1cdbd2cSJim Jagielski 			proContainer.addProperty(propertyName, PropertyAttribute.REMOVEABLE, value);
440*b1cdbd2cSJim Jagielski 		}
441*b1cdbd2cSJim Jagielski 
getCustomPro(String propertyName)442*b1cdbd2cSJim Jagielski 		private Object getCustomPro(String propertyName) throws UnknownPropertyException, WrappedTargetException{
443*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro = getDocumentProperties();
444*b1cdbd2cSJim Jagielski 			XPropertyContainer proContainer = xDocPro.getUserDefinedProperties();
445*b1cdbd2cSJim Jagielski 			XPropertySet xProSet = (XPropertySet)UnoRuntime.queryInterface(
446*b1cdbd2cSJim Jagielski 					XPropertySet.class, proContainer);
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 			return xProSet.getPropertyValue(propertyName);
449*b1cdbd2cSJim Jagielski 		}
450*b1cdbd2cSJim Jagielski 
451*b1cdbd2cSJim Jagielski 		@Test
testCustomAddPro_Text()452*b1cdbd2cSJim Jagielski 		public void testCustomAddPro_Text() throws Exception{
453*b1cdbd2cSJim Jagielski 			String addedProName = "TextPro";
454*b1cdbd2cSJim Jagielski 			String addedProDefaultValue = "testUser";
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 			addCustomPro(addedProName, addedProDefaultValue);
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
459*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski 			String result = (String)getCustomPro(addedProName);
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 			assertTrue("added Text property \""+addedProName+"\" should exist", result != null);
466*b1cdbd2cSJim Jagielski 			assertEquals("value of added property should be "+addedProDefaultValue,
467*b1cdbd2cSJim Jagielski 					addedProDefaultValue, result);
468*b1cdbd2cSJim Jagielski 		}
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski 		@Test
testCustomAddPro_DateTime()471*b1cdbd2cSJim Jagielski 		public void testCustomAddPro_DateTime() throws Exception{
472*b1cdbd2cSJim Jagielski 			String addedProName = "DateTimePro";
473*b1cdbd2cSJim Jagielski 			DateTime addedProDefaultValue = getCurrentDateTime();
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski 			addCustomPro(addedProName, addedProDefaultValue);
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
478*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski 			DateTime result = (DateTime)getCustomPro(addedProName);
483*b1cdbd2cSJim Jagielski 			assertTrue("added DateTime property \""+addedProName+"\" should exist", result != null);
484*b1cdbd2cSJim Jagielski 			assertTrue("value of added property should be the same as set",
485*b1cdbd2cSJim Jagielski 					this.DateTimeEquals(result, addedProDefaultValue));
486*b1cdbd2cSJim Jagielski 		}
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski 		@Test
testCustomAddPro_Date()489*b1cdbd2cSJim Jagielski 		public void testCustomAddPro_Date() throws Exception{
490*b1cdbd2cSJim Jagielski 			String addedProName = "DatePro";
491*b1cdbd2cSJim Jagielski 			Date addedProDefaultValue = getCurrentDate();
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski 			addCustomPro(addedProName, addedProDefaultValue);
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
496*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski 			Date result = (Date)getCustomPro(addedProName);
501*b1cdbd2cSJim Jagielski 			assertTrue("added Date property \""+addedProName+"\" should exist", result != null);
502*b1cdbd2cSJim Jagielski 			assertTrue("value of added property should be the same as set",
503*b1cdbd2cSJim Jagielski 					this.DateEquals(result, addedProDefaultValue));
504*b1cdbd2cSJim Jagielski 		}
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 		@Test
testCustomAddPro_Duration()507*b1cdbd2cSJim Jagielski 		public void testCustomAddPro_Duration() throws Exception{
508*b1cdbd2cSJim Jagielski 			String addedProName = "DurationPro";
509*b1cdbd2cSJim Jagielski 			Duration addedProDefaultValue = new Duration();
510*b1cdbd2cSJim Jagielski 			addedProDefaultValue.Days = 1;
511*b1cdbd2cSJim Jagielski 
512*b1cdbd2cSJim Jagielski 			addCustomPro(addedProName, addedProDefaultValue);
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
515*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 			Duration result = (Duration)getCustomPro(addedProName);
520*b1cdbd2cSJim Jagielski 			assertTrue("added Date property \""+addedProName+"\" should exist", result != null);
521*b1cdbd2cSJim Jagielski 			assertTrue("value of added property should the same as set", DurationEquals(addedProDefaultValue, result));
522*b1cdbd2cSJim Jagielski 		}
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski 		@Test
testCustomAddPro_Number()525*b1cdbd2cSJim Jagielski 		public void testCustomAddPro_Number() throws Exception{
526*b1cdbd2cSJim Jagielski 			String addedProName = "NumberPro";
527*b1cdbd2cSJim Jagielski 			Double addedProDefaultValue = (double)10;
528*b1cdbd2cSJim Jagielski 
529*b1cdbd2cSJim Jagielski 			addCustomPro(addedProName, addedProDefaultValue);
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
532*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski 			Object oResult = getCustomPro(addedProName);
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski 			Double result = (Double)oResult;
539*b1cdbd2cSJim Jagielski 			assertTrue("added Number property \""+addedProName+"\" should exist", oResult != null);
540*b1cdbd2cSJim Jagielski 			assertEquals("value of added property should be "+Double.toString(addedProDefaultValue),
541*b1cdbd2cSJim Jagielski 					addedProDefaultValue, result);
542*b1cdbd2cSJim Jagielski 		}
543*b1cdbd2cSJim Jagielski 
544*b1cdbd2cSJim Jagielski 		@Test
testCustomAddPro_Boolean()545*b1cdbd2cSJim Jagielski 		public void testCustomAddPro_Boolean() throws Exception{
546*b1cdbd2cSJim Jagielski 			String addedProName = "BooleanPro";
547*b1cdbd2cSJim Jagielski 			Boolean addedProDefaultValue = true;
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski 			addCustomPro(addedProName, addedProDefaultValue);
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
552*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
553*b1cdbd2cSJim Jagielski 
554*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski 			Object oResult = getCustomPro(addedProName);
557*b1cdbd2cSJim Jagielski 
558*b1cdbd2cSJim Jagielski 			boolean result = (Boolean)oResult;
559*b1cdbd2cSJim Jagielski 			assertTrue("added Number property \""+addedProName+"\" should exist", oResult != null);
560*b1cdbd2cSJim Jagielski 			assertEquals("value of added property should be "+Boolean.toString(addedProDefaultValue),
561*b1cdbd2cSJim Jagielski 					addedProDefaultValue, result);
562*b1cdbd2cSJim Jagielski 		}
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski 		@Test
testCustomRemovePro()565*b1cdbd2cSJim Jagielski 		public void testCustomRemovePro() throws Exception{
566*b1cdbd2cSJim Jagielski 			addCustomPro("testPro", "value");
567*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro = getDocumentProperties();
568*b1cdbd2cSJim Jagielski 			XPropertyContainer proContainer = xDocPro.getUserDefinedProperties();
569*b1cdbd2cSJim Jagielski 			XPropertySet xProSet = (XPropertySet)UnoRuntime.queryInterface(
570*b1cdbd2cSJim Jagielski 					XPropertySet.class, proContainer);
571*b1cdbd2cSJim Jagielski 			XPropertySetInfo xproSetInfo = xProSet.getPropertySetInfo();
572*b1cdbd2cSJim Jagielski 			Property[] pros = xproSetInfo.getProperties();
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 			for(int i=0; i< pros.length;i++)
575*b1cdbd2cSJim Jagielski 			{
576*b1cdbd2cSJim Jagielski 				proContainer.removeProperty(pros[i].Name);
577*b1cdbd2cSJim Jagielski 			}
578*b1cdbd2cSJim Jagielski 
579*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
580*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro2 = getDocumentProperties();
585*b1cdbd2cSJim Jagielski 			XPropertyContainer proContainer2 = xDocPro2.getUserDefinedProperties();
586*b1cdbd2cSJim Jagielski 			XPropertySet xProSet2 = (XPropertySet)UnoRuntime.queryInterface(
587*b1cdbd2cSJim Jagielski 					XPropertySet.class, proContainer2);
588*b1cdbd2cSJim Jagielski 			XPropertySetInfo xproSetInfo2 = xProSet2.getPropertySetInfo();
589*b1cdbd2cSJim Jagielski 			Property[] pros2 = xproSetInfo2.getProperties();
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski 			assertEquals("number of custom property should be zero ",
592*b1cdbd2cSJim Jagielski 					0, pros2.length);
593*b1cdbd2cSJim Jagielski 		}
594*b1cdbd2cSJim Jagielski 	//custom properties end
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski 		//Internet begin
setAutoLoad(String URL, int secs)597*b1cdbd2cSJim Jagielski 		private void setAutoLoad(String URL, int secs) throws IllegalArgumentException
598*b1cdbd2cSJim Jagielski 		{
599*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro = getDocumentProperties();
600*b1cdbd2cSJim Jagielski 			xDocPro.setAutoloadURL(URL);
601*b1cdbd2cSJim Jagielski 			xDocPro.setAutoloadSecs(secs);
602*b1cdbd2cSJim Jagielski 			xDocPro.setDefaultTarget("_blank");
603*b1cdbd2cSJim Jagielski 		}
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski 		@Test
testNoRefresh()606*b1cdbd2cSJim Jagielski 		public void testNoRefresh() throws Exception{
607*b1cdbd2cSJim Jagielski 			String autoLoadURL = "";
608*b1cdbd2cSJim Jagielski 			int autoLoadSecs = 0;
609*b1cdbd2cSJim Jagielski 			setAutoLoad(autoLoadURL, autoLoadSecs);
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
612*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
613*b1cdbd2cSJim Jagielski 
614*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
615*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro2 = getDocumentProperties();
616*b1cdbd2cSJim Jagielski 
617*b1cdbd2cSJim Jagielski 			assertEquals("AutoLoadURL should be empty", autoLoadURL, xDocPro2.getAutoloadURL());
618*b1cdbd2cSJim Jagielski 			assertEquals("AutoLoadSecs should be 0", autoLoadSecs, xDocPro2.getAutoloadSecs());
619*b1cdbd2cSJim Jagielski 		}
620*b1cdbd2cSJim Jagielski 
621*b1cdbd2cSJim Jagielski 		@Test
testRefreshEvery60Secs()622*b1cdbd2cSJim Jagielski 		public void testRefreshEvery60Secs() throws Exception{
623*b1cdbd2cSJim Jagielski 			String autoLoadURL = "";
624*b1cdbd2cSJim Jagielski 			int autoLoadSecs = 60;
625*b1cdbd2cSJim Jagielski 			setAutoLoad(autoLoadURL, autoLoadSecs);
626*b1cdbd2cSJim Jagielski 
627*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
628*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
631*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro2 = getDocumentProperties();
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski 			assertEquals("AutoLoadURL should be empty", autoLoadURL, xDocPro2.getAutoloadURL());
634*b1cdbd2cSJim Jagielski 			assertEquals("AutoLoadSecs should be "+Integer.toString(autoLoadSecs), autoLoadSecs, xDocPro2.getAutoloadSecs());
635*b1cdbd2cSJim Jagielski 		}
636*b1cdbd2cSJim Jagielski 
637*b1cdbd2cSJim Jagielski 		@Test
testRedirect()638*b1cdbd2cSJim Jagielski 		public void testRedirect() throws Exception{
639*b1cdbd2cSJim Jagielski 			String autoLoadURL = "http://www.openoffice.com/";
640*b1cdbd2cSJim Jagielski 			int autoLoadSecs = 5;
641*b1cdbd2cSJim Jagielski 			setAutoLoad(autoLoadURL, autoLoadSecs);
642*b1cdbd2cSJim Jagielski 
643*b1cdbd2cSJim Jagielski 			app.saveDocument(m_xSDComponent, m_filePath);
644*b1cdbd2cSJim Jagielski 			app.closeDocument(m_xSDComponent);
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski 			m_xSDComponent = app.loadDocument(m_filePath);
647*b1cdbd2cSJim Jagielski 			XDocumentProperties xDocPro2 = getDocumentProperties();
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski 			assertEquals("AutoLoadURL should be empty", autoLoadURL, xDocPro2.getAutoloadURL());
650*b1cdbd2cSJim Jagielski 			assertEquals("AutoLoadSecs should be "+Integer.toString(autoLoadSecs), autoLoadSecs, xDocPro2.getAutoloadSecs());
651*b1cdbd2cSJim Jagielski 		}
652*b1cdbd2cSJim Jagielski 		//Internet end
653*b1cdbd2cSJim Jagielski }
654