--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sapi_landmarks/tsrc/testing/tproviderlmarktest/src/tproviderlmarktestblocks.cpp Mon Mar 30 12:51:10 2009 +0300
@@ -0,0 +1,679 @@
+/*
+* Copyright (c) 2002 - 2007 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: ?Description
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <LiwServiceHandler.h>
+#include <Liwbufferextension.h>
+
+#include "txmlconvertor.h"
+
+#include <f32file.h>
+#include <e32des16.h>
+#include <e32base.h>
+
+#include "tprovidertestobserver.h"
+#include "txmlconvertor.h"
+#include "landmarkliwparams.hrh"
+#include "tproviderlmarktest.h"
+
+using namespace LIW;
+
+// EXTERNAL DATA STRUCTURES
+//extern ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= 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 ===============================
+
+// -----------------------------------------------------------------------------
+// Ctproviderlmarktest::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void Ctproviderlmarktest::Delete()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// Ctproviderlmarktest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt Ctproviderlmarktest::RunMethodL(
+ CStifItemParser& aItem )
+ {
+
+ static TStifFunctionInfo const KFunctions[] =
+ {
+ // Copy this line for every implemented function.
+ // First string is the function name used in TestScripter script file.
+ // Second is the actual implementation member function.
+ ENTRY( "CheckInputArgumentType", Ctproviderlmarktest::CheckInputArgumentType ),
+ ENTRY( "RemoveFile", Ctproviderlmarktest::RemoveFile ),
+ //ADD NEW ENTRY HERE
+
+ };
+
+ const TInt count = sizeof( KFunctions ) /
+ sizeof( TStifFunctionInfo );
+
+ return RunInternalL( KFunctions, count, aItem );
+
+ }
+
+TInt Ctproviderlmarktest::RemoveFile( CStifItemParser& aItem )
+ {
+ TPtrC16 file;
+ aItem.GetNextString(file);
+ RFile LogResult;
+ RFs LogResultSession;
+ User::LeaveIfError(LogResultSession.Connect());
+ if(LogResult.Open(LogResultSession ,file , EFileWrite | EFileShareAny ) != KErrNotFound)
+ {
+ LogResult.Close();
+
+ LogResultSession.Delete(file);
+
+ LogResultSession.Close();
+ }
+
+ LogResult.Close();
+ LogResultSession.Close();
+ return KErrNone;
+
+ }
+
+TInt Ctproviderlmarktest::CheckInputArgumentType( CStifItemParser& aItem )
+ {
+
+ __UHEAP_MARK;
+ TPtrC16 serice16;
+ TPtrC16 title;
+ TPtrC16 Interface16;
+ TPtrC16 command16;
+ TInt servicecmdpptions;
+ TPtrC16 callback;
+
+ TInt expected;
+ TInt32 err = 0;
+ CProviderObserver* callbackobj = NULL;
+
+ TInt result =KErrNone ;// KErrGeneral; // 0 means pass and -1 means Fail
+
+ aItem.GetNextString(serice16);
+ aItem.GetNextString(Interface16);
+ aItem.GetNextString(command16);
+ aItem.GetNextInt(servicecmdpptions);
+ aItem.GetNextString(callback);
+
+ iLog->Log(_L("read varibale "));
+
+ /*-------------------------------------------------------------------------------------------*/
+
+
+ CLiwServiceHandler* iServiceHandler = CLiwServiceHandler::NewL();
+ CleanupStack::PushL(iServiceHandler);//1
+
+ if ( iServiceHandler )
+ iLog->Log(_L("Got Service Handler "));
+ else
+ iLog->Log(_L("Didn't get service handler"));
+
+
+ //Take the Interface name and provider from cfg file
+ TBuf8<30> interface8;
+ TBuf8<30> service8;
+ interface8.Copy(Interface16);
+ service8.Copy(serice16);
+
+ CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL(1,interface8,service8);
+ iLog->Log(_L("Create criterai Item"));
+ crit->SetServiceClass(TUid::Uid(KLiwClassBase));
+ CleanupStack::PushL(crit);//2
+
+
+ RCriteriaArray critArray;
+ iLog->Log(_L("Append in Crit"));
+ critArray.AppendL(crit);
+ CleanupClosePushL(critArray);//3
+
+ iServiceHandler->AttachL(critArray);
+
+
+ iLog->Log(_L("Creating Output"));
+ CLiwGenericParamList* output = CLiwGenericParamList::NewL();
+ CleanupStack::PushL(output);//4
+ CLiwGenericParamList* input = CLiwGenericParamList::NewL();
+ CleanupStack::PushL(input);//5
+
+ iLog->Log(_L("call Service cmd L"));
+ iServiceHandler->ExecuteServiceCmdL(*crit, *input, *output);
+
+ iLog->Log(_L("Service cmdl is over"));
+
+ // Create the Instance of SAPI class and the Input Param and output Param
+ TInt pos = 0;
+ MLiwInterface* Interface = NULL;
+ output->FindFirst(pos,interface8 );
+ if(pos != KErrNotFound)
+ {
+ Interface = (*output)[pos].Value().AsInterface();
+ }
+ output->Reset();
+
+ CleanupClosePushL(*Interface);//6
+ iLog->Log(_L("got Interface"));
+ input->Reset();
+
+
+ if (FillInputParmaeterList( aItem, input) == KErrNone )
+ {
+ //Call Service
+ // PrintInputParameterList(input);
+ TBuf8<30> command8;
+ if(command16.Compare(_L("Update")))
+ command8.Copy(command16);
+ else
+ command8.Copy(_L("Add"));
+
+ if(callback.CompareF(_L("NULL"))==0)
+ {
+ //without call back
+ Interface->ExecuteCmdL(command8,*input,*output,servicecmdpptions, NULL);
+ }
+ else
+
+ {
+ //need to change the observer
+ callbackobj = CProviderObserver::NewL();
+ //CleanupStack::PushL( callbackobj);
+ Interface->ExecuteCmdL(command8,*input,*output,servicecmdpptions, callbackobj);
+ //CleanupStack::PopAndDestroy( );
+ }
+
+ aItem.GetNextInt(expected);
+ aItem.GetNextString(title);
+ TInt index =0;
+ const TLiwGenericParam* error = output->FindFirst(index,KErrorCode);
+ if(error)
+ err = error->Value().AsTInt32();
+ if(err == 0 )
+ {
+ if(!command16.Compare(_L("GetList")))
+ {
+
+ // Requested Accepted by the provider
+ if( (callback != NULL) && (KLiwOptASyncronous == servicecmdpptions) )
+ {
+ // need to wait for callback
+ CActiveSchedulerWait* wait = new CActiveSchedulerWait();
+ CleanupStack::PushL( wait);
+ callbackobj->SetWait( wait );
+ wait->Start();
+ CleanupStack::PopAndDestroy();//Active Wait Scheduler
+ }
+ /* // Iterate through the items and fetch the count
+ TInt count =0;
+ TInt search_pos=0;
+ const TLiwGenericParam* output_data = output->FindFirst( search_pos,_L8("ReturnValue"));
+
+ if(output_data)
+ {
+ CLiwIterable* iterlist = output_data->Value().AsIterable();
+ TLiwVariant data;
+ while( iterlist->NextL(data))
+ {
+ count++;
+ const CLiwMap* res = data.AsMap();
+ if ( res )
+ {
+ TLiwVariant new_data;
+ TLiwVariant desc_data;
+ if(res->FindL(KLandmarkName, new_data))
+ {
+ TPtrC name = new_data.AsDes();
+ TBuf<40> name_data;
+ name_data.Copy(name);
+ TInt name_comparison_res = name.Compare(_L("200e-2.5"));
+
+ }
+ if(res->FindL(KLandmarkDesc, desc_data))
+ {
+ TPtrC desc = desc_data.AsDes();
+ TBuf<4000> description_data;
+ description_data.Copy(desc);
+ iLog->Log(_L("Description Data:"));
+ iLog->Log(description_data);
+ }
+ new_data.Reset();
+ desc_data.Reset();
+ //const_cast<CLiwMap*>(res)->DecRef();
+ }
+ }
+ data.Reset();
+ }*/
+ }
+ }
+
+ iLog->Log(_L("Got Error Code "));
+ iLog->Log(_L("Expected value for test case [%S] is [%d]"), &title,expected );
+ iLog->Log(_L("Actual value for test case [%S] is [%d]"), &title,err );
+
+ if(expected != err)
+ {
+ result = KErrGeneral;
+ }
+ }
+ else
+ {
+ //Input Parameter List is not properly entered in Cfg file
+ // PrintInputParameterList(input);
+ iLog->Log(_L("Input not properly passed "));
+ result = KErrGeneral;
+ }
+
+ output->Reset();
+ input->Reset();
+ delete callbackobj;
+ CleanupStack::PopAndDestroy( );
+ CleanupStack::PopAndDestroy( );
+ CleanupStack::PopAndDestroy( );
+ CleanupStack::PopAndDestroy( );
+ CleanupStack::PopAndDestroy( );
+ CleanupStack::PopAndDestroy( );
+
+ __UHEAP_MARKEND;
+ return result;
+
+ }
+
+TInt Ctproviderlmarktest::FillInputParmaeterList( CStifItemParser& aItem , CLiwGenericParamList* input )
+
+{
+
+ TInt intValue;
+
+ TPtrC16 value16;
+ TBuf8<40> value8;
+ TLiwVariant value;
+ TLiwGenericParam valueParam;
+ TBuf8<40> next8 ;
+ TPtrC next16;
+ TPtrC16 dataType;
+
+ aItem.GetNextString(next16);
+ while( next16.CompareF(_L("Finish"))!= 0)
+ {
+ aItem.GetNextString(dataType);
+ //Convert variable name into 8 bit key
+ next8.Copy(next16);
+
+ if(dataType.CompareF(_L("Int") )== 0)
+ {
+ //Value should be Integer
+ aItem.GetNextInt(intValue);
+ value.SetL((TInt32)intValue);
+ valueParam.SetNameAndValueL(next8, value);
+ input->AppendL(valueParam);
+ }
+
+ else if ( dataType.CompareF(_L("String") ) == 0)
+ {
+ //Value should be 8 bit
+ aItem.GetNextString(value16);
+ value8.Copy(value16);
+ value.SetL(value8);
+ valueParam.SetNameAndValueL(next8, value);
+ input->AppendL(valueParam);
+ }
+
+ else if ( dataType.CompareF(_L("UnicodeString") ) == 0)
+ {
+ //Value should be 16 bit string
+ aItem.GetNextString(value16);
+ value.SetL(value16);
+ valueParam.SetNameAndValueL(next8, value);
+ input->AppendL(valueParam);
+ }
+ else if ( dataType.CompareF(_L("Map")) == 0)
+ {
+ //Value should be map
+ CLiwDefaultMap *map = CLiwDefaultMap::NewL();
+ value.SetL(map);
+ valueParam.SetNameAndValueL(next8, value);
+ input->AppendL(valueParam);
+ map->DecRef();
+
+ if( FillMap(aItem,map) !=KErrNone)
+ return KErrGeneral;
+
+ }
+ else if ( dataType.CompareF(_L("List")) == 0)
+ {
+ //Value should be map
+ CLiwDefaultList *list = CLiwDefaultList::NewL();
+ value.SetL(list);
+ valueParam.SetNameAndValueL(next8, value);
+ input->AppendL(valueParam);
+ list->DecRef();
+
+ if( FillList(aItem,list) !=KErrNone)
+ return KErrGeneral;
+ }
+ else
+ {
+ return KErrGeneral;
+ }
+ valueParam.Reset();
+ value.Reset();
+ aItem.GetNextString(next16);
+ }//While loop
+
+
+ return KErrNone;
+}
+
+TInt Ctproviderlmarktest::FillMap( CStifItemParser& aItem , CLiwDefaultMap* aMap )
+
+{
+
+ TInt intValue;
+ TReal32 incorrect_realValue = -5433465343434343434343434343.3456;
+ TReal32 correct_realValue = 5401234.32e25;
+ TPtrC16 value16;
+ TPtrC16 null_value;
+ null_value.Set(KNullDesC);
+ TBuf8<40> value8;
+ TLiwVariant value;
+ TBuf8<40> next8 ;
+ TPtrC next16;
+ TPtrC16 dataType;
+
+ aItem.GetNextString(next16);
+ while( next16.CompareF(_L("End"))!= 0)
+ {
+ aItem.GetNextString(dataType);
+ //Convert variable name into 8 bit key
+ next8.Copy(next16);
+
+ if(dataType.CompareF(_L("Int") )== 0)
+ {
+ //Value should be Integer
+ aItem.GetNextInt(intValue);
+ value.SetL((TInt32)intValue);
+ aMap->InsertL(next8,value);
+ }
+ else if (dataType.CompareF(_L("Real") ) == 0)
+ {
+ //Value should be Real
+ aItem.GetNextInt(intValue);
+ if(intValue == 1)
+ value.SetL((TReal32)incorrect_realValue);
+ else
+ value.SetL((TReal32)correct_realValue);
+ aMap->InsertL(next8,value);
+ }
+ else if ( dataType.CompareF(_L("Bool") ) == 0)
+ {
+ //Value should be 8 bit
+ aItem.GetNextInt(intValue);
+ if(intValue)
+ value.SetL((TBool)1);
+ else
+ value.SetL((TBool)0);
+ aMap->InsertL(next8,value);
+ }
+ else if ( dataType.CompareF(_L("String") ) == 0)
+ {
+ //Value should be 8 bit
+ aItem.GetNextString(value16);
+ value8.Copy(value16);
+ value.SetL(value8);
+ aMap->InsertL(next8,value);
+ }
+ else if ( dataType.CompareF(_L("UnicodeString") ) == 0)
+ {
+ //Value should be 16 bit string
+ aItem.GetNextString(value16);
+ if(value16.Compare(_L("Null")))
+ value.SetL(value16);
+ else
+ value.SetL(null_value);
+ aMap->InsertL(next8,value);
+ }
+ else if ( dataType.CompareF(_L("Map")) == 0)
+ {
+ //Value should be map
+ CLiwDefaultMap *map = CLiwDefaultMap::NewL();
+ value.SetL(map);
+ aMap->InsertL(next8,value);
+ map->DecRef();
+
+ if( FillMap(aItem,map) !=KErrNone)
+ return KErrGeneral;
+
+ }
+ else if ( dataType.CompareF(_L("List")) == 0)
+ {
+ //Value should be map
+ CLiwDefaultList *list = CLiwDefaultList::NewL();
+ value.SetL(list);
+ aMap->InsertL(next8,value);
+ list->DecRef();
+
+ if( FillList(aItem,list) !=KErrNone)
+ return KErrGeneral;
+ }
+ else
+ {
+ return KErrGeneral;
+ }
+ value.Reset();
+ aItem.GetNextString(next16);
+ }//While loop
+
+
+ return KErrNone;
+
+}
+
+
+
+TInt Ctproviderlmarktest::FillList( CStifItemParser& aItem , CLiwDefaultList* aList )
+
+{
+
+ TInt intValue;
+ TPtrC16 value16;
+ TBuf8<40> value8;
+ TLiwVariant value;
+ TBuf8<40> next8 ;
+ TPtrC next16;
+ TPtrC16 dataType;
+
+ aItem.GetNextString(dataType);
+ while( dataType.CompareF(_L("End"))!= 0)
+ {
+ //aItem.GetNextString(dataType);
+
+ if(dataType.CompareF(_L("Int") )== 0)
+ {
+ //Value should be Integer
+ aItem.GetNextInt(intValue);
+ value.SetL((TInt32)intValue);
+ aList->AppendL(value);
+ }
+
+ else if ( dataType.CompareF(_L("String") ) == 0)
+ {
+ //Value should be 8 bit
+ aItem.GetNextString(value16);
+ value8.Copy(value16);
+ value.SetL(value8);
+ aList->AppendL(value);
+ }
+ else if ( dataType.CompareF(_L("UnicodeString") ) == 0)
+ {
+ //Value should be 16 bit string
+ aItem.GetNextString(value16);
+ value.SetL(value16);
+ aList->AppendL(value);
+ }
+ else if ( dataType.CompareF(_L("Map")) == 0)
+ {
+ //Value should be map
+ CLiwDefaultMap *map = CLiwDefaultMap::NewL();
+ value.SetL(map);
+ aList->AppendL(value);
+ map->DecRef();
+
+ if( FillMap(aItem,map) !=KErrNone)
+ return KErrGeneral;
+
+ }
+ else if ( dataType.CompareF(_L("List")) == 0)
+ {
+ //Value should be List
+ CLiwDefaultList *list = CLiwDefaultList::NewL();
+ value.SetL(list);
+ aList->AppendL(value);
+ list->DecRef();
+
+ if( FillList(aItem,list) !=KErrNone)
+ return KErrGeneral;
+
+ }
+ else
+ {
+ return KErrGeneral;
+ }
+ value.Reset();
+ aItem.GetNextString(dataType);
+ }//While loop
+
+
+ return KErrNone;
+
+}
+
+
+void Ctproviderlmarktest::PrintInputParameterList( CLiwGenericParamList* input )
+{
+
+ // Show the Input List
+ RFs fs;
+ RFile file;
+ User::LeaveIfError(fs.Connect());
+
+ CleanupClosePushL(fs);//1
+ TInt errfile=0;
+ TEntry entry;
+
+
+
+ if( fs.Entry(_L("c:\\Data\\Provider\\"),entry) != KErrNone)
+ {
+ TInt ret = fs.MkDir(_L("c:\\Data\\Provider\\"));
+ }
+
+ TBuf<100> flname(_L("c:\\Data\\Provider\\InputList.xml"));
+
+ errfile =file.Replace(fs,flname, EFileWrite | EFileStreamText);
+ CleanupClosePushL(file);//2
+
+
+/*------------------------------------------------------------------------------*/
+ //Generate Xml file
+ TPtrC filebuf;
+
+
+ CXmlConvertor* convertor = CXmlConvertor::NewL();
+ CleanupStack::PushL(convertor);
+ convertor->BuildOutputTreeL(*input,filebuf);
+
+ HBufC8* heapBuffer = HBufC8::NewL(filebuf.Length());
+ TPtr8 filebuf8(heapBuffer->Des());
+ filebuf8.Copy(filebuf);
+
+ file.Write(filebuf8);
+
+ delete heapBuffer;
+ CleanupStack::PopAndDestroy();
+
+/*------------------------------------------------------------------------------*/
+
+
+ CleanupStack::PopAndDestroy();//File 1
+ CleanupStack::PopAndDestroy();//File Session 2
+}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+// End of File