contentctrl_plat/ds_data_modification_api/tsrc/mt_cnsmldatamodbase/mt_cnsmldatamodbase.cpp
branchRCL_3
changeset 14 b922b9936679
equal deleted inserted replaced
8:ad0f53516d84 14:b922b9936679
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Source code file for data mod unit tests.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include "MT_CNSmlDataModBase.h"
       
    21 
       
    22 #include <SmlDataFormat.h>
       
    23 #include <VCARD.H>
       
    24 #include <CNTVCARD.H>
       
    25 #include <BARSC.H>  
       
    26 #include <s32mem.h>
       
    27 #include <bautils.h>
       
    28 #include <S32FILE.H>
       
    29 #include <EUnitMacros.h>
       
    30 #include <EUnitDecorators.h>
       
    31 #include <data_caging_path_literals.hrh>
       
    32 
       
    33 #include "NSmlDataModBase.h"
       
    34 
       
    35 // - Construction -----------------------------------------------------------
       
    36 
       
    37 MT_CNSmlDataModBase* MT_CNSmlDataModBase::NewL()
       
    38     {
       
    39     MT_CNSmlDataModBase* self = MT_CNSmlDataModBase::NewLC();
       
    40     CleanupStack::Pop();
       
    41     return self;
       
    42     }
       
    43 
       
    44 MT_CNSmlDataModBase* MT_CNSmlDataModBase::NewLC()
       
    45     {
       
    46     MT_CNSmlDataModBase* self = new( ELeave ) MT_CNSmlDataModBase();
       
    47     CleanupStack::PushL( self );
       
    48     self->ConstructL();
       
    49     return self;
       
    50     }
       
    51 
       
    52 MT_CNSmlDataModBase::~MT_CNSmlDataModBase()
       
    53     {
       
    54     delete iDataMod;
       
    55     delete iOwnStoreFormat;
       
    56     delete iPartnerStoreFormat;
       
    57     iOwnStringPool.Close();
       
    58     iPartnerStringPool.Close();
       
    59     iFs.Close();
       
    60     }
       
    61 
       
    62 MT_CNSmlDataModBase::MT_CNSmlDataModBase()
       
    63     {
       
    64     }
       
    65 
       
    66 void MT_CNSmlDataModBase::ConstructL()
       
    67     {
       
    68     CEUnitTestSuiteClass::ConstructL();
       
    69     User::LeaveIfError( iFs.Connect() );
       
    70     }
       
    71 
       
    72 
       
    73 // - Test methods -----------------------------------------------------------
       
    74 
       
    75 void MT_CNSmlDataModBase::SetupL(  )
       
    76     {
       
    77     iDataMod = new (ELeave) CNSmlVCardMod();
       
    78     }
       
    79 
       
    80 void MT_CNSmlDataModBase::SetupAndConfigure1L()
       
    81     {
       
    82     iDataMod = new (ELeave) CNSmlVCardMod();
       
    83     
       
    84     // Same store format for the "client" and the "server"
       
    85     // The client supports TITLE
       
    86     // The server supports TITLE
       
    87     _LIT( KOwnStoreFormat, "DataModTestStoreFormat_1.rsc" );  
       
    88     _LIT( KPartnerStoreFormat, "DataModTestStoreFormat_1.rsc" ); 
       
    89     ConfigureDataModL( KOwnStoreFormat, KPartnerStoreFormat ); 
       
    90     }
       
    91 
       
    92 void MT_CNSmlDataModBase::SetupAndConfigure2L()
       
    93     {
       
    94     iDataMod = new (ELeave) CNSmlVCardMod();
       
    95     
       
    96     // Different store format for the "client" and the "server"
       
    97     // The client supports TITLE
       
    98     // The server does not support TITLE
       
    99     _LIT( KOwnStoreFormat, "DataModTestStoreFormat_1.rsc" );  
       
   100     _LIT( KPartnerStoreFormat, "DataModTestStoreFormat_2.rsc" ); 
       
   101     ConfigureDataModL( KOwnStoreFormat, KPartnerStoreFormat ); 
       
   102     }
       
   103 
       
   104 void MT_CNSmlDataModBase::Teardown(  )
       
   105     {
       
   106     delete iDataMod;
       
   107     iDataMod = NULL;
       
   108     
       
   109     delete iOwnStoreFormat;
       
   110     iOwnStoreFormat = NULL;
       
   111     
       
   112     delete iPartnerStoreFormat;
       
   113     iPartnerStoreFormat = NULL;
       
   114 
       
   115     iOwnStringPool.Close();
       
   116     iPartnerStringPool.Close();
       
   117     }
       
   118     
       
   119 void MT_CNSmlDataModBase::EmptyL(  )
       
   120     {
       
   121     }
       
   122 
       
   123 void MT_CNSmlDataModBase::NeedsMerge1L()
       
   124     {
       
   125     // Store format not set on Setup phase. No merge supported.
       
   126     EUNIT_ASSERT( !iDataMod->NeedsMerge() );
       
   127     }
       
   128 
       
   129 void MT_CNSmlDataModBase::NeedsMerge2L()
       
   130     {
       
   131     // Store formats sets. Merging is needed.
       
   132     EUNIT_ASSERT( iDataMod->NeedsMerge() );
       
   133     }
       
   134 
       
   135 void MT_CNSmlDataModBase::StripTx1L()
       
   136     {
       
   137     _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
       
   138     
       
   139     // "Local" vCard includes TITLE field
       
   140     CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
       
   141     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   142 
       
   143     // Partner store format not set on Setup phase. Leave should occus.
       
   144     EUNIT_ASSERT_SPECIFIC_LEAVE( iDataMod->StripTxL( *buffer1 ), KErrNotFound );
       
   145     CleanupStack::PopAndDestroy( buffer1 );
       
   146     }
       
   147 
       
   148 void  MT_CNSmlDataModBase::StripTx2L()
       
   149     {
       
   150     _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
       
   151     _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
       
   152     
       
   153     // "Local" vCard includes TITLE field
       
   154     CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
       
   155     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   156 
       
   157     // TITLE field shall be not be dropped becuase the field is supported 
       
   158     // by the partner store format
       
   159     iDataMod->StripTxL( *buffer1 );
       
   160     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   161     
       
   162     CleanupStack::PopAndDestroy( buffer1 );
       
   163     }
       
   164 
       
   165 
       
   166 void  MT_CNSmlDataModBase::StripTx3L()
       
   167     {
       
   168     _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
       
   169     
       
   170     // "Local" vCard includes TITLE field
       
   171     CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
       
   172     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   173 
       
   174     // TITLE field shall be dropped because the field is not supported 
       
   175     // by the partner store format
       
   176     iDataMod->StripTxL( *buffer1 );
       
   177     EUNIT_ASSERT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   178 
       
   179     CleanupStack::PopAndDestroy( buffer1 );
       
   180     }
       
   181 
       
   182 void MT_CNSmlDataModBase::BasicMerge1L()
       
   183     {
       
   184     _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
       
   185     _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
       
   186     
       
   187     // "Local" vCard includes TITLE field
       
   188     CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
       
   189     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   190     
       
   191     // "Received" vCard does not include TITLE field
       
   192     CBufFlat* buffer2 = ReadBufFromFileLC( KTestVCardNoTitle ); 
       
   193     EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   194     
       
   195     // Merge vCards. Do not utilize field level merging.
       
   196     iDataMod->MergeRxL( *buffer2, *buffer1, EFalse );
       
   197 
       
   198     // Merged item _shall not_ include TITLE. It is dropped during the merge.
       
   199     EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   200 
       
   201     CleanupStack::PopAndDestroy( 2, buffer1 );      
       
   202     }
       
   203 
       
   204 void MT_CNSmlDataModBase::FieldLevelMerge1L()
       
   205     {
       
   206     _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
       
   207     _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
       
   208     
       
   209     // "Local" vCard includes TITLE field
       
   210     CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
       
   211     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   212     
       
   213     // "Received" vCard does not include TITLE field
       
   214     CBufFlat* buffer2 = ReadBufFromFileLC( KTestVCardNoTitle );
       
   215     EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   216     
       
   217     // Merge vCards. Utilize field level merging.
       
   218     iDataMod->MergeRxL( *buffer2, *buffer1, ETrue );
       
   219 
       
   220     // Merged item _shall_ include TITLE. It is was maintained due Field level flag.
       
   221     EUNIT_ASSERT_NOT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   222 
       
   223     CleanupStack::PopAndDestroy( 2, buffer1 );      
       
   224     }
       
   225 
       
   226 void MT_CNSmlDataModBase::BasicMerge2L()
       
   227     {
       
   228     _LIT( KTestVCardTitle, "c:\\Data\\TestData\\TestVCard_title.vcf" );
       
   229     _LIT( KTestVCardNoTitle, "c:\\Data\\TestData\\TestVCard_no_title.vcf" );
       
   230     
       
   231     // "Local" vCard includes TITLE field
       
   232     CBufFlat* buffer1 = ReadBufFromFileLC( KTestVCardTitle );
       
   233     EUNIT_ASSERT_NOT_EQUALS( buffer1->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   234     
       
   235     // "Received" vCard does not include TITLE field
       
   236     CBufFlat* buffer2 = ReadBufFromFileLC( KTestVCardNoTitle ); 
       
   237     EUNIT_ASSERT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   238     
       
   239     // Merge vCards. Do not utilize field level merging.
       
   240     iDataMod->MergeRxL( *buffer2, *buffer1, EFalse );
       
   241 
       
   242     // Merged item shall include TITLE. It is not dropped because
       
   243     // partner store format does not support TITLE.
       
   244     EUNIT_ASSERT_NOT_EQUALS( buffer2->Ptr(0).Find( _L8("TITLE") ), KErrNotFound );
       
   245 
       
   246     CleanupStack::PopAndDestroy( 2, buffer1 );      
       
   247     }
       
   248 
       
   249 //--------------------------- Helper functions ------------------------
       
   250 
       
   251 void MT_CNSmlDataModBase::ConfigureDataModL( const TDesC& aOwnFormat, const TDesC& aPartnerFormat )
       
   252     {
       
   253     HBufC8* ownFormat = ReadStoreFormatLC( aOwnFormat );
       
   254 
       
   255     TResourceReader ownReader;
       
   256     ownReader.SetBuffer( ownFormat );
       
   257     iOwnStringPool.OpenL();
       
   258     
       
   259     CSmlDataStoreFormat* ownStoreFormat = 
       
   260         CSmlDataStoreFormat::NewLC( iOwnStringPool, ownReader );
       
   261     EUNIT_PRINT( _L("3.1.1"));
       
   262     delete iOwnStoreFormat;
       
   263     iOwnStoreFormat = ownStoreFormat;
       
   264     CleanupStack::Pop( ownStoreFormat );
       
   265     iDataMod->SetOwnStoreFormat( *iOwnStoreFormat );
       
   266     
       
   267     CleanupStack::PopAndDestroy( ownFormat );
       
   268 
       
   269     HBufC8* partnerFormat = ReadStoreFormatLC( aPartnerFormat );
       
   270     EUNIT_PRINT( *partnerFormat );
       
   271 
       
   272     TResourceReader partnerReader;
       
   273     partnerReader.SetBuffer( partnerFormat );    
       
   274     
       
   275     iPartnerStringPool.OpenL();
       
   276     CSmlDataStoreFormat* partnerStoreFormat = 
       
   277         CSmlDataStoreFormat::NewLC( iPartnerStringPool, partnerReader );
       
   278     delete iPartnerStoreFormat;
       
   279     iPartnerStoreFormat = partnerStoreFormat;
       
   280     CleanupStack::Pop( partnerStoreFormat );
       
   281     iDataMod->SetPartnerStoreFormat( *iPartnerStoreFormat );
       
   282 
       
   283     CleanupStack::PopAndDestroy( partnerFormat );
       
   284     
       
   285     iDataMod->SetUsedMimeType( iOwnStoreFormat->MimeFormat( 0 ).MimeType(), iOwnStoreFormat->MimeFormat( 0 ).MimeVersion() );    
       
   286     }
       
   287 
       
   288 HBufC8* MT_CNSmlDataModBase::ReadStoreFormatLC(const TDesC& aResourceFile)
       
   289     {
       
   290     TFileName fileName;
       
   291     TParse parse;
       
   292 
       
   293     parse.Set( aResourceFile, &KDC_RESOURCE_FILES_DIR, NULL  );
       
   294     fileName = parse.FullName();
       
   295 
       
   296     RResourceFile resourceFile; 
       
   297     BaflUtils::NearestLanguageFile( iFs, fileName );
       
   298 
       
   299     resourceFile.OpenL( iFs, fileName );
       
   300     CleanupClosePushL( resourceFile );
       
   301     
       
   302     HBufC8* contactsDataFormat = resourceFile.AllocReadL( 1 );
       
   303     CleanupStack::PopAndDestroy( &resourceFile );
       
   304     CleanupStack::PushL( contactsDataFormat );
       
   305     
       
   306     return contactsDataFormat;
       
   307     }
       
   308 
       
   309 CBufFlat* MT_CNSmlDataModBase::ReadBufFromFileLC( const TDesC& aFileName )
       
   310     {
       
   311     RFileReadStream readStream;
       
   312     OpenVCardFromFileLC(aFileName, readStream);
       
   313     
       
   314     const TInt fileSize = readStream.Source()->SizeL();
       
   315     CBufFlat* buffer = CBufFlat::NewL( fileSize );
       
   316     CleanupStack::PushL( buffer );
       
   317 
       
   318     RBufWriteStream writeStream( *buffer );
       
   319     CleanupClosePushL( writeStream );
       
   320     writeStream.WriteL( readStream );
       
   321     writeStream.CommitL();
       
   322     CleanupStack::PopAndDestroy( &writeStream );
       
   323     CleanupStack::Pop( buffer );
       
   324     CleanupStack::PopAndDestroy( &readStream );
       
   325     CleanupStack::PushL( buffer );
       
   326     return buffer;
       
   327     }
       
   328 
       
   329 void MT_CNSmlDataModBase::OpenVCardFromFileLC( const TDesC& aFileName, RFileReadStream& aReadStream )
       
   330     {
       
   331     TInt err = aReadStream.Open( iFs, aFileName, EFileRead );
       
   332     if (err != KErrNone)
       
   333         {
       
   334         if (err == KErrNotFound)
       
   335             {
       
   336             EUNIT_PRINT( _L("%S ,vCard file not found"), &aFileName );
       
   337             }
       
   338         else if ( err == KErrPathNotFound )
       
   339             {
       
   340             EUNIT_PRINT( _L("%S ,vCard path not found"), &aFileName );        
       
   341             }
       
   342         else 
       
   343             {
       
   344             EUNIT_PRINT( _L("%S , vCard file cannot be opened. Error code %d"), &aFileName, err );
       
   345             }
       
   346         User::Leave( err  );
       
   347         }
       
   348     EUNIT_PRINT( _L("VCard opened") );
       
   349     CleanupClosePushL( aReadStream );
       
   350     }
       
   351 
       
   352 // - EUnit test table -------------------------------------------------------
       
   353 
       
   354 EUNIT_BEGIN_TEST_TABLE(
       
   355     MT_CNSmlDataModBase,
       
   356     "NSmlDataModBase test suite.",
       
   357     "MODULE" )
       
   358 
       
   359 EUNIT_TEST(
       
   360     "Test creating and deleting the object",
       
   361     "CNSmlDataModBase",
       
   362     "",
       
   363     "FUNCTIONALITY",
       
   364     SetupL, EmptyL, Teardown)
       
   365 
       
   366 EUNIT_TEST(
       
   367     "Test needs merge, when store formats not set",
       
   368     "CNSmlDataModBase",
       
   369     "NeedsMerge",
       
   370     "FUNCTIONALITY",
       
   371     SetupL, NeedsMerge1L, Teardown)
       
   372 
       
   373 EUNIT_TEST(
       
   374     "Test needs merge",
       
   375     "CNSmlDataModBase",
       
   376     "NeedsMergeL",
       
   377     "FUNCTIONALITY",
       
   378     SetupAndConfigure1L, NeedsMerge2L, Teardown)    
       
   379     
       
   380 EUNIT_TEST(
       
   381     "Test Strip when store format not set",
       
   382     "CNSmlDataModBase",
       
   383     "StripTxL",
       
   384     "FUNCTIONALITY",
       
   385     SetupL, StripTx1L, Teardown)
       
   386 
       
   387 EUNIT_TEST(
       
   388     "Test Strip field not supported by partner",
       
   389     "CNSmlDataModBase",
       
   390     "StripTxL",
       
   391     "FUNCTIONALITY",
       
   392     SetupAndConfigure1L, StripTx2L, Teardown)
       
   393     
       
   394 EUNIT_TEST(
       
   395     "Test Strip field not supported by partner",
       
   396     "CNSmlDataModBase",
       
   397     "StripTxL",
       
   398     "FUNCTIONALITY",
       
   399     SetupAndConfigure2L, StripTx3L, Teardown)
       
   400     
       
   401 EUNIT_TEST(
       
   402     "Test configure datamod",
       
   403     "CNSmlDataModBase",
       
   404     "",
       
   405     "FUNCTIONALITY",
       
   406     SetupAndConfigure1L, EmptyL, Teardown)
       
   407     
       
   408 EUNIT_TEST(
       
   409     "Test basic merging of vCards",
       
   410     "CNSmlDataModBase",
       
   411     "NeedsMerge",
       
   412     "FUNCTIONALITY",
       
   413     SetupAndConfigure1L, BasicMerge1L, Teardown)    
       
   414 
       
   415 EUNIT_TEST(
       
   416     "Test field level merging of vCards",
       
   417     "CNSmlDataModBase",
       
   418     "MergeRxL",
       
   419     "FUNCTIONALITY",
       
   420     SetupAndConfigure1L, FieldLevelMerge1L, Teardown)      
       
   421     
       
   422 EUNIT_TEST(
       
   423     "Test basic merging of vCards",
       
   424     "CNSmlDataModBase",
       
   425     "NeedsMerge",
       
   426     "FUNCTIONALITY",
       
   427     SetupAndConfigure2L, BasicMerge2L, Teardown)    
       
   428 
       
   429 EUNIT_TEST(
       
   430     "Test field level merging of vCards",
       
   431     "CNSmlDataModBase",
       
   432     "MergeRxL",
       
   433     "FUNCTIONALITY",
       
   434     SetupAndConfigure2L, FieldLevelMerge1L, Teardown)      
       
   435 
       
   436 
       
   437     
       
   438 EUNIT_END_TEST_TABLE
       
   439 
       
   440 // End of file
       
   441