textandloc_plat/sortutil_api/tsrc/src/testdomsortutilblocks.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 16:55:07 +0300
changeset 16 56cd22a7a1cb
parent 0 1fb32624e06b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:    test sortutil.h
*
*/





// [INCLUDE FILES]
#include <e32svr.h>
#include <stifparser.h>
#include <stiftestinterface.h>
#include <sortutil.h>

#include "testdomsortutil.h"
#include "csortkeyarray.h"

enum TReturnType
    {
    EErrExtraParamaters = KErrGeneral,
    EErrBadParamaters = KErrGeneral,
    EErrFailed = KErrGeneral
    };

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CTestDOMSortUtil::RunMethodL
// Run specified method. Contains also table of test mothods and their names.
// -----------------------------------------------------------------------------
//
TInt CTestDOMSortUtil::RunMethodL( CStifItemParser& aItem ) 
    {

    static TStifFunctionInfo const KFunctions[] =
        {  
        // First string is the function name used in TestScripter script file.
        // Second is the actual implementation member function. 

        // test functions of TSortKey class
        ENTRY( "TestSortKeyConstruct", CTestDOMSortUtil::TestSortKeyConstruct ),
        ENTRY( "TestSortKeyText", CTestDOMSortUtil::TestSortKeyText ),
        ENTRY( "TestSortKeyType", CTestDOMSortUtil::TestSortKeyType ),

        // test functions of CSortUtil class
        ENTRY( "TestSortUtilNewL", CTestDOMSortUtil::TestSortUtilNewL ),

        // test functions of MSortUtil class
        ENTRY( "TestSortUtilCompareItems", 
                CTestDOMSortUtil::TestSortUtilCompareItemsL ),

        // [test cases entries]

        };

    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );

    return RunInternalL( KFunctions, count, aItem );

    }

// -----------------------------------------------------------------------------
// CTestDOMSortUtil::TestSortKeyConstruct
// -----------------------------------------------------------------------------
//
TInt CTestDOMSortUtil::TestSortKeyConstruct( CStifItemParser& /*aItem*/ )
    {

    // Print to UI
    _LIT( KTestDOMSortUtil, "testdomsortutil" );
    _LIT( KTestSortKeyConstruct, "In SortKey Construct" );
    TestModuleIf().Printf( 0, KTestDOMSortUtil, KTestSortKeyConstruct );
    // Print to log file
    iLog->Log( KTestSortKeyConstruct );

    _LIT( KText, "SoftKey" );
    TSortKey sortKey( KText, ESortKeyBasic );

    return KErrNone;

    }

// -----------------------------------------------------------------------------
// CTestDOMSortUtil::TestSortKeyText
// -----------------------------------------------------------------------------
//
TInt CTestDOMSortUtil::TestSortKeyText( CStifItemParser& /*aItem*/ )
    {

    // Print to UI
    _LIT( KTestDOMSortUtil, "testdomsortutil" );
    _LIT( KTestSortKeyText, "In SortKey Text" );
    TestModuleIf().Printf( 0, KTestDOMSortUtil, KTestSortKeyText );
    // Print to log file
    iLog->Log( KTestSortKeyText );

    _LIT( KText, "text" );
    TSortKey sortKey( KText, ESortKeyBasic );

    TDesC text = sortKey.Text();
    STIF_ASSERT_NOT_EQUALS( 0, text.Length() );
    return KErrNone;

    }

// -----------------------------------------------------------------------------
// CTestDOMSortUtil::TestSortKeyType
// -----------------------------------------------------------------------------
//
TInt CTestDOMSortUtil::TestSortKeyType( CStifItemParser& /*aItem*/ )
    {

    // Print to UI
    _LIT( KTestDOMSortUtil, "testdomsortutil" );
    _LIT( KTestSortKeyType, "In SortKey Type" );
    TestModuleIf().Printf( 0, KTestDOMSortUtil, KTestSortKeyType );
    // Print to log file
    iLog->Log( KTestSortKeyType );

    _LIT( KText, "text" );
    TSortKey sortKey( KText, ESortKeyBasic );

    TSortKeyType type = sortKey.Type();
    STIF_ASSERT_EQUALS( ESortKeyBasic, type );
    return KErrNone;

    }

// -----------------------------------------------------------------------------
// CTestDOMSortUtil::TestSortUtilNewL
// -----------------------------------------------------------------------------
//
TInt CTestDOMSortUtil::TestSortUtilNewL( CStifItemParser& /*aItem*/ )
    {

    // Print to UI
    _LIT( KTestDOMSortUtil, "testdomsortutil" );
    _LIT( KTestSortUtilNewL, "In SortUtil NewL" );
    TestModuleIf().Printf( 0, KTestDOMSortUtil, KTestSortUtilNewL );
    // Print to log file
    iLog->Log( KTestSortUtilNewL );

    CSortUtil* sortUtil = CSortUtil::NewL();
    CleanupStack::PushL( sortUtil );
    STIF_ASSERT_NOT_NULL( sortUtil );

    CleanupStack::PopAndDestroy( sortUtil );
    return KErrNone;

    }

// -----------------------------------------------------------------------------
// CTestDOMSortUtil::TestSortUtilCompareItemsL
// -----------------------------------------------------------------------------
//
TInt CTestDOMSortUtil::TestSortUtilCompareItemsL( CStifItemParser& aItem )
    {

    // Print to UI
    _LIT( KSortUtilsTestClass, "testdomsortutil" );
    _LIT( KTestSortUtilCompareItems, "In MSortUtil CompareItems" );
    TestModuleIf().Printf( 0, KSortUtilsTestClass, KTestSortUtilCompareItems );
    // Print to log file
    iLog->Log( KTestSortUtilCompareItems );

    TInt numLhs = 0;
    TInt numRhs = 0;
    User::LeaveIfError(aItem.GetNextInt (numLhs));
    __ASSERT_ALWAYS(numLhs > 0, User::Leave(EErrBadParamaters));
    
    User::LeaveIfError(aItem.GetNextInt (numRhs));
    __ASSERT_ALWAYS(numRhs > 0, User::Leave(EErrBadParamaters));

    TPtrC lhs, rhs, extra;

    CSortUtil* sortUtil = CSortUtil::NewL();
    CleanupStack::PushL( sortUtil );
    CSortKeyArray* leftSortKeyArray = CSortKeyArray::NewL();
    CleanupStack::PushL( leftSortKeyArray );
    CSortKeyArray* rightSortKeyArray = CSortKeyArray::NewL();
    CleanupStack::PushL( rightSortKeyArray );

    leftSortKeyArray->Reset();
    rightSortKeyArray->Reset();

    aItem.SetParsingType( CStifItemParser::EQuoteStyleParsing );
    TInt i = 0;
    while( i != numLhs )
    {
        User::LeaveIfError( aItem.GetNextString( lhs ) );
        leftSortKeyArray->AppendL( TSortKey( KNullDesC, ESortKeyBasic ) );
        leftSortKeyArray->SetText( lhs, i );
        i++;
    }

    i = 0;
    while( i != numRhs )
    {
        User::LeaveIfError( aItem.GetNextString( rhs ) );
        rightSortKeyArray->AppendL( TSortKey( KNullDesC, ESortKeyBasic ) );
        rightSortKeyArray->SetText( rhs, i );
        i++;
    }

    TInt expectedResult;
    User::LeaveIfError( aItem.GetNextInt( expectedResult ) );

    __ASSERT_ALWAYS( aItem.GetNextString( extra ) != KErrNone, User::Leave( EErrExtraParamaters ) );
    
    TInt actualResult;
    actualResult = sortUtil->Interface()->CompareItems( *leftSortKeyArray, *rightSortKeyArray );

    leftSortKeyArray->Reset();
    rightSortKeyArray->Reset();

    CleanupStack::PopAndDestroy( rightSortKeyArray );
    CleanupStack::PopAndDestroy( leftSortKeyArray );
    CleanupStack::PopAndDestroy( sortUtil );

    if( ( expectedResult > 0 && actualResult > 0 ) ||
       ( expectedResult < 0 && actualResult < 0 ) ||
       ( expectedResult == 0 && actualResult == 0 ) )
        return KErrNone;
    else
        return EErrFailed;
    }


//  [End of File]