Hello Andreas,
I have added some more tests about the config items of historyoptions.
The nSize has been set in the test. And the test results could be logged into files. In <office>/program/,the log files(e.g.:test_***.txt) could be found after testing.At present the config item hasnt implement a deque in XML.So if we open an exist t1.odt, the next time we open a new test.odt, the t1.odt maybe have been removed.
I'm looking forward to your advice.:)

Best Regards,
Yan Wu
/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: historyoptions.cxx,v $
 *
 *  $Revision: 1.19.6.3 $
 *
 *  last change: $Author: as $ $Date: 2007/06/15 06:00:34 $
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/

// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"
#ifndef GCC
#endif

//_________________________________________________________________________________________________________________
//      includes
//_________________________________________________________________________________________________________________

#include <svtools/historyoptions.hxx>
#include "configitems/historyoptions_const.hxx"

#ifndef _UTL_CONFIGMGR_HXX_
#include <unotools/configmgr.hxx>
#endif

#ifndef _UTL_CONFIGITEM_HXX_
#include <unotools/configitem.hxx>
#endif

#ifndef _TOOLS_DEBUG_HXX
#include <tools/debug.hxx>
#endif

#ifndef _COM_SUN_STAR_UNO_ANY_HXX_
#include <com/sun/star/uno/Any.hxx>
#endif

#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_
#include <com/sun/star/uno/Sequence.hxx>
#endif

#ifndef __SGI_STL_DEQUE
#include <deque>
#endif

#ifndef __SGI_STL_ALGORITHM
#include <algorithm>
#endif

#include <rtl/logfile.hxx>
#include "itemholder1.hxx"

#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
#include <com/sun/star/beans/XPropertySet.hpp>
#endif

#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
#include <com/sun/star/container/XNameAccess.hpp>
#endif

#ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ 
#include <com/sun/star/container/XNameContainer.hpp> 
#endif

#ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#endif

#ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_
#include <comphelper/configurationhelper.hxx>
#endif

#ifndef _UNOTOOLS_PROCESSFACTORY_HXX_
#include <unotools/processfactory.hxx>
#endif

#ifndef _SVT_LOGHELPER_HXX
#include <loghelper.hxx>
#endif

//_________________________________________________________________________________________________________________
//      namespaces
//_________________________________________________________________________________________________________________

using namespace ::std                                   ;
using namespace ::utl                                   ;
using namespace ::rtl                                   ;
using namespace ::osl                                   ;
using namespace ::com::sun::star::uno   ;
using namespace ::com::sun::star::beans ;

namespace css = ::com::sun::star;

//_________________________________________________________________________________________________________________
//      const
//_________________________________________________________________________________________________________________

namespace {
        static const ::sal_Int32 s_nOffsetURL               = 0;
        static const ::sal_Int32 s_nOffsetFilter            = 1;
        static const ::sal_Int32 s_nOffsetTitle             = 2;
        static const ::sal_Int32 s_nOffsetPassword          = 3;
}

//_________________________________________________________________________________________________________________
//      private declarations!
//_________________________________________________________________________________________________________________

struct IMPL_THistoryItem
{
        IMPL_THistoryItem()
        {
        }

        IMPL_THistoryItem(      const   OUString&       sNewURL                 
,
                const   OUString&       sNewFilter              ,
                const   OUString&       sNewTitle               ,
                const   OUString&       sNewPassword    )
        {
                sURL            = sNewURL               ;
                sFilter         = sNewFilter    ;
                sTitle          = sNewTitle             ;
                sPassword       = sNewPassword  ;
        }

        sal_Bool operator==( const OUString& sSearchedURL )
        {
                return( sURL == sSearchedURL );
        }

        OUString        sURL            ;
        OUString        sFilter         ;
        OUString        sTitle          ;
        OUString        sPassword       ;
};

class SvtHistoryOptions_Impl 
{ 
public: 
        SvtHistoryOptions_Impl(); 
        ~SvtHistoryOptions_Impl(); 

        sal_uInt32 GetSize( EHistoryType eHistory ); 
        void SetSize( EHistoryType eHistory, sal_uInt32 nSize ); 
        void Clear( EHistoryType eHistory ); 
        Sequence< Sequence< PropertyValue > > GetList( EHistoryType eHistory ); 
        void                                  AppendItem(       EHistoryType 
eHistory , 
                const OUString&    sURL     , 
                const OUString&    sFilter  , 
                const OUString&    sTitle   , 
                const OUString&    sPassword ); 

private: 
        css::uno::Reference< css::container::XNameAccess > m_xCfg;
        css::uno::Reference< css::container::XNameAccess > m_xCommonXCU;
}; 

SvtHistoryOptions_Impl::SvtHistoryOptions_Impl() 
{    
        try
        { 
                m_xCfg = Reference< css::container::XNameAccess > ( 
                        ::comphelper::ConfigurationHelper::openConfig( 
                        utl::getProcessServiceFactory(), 
                        s_sHistories, 
                        ::comphelper::ConfigurationHelper::E_STANDARD), 
                        css::uno::UNO_QUERY ); 

                m_xCommonXCU = Reference< css::container::XNameAccess > ( 
                        ::comphelper::ConfigurationHelper::openConfig( 
                        utl::getProcessServiceFactory(), 
                        s_sCommonHistory, 
                        ::comphelper::ConfigurationHelper::E_STANDARD), 
                        css::uno::UNO_QUERY ); 
        } 
        catch(const css::uno::Exception& ex) 
        { 
                m_xCfg.clear(); 
                m_xCommonXCU.clear();

                LogHelper::logIt(ex);
        } 
} 

SvtHistoryOptions_Impl::~SvtHistoryOptions_Impl() 
{ 
        try
        {
                //if(m_xCfg.is())
                //      ::comphelper::ConfigurationHelper::flush(m_xCfg);
                //if(m_xCommonXCU.is())
                //      ::comphelper::ConfigurationHelper::flush(m_xCommonXCU);
        }
        catch(const css::uno::Exception& ex)
        {
                LogHelper::logIt(ex);
        }
        m_xCfg.clear();
        m_xCommonXCU.clear();
} 

sal_uInt32 SvtHistoryOptions_Impl::GetSize( EHistoryType eHistory ) 
{ 
        sal_uInt32                                       nSize = 0  ;   
        css::uno::Reference< css::beans::XPropertySet >  
xListAccess(m_xCommonXCU, css::uno::UNO_QUERY);

        try 
        { 
                switch( eHistory ) 
                { 
                case ePICKLIST: 
                        xListAccess->getPropertyValue(s_sPickListSize) >>= 
nSize; 
                        break; 

                case eHISTORY: 
                        xListAccess->getPropertyValue(s_sURLHistorySize) >>= 
nSize; 
                        break; 

                case eHELPBOOKMARKS: 
                        xListAccess->getPropertyValue(s_sHelpBookmarksSize) >>= 
nSize; 
                        break; 

                default: 
                        break; 
                } 
        } 
        catch(const css::uno::Exception& ex)
        { 
                LogHelper::logIt(ex);
        } 

        return nSize; 
} 

void SvtHistoryOptions_Impl::SetSize( EHistoryType eHistory, sal_uInt32 nSize ) 
{ 
        css::uno::Reference< css::beans::XPropertySet >     
xListAccess(m_xCommonXCU, css::uno::UNO_QUERY); 

        try 
        { 
                switch( eHistory ) 
                { 
                case ePICKLIST: 
                        if(xListAccess.is() && nSize!=GetSize(eHistory)) 
                        { 
                                xListAccess->setPropertyValue(s_sPickListSize, 
css::uno::makeAny(nSize)); 
                                
::comphelper::ConfigurationHelper::flush(m_xCommonXCU); 
                        } 
                        break; 

                case eHISTORY: 
                        if(xListAccess.is() && nSize!=GetSize(eHistory)) 
                        { 
                                
xListAccess->setPropertyValue(s_sURLHistorySize, css::uno::makeAny(nSize)); 
                                
::comphelper::ConfigurationHelper::flush(m_xCommonXCU); 
                        } 
                        break; 

                case eHELPBOOKMARKS: 
                        if(xListAccess.is() && nSize!=GetSize(eHistory)) 
                        { 
                                
xListAccess->setPropertyValue(s_sHelpBookmarksSize, css::uno::makeAny(nSize)); 
                                
::comphelper::ConfigurationHelper::flush(m_xCommonXCU); 
                        } 
                        break; 

                default: 
                        break; 
                }    
        } 
        catch(const css::uno::Exception& ex) 
        { 
                LogHelper::logIt(ex);
        } 
} 

void SvtHistoryOptions_Impl::Clear( EHistoryType eHistory ) 
{ 
        css::uno::Reference< css::container::XNameAccess >    xListAccess;
        css::uno::Reference< css::container::XNameContainer > xItemOrder;
        css::uno::Reference< css::beans::XPropertySet >       xFirstItem;
        Sequence< rtl::OUString >                                               
          sFileList;

        try
        {
                switch( eHistory )
                {
                case ePICKLIST:
                        {
                                m_xCfg->getByName(s_sPickList) >>= xListAccess; 

                                xListAccess->getByName(s_sItemList) >>= 
xItemOrder  ;                           
                                sFileList = xItemOrder->getElementNames();  
                                for(sal_Int32 i=0; i<sFileList.getLength(); ++i)
                                        xItemOrder->removeByName(sFileList[i]);

                                xListAccess->getByName(s_sOrderList) >>= 
xItemOrder ;
                                sFileList = xItemOrder->getElementNames();  
                                for(sal_Int32 j=0; j<sFileList.getLength(); ++j)
                                        xItemOrder->removeByName(sFileList[j]);

                                xFirstItem = css::uno::Reference< 
css::beans::XPropertySet >(xListAccess, css::uno::UNO_QUERY);
                                xFirstItem->setPropertyValue( s_sFirstItem, 
css::uno::makeAny((sal_Int32)0) );
                                
::comphelper::ConfigurationHelper::flush(m_xCfg);
                        }
                        break;

                case eHISTORY:
                        {
                                m_xCfg->getByName(s_sURLHistory) >>= 
xListAccess;       

                                xListAccess->getByName(s_sItemList)  >>= 
xItemOrder  ;                          
                                sFileList = xItemOrder->getElementNames();  
                                for(sal_Int32 i=0; i<sFileList.getLength(); ++i)
                                        xItemOrder->removeByName(sFileList[i]); 
   

                                xListAccess->getByName(s_sOrderList) >>= 
xItemOrder ;
                                sFileList = xItemOrder->getElementNames();  
                                for(sal_Int32 j=0; j<sFileList.getLength(); ++j)
                                        xItemOrder->removeByName(sFileList[j]);

                                xFirstItem = css::uno::Reference< 
css::beans::XPropertySet >(xListAccess, css::uno::UNO_QUERY);
                                xFirstItem->setPropertyValue( s_sFirstItem, 
css::uno::makeAny((sal_Int32)0) );
                                
::comphelper::ConfigurationHelper::flush(m_xCfg);
                        }
                        break;

                case eHELPBOOKMARKS:
                        {
                                m_xCfg->getByName(s_sHelpBookmarks)       >>= 
xListAccess;      

                                xListAccess->getByName(s_sItemList) >>= 
xItemOrder  ;                           
                                sFileList = xItemOrder->getElementNames();  
                                for(sal_Int32 i=0; i<sFileList.getLength(); ++i)
                                        xItemOrder->removeByName(sFileList[i]); 
   

                                xListAccess->getByName(s_sOrderList) >>= 
xItemOrder ;
                                sFileList = xItemOrder->getElementNames();  
                                for(sal_Int32 j=0; j<sFileList.getLength(); ++j)
                                        xItemOrder->removeByName(sFileList[j]);

                                xFirstItem = css::uno::Reference< 
css::beans::XPropertySet >(xListAccess, css::uno::UNO_QUERY);
                                xFirstItem->setPropertyValue( s_sFirstItem, 
css::uno::makeAny((sal_Int32)0) );
                                
::comphelper::ConfigurationHelper::flush(m_xCfg);
                        }
                        break;

                default:
                        break;
                }
        }
        catch(const css::uno::Exception& ex)
        {
                LogHelper::logIt(ex);
        }
} 

Sequence< Sequence< PropertyValue > > SvtHistoryOptions_Impl::GetList( 
EHistoryType eHistory ) 
{ 
        Sequence< Sequence< PropertyValue > > pReturn; 
        Sequence< PropertyValue >             seqProperties( 4 ); 
        Sequence< ::rtl::OUString >           sFileList; 

        css::uno::Reference< css::container::XNameAccess > xListAccess; 
        css::uno::Reference< css::container::XNameAccess > xItemList; 
        css::uno::Reference< css::container::XNameAccess > xOrderList; 
        css::uno::Reference< css::container::XNameAccess > xItemOrder; 
        css::uno::Reference< css::beans::XPropertySet >    xNode;   

        seqProperties[s_nOffsetURL       ].Name = HISTORY_PROPERTYNAME_URL;
        seqProperties[s_nOffsetFilter    ].Name = HISTORY_PROPERTYNAME_FILTER;
        seqProperties[s_nOffsetTitle     ].Name = HISTORY_PROPERTYNAME_TITLE;
        seqProperties[s_nOffsetPassword  ].Name = HISTORY_PROPERTYNAME_PASSWORD;

        try
        {
                switch( eHistory ) 
                { 
                case ePICKLIST: 
                        {
                                m_xCfg->getByName(s_sPickList) >>= xListAccess; 
                                xListAccess->getByName(s_sItemList) >>= 
xItemList;
                                xListAccess->getByName(s_sOrderList) >>= 
xOrderList;

                                sFileList = xOrderList->getElementNames(); 
                                sal_Int32 nLength  = sFileList.getLength();
                                sal_Int32 nMaxSize = GetSize(ePICKLIST);
                                Sequence< Sequence< PropertyValue > > 
seqReturn( (nMaxSize>nLength ? nLength:nMaxSize) );

                                sal_Int32 nItem = 0;
                                for(sal_Int32 i=nLength-1; 
i>=0&&i>=nLength-nMaxSize; --i)
                                { 
                                        rtl::OUString sUrl;
                                        xOrderList->getByName(sFileList[i]) >>= 
xNode;                          
                                        
xNode->getPropertyValue(s_sHistoryItemRef) >>= sUrl;

                                        xItemList->getByName(sUrl) >>= xNode;
                                        seqProperties[s_nOffsetURL   ].Value 
<<= sUrl;                          
                                        xNode->getPropertyValue(s_sFilter)   
>>= seqProperties[s_nOffsetFilter   ].Value; 
                                        xNode->getPropertyValue(s_sTitle)    
>>= seqProperties[s_nOffsetTitle    ].Value; 
                                        xNode->getPropertyValue(s_sPassword) 
>>= seqProperties[s_nOffsetPassword ].Value; 
                                        seqReturn[nItem++] = seqProperties; 
                                }
                                pReturn = seqReturn;
                        }
                        break; 

                case eHISTORY: 
                        {
                                m_xCfg->getByName(s_sURLHistory) >>= 
xListAccess; 
                                xListAccess->getByName(s_sItemList) >>= 
xItemList;
                                xListAccess->getByName(s_sOrderList) >>= 
xOrderList;

                                sFileList = xOrderList->getElementNames(); 
                                sal_Int32 nLength  = sFileList.getLength();
                                sal_Int32 nMaxSize = GetSize(eHISTORY);
                                Sequence< Sequence< PropertyValue > > 
seqReturn( (nMaxSize>nLength ? nLength:nMaxSize) );

                                sal_Int32 nItem = 0;
                                for(sal_Int32 i=nLength-1; 
i>=0&&i>=nLength-nMaxSize; --i)
                                { 
                                        rtl::OUString sUrl;
                                        xOrderList->getByName(sFileList[i]) >>= 
xNode;                          
                                        
xNode->getPropertyValue(s_sHistoryItemRef) >>= sUrl;

                                        xItemList->getByName(sUrl) >>= xNode;
                                        seqProperties[s_nOffsetURL   ].Value 
<<= sUrl;                          
                                        xNode->getPropertyValue(s_sFilter)   
>>= seqProperties[s_nOffsetFilter   ].Value; 
                                        xNode->getPropertyValue(s_sTitle)    
>>= seqProperties[s_nOffsetTitle    ].Value; 
                                        xNode->getPropertyValue(s_sPassword) 
>>= seqProperties[s_nOffsetPassword ].Value; 
                                        seqReturn[nItem++] = seqProperties; 
                                }
                                pReturn = seqReturn;
                        }
                        break; 

                case eHELPBOOKMARKS: 
                        {
                                m_xCfg->getByName(s_sHelpBookmarks) >>= 
xListAccess; 
                                xListAccess->getByName(s_sItemList) >>= 
xItemList;
                                xListAccess->getByName(s_sOrderList) >>= 
xOrderList;

                                sFileList = xOrderList->getElementNames(); 
                                sal_Int32 nLength  = sFileList.getLength();
                                sal_Int32 nMaxSize = GetSize(eHELPBOOKMARKS);
                                Sequence< Sequence< PropertyValue > > 
seqReturn( (nMaxSize>nLength ? nLength:nMaxSize) );

                                sal_Int32 nItem = 0;
                                for(sal_Int32 i=nLength-1; 
i>=0&&i>=nLength-nMaxSize; --i)
                                { 
                                        rtl::OUString sUrl;
                                        xOrderList->getByName(sFileList[i]) >>= 
xNode;                          
                                        
xNode->getPropertyValue(s_sHistoryItemRef) >>= sUrl;

                                        xItemList->getByName(sUrl) >>= xNode;
                                        seqProperties[s_nOffsetURL   ].Value 
<<= sUrl;                          
                                        xNode->getPropertyValue(s_sFilter)   
>>= seqProperties[s_nOffsetFilter   ].Value; 
                                        xNode->getPropertyValue(s_sTitle)    
>>= seqProperties[s_nOffsetTitle    ].Value; 
                                        xNode->getPropertyValue(s_sPassword) 
>>= seqProperties[s_nOffsetPassword ].Value; 
                                        seqReturn[nItem++] = seqProperties; 
                                }
                                pReturn = seqReturn;
                        }
                        break; 

                default: 
                        break; 
                }    
        }
        catch(const css::uno::Exception& ex)
        {
                LogHelper::logIt(ex);
        }

        return pReturn; 
} 

void SvtHistoryOptions_Impl::AppendItem(       EHistoryType eHistory , 
                                                                                
const OUString& sURL        , 
                                                                                
const OUString& sFilter     , 
                                                                                
const OUString& sTitle      , 
                                                                                
const OUString& sPassword   ) 
{     
        css::uno::Reference< css::container::XNameAccess > xListAccess;
        sal_Int32                                                               
                   nMaxSize = 0; 

        switch(eHistory) 
        { 
        case ePICKLIST: 
                {
                        m_xCfg->getByName(s_sPickList) >>= xListAccess;
                        nMaxSize = GetSize(ePICKLIST); 
                }
                break; 
        case eHISTORY:
                {
                        m_xCfg->getByName(s_sURLHistory) >>= xListAccess;
                        nMaxSize = GetSize(eHISTORY); 
                }
                break; 
        case eHELPBOOKMARKS: 
                {
                        m_xCfg->getByName(s_sHelpBookmarks) >>= xListAccess;
                        nMaxSize = GetSize(eHELPBOOKMARKS); 
                }
                break; 
        default: 
                break; 
        } 

        css::uno::Reference< css::container::XNameContainer > xItemList;
        css::uno::Reference< css::container::XNameContainer > xOrderList;
        css::uno::Reference< css::container::XNameContainer > xOrderItem;
        css::uno::Reference< css::beans::XPropertySet >       xFirstItem;
        css::uno::Reference< css::beans::XPropertySet >           xNode;

        try
        {
                xListAccess->getByName(s_sItemList) >>= xItemList;
                xListAccess->getByName(s_sOrderList) >>= xOrderList;

                if(xItemList->hasByName(sURL))
                {
                        xItemList->getByName(sURL) >>= xNode;
                        xNode->setPropertyValue(s_sTitle, 
css::uno::makeAny(sTitle));
                }

                else
                {
                        sal_Int32 nFirstOrder = 0;
                        rtl::OUString sFirstOrder;
                        rtl::OUString sNewOrder;                        

                        Sequence< ::rtl::OUString > lOrders = 
xOrderList->getElementNames();
                        sal_Int32 nCurrentSize = lOrders.getLength();
                        sal_Bool bFull = ( nCurrentSize>=nMaxSize );

                        css::uno::Reference< css::lang::XSingleServiceFactory > 
xFac;
                        css::uno::Reference< css::uno::XInterface >             
xInst;

                        xFirstItem = css::uno::Reference< 
css::beans::XPropertySet >(xListAccess, css::uno::UNO_QUERY);

                        if(bFull)
                        {                               
                                xFirstItem->getPropertyValue(s_sFirstItem) >>= 
nFirstOrder;
                                sFirstOrder = 
rtl::OUString::valueOf(nFirstOrder);
                                xOrderList->getByName(sFirstOrder) >>= xNode;
                                rtl::OUString sUrl;
                                xNode->getPropertyValue(s_sHistoryItemRef) >>= 
sUrl;

                                xItemList->removeByName(sUrl);
                                xOrderList->removeByName(sFirstOrder);

                                sNewOrder = 
rtl::OUString::valueOf(nFirstOrder+nCurrentSize);

                                nFirstOrder += 1;
                                xFirstItem->setPropertyValue(s_sFirstItem, 
css::uno::makeAny((sal_Int32)nFirstOrder));
                        }

                        else if(!bFull)
                        {
                                xFirstItem->getPropertyValue(s_sFirstItem) >>= 
nFirstOrder;
                                sNewOrder = 
rtl::OUString::valueOf(nFirstOrder+nCurrentSize);
                        }

                        xFac = css::uno::Reference< 
css::lang::XSingleServiceFactory >(xOrderList, css::uno::UNO_QUERY);
                        xInst = xFac->createInstance();
                        xOrderList->insertByName(sNewOrder, 
css::uno::makeAny(xInst));
                        xNode = css::uno::Reference< css::beans::XPropertySet 
>(xInst, css::uno::UNO_QUERY);
                        xNode->setPropertyValue(s_sHistoryItemRef, 
css::uno::makeAny(sURL));

                        xFac = css::uno::Reference< 
css::lang::XSingleServiceFactory >(xItemList, css::uno::UNO_QUERY);
                        xInst = xFac->createInstance();
                        xItemList->insertByName(sURL, css::uno::makeAny(xInst));
                        xNode = css::uno::Reference< css::beans::XPropertySet 
>(xInst, css::uno::UNO_QUERY);
                        xNode->setPropertyValue(s_sFilter, 
css::uno::makeAny(sFilter));
                        xNode->setPropertyValue(s_sTitle, 
css::uno::makeAny(sTitle));
                        xNode->setPropertyValue(s_sPassword, 
css::uno::makeAny(sPassword));                     
                }

                ::comphelper::ConfigurationHelper::flush(m_xCfg);
        }
        catch(const css::uno::Exception& ex)
        {
                LogHelper::logIt(ex);
        }
} 

//*****************************************************************************************************************
//      initialize static member
//      DON'T DO IT IN YOUR HEADER!
//      see definition for further informations
//*****************************************************************************************************************
SvtHistoryOptions_Impl*         SvtHistoryOptions::m_pDataContainer     = NULL  
;
sal_Int32                                       SvtHistoryOptions::m_nRefCount  
        = 0             ;

//*****************************************************************************************************************
//      constructor
//*****************************************************************************************************************
SvtHistoryOptions::SvtHistoryOptions()
{
        // Global access, must be guarded (multithreading!).
        MutexGuard aGuard( GetOwnStaticMutex() );
        // Increase ouer refcount ...
        ++m_nRefCount;
        // ... and initialize ouer data container only if it not already exist!
        if( m_pDataContainer == NULL )
        {
                RTL_LOGFILE_CONTEXT(aLog, "svtools ( ??? ) 
::SvtHistoryOptions_Impl::ctor()");
                m_pDataContainer = new SvtHistoryOptions_Impl;

                ItemHolder1::holdConfigItem(E_HISTORYOPTIONS);
        }
}

//*****************************************************************************************************************
//      destructor
//*****************************************************************************************************************
SvtHistoryOptions::~SvtHistoryOptions()
{
        // Global access, must be guarded (multithreading!)
        MutexGuard aGuard( GetOwnStaticMutex() );
        // Decrease ouer refcount.
        --m_nRefCount;
        // If last instance was deleted ...
        // we must destroy ouer static data container!
        if( m_nRefCount <= 0 )
        {
                delete m_pDataContainer;
                m_pDataContainer = NULL;
        }
}

//*****************************************************************************************************************
//      public method
//*****************************************************************************************************************
sal_uInt32 SvtHistoryOptions::GetSize( EHistoryType eHistory ) const
{
        MutexGuard aGuard( GetOwnStaticMutex() );
        return m_pDataContainer->GetSize( eHistory );
}

//*****************************************************************************************************************
//      public method
//*****************************************************************************************************************
void SvtHistoryOptions::SetSize( EHistoryType eHistory, sal_uInt32 nSize )
{
        MutexGuard aGuard( GetOwnStaticMutex() );
        m_pDataContainer->SetSize( eHistory, nSize );
}

//*****************************************************************************************************************
//      public method
//*****************************************************************************************************************
void SvtHistoryOptions::Clear( EHistoryType eHistory )
{
        MutexGuard aGuard( GetOwnStaticMutex() );
        m_pDataContainer->Clear( eHistory );
}

//*****************************************************************************************************************
//      public method
//*****************************************************************************************************************
Sequence< Sequence< PropertyValue > > SvtHistoryOptions::GetList( EHistoryType 
eHistory ) const
{
        MutexGuard aGuard( GetOwnStaticMutex() );
        return m_pDataContainer->GetList( eHistory );
}

//*****************************************************************************************************************
//      public method
//*****************************************************************************************************************
void SvtHistoryOptions::AppendItem(                     EHistoryType    
eHistory        ,
                                                                   const        
OUString&               sURL            ,
                                                                   const        
OUString&               sFilter         ,
                                                                   const        
OUString&               sTitle          ,
                                                                   const        
OUString&               sPassword       )
{
        MutexGuard aGuard( GetOwnStaticMutex() );
        m_pDataContainer->AppendItem( eHistory, sURL, sFilter, sTitle, 
sPassword );
}

//*****************************************************************************************************************
//      private method
//*****************************************************************************************************************
Mutex& SvtHistoryOptions::GetOwnStaticMutex()
{
        // Initialize static mutex only for one time!
        static Mutex* pMutex = NULL;
        // If these method first called (Mutex not already exist!) ...
        if( pMutex == NULL )
        {
                // ... we must create a new one. Protect follow code with the 
global mutex -
                // It must be - we create a static variable!
                MutexGuard aGuard( Mutex::getGlobalMutex() );
                // We must check our pointer again - because it can be that 
another instance of ouer class will be fastr then these!
                if( pMutex == NULL )
                {
                        // Create the new mutex and set it for return on static 
variable.
                        static Mutex aMutex;
                        pMutex = &aMutex;
                }
        }
        // Return new created or already existing mutex object.
        return *pMutex;
}
/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: HistoryOptTest.hxx,v $
 *
 *  $Revision: 1.1.2.3 $
 *
 *  last change: $Author: as $ $Date: 2007/06/15 05:57:22 $
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/
 
#ifndef  SVTOOLS_HISTORYOPTTEST_HXX
#define  SVTOOLS_HISTORYOPTTEST_HXX

#include <com/sun/star/container/XNameAccess.hpp>
#include <svtools/historyoptions.hxx>
#include <rtl/ustrbuf.hxx>

namespace css = ::com::sun::star;

class HistoryOptTest
{
public:
        HistoryOptTest();
        ~HistoryOptTest();

        void impl_checkPicklist();
        void impl_checkURLHistory();
        void impl_checkHelpBookmarks();

private:
        void impl_checkGetSize(const ::rtl::OUString& sList);
        void impl_checkSetSize(const ::rtl::OUString& sList);
        void impl_checkClear(const ::rtl::OUString& sList);
        void impl_checkGetList(const ::rtl::OUString& sList);
        void impl_checkAppendItem(const ::rtl::OUString& sList);

        void impl_clearList(const ::rtl::OUString& sList);
        sal_Bool impl_isListEmpty(const ::rtl::OUString& sList);
        void impl_appendItem(const ::rtl::OUString& sList, 
::rtl::OUStringBuffer& sMsg);

private:
        css::uno::Reference< css::container::XNameAccess > m_xCfg;
        css::uno::Reference< css::container::XNameAccess > m_xCommonXCU;
        SvtHistoryOptions aHistoryOpt;
};

#endif // #ifndef  SVTOOLS_HISTORYOPTTEST_HXX
/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: HistoryOptTest.cxx,v $
 *
 *  $Revision: 1.1.2.5 $
 *
 *  last change: $Author: as $ $Date: 2007/06/15 05:57:22 $
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/
 
#include "HistoryOptTest.hxx"
#include "configitems/historyoptions_const.hxx"

#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/container/XNameContainer.hpp>

#include <comphelper/configurationhelper.hxx>
#include <unotools/processfactory.hxx>
#include <stdio.h>

namespace css = ::com::sun::star;

#define LOG_APPENDITEM_PICKLIST(SMSG)               \
{                                                   \
        FILE* pFile = fopen("test_picklist.txt", "w");  \
        fprintf(pFile, "%s",SMSG);                      \
        fclose(pFile);                                  \
}

#define LOG_APPENDITEM_URLHISTORY(SMSG)               \
{                                                     \
        FILE* pFile = fopen("test_urlhistory.txt", "w");  \
        fprintf(pFile, "%s",SMSG);                        \
        fclose(pFile);                                    \
}

#define LOG_APPENDITEM_HELPBOOKMARKS(SMSG)               \
{                                                        \
        FILE* pFile = fopen("test_helpbookmarks.txt", "w");  \
        fprintf(pFile, "%s",SMSG);                           \
        fclose(pFile);                                       \
}

HistoryOptTest::HistoryOptTest()
{
        m_xCfg = css::uno::Reference< css::container::XNameAccess >(
                ::comphelper::ConfigurationHelper::openConfig(
                ::utl::getProcessServiceFactory(),
                s_sHistories,
                ::comphelper::ConfigurationHelper::E_STANDARD),
                css::uno::UNO_QUERY);

        m_xCommonXCU = css::uno::Reference< css::container::XNameAccess > ( 
                ::comphelper::ConfigurationHelper::openConfig( 
                ::utl::getProcessServiceFactory(), 
                s_sCommonHistory, 
                ::comphelper::ConfigurationHelper::E_STANDARD), 
                css::uno::UNO_QUERY ); 
}

HistoryOptTest::~HistoryOptTest()
{
        if (m_xCfg.is())
                m_xCfg.clear();

        if (m_xCommonXCU.is())
                m_xCommonXCU.clear();
}

//=============================================================================
// clear the list in XML directly when using the new Histories.xcs
void HistoryOptTest::impl_clearList(const ::rtl::OUString& sList)
{
        css::uno::Reference< css::container::XNameAccess >    xListAccess;
        css::uno::Reference< css::container::XNameContainer > xItemOrder;
        css::uno::Reference< css::beans::XPropertySet >       xFirstItem;
        css::uno::Sequence< ::rtl::OUString >                 sFileList;

        if (sList.equalsAscii("PickList"))
                m_xCfg->getByName(s_sPickList) >>= xListAccess;

        else if (sList.equalsAscii("URLHistory"))
                m_xCfg->getByName(s_sURLHistory) >>= xListAccess;

        else if (sList.equalsAscii("HelpBookmarks"))
                m_xCfg->getByName(s_sHelpBookmarks) >>= xListAccess;

        if (xListAccess.is())
        {
                xListAccess->getByName(s_sItemList)  >>= xItemOrder  ;          
                
                sFileList = xItemOrder->getElementNames();  
                for(sal_Int32 i=0; i<sFileList.getLength(); ++i)
                        xItemOrder->removeByName(sFileList[i]);

                xListAccess->getByName(s_sOrderList) >>= xItemOrder ;
                sFileList = xItemOrder->getElementNames();  
                for(sal_Int32 j=0; j<sFileList.getLength(); ++j)
                        xItemOrder->removeByName(sFileList[j]);

                xFirstItem = css::uno::Reference< css::beans::XPropertySet 
>(xListAccess, css::uno::UNO_QUERY);
                xFirstItem->setPropertyValue( s_sFirstItem, 
css::uno::makeAny((sal_Int32)0) );

                ::comphelper::ConfigurationHelper::flush(m_xCfg);
        }
}

//=============================================================================
// use configuration API (not ConfigItem!) to verify the results within XML ! 
sal_Bool HistoryOptTest::impl_isListEmpty(const ::rtl::OUString& sList)
{
        css::uno::Reference< css::container::XNameAccess > xListAccess;
        css::uno::Reference< css::container::XNameAccess > xItemList;
        css::uno::Reference< css::container::XNameAccess > xOrderList;
        sal_Bool bRet = sal_True;

        if (sList.equalsAscii("PickList"))
                m_xCfg->getByName(s_sPickList) >>= xListAccess;

        else if (sList.equalsAscii("URLHistory"))
                m_xCfg->getByName(s_sURLHistory) >>= xListAccess;

        else if (sList.equalsAscii("HelpBookmarks"))
                m_xCfg->getByName(s_sHelpBookmarks) >>= xListAccess;

        if (xListAccess.is())
        {
                xListAccess->getByName(s_sItemList)  >>= xItemList;
                xListAccess->getByName(s_sOrderList) >>= xOrderList;

                css::uno::Sequence< ::rtl::OUString > sItemList  = 
xItemList->getElementNames();
                css::uno::Sequence< ::rtl::OUString > sOrderList = 
xOrderList->getElementNames();
                if (sItemList.getLength()!=0 || sOrderList.getLength()!=0)
                        bRet = sal_False;
        }

        return bRet;
}

//=============================================================================
// append a item: use configuration API (not ConfigItem!) to verify the results 
within XML ! 
void HistoryOptTest::impl_appendItem(const ::rtl::OUString& sList, 
::rtl::OUStringBuffer& sMsg)
{
        if (sList.equalsAscii("PickList"))
        {
                css::uno::Sequence< css::uno::Sequence< 
css::beans::PropertyValue > > aPickList = aHistoryOpt.GetList( ePICKLIST );
                sal_Int32 nLength = aPickList.getLength();

                for (sal_Int32 i=0; i<nLength; ++i)
                {
                        css::uno::Sequence< css::beans::PropertyValue > 
aPickListEntry = aPickList[i];
                        ::rtl::OUString sTemp;
                        aPickListEntry[(sal_Int32)0].Value >>= sTemp;
                        sMsg.append(sTemp);
                        sMsg.appendAscii("\n");
                }
        }

        else if (sList.equalsAscii("URLHistory"))
        {
                css::uno::Sequence< css::uno::Sequence< 
css::beans::PropertyValue > > aHistory = aHistoryOpt.GetList( eHISTORY );
                sal_Int32 nLength = aHistory.getLength();

                for (sal_Int32 i=0; i<nLength; ++i)
                {
                        css::uno::Sequence< css::beans::PropertyValue > 
aHistoryEntry = aHistory[i];
                        ::rtl::OUString sTemp;
                        aHistoryEntry[(sal_Int32)0].Value >>= sTemp;
                        sMsg.append(sTemp);
                        sMsg.appendAscii("\n");
                }
        }

        else if (sList.equalsAscii("HelpBookmarks"))
        {
                css::uno::Sequence< css::uno::Sequence< 
css::beans::PropertyValue > > aHelpBookmarks = aHistoryOpt.GetList( 
eHELPBOOKMARKS );
                sal_Int32 nLength = aHelpBookmarks.getLength();

                for (sal_Int32 i=0; i<nLength; ++i)
                {
                        css::uno::Sequence< css::beans::PropertyValue > 
aHelpBookmarksEntry = aHelpBookmarks[i];
                        ::rtl::OUString sTemp;
                        aHelpBookmarksEntry[(sal_Int32)0].Value >>= sTemp;
                        sMsg.append(sTemp);
                        sMsg.appendAscii("\n");
                }
        }
}

//=============================================================================
// test SvtHistoryOptions::GetSize()
void HistoryOptTest::impl_checkGetSize(const ::rtl::OUString& sList)
{
        css::uno::Reference< css::beans::XPropertySet > xSet(m_xCommonXCU, 
css::uno::UNO_QUERY);

        sal_uInt32 nSize  = 0;
        sal_uInt32 nSize_ = 0;

        if (sList.equalsAscii("PickList"))
        {
                nSize  = aHistoryOpt.GetSize(ePICKLIST);

                xSet->setPropertyValue(s_sPickListSize, 
css::uno::makeAny(nSize+1));
                ::comphelper::ConfigurationHelper::flush(m_xCommonXCU);

                nSize_ = aHistoryOpt.GetSize(ePICKLIST); 
                if (nSize_ == nSize)
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetSize(ePICKLIST) error!")), 0);
        }

        else if (sList.equalsAscii("URLHistory"))
        {
                nSize  = aHistoryOpt.GetSize(eHISTORY);

                xSet->setPropertyValue(s_sURLHistorySize, 
css::uno::makeAny(nSize+1));
                ::comphelper::ConfigurationHelper::flush(m_xCommonXCU);

                nSize_ = aHistoryOpt.GetSize(eHISTORY); 

                if (nSize_ == nSize)
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetSize(eHISTORY) error!")), 0);
        }

        else if (sList.equalsAscii("HelpBookmarks"))
        {
                nSize  = aHistoryOpt.GetSize(eHELPBOOKMARKS);

                xSet->setPropertyValue(s_sHelpBookmarksSize, 
css::uno::makeAny(nSize+1));
                ::comphelper::ConfigurationHelper::flush(m_xCommonXCU);

                nSize_ = aHistoryOpt.GetSize(eHELPBOOKMARKS); 

                if (nSize_ == nSize)
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetSize(eHELPBOOKMARKS) error!")), 
0);
        }
}

//=============================================================================
// test SvtHistoryOptions::SetSize()
void HistoryOptTest::impl_checkSetSize(const ::rtl::OUString& sList)
{
        css::uno::Reference< css::beans::XPropertySet > xSet(m_xCommonXCU, 
css::uno::UNO_QUERY);

        sal_uInt32 nSize  = 0;
        sal_uInt32 nSize_ = 0;

        if (sList.equalsAscii("PickList"))
        {
                xSet->getPropertyValue(s_sPickListSize) >>= nSize;
                aHistoryOpt.SetSize(ePICKLIST, (nSize+1));
                xSet->getPropertyValue(s_sPickListSize) >>= nSize_;

                if (nSize_ == nSize) //old config item will throw error
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SetSize(ePICKLIST) error!")), 0);
        }

        else if (sList.equalsAscii("URLHistory"))
        {
                xSet->getPropertyValue(s_sURLHistorySize) >>= nSize;
                aHistoryOpt.SetSize(eHISTORY, (nSize+1));
                xSet->getPropertyValue(s_sURLHistorySize) >>= nSize_;

                if (nSize_ == nSize) //old config item will throw error
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SetSize(eHISTORY) error!")), 0);
        }

        else if (sList.equalsAscii("HelpBookmarks"))
        {
                xSet->getPropertyValue(s_sHelpBookmarksSize) >>= nSize;
                aHistoryOpt.SetSize(eHELPBOOKMARKS, (nSize+1));
                xSet->getPropertyValue(s_sHelpBookmarksSize) >>= nSize_;

                if (nSize_ == nSize) //old config item will throw error
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SetSize(eHELPBOOKMARKS) error!")), 
0);
        }
}

//=============================================================================
// test SvtHistoryOptions::Clear()
void HistoryOptTest::impl_checkClear(const ::rtl::OUString& sList)
{
        if (sList.equalsAscii("PickList"))
        {
                aHistoryOpt.Clear(ePICKLIST);
                if ( !impl_isListEmpty(s_sPickList) )
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Clear(ePICKLIST) error!")), 0);
        }

        else if (sList.equalsAscii("URLHistory"))
        {
                aHistoryOpt.Clear(eHISTORY);
                if ( !impl_isListEmpty(s_sURLHistory) )
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Clear(eHISTORY) error!")), 0);
        }

        else if (sList.equalsAscii("HelpBookmarks"))
        {
                aHistoryOpt.Clear(eHELPBOOKMARKS);
                if ( !impl_isListEmpty(s_sHelpBookmarks) )
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Clear(eHELPBOOKMARKS) error!")), 
0);
        }       
}

//=============================================================================
// test SvtHistoryOptions::GetList()
void HistoryOptTest::impl_checkGetList(const ::rtl::OUString& sList)
{
        if (sList.equalsAscii("PickList"))
        {
                impl_clearList(s_sPickList);
                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("file:///c/test1"),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                css::uno::Sequence< css::uno::Sequence< 
css::beans::PropertyValue > > aHistoryList = aHistoryOpt.GetList( ePICKLIST );

                if ( aHistoryList.getLength()==0 )
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetList(ePICKLIST) error!")), 0);
        }

        else if (sList.equalsAscii("URLHistory"))
        {
                impl_clearList(s_sURLHistory);
                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("file:///c/test1"),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                css::uno::Sequence< css::uno::Sequence< 
css::beans::PropertyValue > > aHistoryList = aHistoryOpt.GetList( eHISTORY );

                if ( aHistoryList.getLength()==0 )
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetList(eHISTORY) error!")), 0);
        }

        else if (sList.equalsAscii("HelpBookmarks"))
        {
                impl_clearList(s_sHelpBookmarks);
                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("file:///c/test1"),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                css::uno::Sequence< css::uno::Sequence< 
css::beans::PropertyValue > > aHistoryList = aHistoryOpt.GetList( 
eHELPBOOKMARKS );

                if ( aHistoryList.getLength()==0 )
                        throw css::uno::RuntimeException(
                        
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GetList(eHELPBOOKMARKS) error!")), 
0);
        }       
}

//=============================================================================
// test SvtHistoryOptions::AppendItem()
void HistoryOptTest::impl_checkAppendItem(const ::rtl::OUString& sList)
{
        if (sList.equalsAscii("PickList"))
        {
                impl_clearList(s_sPickList);

                aHistoryOpt.SetSize(ePICKLIST, (sal_uInt32)4); // nSize = 4
                sal_Int32 nListSize = aHistoryOpt.GetSize(ePICKLIST);

                ::rtl::OUStringBuffer sMsg(256);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(", the list order:\n");
                                
                for (sal_Int32 i=0; i<nListSize; ++i)
                        aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::valueOf(i), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::valueOf(nListSize), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t1.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t1.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::valueOf((sal_Int32)2), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:2,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::valueOf((sal_Int32)1), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:1,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");


                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t2.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t2.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.SetSize(ePICKLIST, (sal_uInt32)6); // nSize = 6
                nListSize = aHistoryOpt.GetSize(ePICKLIST);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t3.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t3.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t4.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t4.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.SetSize(ePICKLIST, (sal_uInt32)4); // nSize = 4
                nListSize = aHistoryOpt.GetSize(ePICKLIST);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t5.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t5.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t6.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t6.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( ePICKLIST  , 
                        ::rtl::OUString::createFromAscii("t7.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append t7.odt,the list order:\n");
                impl_appendItem(s_sPickList, sMsg);
                sMsg.appendAscii("\n");

                
LOG_APPENDITEM_PICKLIST(::rtl::OUStringToOString(sMsg.makeStringAndClear(), 
RTL_TEXTENCODING_UTF8).getStr())
        }

        else if (sList.equalsAscii("URLHistory"))
        {
                impl_clearList(s_sURLHistory);

                aHistoryOpt.SetSize(eHISTORY, (sal_uInt32)4);
                sal_Int32 nListSize = aHistoryOpt.GetSize(eHISTORY);

                ::rtl::OUStringBuffer sMsg(256);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(", the list order:\n");

                for (sal_Int32 i=0; i<nListSize; ++i)
                        aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::valueOf(i), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::valueOf(nListSize), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h1.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h1.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::valueOf((sal_Int32)2), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:2,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::valueOf((sal_Int32)1), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:1,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");


                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h2.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h2.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.SetSize(eHISTORY, (sal_uInt32)6); // nSize = 6
                nListSize = aHistoryOpt.GetSize(eHISTORY);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h3.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h3.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h4.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h4.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.SetSize(eHISTORY, (sal_uInt32)4); // nSize = 4
                nListSize = aHistoryOpt.GetSize(eHISTORY);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h5.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h5.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h6.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h6.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHISTORY  , 
                        ::rtl::OUString::createFromAscii("h7.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append h7.odt,the list order:\n");
                impl_appendItem(s_sURLHistory, sMsg);
                sMsg.appendAscii("\n");

                
LOG_APPENDITEM_URLHISTORY(::rtl::OUStringToOString(sMsg.makeStringAndClear(), 
RTL_TEXTENCODING_UTF8).getStr())

        }

        else if (sList.equalsAscii("HelpBookmarks"))
        {
                impl_clearList(s_sHelpBookmarks);

                aHistoryOpt.SetSize(eHELPBOOKMARKS, (sal_uInt32)10);
                sal_Int32 nListSize = aHistoryOpt.GetSize(eHELPBOOKMARKS);

                ::rtl::OUStringBuffer sMsg(256);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(", the list order:\n");

                for (sal_Int32 i=0; i<nListSize; ++i)
                        aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::valueOf(i), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::valueOf(nListSize), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b1.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b1.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::valueOf((sal_Int32)2), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:2,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::valueOf((sal_Int32)1), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append:1,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");


                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b2.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b2.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.SetSize(eHELPBOOKMARKS, (sal_uInt32)20); // nSize = 
20
                nListSize = aHistoryOpt.GetSize(eHELPBOOKMARKS);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b3.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b3.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b4.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b4.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.SetSize(eHELPBOOKMARKS, (sal_uInt32)15); // nSize = 
15
                nListSize = aHistoryOpt.GetSize(eHELPBOOKMARKS);
                sMsg.appendAscii("nSize = ");
                sMsg.append(::rtl::OUString::valueOf(nListSize));
                sMsg.appendAscii(",the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b5.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b5.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b6.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b6.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                aHistoryOpt.AppendItem( eHELPBOOKMARKS  , 
                        ::rtl::OUString::createFromAscii("b7.odt"), 
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii(""),
                        ::rtl::OUString::createFromAscii("") );
                sMsg.appendAscii("append b7.odt,the list order:\n");
                impl_appendItem(s_sHelpBookmarks, sMsg);
                sMsg.appendAscii("\n");

                
LOG_APPENDITEM_HELPBOOKMARKS(::rtl::OUStringToOString(sMsg.makeStringAndClear(),
 RTL_TEXTENCODING_UTF8).getStr())
        }
}

//=============================================================================
void HistoryOptTest::impl_checkPicklist()
{
        impl_checkGetSize(s_sPickList);
        impl_checkSetSize(s_sPickList);

        impl_checkClear(s_sPickList);
        impl_checkGetList(s_sPickList);
        impl_checkAppendItem(s_sPickList);
}

//=============================================================================
void HistoryOptTest::impl_checkURLHistory()
{
        impl_checkGetSize(s_sURLHistory);
        impl_checkSetSize(s_sURLHistory);

        impl_checkClear(s_sURLHistory);
        impl_checkGetList(s_sURLHistory);
        impl_checkAppendItem(s_sURLHistory);
}

//=============================================================================
void HistoryOptTest::impl_checkHelpBookmarks()
{
        impl_checkGetSize(s_sHelpBookmarks);    
        impl_checkSetSize(s_sHelpBookmarks);

        impl_checkClear(s_sHelpBookmarks);
        impl_checkGetList(s_sHelpBookmarks);
        impl_checkAppendItem(s_sHelpBookmarks);
}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to