--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentctrl_plat/ds_data_modification_api/tsrc/mt_cnsmldatamodbase/mt_cnsmldatamodbase.cpp Fri Mar 12 15:41:30 2010 +0200
@@ -0,0 +1,441 @@
+/*
+* 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: Source code file for data mod unit tests.
+*
+*/
+
+
+// INCLUDE FILES
+#include "MT_CNSmlDataModBase.h"
+
+#include <SmlDataFormat.h>
+#include <VCARD.H>
+#include <CNTVCARD.H>
+#include <BARSC.H>
+#include <s32mem.h>
+#include <bautils.h>
+#include <S32FILE.H>
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+#include <data_caging_path_literals.hrh>
+
+#include "NSmlDataModBase.h"
+
+// - Construction -----------------------------------------------------------
+
+MT_CNSmlDataModBase* MT_CNSmlDataModBase::NewL()
+ {
+ MT_CNSmlDataModBase* self = MT_CNSmlDataModBase::NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+MT_CNSmlDataModBase* MT_CNSmlDataModBase::NewLC()
+ {
+ MT_CNSmlDataModBase* self = new( ELeave ) MT_CNSmlDataModBase();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+MT_CNSmlDataModBase::~MT_CNSmlDataModBase()
+ {
+ delete iDataMod;
+ delete iOwnStoreFormat;
+ delete iPartnerStoreFormat;
+ iOwnStringPool.Close();
+ iPartnerStringPool.Close();
+ iFs.Close();
+ }
+
+MT_CNSmlDataModBase::MT_CNSmlDataModBase()
+ {
+ }
+
+void MT_CNSmlDataModBase::ConstructL()
+ {
+ CEUnitTestSuiteClass::ConstructL();
+ User::LeaveIfError( iFs.Connect() );
+ }
+
+
+// - Test methods -----------------------------------------------------------
+
+void MT_CNSmlDataModBase::SetupL( )
+ {
+ iDataMod = new (ELeave) CNSmlVCardMod();
+ }
+
+void MT_CNSmlDataModBase::SetupAndConfigure1L()
+ {
+ iDataMod = new (ELeave) CNSmlVCardMod();
+
+ // Same store format for the "client" and the "server"
+ // The client supports TITLE
+ // The server supports TITLE
+ _LIT( KOwnStoreFormat, "DataModTestStoreFormat_1.rsc" );
+ _LIT( KPartnerStoreFormat, "DataModTestStoreFormat_1.rsc" );
+ ConfigureDataModL( KOwnStoreFormat, KPartnerStoreFormat );
+ }
+
+void MT_CNSmlDataModBase::SetupAndConfigure2L()
+ {
+ iDataMod = new (ELeave) CNSmlVCardMod();
+
+ // Different store format for the "client" and the "server"
+ // The client supports TITLE
+ // The server does not support TITLE
+ _LIT( KOwnStoreFormat, "DataModTestStoreFormat_1.rsc" );
+ _LIT( KPartnerStoreFormat, "DataModTestStoreFormat_2.rsc" );
+ ConfigureDataModL( KOwnStoreFormat, KPartnerStoreFormat );
+ }
+
+void MT_CNSmlDataModBase::Teardown( )
+ {
+ delete iDataMod;
+ iDataMod = NULL;
+
+ delete iOwnStoreFormat;
+ iOwnStoreFormat = NULL;
+
+ delete iPartnerStoreFormat;
+ iPartnerStoreFormat = NULL;
+
+ iOwnStringPool.Close();
+ iPartnerStringPool.Close();
+ }
+
+void MT_CNSmlDataModBase::EmptyL( )
+ {
+ }
+
+void MT_CNSmlDataModBase::NeedsMerge1L()
+ {
+ // Store format not set on Setup phase. No merge supported.
+ EUNIT_ASSERT( !iDataMod->NeedsMerge() );
+ }
+
+void MT_CNSmlDataModBase::NeedsMerge2L()
+ {
+ // Store formats sets. Merging is needed.
+ EUNIT_ASSERT( iDataMod->NeedsMerge() );
+ }
+
+void MT_CNSmlDataModBase::StripTx1L()
+ {
+ _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
+
+ // "Local" vCard includes TITLE field
+ CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // Partner store format not set on Setup phase. Leave should occus.
+ EUNIT_ASSERT_SPECIFIC_LEAVE( iDataMod->StripTxL( *buffer1 ), KErrNotFound );
+ CleanupStack::PopAndDestroy( buffer1 );
+ }
+
+void MT_CNSmlDataModBase::StripTx2L()
+ {
+ _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
+ _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
+
+ // "Local" vCard includes TITLE field
+ CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // TITLE field shall be not be dropped becuase the field is supported
+ // by the partner store format
+ iDataMod->StripTxL( *buffer1 );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ CleanupStack::PopAndDestroy( buffer1 );
+ }
+
+
+void MT_CNSmlDataModBase::StripTx3L()
+ {
+ _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
+
+ // "Local" vCard includes TITLE field
+ CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // TITLE field shall be dropped because the field is not supported
+ // by the partner store format
+ iDataMod->StripTxL( *buffer1 );
+ EUNIT_ASSERT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ CleanupStack::PopAndDestroy( buffer1 );
+ }
+
+void MT_CNSmlDataModBase::BasicMerge1L()
+ {
+ _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
+ _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
+
+ // "Local" vCard includes TITLE field
+ CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // "Received" vCard does not include TITLE field
+ CBufFlat* buffer2 = ReadBufFromFileLC( KTestVCardNoTitle );
+ EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // Merge vCards. Do not utilize field level merging.
+ iDataMod->MergeRxL( *buffer2, *buffer1, EFalse );
+
+ // Merged item _shall not_ include TITLE. It is dropped during the merge.
+ EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ CleanupStack::PopAndDestroy( 2, buffer1 );
+ }
+
+void MT_CNSmlDataModBase::FieldLevelMerge1L()
+ {
+ _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
+ _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
+
+ // "Local" vCard includes TITLE field
+ CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // "Received" vCard does not include TITLE field
+ CBufFlat* buffer2 = ReadBufFromFileLC( KTestVCardNoTitle );
+ EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // Merge vCards. Utilize field level merging.
+ iDataMod->MergeRxL( *buffer2, *buffer1, ETrue );
+
+ // Merged item _shall_ include TITLE. It is was maintained due Field level flag.
+ EUNIT_ASSERT_NOT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ CleanupStack::PopAndDestroy( 2, buffer1 );
+ }
+
+void MT_CNSmlDataModBase::BasicMerge2L()
+ {
+ _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
+ _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
+
+ // "Local" vCard includes TITLE field
+ CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
+ EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // "Received" vCard does not include TITLE field
+ CBufFlat* buffer2 = ReadBufFromFileLC( KTestVCardNoTitle );
+ EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ // Merge vCards. Do not utilize field level merging.
+ iDataMod->MergeRxL( *buffer2, *buffer1, EFalse );
+
+ // Merged item shall include TITLE. It is not dropped because
+ // partner store format does not support TITLE.
+ EUNIT_ASSERT_NOT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
+
+ CleanupStack::PopAndDestroy( 2, buffer1 );
+ }
+
+//--------------------------- Helper functions ------------------------
+
+void MT_CNSmlDataModBase::ConfigureDataModL( const TDesC& aOwnFormat, const TDesC& aPartnerFormat )
+ {
+ HBufC8* ownFormat = ReadStoreFormatLC( aOwnFormat );
+
+ TResourceReader ownReader;
+ ownReader.SetBuffer( ownFormat );
+ iOwnStringPool.OpenL();
+
+ CSmlDataStoreFormat* ownStoreFormat =
+ CSmlDataStoreFormat::NewLC( iOwnStringPool, ownReader );
+ EUNIT_PRINT( _L("3.1.1"));
+ delete iOwnStoreFormat;
+ iOwnStoreFormat = ownStoreFormat;
+ CleanupStack::Pop( ownStoreFormat );
+ iDataMod->SetOwnStoreFormat( *iOwnStoreFormat );
+
+ CleanupStack::PopAndDestroy( ownFormat );
+
+ HBufC8* partnerFormat = ReadStoreFormatLC( aPartnerFormat );
+ EUNIT_PRINT( *partnerFormat );
+
+ TResourceReader partnerReader;
+ partnerReader.SetBuffer( partnerFormat );
+
+ iPartnerStringPool.OpenL();
+ CSmlDataStoreFormat* partnerStoreFormat =
+ CSmlDataStoreFormat::NewLC( iPartnerStringPool, partnerReader );
+ delete iPartnerStoreFormat;
+ iPartnerStoreFormat = partnerStoreFormat;
+ CleanupStack::Pop( partnerStoreFormat );
+ iDataMod->SetPartnerStoreFormat( *iPartnerStoreFormat );
+
+ CleanupStack::PopAndDestroy( partnerFormat );
+
+ iDataMod->SetUsedMimeType( iOwnStoreFormat->MimeFormat( 0 ).MimeType(), iOwnStoreFormat->MimeFormat( 0 ).MimeVersion() );
+ }
+
+HBufC8* MT_CNSmlDataModBase::ReadStoreFormatLC(const TDesC& aResourceFile)
+ {
+ TFileName fileName;
+ TParse parse;
+
+ parse.Set( aResourceFile, &KDC_RESOURCE_FILES_DIR, NULL );
+ fileName = parse.FullName();
+
+ RResourceFile resourceFile;
+ BaflUtils::NearestLanguageFile( iFs, fileName );
+
+ resourceFile.OpenL( iFs, fileName );
+ CleanupClosePushL( resourceFile );
+
+ HBufC8* contactsDataFormat = resourceFile.AllocReadL( 1 );
+ CleanupStack::PopAndDestroy( &resourceFile );
+ CleanupStack::PushL( contactsDataFormat );
+
+ return contactsDataFormat;
+ }
+
+CBufFlat* MT_CNSmlDataModBase::ReadBufFromFileLC( const TDesC& aFileName )
+ {
+ RFileReadStream readStream;
+ OpenVCardFromFileLC(aFileName, readStream);
+
+ const TInt fileSize = readStream.Source()->SizeL();
+ CBufFlat* buffer = CBufFlat::NewL( fileSize );
+ CleanupStack::PushL( buffer );
+
+ RBufWriteStream writeStream( *buffer );
+ CleanupClosePushL( writeStream );
+ writeStream.WriteL( readStream );
+ writeStream.CommitL();
+ CleanupStack::PopAndDestroy( &writeStream );
+ CleanupStack::Pop( buffer );
+ CleanupStack::PopAndDestroy( &readStream );
+ CleanupStack::PushL( buffer );
+ return buffer;
+ }
+
+void MT_CNSmlDataModBase::OpenVCardFromFileLC( const TDesC& aFileName, RFileReadStream& aReadStream )
+ {
+ TInt err = aReadStream.Open( iFs, aFileName, EFileRead );
+ if (err != KErrNone)
+ {
+ if (err == KErrNotFound)
+ {
+ EUNIT_PRINT( _L("%S ,vCard file not found"), &aFileName );
+ }
+ else if ( err == KErrPathNotFound )
+ {
+ EUNIT_PRINT( _L("%S ,vCard path not found"), &aFileName );
+ }
+ else
+ {
+ EUNIT_PRINT( _L("%S , vCard file cannot be opened. Error code %d"), &aFileName, err );
+ }
+ User::Leave( err );
+ }
+ EUNIT_PRINT( _L("VCard opened") );
+ CleanupClosePushL( aReadStream );
+ }
+
+// - EUnit test table -------------------------------------------------------
+
+EUNIT_BEGIN_TEST_TABLE(
+ MT_CNSmlDataModBase,
+ "NSmlDataModBase test suite.",
+ "MODULE" )
+
+EUNIT_TEST(
+ "Test creating and deleting the object",
+ "CNSmlDataModBase",
+ "",
+ "FUNCTIONALITY",
+ SetupL, EmptyL, Teardown)
+
+EUNIT_TEST(
+ "Test needs merge, when store formats not set",
+ "CNSmlDataModBase",
+ "NeedsMerge",
+ "FUNCTIONALITY",
+ SetupL, NeedsMerge1L, Teardown)
+
+EUNIT_TEST(
+ "Test needs merge",
+ "CNSmlDataModBase",
+ "NeedsMergeL",
+ "FUNCTIONALITY",
+ SetupAndConfigure1L, NeedsMerge2L, Teardown)
+
+EUNIT_TEST(
+ "Test Strip when store format not set",
+ "CNSmlDataModBase",
+ "StripTxL",
+ "FUNCTIONALITY",
+ SetupL, StripTx1L, Teardown)
+
+EUNIT_TEST(
+ "Test Strip field not supported by partner",
+ "CNSmlDataModBase",
+ "StripTxL",
+ "FUNCTIONALITY",
+ SetupAndConfigure1L, StripTx2L, Teardown)
+
+EUNIT_TEST(
+ "Test Strip field not supported by partner",
+ "CNSmlDataModBase",
+ "StripTxL",
+ "FUNCTIONALITY",
+ SetupAndConfigure2L, StripTx3L, Teardown)
+
+EUNIT_TEST(
+ "Test configure datamod",
+ "CNSmlDataModBase",
+ "",
+ "FUNCTIONALITY",
+ SetupAndConfigure1L, EmptyL, Teardown)
+
+EUNIT_TEST(
+ "Test basic merging of vCards",
+ "CNSmlDataModBase",
+ "NeedsMerge",
+ "FUNCTIONALITY",
+ SetupAndConfigure1L, BasicMerge1L, Teardown)
+
+EUNIT_TEST(
+ "Test field level merging of vCards",
+ "CNSmlDataModBase",
+ "MergeRxL",
+ "FUNCTIONALITY",
+ SetupAndConfigure1L, FieldLevelMerge1L, Teardown)
+
+EUNIT_TEST(
+ "Test basic merging of vCards",
+ "CNSmlDataModBase",
+ "NeedsMerge",
+ "FUNCTIONALITY",
+ SetupAndConfigure2L, BasicMerge2L, Teardown)
+
+EUNIT_TEST(
+ "Test field level merging of vCards",
+ "CNSmlDataModBase",
+ "MergeRxL",
+ "FUNCTIONALITY",
+ SetupAndConfigure2L, FieldLevelMerge1L, Teardown)
+
+
+
+EUNIT_END_TEST_TABLE
+
+// End of file
+