1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #include "HistoryOptTest.hxx"
29 #include <unotools/historyoptions_const.hxx>
30 
31 #include <com/sun/star/uno/Sequence.hxx>
32 #include <com/sun/star/beans/PropertyValue.hpp>
33 #include <com/sun/star/beans/XPropertySet.hpp>
34 #include <com/sun/star/container/XNameAccess.hpp>
35 #include <com/sun/star/container/XNameContainer.hpp>
36 
37 #include <comphelper/configurationhelper.hxx>
38 #include <comphelper/sequenceashashmap.hxx>
39 #include <unotools/processfactory.hxx>
40 
41 namespace css = ::com::sun::star;
42 
43 //=============================================================================
44 static const ::rtl::OUString MESSAGE_CLEAR_FAILED       = ::rtl::OUString::createFromAscii("Clearing the list failed.");
45 static const ::rtl::OUString MESSAGE_SETSIZE_FAILED     = ::rtl::OUString::createFromAscii("Setting a new size for a list failed.");
46 static const ::rtl::OUString MESSAGE_MISS_HISTORY       = ::rtl::OUString::createFromAscii("Could not get config access to history list inside config.");
47 static const ::rtl::OUString MESSAGE_MISS_ITEMLIST      = ::rtl::OUString::createFromAscii("Could not get config access to item list inside config.");
48 static const ::rtl::OUString MESSAGE_MISS_ORDERLIST     = ::rtl::OUString::createFromAscii("Could not get config access to order list inside config.");
49 static const ::rtl::OUString MESSAGE_MISS_ITEM          = ::rtl::OUString::createFromAscii("Could not locate item.");
50 static const ::rtl::OUString MESSAGE_UNEXPECTED_ITEM    = ::rtl::OUString::createFromAscii("Found an unexpected item.");
51 static const ::rtl::OUString MESSAGE_WRONG_ORDER        = ::rtl::OUString::createFromAscii("Wrong order in history list.");
52 
53 //=============================================================================
54 HistoryOptTest::HistoryOptTest()
55     : m_aConfigItem  (         )
56     , m_eList        (ePICKLIST)
57     , m_xHistoriesXCU(         )
58     , m_xCommonXCU   (         )
59 {
60 }
61 
62 //=============================================================================
63 HistoryOptTest::~HistoryOptTest()
64 {
65     m_xHistoriesXCU.clear();
66     m_xCommonXCU.clear();
67 }
68 
69 //=============================================================================
70 void HistoryOptTest::checkPicklist()
71 {
72     impl_testHistory(ePICKLIST, 4);
73 }
74 
75 //=============================================================================
76 void HistoryOptTest::checkURLHistory()
77 {
78     impl_testHistory(eHISTORY, 10);
79 }
80 
81 //=============================================================================
82 void HistoryOptTest::checkHelpBookmarks()
83 {
84     impl_testHistory(eHELPBOOKMARKS, 100);
85 }
86 
87 //=============================================================================
88 void HistoryOptTest::impl_testHistory(EHistoryType eHistory ,
89                                       ::sal_Int32  nMaxItems)
90 {
91 	try
92 	{
93 		m_eList       = eHistory;
94 		::sal_Int32 c = nMaxItems;
95 		::sal_Int32 i = 0;
96 
97 		impl_clearList( );
98 		impl_setSize  (c);
99 
100 		// a) fill list completely and check if all items could be realy created.
101 		//    But dont check its order here! Because every new item will change that order.
102 		for (i=0; i<c; ++i)
103 		{
104 			impl_appendItem(i);
105 			if ( ! impl_existsItem(i))
106 				throw css::uno::Exception(MESSAGE_MISS_ITEM, 0);
107 		}
108 
109 		// b) Check order of all items in list now.
110 		//    It must be reverse to the item number ...
111 		//      item max   = index 0
112 		//      item max-1 = index 1
113 		//      ...
114 		for (i=0; i<c; ++i)
115 		{
116 			::sal_Int32 nExpectedIndex = (c-1)-i;
117 			if ( ! impl_existsItemAtIndex(i, nExpectedIndex))
118 				throw css::uno::Exception(MESSAGE_WRONG_ORDER, 0);
119 		}
120 
121 		// c) increase prio of "first" item so it will switch
122 		//    to "second" and "second" will switch to "first" :-)
123 		//    Check also if all other items was not touched.
124 		::sal_Int32 nFirstItem  = (c-1);
125 		::sal_Int32 nSecondItem = (c-2);
126 		impl_appendItem(nSecondItem);
127 
128 		if (
129 			( ! impl_existsItemAtIndex(nSecondItem, 0)) ||
130 			( ! impl_existsItemAtIndex(nFirstItem , 1))
131 		   )
132 			throw css::uno::Exception(MESSAGE_WRONG_ORDER, 0);
133 
134 		for (i=0; i<nSecondItem; ++i)
135 		{
136 			::sal_Int32 nExpectedIndex = (c-1)-i;
137 			if ( ! impl_existsItemAtIndex(i, nExpectedIndex))
138 				throw css::uno::Exception(MESSAGE_WRONG_ORDER, 0);
139 		}
140 
141 		// d) Check if appending new items will destroy the oldest one.
142 		::sal_Int32 nNewestItem = c;
143 		::sal_Int32 nOldestItem = 0;
144 
145 		impl_appendItem(nNewestItem);
146 
147 		if ( ! impl_existsItemAtIndex(nNewestItem, 0))
148 			throw css::uno::Exception(MESSAGE_WRONG_ORDER, 0);
149 
150 		if (impl_existsItem(nOldestItem))
151 			throw css::uno::Exception(MESSAGE_UNEXPECTED_ITEM, 0);
152 
153 		// e) Check if decreasing list size will remove oldest items.
154 		//    Note: impl_setSize() will make sure that 3 items exists only.
155 		//    Otherwhise it throws an exception. If we further check
156 		//    positions of three items no further items must be checked.
157 		//    They cant exists :-)
158 		::sal_Int32 nNewSize = 3;
159 		impl_setSize(nNewSize);
160 		if (
161 			( ! impl_existsItemAtIndex(nNewestItem, 0)) ||
162 			( ! impl_existsItemAtIndex(nSecondItem, 1)) ||
163 			( ! impl_existsItemAtIndex(nFirstItem , 2))
164 		   )
165 			throw css::uno::Exception(MESSAGE_WRONG_ORDER, 0);
166 
167 		// finaly we should try to clean up all used structures so the same office can be used
168 		// without problems :-)
169 		impl_clearList();
170 	}
171 	catch (const css::uno::Exception& ex)
172 	{
173 		impl_clearList();
174 		throw ex;
175 	}
176 
177 }
178 
179 //=============================================================================
180 void HistoryOptTest::impl_clearList()
181 {
182     m_aConfigItem.Clear(m_eList);
183     ::sal_Int32 nCount = m_aConfigItem.GetList(m_eList).getLength();
184 
185     if (nCount != 0)
186         throw css::uno::Exception(MESSAGE_CLEAR_FAILED, 0);
187 
188     css::uno::Reference< css::container::XNameAccess > xList;
189     xList  = impl_getItemList();
190     nCount = xList->getElementNames().getLength();
191 
192     if (nCount != 0)
193         throw css::uno::Exception(MESSAGE_CLEAR_FAILED, 0);
194 
195     xList  = impl_getOrderList();
196     nCount = xList->getElementNames().getLength();
197 
198     if (nCount != 0)
199         throw css::uno::Exception(MESSAGE_CLEAR_FAILED, 0);
200 }
201 
202 //=============================================================================
203 void HistoryOptTest::impl_setSize(::sal_Int32 nSize)
204 {
205     m_aConfigItem.SetSize (m_eList, nSize);
206 
207 	// a) size info returned by GetSize() means "MaxSize"
208 	//    so it must match exactly !
209     ::sal_Int32 nCheck = m_aConfigItem.GetSize(m_eList);
210     if (nCheck != nSize)
211         throw css::uno::Exception(MESSAGE_SETSIZE_FAILED, 0);
212 
213 	// b) current size of used XCU lists reflects the current state of
214 	//    history list and not max size. So it can be less then size !
215     css::uno::Reference< css::container::XNameAccess > xList;
216     xList  = impl_getItemList();
217     nCheck = xList->getElementNames().getLength();
218     if (nCheck > nSize)
219         throw css::uno::Exception(MESSAGE_SETSIZE_FAILED, 0);
220 
221     xList  = impl_getOrderList();
222     nCheck = xList->getElementNames().getLength();
223     if (nCheck > nSize)
224         throw css::uno::Exception(MESSAGE_SETSIZE_FAILED, 0);
225 }
226 
227 //=============================================================================
228 void HistoryOptTest::impl_appendItem(::sal_Int32 nItem)
229 {
230     const ::rtl::OUString sURL      = impl_createItemURL     (nItem);
231     const ::rtl::OUString sTitle    = impl_createItemTitle   (nItem);
232     const ::rtl::OUString sPassword = impl_createItemPassword(nItem);
233 
234     m_aConfigItem.AppendItem(m_eList, sURL, ::rtl::OUString(), sTitle, sPassword);
235 }
236 
237 //=============================================================================
238 ::rtl::OUString HistoryOptTest::impl_createItemURL(::sal_Int32 nItem)
239 {
240     ::rtl::OUStringBuffer sURL(256);
241     sURL.appendAscii("file:///ooo_api_test/non_existing_test_url_");
242     sURL.append     ((::sal_Int32)nItem  );
243     sURL.appendAscii(".odt"              );
244 
245     return sURL.makeStringAndClear();
246 }
247 
248 //=============================================================================
249 ::rtl::OUString HistoryOptTest::impl_createItemTitle(::sal_Int32 nItem)
250 {
251     ::rtl::OUStringBuffer sTitle(256);
252     sTitle.appendAscii("Non Existing Test Item Nr ");
253     sTitle.append     ((::sal_Int32)nItem          );
254 
255     return sTitle.makeStringAndClear();
256 }
257 
258 //=============================================================================
259 ::rtl::OUString HistoryOptTest::impl_createItemPassword(::sal_Int32 nItem)
260 {
261     ::rtl::OUStringBuffer sPassword(256);
262     sPassword.appendAscii("Password_"       );
263     sPassword.append     ((::sal_Int32)nItem);
264 
265     return sPassword.makeStringAndClear();
266 }
267 
268 //=============================================================================
269 ::sal_Bool HistoryOptTest::impl_existsItem(::sal_Int32 nItem)
270 {
271     const ::rtl::OUString                                                       sURL     = impl_createItemURL(nItem);
272     const css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > lItems   = m_aConfigItem.GetList(m_eList);
273     const ::sal_Int32                                                           c        = lItems.getLength ();
274           ::sal_Int32                                                           i        = 0;
275           ::sal_Bool                                                            bFound   = sal_False;
276 
277     for (i=0; i<c; ++i)
278     {
279         const ::comphelper::SequenceAsHashMap aItem(lItems[i]);
280         const ::rtl::OUString&                sCheck = aItem.getUnpackedValueOrDefault(s_sURL, ::rtl::OUString());
281 
282         bFound = sCheck.equals(sURL);
283         if (bFound)
284             break;
285     }
286 
287     if ( ! bFound)
288         return sal_False;
289     bFound = sal_False;
290 
291     try
292     {
293         css::uno::Reference< css::container::XNameAccess > xItemList = impl_getItemList();
294         css::uno::Reference< css::container::XNameAccess > xItem     ;
295         xItemList->getByName(sURL) >>= xItem;
296 
297         bFound = xItem.is();
298     }
299     catch(const css::container::NoSuchElementException&)
300         {}
301 
302     return bFound;
303 }
304 
305 //=============================================================================
306 ::sal_Bool HistoryOptTest::impl_existsItemAtIndex(::sal_Int32 nItem ,
307                                                   ::sal_Int32 nIndex)
308 {
309     const ::rtl::OUString                                                       sURL     = impl_createItemURL(nItem);
310     const css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > lItems   = m_aConfigItem.GetList(m_eList);
311     const ::sal_Int32                                                           c        = lItems.getLength ();
312           ::sal_Bool                                                            bFound   = sal_False;
313 
314     if (nIndex >= c)
315         return sal_False;
316 
317     const ::comphelper::SequenceAsHashMap aItem(lItems[nIndex]);
318           ::rtl::OUString                 sCheck = aItem.getUnpackedValueOrDefault(s_sURL, ::rtl::OUString());
319 
320     bFound = sCheck.equals(sURL);
321     if ( ! bFound)
322         return sal_False;
323     bFound = sal_False;
324 
325     try
326     {
327         css::uno::Reference< css::container::XNameAccess > xItemList = impl_getItemList();
328         css::uno::Reference< css::container::XNameAccess > xItem     ;
329         xItemList->getByName(sURL) >>= xItem;
330 
331         bFound = xItem.is();
332     }
333     catch(const css::container::NoSuchElementException&)
334         {}
335 
336     if ( ! bFound)
337         return sal_False;
338     bFound = sal_False;
339 
340     try
341     {
342         const ::rtl::OUString                              sOrder     = ::rtl::OUString::valueOf(nIndex);
343         css::uno::Reference< css::container::XNameAccess > xOrderList = impl_getOrderList();
344         css::uno::Reference< css::container::XNameAccess > xOrder     ;
345         xOrderList->getByName(sOrder) >>= xOrder;
346 
347         if (xOrder.is())
348         {
349             xOrder->getByName(s_sHistoryItemRef) >>= sCheck;
350             bFound = sCheck.equals(sURL);
351         }
352     }
353     catch(const css::container::NoSuchElementException&)
354         {}
355 
356     return bFound;
357 }
358 
359 //=============================================================================
360 css::uno::Reference< css::container::XNameAccess > HistoryOptTest::impl_getItemList()
361 {
362     css::uno::Reference< css::container::XNameAccess > xHistory = impl_getNewHistory();
363     css::uno::Reference< css::container::XNameAccess > xList    ;
364     xHistory->getByName (s_sItemList) >>= xList;
365 
366     if ( ! xList.is())
367         throw css::uno::Exception(MESSAGE_MISS_ITEMLIST, 0);
368 
369     return xList;
370 }
371 
372 //=============================================================================
373 css::uno::Reference< css::container::XNameAccess > HistoryOptTest::impl_getOrderList()
374 {
375     css::uno::Reference< css::container::XNameAccess > xHistory = impl_getNewHistory();
376     css::uno::Reference< css::container::XNameAccess > xList    ;
377     xHistory->getByName (s_sOrderList) >>= xList;
378 
379     if ( ! xList.is())
380         throw css::uno::Exception(MESSAGE_MISS_ORDERLIST, 0);
381 
382     return xList;
383 }
384 
385 //=============================================================================
386 css::uno::Reference< css::container::XNameAccess > HistoryOptTest::impl_getNewHistory()
387 {
388     if ( ! m_xHistoriesXCU.is())
389     {
390         m_xHistoriesXCU = css::uno::Reference< css::container::XNameAccess >(
391             ::comphelper::ConfigurationHelper::openConfig(
392             ::utl::getProcessServiceFactory(),
393             s_sHistories,
394             ::comphelper::ConfigurationHelper::E_STANDARD),
395             css::uno::UNO_QUERY_THROW);
396     }
397 
398     css::uno::Reference< css::container::XNameAccess > xHistory;
399 
400     switch (m_eList)
401     {
402         case ePICKLIST :
403                 m_xHistoriesXCU->getByName(s_sPickList) >>= xHistory;
404                 break;
405 
406         case eHISTORY :
407                 m_xHistoriesXCU->getByName(s_sURLHistory) >>= xHistory;
408                 break;
409 
410         case eHELPBOOKMARKS :
411                 m_xHistoriesXCU->getByName(s_sHelpBookmarks) >>= xHistory;
412                 break;
413     }
414 
415     if ( ! xHistory.is())
416         throw css::uno::Exception(MESSAGE_MISS_HISTORY, 0);
417 
418     return xHistory;
419 }
420 
421 //=============================================================================
422 css::uno::Reference< css::container::XNameAccess > HistoryOptTest::impl_getOldHistory()
423 {
424     if ( ! m_xCommonXCU.is())
425     {
426         m_xCommonXCU = css::uno::Reference< css::container::XNameAccess >(
427             ::comphelper::ConfigurationHelper::openConfig(
428             ::utl::getProcessServiceFactory(),
429             s_sCommonHistory,
430             ::comphelper::ConfigurationHelper::E_STANDARD),
431             css::uno::UNO_QUERY_THROW);
432     }
433 
434     css::uno::Reference< css::container::XNameAccess > xHistory;
435 
436     switch (m_eList)
437     {
438         case ePICKLIST :
439                 m_xCommonXCU->getByName(s_sPickList) >>= xHistory;
440                 break;
441 
442         case eHISTORY :
443                 m_xCommonXCU->getByName(s_sURLHistory) >>= xHistory;
444                 break;
445 
446         case eHELPBOOKMARKS :
447                 m_xCommonXCU->getByName(s_sHelpBookmarks) >>= xHistory;
448                 break;
449     }
450 
451     if ( ! xHistory.is())
452         throw css::uno::Exception(MESSAGE_MISS_HISTORY, 0);
453 
454     return xHistory;
455 }
456 
457 /*
458 //=============================================================================
459 // clear the list in XML directly when using the new Histories.xcs
460 void HistoryOptTest::impl_clearList(const ::rtl::OUString& sList)
461 {
462 	css::uno::Reference< css::container::XNameAccess >    xListAccess;
463 	css::uno::Reference< css::container::XNameContainer > xItemOrder;
464 	css::uno::Reference< css::beans::XPropertySet >       xFirstItem;
465 	css::uno::Sequence< ::rtl::OUString >                 sFileList;
466 
467 	if (sList.equalsAscii("PickList"))
468 		m_xCfg->getByName(s_sPickList) >>= xListAccess;
469 
470 	else if (sList.equalsAscii("URLHistory"))
471 		m_xCfg->getByName(s_sURLHistory) >>= xListAccess;
472 
473 	else if (sList.equalsAscii("HelpBookmarks"))
474 		m_xCfg->getByName(s_sHelpBookmarks) >>= xListAccess;
475 
476 	if (xListAccess.is())
477 	{
478 		xListAccess->getByName(s_sItemList)  >>= xItemOrder  ;
479 		sFileList = xItemOrder->getElementNames();
480 		for(sal_Int32 i=0; i<sFileList.getLength(); ++i)
481 			xItemOrder->removeByName(sFileList[i]);
482 
483 		xListAccess->getByName(s_sOrderList) >>= xItemOrder ;
484 		sFileList = xItemOrder->getElementNames();
485 		for(sal_Int32 j=0; j<sFileList.getLength(); ++j)
486 			xItemOrder->removeByName(sFileList[j]);
487 
488 		xFirstItem = css::uno::Reference< css::beans::XPropertySet >(xListAccess, css::uno::UNO_QUERY);
489 		xFirstItem->setPropertyValue( s_sFirstItem, css::uno::makeAny((sal_Int32)0) );
490 
491 		::comphelper::ConfigurationHelper::flush(m_xCfg);
492 	}
493 }
494 
495 //=============================================================================
496 // use configuration API (not ConfigItem!) to verify the results within XML !
497 sal_Bool HistoryOptTest::impl_isListEmpty(const ::rtl::OUString& sList)
498 {
499 	css::uno::Reference< css::container::XNameAccess > xListAccess;
500 	css::uno::Reference< css::container::XNameAccess > xItemList;
501 	css::uno::Reference< css::container::XNameAccess > xOrderList;
502 	sal_Bool bRet = sal_True;
503 
504 	if (sList.equalsAscii("PickList"))
505 		m_xCfg->getByName(s_sPickList) >>= xListAccess;
506 
507 	else if (sList.equalsAscii("URLHistory"))
508 		m_xCfg->getByName(s_sURLHistory) >>= xListAccess;
509 
510 	else if (sList.equalsAscii("HelpBookmarks"))
511 		m_xCfg->getByName(s_sHelpBookmarks) >>= xListAccess;
512 
513 	if (xListAccess.is())
514 	{
515 		xListAccess->getByName(s_sItemList)  >>= xItemList;
516 		xListAccess->getByName(s_sOrderList) >>= xOrderList;
517 
518 		css::uno::Sequence< ::rtl::OUString > sItemList  = xItemList->getElementNames();
519 		css::uno::Sequence< ::rtl::OUString > sOrderList = xOrderList->getElementNames();
520 		if (sItemList.getLength()!=0 || sOrderList.getLength()!=0)
521 			bRet = sal_False;
522 	}
523 
524 	return bRet;
525 }
526 
527 //=============================================================================
528 // append a item: use configuration API (not ConfigItem!) to verify the results within XML !
529 void HistoryOptTest::impl_appendItem(const ::rtl::OUString& sList)
530 {//to do...
531 }
532 
533 //=============================================================================
534 // test SvtHistoryOptions::GetSize()
535 void HistoryOptTest::impl_checkGetSize(const ::rtl::OUString& sList)
536 {
537 	css::uno::Reference< css::beans::XPropertySet > xSet(m_xCommonXCU, css::uno::UNO_QUERY);
538 
539 	sal_uInt32 nSize  = 0;
540 	sal_uInt32 nSize_ = 0;
541 
542 	if (sList.equalsAscii("PickList"))
543 	{
544 		nSize  = aHistoryOpt.GetSize(ePICKLIST);
545 
546 		xSet->setPropertyValue(s_sPickListSize, css::uno::makeAny(nSize+1));
547 		::comphelper::ConfigurationHelper::flush(m_xCommonXCU);
548 
549 		nSize_ = aHistoryOpt.GetSize(ePICKLIST);
550 		if (nSize_ == nSize)
551 			throw css::uno::RuntimeException(
552 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetSize(ePICKLIST) error!")), 0);
553 	}
554 
555 	else if (sList.equalsAscii("URLHistory"))
556 	{
557 		nSize  = aHistoryOpt.GetSize(eHISTORY);
558 
559 		xSet->setPropertyValue(s_sURLHistorySize, css::uno::makeAny(nSize+1));
560 		::comphelper::ConfigurationHelper::flush(m_xCommonXCU);
561 
562 		nSize_ = aHistoryOpt.GetSize(eHISTORY);
563 
564 		if (nSize_ == nSize)
565 			throw css::uno::RuntimeException(
566 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetSize(eHISTORY) error!")), 0);
567 	}
568 
569 	else if (sList.equalsAscii("HelpBookmarks"))
570 	{
571 		nSize  = aHistoryOpt.GetSize(eHELPBOOKMARKS);
572 
573 		xSet->setPropertyValue(s_sHelpBookmarksSize, css::uno::makeAny(nSize+1));
574 		::comphelper::ConfigurationHelper::flush(m_xCommonXCU);
575 
576 		nSize_ = aHistoryOpt.GetSize(eHELPBOOKMARKS);
577 
578 		if (nSize_ == nSize)
579 			throw css::uno::RuntimeException(
580 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetSize(eHELPBOOKMARKS) error!")), 0);
581 	}
582 }
583 
584 //=============================================================================
585 // test SvtHistoryOptions::SetSize()
586 void HistoryOptTest::impl_checkSetSize(const ::rtl::OUString& sList)
587 {
588 	css::uno::Reference< css::beans::XPropertySet > xSet(m_xCommonXCU, css::uno::UNO_QUERY);
589 
590 	sal_uInt32 nSize  = 0;
591 	sal_uInt32 nSize_ = 0;
592 
593 	if (sList.equalsAscii("PickList"))
594 	{
595 		xSet->getPropertyValue(s_sPickListSize) >>= nSize;
596 		aHistoryOpt.SetSize(ePICKLIST, (nSize+1));
597 		xSet->getPropertyValue(s_sPickListSize) >>= nSize_;
598 
599 		if (nSize_ == nSize) //old config item will throw error
600 			throw css::uno::RuntimeException(
601 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SetSize(ePICKLIST) error!")), 0);
602 	}
603 
604 	else if (sList.equalsAscii("URLHistory"))
605 	{
606 		xSet->getPropertyValue(s_sURLHistorySize) >>= nSize;
607 		aHistoryOpt.SetSize(eHISTORY, (nSize+1));
608 		xSet->getPropertyValue(s_sURLHistorySize) >>= nSize_;
609 
610 		if (nSize_ == nSize) //old config item will throw error
611 			throw css::uno::RuntimeException(
612 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SetSize(eHISTORY) error!")), 0);
613 	}
614 
615 	else if (sList.equalsAscii("HelpBookmarks"))
616 	{
617 		xSet->getPropertyValue(s_sHelpBookmarksSize) >>= nSize;
618 		aHistoryOpt.SetSize(eHELPBOOKMARKS, (nSize+1));
619 		xSet->getPropertyValue(s_sHelpBookmarksSize) >>= nSize_;
620 
621 		if (nSize_ == nSize) //old config item will throw error
622 			throw css::uno::RuntimeException(
623 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SetSize(eHELPBOOKMARKS) error!")), 0);
624 	}
625 }
626 
627 //=============================================================================
628 // test SvtHistoryOptions::Clear()
629 void HistoryOptTest::impl_checkClear(const ::rtl::OUString& sList)
630 {
631 	if (sList.equalsAscii("PickList"))
632 	{
633 		aHistoryOpt.Clear(ePICKLIST);
634 		if ( !impl_isListEmpty(s_sPickList) )
635 			throw css::uno::RuntimeException(
636 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Clear(ePICKLIST) error!")), 0);
637 	}
638 
639 	else if (sList.equalsAscii("URLHistory"))
640 	{
641 		aHistoryOpt.Clear(eHISTORY);
642 		if ( !impl_isListEmpty(s_sURLHistory) )
643 			throw css::uno::RuntimeException(
644 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Clear(eHISTORY) error!")), 0);
645 	}
646 
647 	else if (sList.equalsAscii("HelpBookmarks"))
648 	{
649 		aHistoryOpt.Clear(eHELPBOOKMARKS);
650 		if ( !impl_isListEmpty(s_sHelpBookmarks) )
651 			throw css::uno::RuntimeException(
652 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Clear(eHELPBOOKMARKS) error!")), 0);
653 	}
654 }
655 
656 //=============================================================================
657 // test SvtHistoryOptions::GetList()
658 void HistoryOptTest::impl_checkGetList(const ::rtl::OUString& sList)
659 {
660 	if (sList.equalsAscii("PickList"))
661 	{
662 		impl_clearList(s_sPickList);
663 		aHistoryOpt.AppendItem( ePICKLIST  ,
664 			::rtl::OUString::createFromAscii("file:///c/test1"),
665 			::rtl::OUString::createFromAscii(""),
666 			::rtl::OUString::createFromAscii(""),
667 			::rtl::OUString::createFromAscii("") );
668 		css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > aHistoryList = aHistoryOpt.GetList( ePICKLIST );
669 
670 		if ( aHistoryList.getLength()==0 )
671 			throw css::uno::RuntimeException(
672 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetList(ePICKLIST) error!")), 0);
673 	}
674 
675 	else if (sList.equalsAscii("URLHistory"))
676 	{
677 		impl_clearList(s_sURLHistory);
678 		aHistoryOpt.AppendItem( eHISTORY  ,
679 			::rtl::OUString::createFromAscii("file:///c/test1"),
680 			::rtl::OUString::createFromAscii(""),
681 			::rtl::OUString::createFromAscii(""),
682 			::rtl::OUString::createFromAscii("") );
683 		css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > aHistoryList = aHistoryOpt.GetList( eHISTORY );
684 
685 		if ( aHistoryList.getLength()==0 )
686 			throw css::uno::RuntimeException(
687 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetList(eHISTORY) error!")), 0);
688 	}
689 
690 	else if (sList.equalsAscii("HelpBookmarks"))
691 	{
692 		impl_clearList(s_sHelpBookmarks);
693 		aHistoryOpt.AppendItem( eHELPBOOKMARKS  ,
694 			::rtl::OUString::createFromAscii("file:///c/test1"),
695 			::rtl::OUString::createFromAscii(""),
696 			::rtl::OUString::createFromAscii(""),
697 			::rtl::OUString::createFromAscii("") );
698 		css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > aHistoryList = aHistoryOpt.GetList( eHELPBOOKMARKS );
699 
700 		if ( aHistoryList.getLength()==0 )
701 			throw css::uno::RuntimeException(
702 			::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetList(eHELPBOOKMARKS) error!")), 0);
703 	}
704 }
705 
706 void HistoryOptTest::impl_checkAppendItem(const ::rtl::OUString& sList)
707 {
708 	if (sList.equalsAscii("PickList"))
709 	{
710 		impl_clearList(s_sPickList);
711 		sal_Int32 nListSize = aHistoryOpt.GetSize(ePICKLIST);
712 
713 		for (sal_Int32 i=0; i<nListSize; ++i)
714 			aHistoryOpt.AppendItem( ePICKLIST  ,
715 			::rtl::OUString::valueOf(i),
716 			::rtl::OUString::createFromAscii(""),
717 			::rtl::OUString::createFromAscii(""),
718 			::rtl::OUString::createFromAscii("") );
719 
720 		aHistoryOpt.AppendItem( ePICKLIST  ,
721 			::rtl::OUString::valueOf(nListSize),
722 			::rtl::OUString::createFromAscii(""),
723 			::rtl::OUString::createFromAscii(""),
724 			::rtl::OUString::createFromAscii("") );
725 	}
726 
727 	else if (sList.equalsAscii("URLHistory"))
728 	{
729 		impl_clearList(s_sURLHistory);
730 		sal_Int32 nListSize = aHistoryOpt.GetSize(eHISTORY);
731 
732 		for (sal_Int32 i=0; i<nListSize; ++i)
733 			aHistoryOpt.AppendItem( eHISTORY  ,
734 			::rtl::OUString::valueOf(i),
735 			::rtl::OUString::createFromAscii(""),
736 			::rtl::OUString::createFromAscii(""),
737 			::rtl::OUString::createFromAscii("") );
738 
739 		aHistoryOpt.AppendItem( eHISTORY  ,
740 			::rtl::OUString::valueOf(nListSize),
741 			::rtl::OUString::createFromAscii(""),
742 			::rtl::OUString::createFromAscii(""),
743 			::rtl::OUString::createFromAscii("") );
744 	}
745 
746 	else if (sList.equalsAscii("HelpBookmarks"))
747 	{
748 		//impl_clearList(s_sHelpBookmarks);
749 		//sal_Int32 nListSize = aHistoryOpt.GetSize(eHELPBOOKMARKS);
750 
751 		//for (sal_Int32 i=0; i<nListSize; ++i)
752 		//	aHistoryOpt.AppendItem( eHELPBOOKMARKS  ,
753 		//	::rtl::OUString::valueOf(i),
754 		//	::rtl::OUString::createFromAscii(""),
755 		//	::rtl::OUString::createFromAscii(""),
756 		//	::rtl::OUString::createFromAscii("") );
757 
758 		//aHistoryOpt.AppendItem( eHELPBOOKMARKS  ,
759 		//	::rtl::OUString::valueOf(nListSize),
760 		//	::rtl::OUString::createFromAscii(""),
761 		//	::rtl::OUString::createFromAscii(""),
762 		//	::rtl::OUString::createFromAscii("") );
763 	}
764 }
765 
766 //=============================================================================
767 void HistoryOptTest::impl_checkPicklist()
768 {
769 	impl_checkGetSize(s_sPickList);
770 	impl_checkSetSize(s_sPickList);
771 
772 	impl_checkClear(s_sPickList);
773 	impl_checkGetList(s_sPickList);
774 	impl_checkAppendItem(s_sPickList);
775 }
776 
777 //=============================================================================
778 void HistoryOptTest::impl_checkURLHistory()
779 {
780 	impl_checkGetSize(s_sURLHistory);
781 	impl_checkSetSize(s_sURLHistory);
782 
783 	impl_checkClear(s_sURLHistory);
784 	impl_checkGetList(s_sURLHistory);
785 	impl_checkAppendItem(s_sURLHistory);
786 }
787 
788 //=============================================================================
789 void HistoryOptTest::impl_checkHelpBookmarks()
790 {
791 	impl_checkGetSize(s_sHelpBookmarks);
792 	impl_checkSetSize(s_sHelpBookmarks);
793 
794 	impl_checkClear(s_sHelpBookmarks);
795 	impl_checkGetList(s_sHelpBookmarks);
796 	impl_checkAppendItem(s_sHelpBookmarks);
797 }
798 */
799