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