idlefw/tsrc/sapidataplugin/mt_sapidataplugin/mt_sapidataplugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:13:44 +0300
branchRCL_3
changeset 111 053c6c7c14f3
permissions -rw-r--r--
Revision: 201026 Kit: 201033

/*
* Copyright (c) 2010 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: 
*
*/

//  CLASS HEADER
#include "mt_sapidataplugin.h"

//  EXTERNAL INCLUDES
#include <digia/eunit/eunitmacros.h>
#include <hspluginsettings.h>
#include <aipluginsettings.h>
#include <aiutility.h>
//using namespace HSPluginSettingsIf;
#include <sapidataplugin.h>
#include <sapidatapluginuids.hrh>

//  INTERNAL INCLUDES
#include "observer.h"
#include "aicpsexecuteparam.h"
#include "sapidataplugin.h"
#include "caicpscommandbuffer_stub.h"
#include <mcspluginuids.hrh>

_LIT( KPubData, "publisherData" );
_LIT( KText, "Hello test!" );
_LIT( KPublisher, "publisher" );
_LIT( KWRTPublisher, "wrt_publisher");
_LIT( KTemplateWidget,"ai3templatedwidget");
_LIT( KContentIdValue, "com.accuweather.widget.touchNG" );
_LIT8( KContentType, "content_type" );
_LIT8( KContentId, "content_id" );
_LIT8( KAction1, "active_1" );
_LIT8( KAction2, "active_2" );
_LIT8( KPublisherId, "publisherId" );

// ---------------------------------------------------------------------------
// CleanupResetAndDestroy()
// ---------------------------------------------------------------------------
//
static void CleanupResetAndDestroy( TAny* aAny )
    {
    static_cast< RAiSettingsItemArray* >( aAny )->ResetAndDestroy();
    }

// CONSTRUCTION

// ---------------------------------------------------------------------------
// MT_SapiDataPlugin* MT_SapiDataPlugin::NewL()
// ---------------------------------------------------------------------------
//
MT_SapiDataPlugin* MT_SapiDataPlugin::NewL()
    {
    MT_SapiDataPlugin* self = MT_SapiDataPlugin::NewLC();
    CleanupStack::Pop();

    return self;
    }

// ---------------------------------------------------------------------------
// MT_SapiDataPlugin* MT_SapiDataPlugin::NewLC()
// ---------------------------------------------------------------------------
//
MT_SapiDataPlugin* MT_SapiDataPlugin::NewLC()
    {
    MT_SapiDataPlugin* self = new( ELeave ) MT_SapiDataPlugin();
    CleanupStack::PushL( self );

    self->ConstructL();

    return self;
    }

// ---------------------------------------------------------------------------
// MT_SapiDataPlugin::~MT_SapiDataPlugin()
// ---------------------------------------------------------------------------
//
MT_SapiDataPlugin::~MT_SapiDataPlugin()
    {
    }

// ---------------------------------------------------------------------------
// MT_SapiDataPlugin::MT_SapiDataPlugin()
// ---------------------------------------------------------------------------
//
MT_SapiDataPlugin::MT_SapiDataPlugin()
    {
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::ConstructL()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::ConstructL()
    {
    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
    // It generates the test case table.
    CEUnitTestSuiteClass::ConstructL();
    }

//  METHODS

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::SetupL()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::SetupL()
    {
    iContentObserver = Observer::NewL();    

    iPlugin = CSapiDataPlugin::NewL( );

    // Array owned by the plugin
    RAiSettingsItemArray settings;
    CleanupStack::PushL( TCleanupItem( CleanupResetAndDestroy, &settings ) );
    
    MAiPluginSettings* configuration( AiUtility::CreatePluginSettingsL() );
    CleanupDeletePushL( configuration );
       
    MAiPluginConfigurationItem& item( configuration->AiPluginConfigurationItem() );
    
    _LIT( KPlugin, "plugin" );
    _LIT( KPublisher,  "publisher" );
    _LIT( KMtSapiDataPlugin, "mt_sapi_plugin" );
    
    item.SetOwnerL( KPlugin() );
    item.SetNameL( KPublisher() );
    item.SetValueL( KMtSapiDataPlugin() );
    
    settings.AppendL( configuration );
    CleanupStack::Pop( configuration );
    
    iCommandBuffer = CAiCpsCommandBuffer::NewL();
    
    // Ensure interface is available
    iCommandBuffer->GetCPSInterfaceL();
                
    // No publisher there, set empty
    iPlugin->SetProperty( CHsContentPublisher::ECpsCmdBuffer, static_cast< MAiCpsCommandBuffer* >( iCommandBuffer ) ); 
    iPlugin->ConfigureL( settings );
    iPlugin->SubscribeL( *iContentObserver );
    iPlugin->Start( CHsContentPublisher::ESystemStartup );
    iPlugin->Resume( CHsContentPublisher::EForeground );
    
    CleanupStack::PopAndDestroy(); // settings
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::Teardown()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::Teardown()
    {
    if ( iPlugin )
        {
        delete iPlugin;
        iPlugin = NULL;
        }
    if ( iContentObserver )
        {
        delete iContentObserver;
        iContentObserver = NULL;
        }
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::TestCommandBuffer()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::TestCommandBuffer()
    {
    CLiwDefaultMap* filter = CLiwDefaultMap::NewLC();
    filter->InsertL( KPublisherId, TLiwVariant( KWRTPublisher ));
    filter->InsertL( KContentType, TLiwVariant( KTemplateWidget ));
    filter->InsertL( KContentId, TLiwVariant( KContentIdValue ));
    
    iCommandBuffer->Flush();
    
    iCommandBuffer->AddCommand( _L("1"), KPubData, filter, KAction1 );
    iCommandBuffer->AddCommand( _L("1"), KPubData, filter, KAction2 );

    iCommandBuffer->AddCommand( _L("2"), KPubData, filter, KAction1 );
    
    EUNIT_ASSERT_EQUALS( iCommandBuffer->iPlugins.Count(), 2);
    EUNIT_ASSERT_EQUALS( iCommandBuffer->iPlugins[0]->iActions.Count(), 2);    
    
    CleanupStack::PopAndDestroy( filter );    
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::TestActivity()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::TestActivity()
    {
    iPlugin->Stop( CHsContentPublisher::ESystemShutdown );
    EUNIT_ASSERT(iPlugin->IsStopped());
    
    iPlugin->Resume( CHsContentPublisher::EForeground );
    EUNIT_ASSERT(!iPlugin->IsActive());
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::TestSuspendL()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::TestSuspendL()
    {
    EUNIT_ASSERT( iPlugin->IsActive() );
    iPlugin->Suspend( CHsContentPublisher::EBackground );
    EUNIT_ASSERT( !iPlugin->IsActive() );
    iPlugin->Stop( CHsContentPublisher::ESystemShutdown );
    EUNIT_ASSERT( iPlugin->IsStopped() );
    iPlugin->Suspend( CHsContentPublisher::EBackground );
    EUNIT_ASSERT( iPlugin->IsStopped() );
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::TestPropertyL()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::TestPropertyL()
    {
    TAny* anyPtr = NULL;
    
    anyPtr = iPlugin->GetProperty( CHsContentPublisher::EPublisherContent );
    EUNIT_ASSERT( anyPtr );

    iPlugin->Stop( CHsContentPublisher::ESystemShutdown );
    iPlugin->SetProperty( CHsContentPublisher::ECpsCmdBuffer, NULL ); 
    EUNIT_ASSERT_SPECIFIC_LEAVE( iPlugin->StartL( CHsContentPublisher::ESystemStartup ), KErrNotSupported );
    
    anyPtr = iPlugin->GetProperty( CHsContentPublisher::ECpsCmdBuffer );
    EUNIT_ASSERT( anyPtr == NULL );
    }

// ---------------------------------------------------------------------------
// void MT_SapiDataPlugin::TestFreeEngineL()
// ---------------------------------------------------------------------------
//
void MT_SapiDataPlugin::TestPublishL()
    {
    TInt cID1 = 1;
    TInt cID2 = 2;
    TBool founded = EFalse;
    TPtrC valPtr;
    valPtr.Set( KText );

    iPlugin->PublishTextL( iContentObserver, cID1, valPtr );
    
    HBufC* contentText = HBufC::NewLC(valPtr.Size());
    TPtr cDes = contentText->Des();
    cDes.Copy(valPtr);
    
    for (int i = 0; i < iPlugin->iDataArray.Count(); i++)
        if ( iPlugin->iDataArray[i] == *contentText )
            {
            founded = ETrue;
            break;
            }

    EUNIT_ASSERT(founded);

    CleanupStack::Pop( contentText );
    }

//  TEST TABLE

EUNIT_BEGIN_TEST_TABLE
    (
    MT_SapiDataPlugin,
    "SapiDataPlugin module tests",
    "MODULE"
    )

EUNIT_TEST
    (
    "Activity",
    "SapiDataPlugin",
    "Stop, Resume",
    "FUNCTIONALITY",
    SetupL, TestActivity, Teardown
    )

EUNIT_TEST
    (
    "Suspend",
    "SapiDataPlugin",
    "Suspend",
    "FUNCTIONALITY",
    SetupL, TestSuspendL, Teardown
    )

EUNIT_TEST
    (
    "Test property",
    "SapiDataPlugin",
    "GetPropertyL, SetPropertyL",
    "FUNCTIONALITY",
    SetupL, TestPropertyL, Teardown
    )

EUNIT_TEST
    (
    "Test publish",
    "SapiDataPlugin",
    "Publish",
    "FUNCTIONALITY",
    SetupL, TestPublishL, Teardown
    )
    
EUNIT_TEST
    (
    "Test command buffer",
    "SapiDataPlugin",
    "CAiCpsCommandBuffer",
    "FUNCTIONALITY",
    SetupL, TestCommandBuffer, Teardown
    )

EUNIT_END_TEST_TABLE

//  END OF FILE