Fix/implement more unit tests that were marked as 'skipped'
This commit is contained in:
		
							parent
							
								
									1333f3c15e
								
							
						
					
					
						commit
						9872bef2f2
					
				| 
						 | 
					@ -46,95 +46,20 @@
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <ctime>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
// cTaskTimer -- 
 | 
					// cTaskTimer -- 
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
template<class TIME_FN, class TIME_TYPE>
 | 
					 | 
				
			||||||
class cTaskTimer
 | 
					class cTaskTimer
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    cTaskTimer(const TSTRING& name) : mName(name), mTotalTime(0), mStartTime(0), mNumStarts(0) {}
 | 
					    cTaskTimer(const TSTRING& name) : mName(name), mTotalTime(0), mStartTime(0), mNumStarts(0) {}
 | 
				
			||||||
    ~cTaskTimer();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void                Start();
 | 
					    inline ~cTaskTimer()
 | 
				
			||||||
    void                Stop();
 | 
					 | 
				
			||||||
    bool                IsRunning()             { return (mStartTime != 0); }
 | 
					 | 
				
			||||||
    void                Reset()                 { mNumStarts = mStartTime = mTotalTime = 0 }
 | 
					 | 
				
			||||||
    int32               GetTotalTime() const;
 | 
					 | 
				
			||||||
    int32               GetNumTimesStarted() const; // returns the number of times start() was called
 | 
					 | 
				
			||||||
    const std::string&  GetName() const;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    TSTRING         mName;
 | 
					 | 
				
			||||||
    int32           mTotalTime;
 | 
					 | 
				
			||||||
    TIME_TYPE       mStartTime;
 | 
					 | 
				
			||||||
    int32           mNumStarts;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// cUnixTimeFn -- Unix version, inserts proper function call and overloads
 | 
					 | 
				
			||||||
//      operator()
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
#include <ctime>
 | 
					 | 
				
			||||||
class cUnixTimeFn
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
    typedef uint32 DataType;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    uint32 operator()()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return time( &dummy_var );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
    time_t dummy_var;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// cUnixTaskTimer -- the Unix typedef...
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
typedef cTaskTimer<cUnixTimeFn, cUnixTimeFn::DataType> cUnixTaskTimer;
 | 
					 | 
				
			||||||
typedef cUnixTaskTimer cGenericTaskTimer;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
// inline implementation
 | 
					 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<class TIME_FN, class TIME_TYPE>
 | 
					 | 
				
			||||||
inline void cTaskTimer<TIME_FN, TIME_TYPE>::Start()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ASSERT(! IsRunning());  
 | 
					 | 
				
			||||||
    TIME_FN GetTime;
 | 
					 | 
				
			||||||
    mStartTime = GetTime();
 | 
					 | 
				
			||||||
    mNumStarts++;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<class TIME_FN, class TIME_TYPE>
 | 
					 | 
				
			||||||
inline void cTaskTimer<TIME_FN, TIME_TYPE>::Stop()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ASSERT(IsRunning());    
 | 
					 | 
				
			||||||
    TIME_FN GetTime;
 | 
					 | 
				
			||||||
    mTotalTime += ( GetTime() - mStartTime );
 | 
					 | 
				
			||||||
    mStartTime = 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<class TIME_FN, class TIME_TYPE>
 | 
					 | 
				
			||||||
inline int32 cTaskTimer<TIME_FN, TIME_TYPE>::GetTotalTime() const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return mTotalTime;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<class TIME_FN, class TIME_TYPE>
 | 
					 | 
				
			||||||
inline const std::string& cTaskTimer<TIME_FN, TIME_TYPE>::GetName() const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return mName
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
template<class TIME_FN, class TIME_TYPE>
 | 
					 | 
				
			||||||
inline cTaskTimer<TIME_FN, TIME_TYPE>::~cTaskTimer()
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // stop the timer if it is currently running
 | 
					        // stop the timer if it is currently running
 | 
				
			||||||
        if(IsRunning())
 | 
					        if(IsRunning())
 | 
				
			||||||
| 
						 | 
					@ -145,6 +70,36 @@ inline cTaskTimer<TIME_FN, TIME_TYPE>::~cTaskTimer()
 | 
				
			||||||
        d.TraceDebug("----- Time to execute %s: %d (started %d times)\n", mName.c_str(), mTotalTime, mNumStarts);
 | 
					        d.TraceDebug("----- Time to execute %s: %d (started %d times)\n", mName.c_str(), mTotalTime, mNumStarts);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    inline void Start()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ASSERT(! IsRunning());
 | 
				
			||||||
 | 
					        time_t dummy;
 | 
				
			||||||
 | 
					        mStartTime = time(&dummy);
 | 
				
			||||||
 | 
					        mNumStarts++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void  Stop()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ASSERT(IsRunning());
 | 
				
			||||||
 | 
					        time_t dummy;
 | 
				
			||||||
 | 
					        mTotalTime += ( time(&dummy) - mStartTime );
 | 
				
			||||||
 | 
					        mStartTime = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool                IsRunning()             { return (mStartTime != 0); }
 | 
				
			||||||
 | 
					    void                Reset()                 { mNumStarts = mStartTime = mTotalTime = 0; }
 | 
				
			||||||
 | 
					    uint32              GetTotalTime() const    { return mTotalTime; }
 | 
				
			||||||
 | 
					    uint32              GetNumTimesStarted() const  { return mNumStarts; }
 | 
				
			||||||
 | 
					    const std::string&  GetName() const         { return mName; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    TSTRING         mName;
 | 
				
			||||||
 | 
					    uint32          mTotalTime;
 | 
				
			||||||
 | 
					    uint32          mStartTime;
 | 
				
			||||||
 | 
					    uint32          mNumStarts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -751,7 +751,7 @@ int cTWModeDbInit::Execute(cErrorQueue* pQueue)
 | 
				
			||||||
      cTWCmdLineUtil::ParsePolicyFile(genreSpecList, mpData->mPolFile, mpData->mSiteKeyFile, pQueue);
 | 
					      cTWCmdLineUtil::ParsePolicyFile(genreSpecList, mpData->mPolFile, mpData->mSiteKeyFile, pQueue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #ifdef TW_PROFILE
 | 
					        #ifdef TW_PROFILE
 | 
				
			||||||
      cWin32TaskTimer timer("cTripwire::GenerateDatabase");
 | 
					      cTaskTimer timer("cTripwire::GenerateDatabase");
 | 
				
			||||||
      timer.Start();
 | 
					      timer.Start();
 | 
				
			||||||
        #endif
 | 
					        #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1375,7 +1375,7 @@ int cTWModeIC::Execute(cErrorQueue* pQueue)
 | 
				
			||||||
               iUserNotify::GetInstance()->Notify(1, TSS_GetString( cTripwire, tripwire::STR_INTEGRITY_CHECK).c_str());
 | 
					               iUserNotify::GetInstance()->Notify(1, TSS_GetString( cTripwire, tripwire::STR_INTEGRITY_CHECK).c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef TW_PROFILE
 | 
					#ifdef TW_PROFILE
 | 
				
			||||||
               cWin32TaskTimer timer("cTripwire::IntegrityCheck");
 | 
					               cTaskTimer timer("cTripwire::IntegrityCheck");
 | 
				
			||||||
               timer.Start();
 | 
					               timer.Start();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
               cIntegrityCheck ic( (cGenre::Genre)dbIter.GetGenre(), specList, dbIter.GetDb(), report, pQueue );
 | 
					               cIntegrityCheck ic( (cGenre::Genre)dbIter.GetGenre(), specList, dbIter.GetDb(), report, pQueue );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -345,7 +345,7 @@ void cTWUtil::WriteDatabase(const TCHAR* filename, cFCODatabaseFile& db, bool bE
 | 
				
			||||||
    //fileHeader.SetVersion(1);
 | 
					    //fileHeader.SetVersion(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef TW_PROFILE
 | 
					#ifdef TW_PROFILE
 | 
				
			||||||
    cWin32TaskTimer timer(_T("Write Database"));
 | 
					    cTaskTimer timer(_T("Write Database"));
 | 
				
			||||||
    timer.Start();
 | 
					    timer.Start();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -370,7 +370,7 @@ void cTWUtil::ReadDatabase(const TCHAR* filename, cFCODatabaseFile& db, const cE
 | 
				
			||||||
                                        cDisplayEncoder::EncodeInline( filename ).c_str() );
 | 
					                                        cDisplayEncoder::EncodeInline( filename ).c_str() );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef TW_PROFILE
 | 
					#ifdef TW_PROFILE
 | 
				
			||||||
    cWin32TaskTimer timer("cTWUtil::ReadDatabase");
 | 
					    cTaskTimer timer("cTWUtil::ReadDatabase");
 | 
				
			||||||
    timer.Start();
 | 
					    timer.Start();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,7 @@
 | 
				
			||||||
#include "twtest/test.h"
 | 
					#include "twtest/test.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PrintChars( const TSTRING& str )
 | 
					void CheckChars( const TSTRING& str, int length_expected = 1)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    TSTRING::const_iterator cur = str.begin();
 | 
					    TSTRING::const_iterator cur = str.begin();
 | 
				
			||||||
    TSTRING::const_iterator end = str.end();
 | 
					    TSTRING::const_iterator end = str.end();
 | 
				
			||||||
| 
						 | 
					@ -51,19 +51,9 @@ void PrintChars( const TSTRING& str )
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    while( cCharUtil::PopNextChar( cur, end, first, last ) )
 | 
					    while( cCharUtil::PopNextChar( cur, end, first, last ) )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        TCOUT << _T("char length: ") << (int)(last - first) << std::endl;
 | 
					        int length = (int)(last - first);
 | 
				
			||||||
 | 
					        TEST(length == length_expected);
 | 
				
			||||||
        TCOUT << _T("char: <");
 | 
					 | 
				
			||||||
        for( TSTRING::const_iterator at = first; at != last; at++ )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if( at != first )
 | 
					 | 
				
			||||||
                TCOUT << _T(",");
 | 
					 | 
				
			||||||
            TCOUT << (int)*at;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
        TCOUT << _T(">") << std::endl;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    TCOUT << _T("----------------------------") << std::endl;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
| 
						 | 
					@ -71,8 +61,9 @@ void PrintChars( const TSTRING& str )
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////    
 | 
					///////////////////////////////////////////////////////////////////////////    
 | 
				
			||||||
void TestCharUtilBasic()
 | 
					void TestCharUtilBasic()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PrintChars( _T("foo") );
 | 
					    CheckChars( "foo" );
 | 
				
			||||||
    PrintChars( _T("fo\x23 54") );
 | 
					    CheckChars( "fo\x23 54" );
 | 
				
			||||||
 | 
					    CheckChars( "\U0001F408", 4 );  //Cat emoji. Assumes UTF-8
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void RegisterSuite_CharUtil()
 | 
					void RegisterSuite_CharUtil()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,84 +36,89 @@
 | 
				
			||||||
#include "core/debug.h"
 | 
					#include "core/debug.h"
 | 
				
			||||||
#include "twtest/test.h"
 | 
					#include "twtest/test.h"
 | 
				
			||||||
#include "fco/fco.h"
 | 
					#include "fco/fco.h"
 | 
				
			||||||
 | 
					#include "fco/twfactory.h"
 | 
				
			||||||
 | 
					#include "core/errorbucketimpl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					namespace
 | 
				
			||||||
static void PrintDb( cHierDatabase::iterator iter, cDebug d, bool bFirst = true )
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if( ! bFirst )
 | 
					int num_processed = 0;
 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        iter.Descend();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    d.TraceDebug( "-- Processing directory %s\n", iter.GetCwd().c_str() );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for( iter.SeekBegin(); ! iter.Done(); iter.Next() )
 | 
					void util_ProcessDir( iFCODataSourceIter* pIter )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
        d.TraceDebug( "Processing entry %s\n", iter.GetName().c_str() );
 | 
					    TEST( ! pIter->Done() );
 | 
				
			||||||
        if( iter.CanDescend() )
 | 
					    TEST( pIter->CanDescend() );
 | 
				
			||||||
        {
 | 
					    if( ! pIter->CanDescend() )
 | 
				
			||||||
            d.TraceDebug( ">>Descending...\n" );
 | 
					 | 
				
			||||||
            PrintDb(iter, d, false);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    d.TraceDebug( "-- Done Processing directory %s\n", iter.GetCwd().c_str() );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void PrintIter( cFSDataSourceIter iter, cDebug& d )
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    int count = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if( ! iter.CanDescend() )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        d.TraceError( "Iterator cannot descend; returning!\n");
 | 
					 | 
				
			||||||
        TEST(!"Unexpected !CanDescend at beginning of test");
 | 
					 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    iter.Descend();
 | 
					 | 
				
			||||||
    iter.TraceContents();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for( iter.SeekBegin(); ! iter.Done(); iter.Next() )
 | 
					    pIter->Descend();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for( pIter->SeekBegin(); ! pIter->Done(); pIter->Next() )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        count++;
 | 
					        iFCO* pFCO = pIter->CreateFCO();
 | 
				
			||||||
        iFCO* pFCO = iter.CreateFCO();
 | 
					 | 
				
			||||||
        if( pFCO )
 | 
					        if( pFCO )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            pFCO->TraceContents();
 | 
					            num_processed++;
 | 
				
			||||||
            pFCO->Release();
 | 
					            pFCO->Release();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if( pIter->CanDescend() )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                TW_UNIQUE_PTR<iFCODataSourceIter> pCopy( pIter->CreateCopy() );
 | 
				
			||||||
 | 
					                util_ProcessDir( pCopy.get() );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            d.TraceError( "*** Create of FCO failed!\n");
 | 
					            fail("CreateFCO failure");
 | 
				
			||||||
            fail("CreateFCO() failure");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if( iter.CanDescend() )
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void util_ProcessDir( const cFCOName& name )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
            d.TraceDebug( ">>Descending...\n" );
 | 
					    //Create a cFSDataSourceIter the same way we do in DB gen / IC
 | 
				
			||||||
            PrintIter(iter, d);
 | 
					    TW_UNIQUE_PTR<iFCODataSourceIter>   pDSIter(iTWFactory::GetInstance()->CreateDataSourceIter());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cErrorQueue errorQueue;
 | 
				
			||||||
 | 
					    pDSIter->SetErrorBucket(&errorQueue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pDSIter->SeekToFCO  ( name, false ); // false means don't generate my peers...
 | 
				
			||||||
 | 
					    if( ! pDSIter->Done() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        iFCO* pFCO = pDSIter->CreateFCO();
 | 
				
			||||||
 | 
					        if( pFCO )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            num_processed++;
 | 
				
			||||||
 | 
					            pFCO->Release();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if( pDSIter->CanDescend() )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                TW_UNIQUE_PTR<iFCODataSourceIter> pCopy( pDSIter->CreateCopy() );
 | 
				
			||||||
 | 
					                util_ProcessDir( pCopy.get() );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            fail("CreateFCO failure");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TEST(count > 0);
 | 
					    TEST( 0 == errorQueue.GetNumErrors());
 | 
				
			||||||
 | 
					    TEST( 0 < num_processed );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // namespace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestFSDataSourceIter()
 | 
					void TestFSDataSourceIter()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    skip("Fix this test");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cFSDataSourceIter   iter;
 | 
					 | 
				
			||||||
    cDebug              d("TestFSDataSourceIter");
 | 
					    cDebug              d("TestFSDataSourceIter");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cFCOName base(TwTestDir());
 | 
					    cFCOName base(TwTestDir());
 | 
				
			||||||
 | 
					    util_ProcessDir(base);
 | 
				
			||||||
    // go to my temp directory and iterate over everything!
 | 
					 | 
				
			||||||
    iter.SeekToFCO( cFCOName(TwTestDir()) );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // print out everything below the iterator
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    PrintIter( iter, d );
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void RegisterSuite_FSDataSourceIter()
 | 
					void RegisterSuite_FSDataSourceIter()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,13 +32,34 @@
 | 
				
			||||||
// fsobject_t -- the file system object test driver
 | 
					// fsobject_t -- the file system object test driver
 | 
				
			||||||
#include "fs/stdfs.h"
 | 
					#include "fs/stdfs.h"
 | 
				
			||||||
#include "fs/fsobject.h"
 | 
					#include "fs/fsobject.h"
 | 
				
			||||||
 | 
					#include "fs/fspropcalc.h"
 | 
				
			||||||
#include "test.h"
 | 
					#include "test.h"
 | 
				
			||||||
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestFSObject()
 | 
					void TestFSObject()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    cDebug d("TestFSObject");
 | 
					    cDebug d("TestFSObject");
 | 
				
			||||||
    d.TraceError("Implement this!\n");
 | 
					
 | 
				
			||||||
    skip("TestFSObject not implemented");
 | 
					    cFCOName path( TwTestPath("fsobject") );
 | 
				
			||||||
 | 
					    std::ofstream fstr(path.AsString().c_str());
 | 
				
			||||||
 | 
					    if(fstr.bad())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        d.TraceError("Unable to create test file %s!\n", path.AsString().c_str());
 | 
				
			||||||
 | 
					        TEST(false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    fstr.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cFSObject obj(path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cFSPropCalc propCalc;
 | 
				
			||||||
 | 
					    cFCOPropVector v(obj.GetPropSet()->GetValidVector().GetSize());
 | 
				
			||||||
 | 
					    for( int x=0; x < cFSPropSet::PROP_NUMITEMS; x++)
 | 
				
			||||||
 | 
					        v.AddItem(x);
 | 
				
			||||||
 | 
					    propCalc.SetPropVector(v);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    obj.AcceptVisitor(&propCalc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TEST(obj.GetPropSet()->GetNumProps() == cFSPropSet::PROP_NUMITEMS);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void RegisterSuite_FSObject()
 | 
					void RegisterSuite_FSObject()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,9 +158,13 @@ void TestRefCountObj()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //These fields only exist in debug builds, so we can't use TEST() here.
 | 
					#ifdef DEBUG
 | 
				
			||||||
    ASSERT(cRefCountObj::objectCounter == 0);
 | 
					    //These fields only exist in debug builds
 | 
				
			||||||
    ASSERT(cRefCountObj::referenceCounter == 0);
 | 
					    TEST(cRefCountObj::objectCounter == 0);
 | 
				
			||||||
 | 
					    TEST(cRefCountObj::referenceCounter == 0);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    TEST("This test can only make useful assertions in debug builds");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    db.TraceAlways("Done...\n");
 | 
					    db.TraceAlways("Done...\n");
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,12 +32,29 @@
 | 
				
			||||||
// tasktimer_t -- test driver for cTaskTimer
 | 
					// tasktimer_t -- test driver for cTaskTimer
 | 
				
			||||||
#include "core/stdcore.h"
 | 
					#include "core/stdcore.h"
 | 
				
			||||||
#include "test.h"
 | 
					#include "test.h"
 | 
				
			||||||
 | 
					#include "core/tasktimer.h"
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TestTaskTimer()
 | 
					void TestTaskTimer()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    cDebug d("TestTaskTimer");
 | 
					    cTaskTimer timer("unit testing");
 | 
				
			||||||
    d.TraceError("Implement this!\n");
 | 
					
 | 
				
			||||||
    skip("TestTaskTimer unimplemented");
 | 
					    TEST(!timer.IsRunning());
 | 
				
			||||||
 | 
					    TEST(0 == timer.GetTotalTime());
 | 
				
			||||||
 | 
					    TEST(0 == timer.GetNumTimesStarted());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for( int counter=0; counter<5; counter++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        timer.Start();
 | 
				
			||||||
 | 
					        TEST(timer.IsRunning());
 | 
				
			||||||
 | 
					        sleep(1);
 | 
				
			||||||
 | 
					        timer.Stop();
 | 
				
			||||||
 | 
					        TEST(!timer.IsRunning());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TEST(!timer.IsRunning());
 | 
				
			||||||
 | 
					    TEST(5 >= timer.GetTotalTime());
 | 
				
			||||||
 | 
					    TEST(5 == timer.GetNumTimesStarted());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void RegisterSuite_TaskTimer()
 | 
					void RegisterSuite_TaskTimer()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -55,38 +55,6 @@ void TestHex();
 | 
				
			||||||
        TEST( false ); \
 | 
					        TEST( false ); \
 | 
				
			||||||
    } catch( error& ) {}
 | 
					    } catch( error& ) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* We don't do atoi stuff in cTWLocale anymore
 | 
					 | 
				
			||||||
void TestAtoi()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // setup
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    int32 n;
 | 
					 | 
				
			||||||
    TSTRING str = _T("123456");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // Try formatting with our default locale
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    TWLocale::InitGlobalLocale();
 | 
					 | 
				
			||||||
    n = cTWLocale::FormatNumberClassic( str );
 | 
					 | 
				
			||||||
    TEST( n == 123456 );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //    
 | 
					 | 
				
			||||||
    // Try formatting with "" locale
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    std::locale::global( std::locale("") );
 | 
					 | 
				
			||||||
    n = cTWLocale::FormatNumberClassic( str );
 | 
					 | 
				
			||||||
    TEST( n == 123456 );
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    //    
 | 
					 | 
				
			||||||
    // Try formatting with "C" locale
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    std::locale::global( std::locale("") );
 | 
					 | 
				
			||||||
    n = cTWLocale::FormatNumberClassic( str );
 | 
					 | 
				
			||||||
    TEST( n == 123456 );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void TestItoa()
 | 
					void TestItoa()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    try
 | 
					    try
 | 
				
			||||||
| 
						 | 
					@ -129,110 +97,8 @@ void TestItoa()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* We don't do atoi stuff in cTWLocale anymore, so no roundtrip
 | 
					 | 
				
			||||||
void TestRoundtrip()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // init
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    cTWLocale::InitGlobalLocale();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // atoitoa
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    TSTRING strIn  = _T("123456");
 | 
					 | 
				
			||||||
    TSTRING strOut;
 | 
					 | 
				
			||||||
    strOut = cTWLocale::FormatNumber( cTWLocale::FormatNumberClassic( strIn ), strOut );
 | 
					 | 
				
			||||||
    // don't know if string will be the same due to possible changes in formatting from locale
 | 
					 | 
				
			||||||
    // ASSERT( strOut == strIn ); <---- can't do this ^^^
 | 
					 | 
				
			||||||
    TEST( 123456 == cTWLocale::FormatNumberClassic( strOut ) );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // itoatoi
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    int32 nIn  = 654321;
 | 
					 | 
				
			||||||
    int32 nOut;
 | 
					 | 
				
			||||||
    nOut = cTWLocale::FormatNumberClassic( cTWLocale::FormatNumber( nIn, strIn ) );
 | 
					 | 
				
			||||||
    TEST( nOut == nIn );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void TestFlags()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    skip("Modernize & re-enable this");
 | 
					 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    // init
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    cTWLocale::InitGlobalLocale();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    // hex
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    TSTRING str = _T("FF");
 | 
					 | 
				
			||||||
    int n = cTWLocale::FormatNumber( str, std::ios_base::hex );
 | 
					 | 
				
			||||||
    TEST( n == 0xFF );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    // bad number for dec
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    ASSERT_THAT_IT_THROWS( cTWLocale::FormatNumberAsHex( str ), eError );
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    // oct
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    TSTRING strOct = _T("0712");
 | 
					 | 
				
			||||||
    n = cTWLocale::FormatNumber( strOct, std::ios_base::oct );
 | 
					 | 
				
			||||||
    TEST( n == 0712 );
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    // oct again
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    strOct = _T("00712");
 | 
					 | 
				
			||||||
    n = cTWLocale::FormatNumber( strOct, std::ios_base::oct );
 | 
					 | 
				
			||||||
    TEST( n == 0712 );
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    // oct again again
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    strOct = _T("712");
 | 
					 | 
				
			||||||
    n = cTWLocale::FormatNumber( strOct, std::ios_base::oct );
 | 
					 | 
				
			||||||
    TEST( n == 0712 );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // 
 | 
					 | 
				
			||||||
    // try bad oct
 | 
					 | 
				
			||||||
    //
 | 
					 | 
				
			||||||
    ASSERT_THAT_IT_THROWS( cTWLocale::FormatNumber( _T("99"), std::ios_base::oct ), eError );
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
void doTestHex(const uint32 value, const std::string& expected, const std::string& expected2 = "")
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    TSTRING str = cTWLocale::FormatNumberAsHex( value );
 | 
					 | 
				
			||||||
    TCERR << "STR = " << str << " | Expected = " << expected << " | Expected2 = " << expected2 << std::endl;
 | 
					 | 
				
			||||||
    TEST( str == expected || (!expected2.empty() && str == expected2) );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void TestHex()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    TSTRING str;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    doTestHex( 0x1234, _T("1234") );
 | 
					 | 
				
			||||||
    doTestHex( 16, _T("10") );
 | 
					 | 
				
			||||||
    doTestHex( 0x12344321, _T("12344321") );
 | 
					 | 
				
			||||||
    doTestHex( 0xFFFFFFFF, _T("FFFFFFFF"),  _T("ffffffff"));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void RegisterSuite_TWLocale()
 | 
					void RegisterSuite_TWLocale()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
//    RegisterTest("TWLocale", "Hex", TestHex);
 | 
					 | 
				
			||||||
//    RegisterTest("TWLocale", "Atoi", TestAtoi);
 | 
					 | 
				
			||||||
    RegisterTest("TWLocale", "Itoa", TestItoa);
 | 
					    RegisterTest("TWLocale", "Itoa", TestItoa);
 | 
				
			||||||
    RegisterTest("TWLocale", "Flags", TestFlags);
 | 
					 | 
				
			||||||
//    RegisterTest("TWLocale", "Roundtrip", TestRoundtrip);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue