diff -r 000000000000 -r 29b1cd4cb562 bluetoothapitest/bluetoothsvs/T_BTSdpAPI/src/T_DataCElementParser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothapitest/bluetoothsvs/T_BTSdpAPI/src/T_DataCElementParser.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,380 @@ +/* +* Copyright (c) 2005-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: +* +*/ + +#include "T_DataCElementParser.h" +#include "T_BTUtil.h" + +/*@{*/ + +//Commands +_LIT(KCmdNewL, "NewL"); +_LIT(KCmdReset, "Reset"); +_LIT(KCmdBuilder, "Builder"); +_LIT(KCmdSetBuilder, "SetBuilder"); +_LIT(KCmdParseElementsL, "ParseElementsL"); +_LIT(KCmdBufferedParseL, "BufferedParseL"); +_LIT(KCmdDestructor, "~"); + +//Parameters +_LIT(KObject, "object"); +_LIT(KExpected, "expected"); +_LIT(KType, "type"); +_LIT(KFileName, "filename"); + +/*@}*/ + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CT_DataCElementParser* CT_DataCElementParser::NewL() + { + CT_DataCElementParser* ret=new (ELeave) CT_DataCElementParser(); + CleanupStack::PushL(ret); + ret->ConstructL(); + CleanupStack::Pop(ret); + return ret; + } + +CT_DataCElementParser::CT_DataCElementParser() +: iCElementParser(NULL) + { + } + +void CT_DataCElementParser::ConstructL() + { + User::LeaveIfError(iRFs.Connect()); + } + +CT_DataCElementParser::~CT_DataCElementParser() + { + DestroyData(); + iRFs.Close(); + } + +void CT_DataCElementParser::SetObjectL(TAny* aAny) + { + DestroyData(); + iCElementParser = static_cast (aAny); + } + +void CT_DataCElementParser::DisownObjectL() + { + iCElementParser = NULL; + } + +void CT_DataCElementParser::DestroyData() + { + delete iCElementParser; + iCElementParser=NULL; + } + +inline TCleanupOperation CT_DataCElementParser::CleanupOperation() + { + return CleanupOperation; + } + +void CT_DataCElementParser::CleanupOperation(TAny* aAny) + { + CElementParser* parser=static_cast(aAny); + delete parser; + } + +/** + * Process a command read from the ini file + * + * @param aCommand The command to process + * @param aSection The section in the ini containing data for the command + * @param aAsyncErrorIndex Command index for async calls to return errors to + * + * @return ETrue if the command is processed + * + * @leave System wide error + */ +TBool CT_DataCElementParser::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/) + { + TBool ret=ETrue; + + if ( aCommand==KCmdNewL ) + { + DoCmdNewL(aSection); + } + else if ( aCommand==KCmdReset ) + { + DoCmdReset(aSection); + } + else if ( aCommand==KCmdBuilder ) + { + DoCmdBuilder(aSection); + } + else if ( aCommand==KCmdSetBuilder ) + { + DoCmdSetBuilder(aSection); + } + else if ( aCommand==KCmdParseElementsL ) + { + DoCmdParseElementsL(aSection); + } + else if ( aCommand==KCmdBufferedParseL ) + { + DoCmdBufferedParseL(aSection); + } + else if ( aCommand==KCmdDestructor ) + { + DoCmdDestructor(); + } + else + { + ret=EFalse; + } + + return ret; + } + + +/** +Test NewL() +*/ +void CT_DataCElementParser::DoCmdNewL(const TDesC& aSection) + { + INFO_PRINTF1(_L("CElementParser NewL Call")); + DestroyData(); + + MSdpElementBuilder* elementBuilder = NULL; + TPtrC theObject; + TPtrC theType; + if( GetStringFromConfig(aSection, KObject(), theObject) ) + { + if( GetStringFromConfig(aSection, KType(), theType) ) + { + elementBuilder = CT_BTUtil::ElementBuilderCastL(*this, theObject, theType); + } + else + { + ERR_PRINTF1(_L("Error: Type is not specified.")); + SetBlockResult(EFail); + } + } + + TRAPD(err, iCElementParser = CElementParser::NewL(elementBuilder)); + if(err != KErrNone) + { + ERR_PRINTF2(_L("CElementParser NewL failed with error %d"), err); + SetError(err); + } + } + +/** +Test Reset() +*/ +void CT_DataCElementParser::DoCmdReset(const TDesC& aSection) + { + INFO_PRINTF1(_L("CElementParser Reset Call")); + + TPtrC theObject; + TPtrC theType; + if( GetStringFromConfig(aSection, KObject(), theObject) ) + { + if( GetStringFromConfig(aSection, KType(), theType) ) + { + MSdpElementBuilder* elementBuilder = CT_BTUtil::ElementBuilderCastL(*this, theObject, theType); + iCElementParser->Reset(elementBuilder); + } + else + { + ERR_PRINTF1(_L("Error: Type is not specified.")); + SetBlockResult(EFail); + } + } + else + { + iCElementParser->Reset(); + } + } + +/** +Test Builder() +*/ +void CT_DataCElementParser::DoCmdBuilder(const TDesC& aSection) + { + INFO_PRINTF1(_L("CElementParser Builder Call")); + MSdpElementBuilder* actualBuilder = iCElementParser->Builder(); + + TPtrC theObject; + TPtrC theType; + if( GetStringFromConfig(aSection, KObject(), theObject) ) + { + if( GetStringFromConfig(aSection, KType(), theType) ) + { + MSdpElementBuilder* expectedBuilder = CT_BTUtil::ElementBuilderCastL(*this, theObject, theType); + if( actualBuilder != expectedBuilder ) + { + ERR_PRINTF1(_L("Builder not as expected!")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF1(_L("Error: Type is not specified.")); + SetBlockResult(EFail); + } + } + } + +/** +Test SetBuilder() +*/ +void CT_DataCElementParser::DoCmdSetBuilder(const TDesC& aSection) + { + INFO_PRINTF1(_L("CElementParser SetBuilder Call")); + + MSdpElementBuilder* elementBuilder = NULL; + TPtrC theObject; + TPtrC theType; + if( GetStringFromConfig(aSection, KObject(), theObject) ) + { + if( GetStringFromConfig(aSection, KType(), theType) ) + { + elementBuilder = CT_BTUtil::ElementBuilderCastL(*this, theObject, theType); + } + else + { + ERR_PRINTF1(_L("Error: Type is not specified.")); + SetBlockResult(EFail); + } + } + + iCElementParser->SetBuilder(elementBuilder); + } + +/** +Test ParseElementsL() +*/ +void CT_DataCElementParser::DoCmdParseElementsL(const TDesC& aSection) + { + INFO_PRINTF1(_L("CElementParser ParseElementsL Call")); + + TPtrC fileName; + if( GetStringFromConfig(aSection, KFileName(), fileName) ) + { + RFile file; + User::LeaveIfError(file.Open(iRFs, fileName, EFileRead)); + CleanupClosePushL(file); + + TInt fileSize = 0; + file.Size(fileSize); + HBufC8* buff = HBufC8::NewLC(fileSize); + TPtr8 tprBuff = buff->Des(); + file.Read(tprBuff); + + TInt numberOfBytes = 0; + TRAPD(err, numberOfBytes = iCElementParser->ParseElementsL(tprBuff)); + INFO_PRINTF2(_L("CElementParser::ParseElementsL() result: actual = %d"), numberOfBytes); + if(err != KErrNone) + { + ERR_PRINTF2(_L("CElementParser ParseElementsL failed with error %d"), err); + SetError(err); + } + else + { + TInt expected; + if( GetIntFromConfig(aSection, KExpected(), expected) ) + { + if( numberOfBytes != expected ) + { + ERR_PRINTF1(_L("ParseElementsL not as expected!")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing expected value %S"), &KExpected()); + SetBlockResult(EFail); + } + } + CleanupStack::PopAndDestroy(2, &file); + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KExpected()); + SetBlockResult(EFail); + } + } + +/** +Test BufferedParseL() +*/ +void CT_DataCElementParser::DoCmdBufferedParseL(const TDesC& aSection) + { + INFO_PRINTF1(_L("CElementParser BufferedParseL Call")); + + TPtrC fileName; + if( GetStringFromConfig(aSection, KFileName(), fileName) ) + { + RFile file; + User::LeaveIfError(file.Open(iRFs, fileName, EFileRead)); + CleanupClosePushL(file); + + TInt fileSize = 0; + file.Size(fileSize); + HBufC8* buff = HBufC8::NewLC(fileSize); + TPtr8 tprBuff = buff->Des(); + file.Read(tprBuff); + + TBool boolResult = EFalse; + TRAPD(err, boolResult = iCElementParser->BufferedParseL(tprBuff)); + INFO_PRINTF2(_L("CElementParser::BufferedParseL() result: actual = %d"), boolResult); + if(err != KErrNone) + { + ERR_PRINTF2(_L("CElementParser BufferedParseL failed with error %d"), err); + SetError(err); + } + else + { + TBool expected = EFalse; + if( GetBoolFromConfig(aSection, KExpected(), expected) ) + { + if( boolResult != expected ) + { + ERR_PRINTF1(_L("BufferedParseL not as expected!")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing expected value %S"), &KExpected()); + SetBlockResult(EFail); + } + } + CleanupStack::PopAndDestroy(2, &file); + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KExpected()); + SetBlockResult(EFail); + } + } + +/** +Test ~CElementParser() +*/ +void CT_DataCElementParser::DoCmdDestructor() + { + INFO_PRINTF1(_L("CElementParser Destructor Call")); + + DestroyData(); + }