/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Implementation of CTFAStifEntryPoint class
*
*/


// INCLUDE FILES
#include <stiftestinterface.h>
#include "dsytesttooltrace.h"
#include "tfastifentrypoint.h"
#include "tfastiftestsuiteadapter.h"
#include "tfastiftestsuiteadapterroot.h"
#include "tfastiftestcaseadapter.h"
#include "tfastiftestenvironment.h"
#include "tfastiftestlog.h"


// ================= TRACE FUNCTIONS ==============
#ifdef _DEBUG

const TInt KTFAssertDateSize = 32;


// -----------------------------------------------------------------------------
// TraceAssertFunc
// -----------------------------------------------------------------------------
void TraceAssertFunc( const TDesC8& aFile, TInt aLine )
    {
    HBufC* buffer = HBufC::New( aFile.Length() + 1 );
    HBufC* date = HBufC::New( KTFAssertDateSize );
    HBufC* time = HBufC::New( KTFAssertDateSize );
    if ( buffer != NULL && date != NULL && time != NULL )
        {
        buffer->Des().Copy( aFile );
        date->Des().Copy( _L8( __DATE__ ) );
        time->Des().Copy( _L8( __TIME__ ) );
        RDebug::Print( _L( "Assertion failed: file=%s, line=%d, compiled=%s %s" ), buffer->Des().PtrZ(), aLine, date->Des().PtrZ(), time->Des().PtrZ() );
        }
    else
        {
        RDebug::Print( _L( "Assertion and memory allocation failed" ) );
        }
    delete buffer;
    delete date;
    delete time;
    }
#endif

// -----------------------------------------------------------------------------
// LibEntryL
// -----------------------------------------------------------------------------
EXPORT_C CTestModuleBase* LibEntryL( void )
    {
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::LibEntryL()" ) ) );
    CTFAStifEntryPoint* entry = CTFAStifEntryPoint::NewL();
    // Stif framework deletes the CTestModuleBase-derived object
    // which deletes the entry point object.
    CTestModuleBase* retval = STATIC_CAST( CTFAStifTestSuiteAdapterRoot*, entry->RootSuiteAdapter() );
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::LibEntryL - return 0x%x" ), retval ) );
    return retval;
    }
    
    
// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::NewL
// -----------------------------------------------------------------------------
CTFAStifEntryPoint* CTFAStifEntryPoint::NewL( void )
    {
    CTFAStifEntryPoint* entry = new ( ELeave ) CTFAStifEntryPoint();
    CleanupStack::PushL( entry );
    entry->ConstructL();
    CleanupStack::Pop( entry );
    return entry;
    }
    
    
// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::CTFAStifEntryPoint
// -----------------------------------------------------------------------------
CTFAStifEntryPoint::CTFAStifEntryPoint( void )
    {
    }
    
    
// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::~CTFAStifEntryPoint
// -----------------------------------------------------------------------------
CTFAStifEntryPoint::~CTFAStifEntryPoint( void )
    {
    }
    
    
// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::ConstructL
// -----------------------------------------------------------------------------
void CTFAStifEntryPoint::ConstructL( void )
    {
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::ConstructL()" ) ) );
    CTFAEntryPoint::ConstructL();
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::ConstructL - return void" ) ) );
    }
    
    
// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::CreateSuiteAdapterLC
// -----------------------------------------------------------------------------
MTFATestSuiteAdapter* CTFAStifEntryPoint::CreateSuiteAdapterLC( CTFATestSuite& aSuite, TBool aRoot )
    {
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::CreateSuiteAdapterLC(0x%x, %d )" ), &aSuite, aRoot ) );
    MTFATestSuiteAdapter* adapter;
    if ( aRoot )
        {
        adapter = CTFAStifTestSuiteAdapterRoot::NewLC( aSuite, this );
        }
    else
        {
        adapter = CTFAStifTestSuiteAdapter::NewLC( aSuite, NULL );
        }
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::CreateSuiteAdapterLC - return 0x%x" ), adapter ) );
    return adapter;
    }
    
    
// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::CreateTestAdapterLC
// -----------------------------------------------------------------------------
MTFATestCaseAdapter* CTFAStifEntryPoint::CreateTestAdapterLC( CTFATestCase& aCase )
    {
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::CreateTestAdapterLC(0x%x)" ), &aCase ) );
    CTFAStifTestCaseAdapter* adapter = CTFAStifTestCaseAdapter::NewLC( aCase, 
        STATIC_CAST( CTFAStifTestSuiteAdapterRoot*, RootSuiteAdapter() ) );
    STATIC_CAST( CTFAStifTestSuiteAdapterRoot*, RootSuiteAdapter() )->AddTestL( *adapter );
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::CreateTestAdapterLC - return 0x%x" ), adapter ) );
    return adapter;
    }
    

// -----------------------------------------------------------------------------
// CTFAStifEntryPoint::CreateEnvironmentL
// -----------------------------------------------------------------------------
CTFATestEnvironment* CTFAStifEntryPoint::CreateEnvironmentL( void )
    {
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::CreateEnvironmentL()" ) ) );
    CTFAStifTestLog* log = CTFAStifTestLog::NewLC();
    CTFAStifTestEnvironment* env = new ( ELeave ) CTFAStifTestEnvironment( *log );
    CleanupStack::Pop( log );
    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFAStifEntryPoint::CreateEnvironmentL - return 0x%x" ), env ) );
    return env;
    }
    
