/*
* 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 "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: SAP settings test cases
*
*/
// INCLUDE FILES
#include <e32math.h>
#include <e32debug.h>
// Classes under test include
#include "IMPSSAPSettingsStoreTestUtils.h"
#include "wvsapsettingstest.h"
#include <S32strm.h>
#include <S32mem.h>
#include <CImpssapsettingsstore.h>
#include <CImpssapsettings.h>
#include <CIMPSSAPSettingsList.h>
#include <IMPSSAPSettingsStoreDefinitions.h>
#include <IMPSSAPSettingsStoreCenRepUids.h>
#include <IMPSSAPSettingsStorePanics.h>
//Obersever class
#include "WVSAPSettingsObserverTestCases.h"
#define STIF_TRAP( err, operation ) \
TRAP( err, operation ); \
if( err == KErrNoMemory ) \
{ \
User::Leave( KErrNoMemory ); \
} \
//FORWARD DECLARATIONS
class CIMPSSAPSettingsStore;
class CIMPSSAPSettings;
class cimpssapsettingsstoretestobserver;
// ============================= LOCAL FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// ?function_name ?description.
// ?description
// Returns: ?value_1: ?description
// ?value_n: ?description_line1
// ?description_line2
// -----------------------------------------------------------------------------
//
/*
?type ?function_name(
?arg_type arg, // ?description
?arg_type arg) // ?description
{
?code // ?comment
// ?comment
?code
}
*/
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// Cwvsapsettingstest::Case
// Returns a test case by number.
//
// This function contains an array of all available test cases
// i.e pair of case name and test function. If case specified by parameter
// aCaseNumber is found from array, then that item is returned.
//
// The reason for this rather complicated function is to specify all the
// test cases only in one place. It is not necessary to understand how
// function pointers to class member functions works when adding new test
// cases. See function body for instructions how to add new test case.
// -----------------------------------------------------------------------------
//
const TCaseInfo Cwvsapsettingstest::Case (
const TInt aCaseNumber ) const
{
/**
* To add new test cases, implement new test case function and add new
* line to KCases array specify the name of the case and the function
* doing the test case
* In practice, do following
* 1) Make copy of existing test case function and change its name
* and functionality. Note that the function must be added to
* wvsapsettingstest.cpp file and to wvsapsettingstest.h
* header file.
*
* 2) Add entry to following KCases array either by using:
*
* 2.1: FUNCENTRY or ENTRY macro
* ENTRY macro takes two parameters: test case name and test case
* function name.
*
* FUNCENTRY macro takes only test case function name as a parameter and
* uses that as a test case name and test case function name.
*
* Or
*
* 2.2: OOM_FUNCENTRY or OOM_ENTRY macro. Note that these macros are used
* only with OOM (Out-Of-Memory) testing!
*
* OOM_ENTRY macro takes five parameters: test case name, test case
* function name, TBool which specifies is method supposed to be run using
* OOM conditions, TInt value for first heap memory allocation failure and
* TInt value for last heap memory allocation failure.
*
* OOM_FUNCENTRY macro takes test case function name as a parameter and uses
* that as a test case name, TBool which specifies is method supposed to be
* run using OOM conditions, TInt value for first heap memory allocation
* failure and TInt value for last heap memory allocation failure.
*/
static TCaseInfoInternal const KCases[] =
{
// To add new test cases, add new items to this array
// NOTE: When compiled to GCCE, there must be Classname::
// declaration in front of the method name, e.g.
// Cwvsapsettingstest::PrintTest. Otherwise the compiler
// gives errors.
//FUNCENTRY( Cwvsapsettingstest::PrintTest ),
//ENTRY( "Loop test", Cwvsapsettingstest::LoopTest ),
// Example how to use OOM functionality
//OOM_ENTRY( "Loop test with OOM", Cwvsapsettingstest::LoopTest, ETrue, 2, 3),
//OOM_FUNCENTRY( Cwvsapsettingstest::PrintTest, ETrue, 1, 3 ),
ENTRY( "SetupEmpty SAP", Cwvsapsettingstest::SetupEmptySAPL ),
ENTRY( "Setup Partially Filled SAP", Cwvsapsettingstest::SetupPartiallyFilledSAPL ),
ENTRY( "Setup Complete SAP", Cwvsapsettingstest::SetupFullSAPL ),
ENTRY( "Test Data Set and Get APIs", Cwvsapsettingstest::Test_DataSetAndGetL ),
ENTRY( "TestBrand Protection Store", Cwvsapsettingstest::TestBrandProtection_StoreL ),
ENTRY( "TestBrand Protection Update", Cwvsapsettingstest::TestBrandProtection_UpdateL ),
ENTRY( "TestBrand Protection Delete", Cwvsapsettingstest::TestBrandProtection_DeleteL ),
ENTRY( "Test Login Count", Cwvsapsettingstest::TestLoginCountHandlingL ),
ENTRY( "Test Login Count Storage", Cwvsapsettingstest::TestLoginCountStorageL ),
ENTRY( "Test Externalize and Internalize", Cwvsapsettingstest::TestSAPContainerExternalizeInternalizeL ),
ENTRY( "Test Pack-Unpack", Cwvsapsettingstest::TestSAPContainerPackUnpackL ),
ENTRY( "Test Key Value pair", Cwvsapsettingstest::TestSAPContainerKeyValuePairsL ),
ENTRY( "Test SAP Container Copy", Cwvsapsettingstest::TestSAPContainerCopyL ),
ENTRY( "Test PopulateSettingsList", Cwvsapsettingstest::TestPopulateSettingsListL ),
ENTRY( "Test SettingsList Ascend", Cwvsapsettingstest::TestIterateTroughSettingsListAscendL ),
ENTRY( "Test SettingsList Descend", Cwvsapsettingstest::TestIterateTroughSettingsListDescendL ),
ENTRY( "Test Obs for Adding SAP", Cwvsapsettingstest::TestObsForAddingSAP ),
ENTRY( "Test Obs for Remove SAP", Cwvsapsettingstest::TestObsForRemoveSAP ),
};
// Verify that case number is valid
if ( ( TUint ) aCaseNumber >= sizeof( KCases ) /
sizeof( TCaseInfoInternal ) )
{
// Invalid case, construct empty object
TCaseInfo null( ( const TText* ) L"" );
null.iMethod = NULL;
null.iIsOOMTest = EFalse;
null.iFirstMemoryAllocation = 0;
null.iLastMemoryAllocation = 0;
return null;
}
// Construct TCaseInfo object and return it
TCaseInfo tmp ( KCases[ aCaseNumber ].iCaseName );
tmp.iMethod = KCases[ aCaseNumber ].iMethod;
tmp.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest;
tmp.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation;
tmp.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation;
return tmp;
}
// -----------------------------------------------------------------------------
// Cwvsapsettingstest::PrintTest
// Simple printing to UI test.
// -----------------------------------------------------------------------------
//
TInt Cwvsapsettingstest::PrintTest(
TTestResult& aResult )
{
/* Simple print test */
_LIT( KPrintTest, "PrintTest" );
_LIT( KEnter, "Enter" );
_LIT( KOnGoing, "On-going" );
_LIT( KExit, "Exit" );
TestModuleIf().Printf( 0, KPrintTest, KEnter );
TestModuleIf().Printf( 1, KPrintTest, KOnGoing );
TestModuleIf().Printf( 0, KPrintTest, KExit );
// Test case passed
// Sets test case result and description(Maximum size is KStifMaxResultDes)
_LIT( KDescription, "PrintTest passed" );
aResult.SetResult( KErrNone, KDescription );
// Case was executed
return KErrNone;
}
// -----------------------------------------------------------------------------
// Cwvsapsettingstest::LoopTest
// Another printing to UI test.
// -----------------------------------------------------------------------------
//
TInt Cwvsapsettingstest::LoopTest( TTestResult& aResult )
{
/* Simple print and wait loop */
_LIT( KState, "State" );
_LIT( KLooping, "Looping" );
TestModuleIf().Printf( 0, KState, KLooping );
_LIT( KRunning, "Running" );
_LIT( KLoop, "%d" );
for ( TInt i = 0; i < 10; i++ )
{
TestModuleIf().Printf( 1, KRunning, KLoop, i );
User::After( 1000000 );
}
_LIT( KFinished, "Finished" );
TestModuleIf().Printf( 0, KState, KFinished );
// Test case passed
// Sets test case result and description(Maximum size is KStifMaxResultDes)
_LIT( KDescription, "LoopTest passed" );
aResult.SetResult( KErrNone, KDescription );
// Case was executed
return KErrNone;
}
TInt Cwvsapsettingstest::SetupEmptySAPL( TTestResult& aResult )
{
//Create and initialize iSAP and iTempSAP.
iSAP = CIMPSSAPSettings::NewL();
iTempSAP = CIMPSSAPSettings::NewL();
_LIT ( KNullValue , "" );
//This is the test case for empty SAP,
//verify the values with empty strings and empty values.
//This will also test the Get methods on null and empty values.
if ( ( iSAP->SAPName() != KNullValue ) ||
( iSAP->SAPUserPassword() != KNullValue ) ||
( iSAP->HTTPProxyAddress() != KNullValue ) ||
( iSAP->HTTPProxyUserPassword() != KNullValue ) ||
( iSAP->AccessPoint() != 0 ) || //Check the default value of AccessPoint
( iSAP->AccessGroup() != EIMPSNoAccessGroup )
)
{
return KErrArgument;
}
else
{
return KErrNone;
}
}
TInt Cwvsapsettingstest::SetupPartiallyFilledSAPL( TTestResult& aResult )
{
iSAP = CIMPSSAPSettings::NewL();
iTempSAP = CIMPSSAPSettings::NewL();
iSAP->SetSAPNameL( _L( "name" ) );
iSAP->SetSAPUserPasswordL( _L( "pass" ) );
iSAP->SetHTTPProxyAddressL( KNullDesC );
iSAP->SetHTTPProxyUserPasswordL( KNullDesC );
iSAP->SetAccessPoint( 123 );
iSAP->SetAccessGroup( EIMPSIMAccessGroup );
//Use the getter methods and check if iSAP is set to
//the values that are passed.
_LIT( KName , "name" );
_LIT( KPassword, "pass" );
if ( ( iSAP->SAPName() != KName ) ||
( iSAP->SAPUserPassword() != KPassword ) ||
( iSAP->HTTPProxyAddress() != KNullDesC ) ||
( iSAP->HTTPProxyUserPassword() != KNullDesC ) ||
( iSAP->AccessPoint() != 123 ) || //Check the default value of AccessPoint
( iSAP->AccessGroup() != EIMPSIMAccessGroup )
)
{
return KErrArgument;
}
else
{
return KErrNone;
}
}
TInt Cwvsapsettingstest::SetupFullSAPL( TTestResult& aResult )
{
iSAP = CIMPSSAPSettings::NewL();
iTempSAP = CIMPSSAPSettings::NewL();
IMPSSAPSettingsStoreTestUtils::FillContainerLongDataL( *iSAP );
iSAP->ProtectL( ESAPBrandProtection );
return 0;
}
// TEST METHODS
TInt Cwvsapsettingstest::Test_DataSetAndGetL( TTestResult& aResult )
{
SetupSchedulerL();
CIMPSSAPSettings* sap = CIMPSSAPSettings::NewL();
CIMPSSAPSettings* sap1 = CIMPSSAPSettings::NewL();
TInt err = KErrNone;
_LIT( KDummy, "strng" );
sap->ProtectL( ESAPNoProtection );
sap->SetSAPNameL( _L( "strng" ) );
sap->SetSAPAddressL( _L( "strng" ) ) ;
sap->SetSAPPort( 1 );
sap->SetSAPUserIdL( _L( "strng" ) );
sap->SetSAPUserPasswordL( _L( "strng" ) );
sap->SetHTTPProxyAddressL( _L( "strng" ) );
sap->SetHTTPProxyUserIdL( _L( "strng" ) );
sap->SetHTTPProxyUserPasswordL( _L( "strng" ) );
sap->SetHTTPProxyPort( 1 );
sap->SetAccessPoint( 1 );
sap->SetClientIdL( _L( "strng" ) );
sap->ProtectL( ESAPBrandProtection );
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 uid = 0;
uid = iStore->StoreNewSAPL( sap, EIMPSIMAccessGroup ) ;
iStore->GetSAPL( uid, sap1 );
// Set APIs are alreday tested in test cases (1) and (2).
//Use the get APIs for testing.
if ( ( sap1->SAPName() != KDummy ) ||
( sap1->SAPAddress() != KDummy ) ||
( sap1->SAPPort() != 1 ) ||
( sap1->SAPUserId() != KDummy ) ||
( sap1->SAPUserPassword() != KDummy ) ||
( sap1->SAPUserPassword() != KDummy ) ||
( sap1->HTTPProxyAddress() != KDummy ) ||
( sap1->HTTPProxyUserId() != KDummy ) ||
( sap1->HTTPProxyUserPassword() != KDummy ) ||
( sap1->HTTPProxyPort() != 1 ) ||
( sap1->AccessPoint() != 1 ) ||
( sap1->ClientId() != KDummy )
)
{
err = KErrArgument;
}
CloseScheduler();
return err;
}
TInt Cwvsapsettingstest::TestBrandProtection_StoreL( TTestResult& aResult )
{
SetupSchedulerL();
CIMPSSAPSettings* sap1 = CIMPSSAPSettings::NewLC();
//Create the SettingsStore and delete any existing Settings
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
IMPSSAPSettingsStoreTestUtils::FillContainerLongDataL( *sap1 );
//Fill the SAPContainer
///IMPSSAPSettingsStoreTestUtils::FillContainerL(*sap1, _L("SettingsFilled") );
sap1->ProtectL( ESAPBrandProtection );
//TUint32 uid = iStore->StoreNewSAPL( sap1, EIMPSIMAccessGroup );
//_LIT(Kname, "newsap1");
//sap1->SetSAPNameL(Kname);
TUint32 uid = 0;
TRAPD( err, uid = iStore->StoreNewSAPL( sap1, EIMPSIMAccessGroup ) );
//Null SAP settings in sap2.
CIMPSSAPSettings* sap2 = CIMPSSAPSettings::NewLC();
if ( err == KErrNone )
{
//See whether sap1 is correctly stored or not using Get method.
iStore->GetSAPL( uid, sap2 );
}
if ( IMPSSAPSettingsStoreTestUtils::Equals( *sap1, *sap2 ) )
{
err = KErrNone;
}
else
{
err = KErrArgument;
}
CleanupStack::PopAndDestroy( 2 ); //sap1 , sap2
CloseScheduler();
return err;
}
TInt Cwvsapsettingstest::TestBrandProtection_UpdateL( TTestResult& aResult )
{
SetupSchedulerL();
CIMPSSAPSettings* sap1 = CIMPSSAPSettings::NewLC();
IMPSSAPSettingsStoreTestUtils::FillContainerLongDataL( *sap1 );
sap1->ProtectL( ESAPBrandProtection );
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 uid = iStore->StoreNewSAPL( sap1, EIMPSIMAccessGroup );
sap1->SetAccessPoint( 1234 );
iStore->UpdateOldSAPL( sap1, uid );
CIMPSSAPSettings* sap2 = CIMPSSAPSettings::NewLC();
iStore->GetSAPL( uid, sap2 );
TInt err;
//Test whether the update happened correctly.
if ( IMPSSAPSettingsStoreTestUtils::Equals( *sap1, *sap2 ) )
{
err = KErrNone;
}
else
{
err = KErrArgument;
}
CleanupStack::PopAndDestroy( 2 ); //sap1 , sap2, istore
CloseScheduler();
return err;
}
TInt Cwvsapsettingstest::TestBrandProtection_DeleteL( TTestResult& aResult )
{
SetupSchedulerL();
CIMPSSAPSettings* sap1 = CIMPSSAPSettings::NewLC();
IMPSSAPSettingsStoreTestUtils::FillContainerLongDataL( *sap1 );
sap1->ProtectL( ESAPBrandProtection );
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 uid = iStore->StoreNewSAPL( sap1, EIMPSIMAccessGroup );
TInt err = KErrNone;
iStore->DeleteSAPL( uid );
//We stored one new SAP, deleted the same sap1.
//After deletion, the SAP count on the store must be 0.
//If not 0, return error.
if ( iStore->SAPCountL( EIMPSIMAccessGroup ) != 0 )
{
err = KErrGeneral;
}
CleanupStack::PopAndDestroy( 1 ); //sap1
CloseScheduler();
return err;
}
TInt Cwvsapsettingstest::TestLoginCountHandlingL( TTestResult& aResult )
{
CIMPSSAPSettings* sap = CIMPSSAPSettings::NewLC();
TInt err = KErrNone;
TInt err1 = KErrNone;
//Initially LoginCount should be 0.
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
};
sap->IncreaseLoginCount();
if ( sap->LoginCount() != 1 )
{
err1 = KErrArgument;
}
err &= err1;
sap->SetSAPNameL( _L( "strng" ) );
if ( sap->LoginCount() != 1 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetSAPAddressL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetSAPPort( 1 );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetSAPUserIdL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetSAPUserPasswordL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetHTTPProxyAddressL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetHTTPProxyUserIdL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetHTTPProxyUserPasswordL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetHTTPProxyPort( 1 );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetAccessPoint( 1 );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
sap->IncreaseLoginCount();
sap->SetClientIdL( _L( "strng" ) );
if ( sap->LoginCount() != 0 )
{
err1 = KErrArgument;
}
err &= err1;
CleanupStack::PopAndDestroy(); //sap
if ( err == KErrNone )
{
return err;
}
else
{
return KErrArgument;
}
}
TInt Cwvsapsettingstest::TestLoginCountStorageL( TTestResult& aResult )
{
SetupSchedulerL();
TInt err = KErrGeneral;
CIMPSSAPSettings* sap1 = CIMPSSAPSettings::NewLC();
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
IMPSSAPSettingsStoreTestUtils::FillContainerLongDataL( *sap1 );
//make the login count in sap1 as 2.
sap1->IncreaseLoginCount();
sap1->IncreaseLoginCount();
//Login count has become 2.
if ( sap1->LoginCount() == 2 )
{
err = KErrNone;
}
//store sap1 and get the uid of the transaction
TUint32 uid = iStore->StoreNewSAPL( sap1, EIMPSIMAccessGroup );
CIMPSSAPSettings* sap2 = CIMPSSAPSettings::NewLC();
//Get the sap stored in iStore in sap2.
iStore->GetSAPL( uid, sap2 );
//Check the previous error code and login count of sap2 which has
//just been read from the iStore
if ( ( sap2->LoginCount() == 2 ) && ( err == KErrNone ) )
{
err = KErrNone;
}
CleanupStack::PopAndDestroy( 2 ); //sap1 , sap2
CloseScheduler();
return err;
}
TInt Cwvsapsettingstest::TestSAPContainerExternalizeInternalizeL( TTestResult& aResult )
{
CBufSeg* buffer = CBufSeg::NewL( 50000 );
CleanupStack::PushL( buffer );
RBufWriteStream wstream;
wstream.Open( *buffer );
CleanupClosePushL( wstream );
CIMPSSAPSettings* iSAP = CIMPSSAPSettings::NewLC();
iSAP->ExternalizeL( wstream );
CleanupStack::PopAndDestroy(); //wstream
RBufReadStream rstream;
rstream.Open( *buffer );
CleanupClosePushL( rstream );
CIMPSSAPSettings* iTempSAP = CIMPSSAPSettings::NewLC();
iTempSAP->InternalizeL( rstream );
TInt err = KErrNone;
if ( IMPSSAPSettingsStoreTestUtils::Equals( *iTempSAP, *iSAP ) )
{
//Internalized and Externalized strings are equal,
//Just as a check also match Connection Settings and User Settings
if ( iTempSAP->EqualConnectionSettings( *iSAP ) &&
iTempSAP->EqualUserSettings( *iSAP ) )
{
err = KErrNone;
}
}
else
{
err = KErrGeneral;
}
CleanupStack::PopAndDestroy(); //rstream
CleanupStack::PopAndDestroy(); //buffer
CleanupStack::PopAndDestroy( 2 );//iSAP,iTempSAP
return err;
}
TInt Cwvsapsettingstest::TestSAPContainerPackUnpackL( TTestResult& aResult )
{
CIMPSSAPSettings* iSAP = CIMPSSAPSettings::NewLC();
// Pack the SAP
HBufC8* buff = iSAP->PackLC();
CIMPSSAPSettings* iTempSAP = CIMPSSAPSettings::NewLC();
// Unpack the SAP
TPtrC8 buffPtr( buff->Des() );
iTempSAP->UnPackL( buffPtr );
TInt err;
if ( IMPSSAPSettingsStoreTestUtils::Equals( *iTempSAP, *iSAP ) )
{
//Internalized and Externalized strings are equal,
//Just as a check also match Connection Settings and User Settings
if ( iTempSAP->EqualConnectionSettings( *iSAP ) &&
iTempSAP->EqualUserSettings( *iSAP ) )
{
err = KErrNone;
}
else
{
err = KErrArgument;
}
}
else
{
err = KErrGeneral;
}
CleanupStack::PopAndDestroy(); // buff
CleanupStack::PopAndDestroy( 2 );//iSAP,iTempSAP
return err;
}
TInt Cwvsapsettingstest::TestSAPContainerKeyValuePairsL( TTestResult& aResult )
{
CIMPSSAPSettings* iSAP = CIMPSSAPSettings::NewLC();
CIMPSSAPSettings* iTempSAP = CIMPSSAPSettings::NewLC();
//Test case for SetOpaqueInt , GetOpaqueInt and DeleteOpaque
_LIT( KKey16, "key16" );
_LIT( KKey8, "key8" );
_LIT( KKeyInt, "keyint" );
_LIT( KValue16, "value16" );
_LIT8( KValue8, "value8" );
const TInt KValueInt = 500;
iSAP->SetOpaqueDesC16( KKey16, KValue16 );
iSAP->SetOpaqueDesC8( KKey8, KValue8 );
iSAP->SetOpaqueInt( KKeyInt, KValueInt );
TPtrC16 stored16;
TPtrC8 stored8;
TInt storedInt;
iSAP->GetOpaqueDesC16( KKey16, stored16 );
iSAP->GetOpaqueDesC8( KKey8, stored8 );
iSAP->GetOpaqueInt( KKeyInt, storedInt );
TInt err, err1, err2;
if ( ( stored16.Compare( KValue16 ) == 0 ) || ( stored8.Compare( KValue8 ) == 0 )
|| ( storedInt == KValueInt ) )
{
err1 = KErrNone;
}
else
{
err1 = KErrArgument;
}
if ( ( iSAP->DeleteOpaque( KKey16 ) == KErrNone ) || ( iSAP->DeleteOpaque( KKey8 ) == KErrNone )
|| ( iSAP->DeleteOpaque( KKeyInt ) == KErrNone ) )
{
err2 = KErrNone;
}
else
{
err2 = KErrArgument;
}
err = err1 & err2;
CleanupStack::PopAndDestroy( 2 );//iSAP,iTempSAP
return err;
}
TInt Cwvsapsettingstest::TestSAPContainerCopyL( TTestResult& aResult )
{
TInt err;
CIMPSSAPSettings* iSAP = CIMPSSAPSettings::NewLC();
CIMPSSAPSettings* destination = CIMPSSAPSettings::NewLC();
destination->CopyL( *iSAP );
if ( IMPSSAPSettingsStoreTestUtils::Equals( *destination, *iSAP ) )
{
if ( destination->AccessGroup() == iSAP->AccessGroup() )
{
err = KErrNone;
}
else
{
err = KErrArgument;
}
}
else
{
err = KErrArgument;
}
CleanupStack::PopAndDestroy( 2 ); // destination , iSAP
return err;
}
TInt Cwvsapsettingstest::TestPopulateSettingsListL( TTestResult& aResult )
{
//test:
// 1. no SAPs defined
// 2. 1 SAP defined
// 3. 2 SAPs defined
// 4. 10 SAPs defined
// 5. 30 SAPs defined
//Install the scheduler
SetupSchedulerL();
CIMPSSAPSettingsList* list = CIMPSSAPSettingsList::NewLC();
//Instantiate SettingsStore with 1 entry
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
CIMPSSAPSettings* settings = CIMPSSAPSettings::NewL();
CleanupStack::PushL( settings );
IMPSSAPSettingsStoreTestUtils::FillContainerPartiallyL( *settings, _L( "PartiallyFilled" ) );
iStore->StoreNewSAPL( settings, EIMPSIMAccessGroup );
iStoredCount = 1;
iStore->PopulateSAPSettingsListL( *list, EIMPSIMAccessGroup );
//verify list count
TUint32 count( 0 );
count = list->MdcaCount();
TInt err1 = KErrNone;
if ( count == iStoredCount )
{
err1 = KErrNone;
}
else err1 = KErrArgument ;
//verify direct store count
TInt err2 = KErrNone;
//istore must be equal to the number of elements on the SettingsList,
//else there is some problem.
if ( iStore->SAPCountL( EIMPSIMAccessGroup ) == iStoredCount )
{
err2 = KErrNone;
}
else err2 = KErrArgument;
if ( err1 || err2 != KErrNone )
{
//return with a failure code since there was an error
//since we are returning at this point itself,
//PopandDestroy the list on the cleanupstack.
CleanupStack::PopAndDestroy( 3 ); //list(CIMPSSAPSettingsList) ,iStore, settings
iStoredCount = 0;
CloseScheduler();
return KErrArgument;
}
TUint32 uid;
for ( TInt ii( 0 ); ii < iStoredCount; ii++ )
{
list->MdcaPoint( ii );
uid = list->UidForIndex( ii );
//From the uid, try to access the listitem.
const CIMPSSAPSettingsListItem* item = list->ListItemForUid( uid );
item->Name();
item->Uid();
}
CleanupStack::PopAndDestroy( 2 ); //list(CIMPSSAPSettingsList), settings
CloseScheduler();
iStoredCount = 0;
return KErrNone;
}
TInt Cwvsapsettingstest::TestIterateTroughSettingsListAscendL( TTestResult& aResult )
{
//test:
// 1. no SAPs defined
// 2. 1 SAP defined
// 3. 2 SAPs defined
// 4. 10 SAPs defined
CIMPSSAPSettingsList* list = CIMPSSAPSettingsList::NewLC();
SetupSchedulerL();
//Instantiate SettingsStore.
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 dummy1, dummy2;
iStoredCount = 10;
IMPSSAPSettingsStoreTestUtils::AddSAPSettingsL( *iStore,
iStoredCount,
dummy1,
dummy2,
EIMPSIMAccessGroup );
iStore->PopulateSAPSettingsListL( *list, EIMPSIMAccessGroup );
TInt err = KErrNone;
if ( list->MdcaCount() == iStoredCount )
{
err = KErrNone;
}
else err = KErrArgument;
if ( err == KErrArgument )
{
//return from the test case with an error code.
CleanupStack::PopAndDestroy( 1 ); //list
CloseScheduler();
return err;
}
RDebug::Print( _L( "Pos: name [uid]" ) );
for ( TInt ii( 0 ); ii < iStoredCount; ii++ )
{
const TPtrC name = list->MdcaPoint( ii );
RDebug::Print( _L( "%d: %S [%u]" ), ii, &name, list->UidForIndex( ii ) );
}
CleanupStack::PopAndDestroy( 1 ); //list
CloseScheduler();
return KErrNone;
}
TInt Cwvsapsettingstest::TestIterateTroughSettingsListDescendL( TTestResult& aResult )
{
//test:
// 1. no SAPs defined
// 2. 1 SAP defined
// 3. 2 SAPs defined
// 4. 10 SAPs defined
CIMPSSAPSettingsList* list = CIMPSSAPSettingsList::NewL();
CleanupStack::PushL( list );
SetupSchedulerL();
//Instantiate SettingsStore.
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 dummy1, dummy2;
iStoredCount = 10;
IMPSSAPSettingsStoreTestUtils::AddSAPSettingsL( *iStore,
iStoredCount,
dummy1,
dummy2,
EIMPSIMAccessGroup );
iStore->PopulateSAPSettingsListL( *list, EIMPSIMAccessGroup, EFalse );
TInt err = KErrNone;
if ( list->MdcaCount() == iStoredCount )
{
err = KErrNone;
}
else err = KErrArgument;
RDebug::Print( _L( "Pos: name [uid]" ) );
for ( TInt ii( 0 ); ii < iStoredCount; ii++ )
{
const TPtrC name = list->MdcaPoint( ii );
RDebug::Print( _L( "%d: %S [%u]" ), ii, &name, list->UidForIndex( ii ) );
}
CleanupStack::PopAndDestroy( 1 ); //list
CloseScheduler();
return err;
}
/* TInt Cwvsapsettingstest::TestDeleteSettingsListL(TTestResult& aResult)
{
//First setup the Store with 3 lists say.
CIMPSSAPSettingsList* list = CIMPSSAPSettingsList::NewLC();
SetupSchedulerL();
//Instantiate SettingsStore.
iStore = CIMPSSAPSettingsStore::NewLC();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 dummy1, dummy2;
iStoredCount = 3;
IMPSSAPSettingsStoreTestUtils::AddSAPSettingsL( *iStore,
iStoredCount,
dummy1,
dummy2,
EIMPSIMAccessGroup );
iStore->PopulateSAPSettingsListL( *list, EIMPSIMAccessGroup );
TInt err = KErrNone;
if( list->MdcaCount() == iStoredCount )
{
err = KErrNone;
}
else err = KErrArgument;
if (err == KErrArgument)
{
//return from the test case with an error code.
CleanupStack::PopAndDestroy(2); //list, iStore
CloseScheduler();
return err;
}
RDebug::Print( _L("Pos: name [uid]") );
for( TInt ii(0); ii<iStoredCount; ii++ )
{
const TPtrC name = list->MdcaPoint( ii );
RDebug::Print( _L("%d: %S [%u]"), ii, &name, list->UidForIndex( ii ) );
}
//test:
// 1. delete one of the lists from the store.
TInt startCount( list->Count() );
iList->Delete( 3 );
EUNIT_ASSERT( startCount == list->Count() + 1 );
//test:
// 1. delete many
TInt startCount( list->Count() );
iList->Delete( 1, 3 );
EUNIT_ASSERT( startCount == list->Count() + 3 );
//test:
// 1. delete one - out of bounds
TInt startCount( list->Count() );
EUNIT_ASSERT_PANIC( list->Delete( startCount + 2 ), "E32USER-CBase", 21 );
//test:
// 1. delete one out of bounds
TInt startCount( list->Count() );
EUNIT_ASSERT_PANIC( list->Delete( startCount - 1, 5 ), "E32USER-CBase", 21 );
CleanupStack::PopAndDestroy(2); //list, iStore
CloseScheduler();
return KErrNone;
} */
//Utility functions for adding items to store.
/* void Cwvsapsettingstest::SetupOpenFilledStore1L()
{
SetupSchedulerL();
iStore = CIMPSSAPSettingsStore::NewLC();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
CIMPSSAPSettings* settings = CIMPSSAPSettings::NewL();
CleanupStack::PushL( settings );
IMPSSAPSettingsStoreTestUtils::FillContainerPartiallyL( *settings, _L("PartiallyFilled") );
iStore->StoreNewSAPL( settings, EIMPSIMAccessGroup );
CleanupStack::PopAndDestroy(); //Settings
CloseScheduler();
iStoredCount = 1;
} */
/* void Cwvsapsettingstest::SetupOpenFilledStore10L()
{
SetupSchedulerL();
iStore = CIMPSSAPSettingsStore::NewL();
IMPSSAPSettingsStoreTestUtils::DeleteAllSAPSettingsL( *iStore );
TUint32 dummy1, dummy2;
iStoredCount = 10;
IMPSSAPSettingsStoreTestUtils::AddSAPSettingsL( *iStore,
iStoredCount,
dummy1,
dummy2,
EIMPSIMAccessGroup );
CloseScheduler();
} */
TInt Cwvsapsettingstest::TestObsForAddingSAP( TTestResult& aResult )
{
SetupSchedulerL();
WVSAPSettingsObserverTestCases *obstestitnf = WVSAPSettingsObserverTestCases::NewL();
//Call the FilledStoreL function that will register the observer
TInt err = ( obstestitnf->TestNotify_AddSapL() );
CloseScheduler();
return err;
}
TInt Cwvsapsettingstest::TestObsForRemoveSAP( TTestResult& aResult )
{
SetupSchedulerL();
WVSAPSettingsObserverTestCases *obstestitnf = WVSAPSettingsObserverTestCases::NewL();
//Call the RemoveSAPL APIs
TInt err;
err = obstestitnf->TestNotify_RemoveSapL();
CloseScheduler();
return err;
}
//Utility functions for installing and uninstalling the scheduler
void Cwvsapsettingstest::SetupSchedulerL()
{
// Create a scheduler
CActiveScheduler* scheduler = new( ELeave )CActiveScheduler;
CleanupStack::PushL( scheduler );
CActiveScheduler::Install( scheduler );
CleanupStack::Pop(); // scheduler
}
void Cwvsapsettingstest::CloseScheduler()
{
delete CActiveScheduler::Current();
}