/*
* 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:  ?Description
*
*/



#ifndef WSTESTER_H
#define WSTESTER_H

//  INCLUDES
#include <StifLogger.h>
#include <TestScripterInternal.h>
#include <StifTestModule.h>
#include <f32file.h>
#include <imcvcodc.h> // for base64 codec
#include <s32strm.h>

//Sen
#include <SenXmlServiceDescription.h>
#include <SenServiceConnection.h>
#include <SenCredential.h>

#include <SenSoapMessage.h>
#include <SenServiceManager.h>
//#include <SenServiceManagerImpl.h>
#include <SenIdentityProvider.h>
#include <SenXmlUtils.h>
#include <SenDateUtils.h>
#include <SenServicePattern.h>
#include "SAXTester.h"
#include <SenBaseElement.h>

// CONSTANTS
//const ?type ?constant_var = ?constant;

// MACROS
//#define ?macro ?macro_def
#define TEST_MODULE_VERSION_MAJOR 30
#define TEST_MODULE_VERSION_MINOR 9
#define TEST_MODULE_VERSION_BUILD 38
// Logging path
_LIT( KWSTesterLogPath, "\\logs\\testframework\\WSTester\\" ); 
// Log file
_LIT( KWSTesterLogFile, "WSTester.txt" ); 
_LIT8(KFixedHTTPPrefix, "http://");
_LIT8(KFixedHTTPSPrefix, "https://");


// Literals for SAX testing purposes
_LIT8(KLName8, "Level1");
_LIT8(KL2Name8, "Level2");
_LIT8(KDefaultNS, "Default:NS:Test");
_LIT8(KQName, "TestPre:Level1");
_LIT8(KNsPrefix, "TestPre");
_LIT8(KParseLocalMsg, "<Level1><Level2>Level2 content</Level2><Level2_b>Level2_b content</Level2_b></Level1>");
_LIT8(KParseDifferentLocalMsg, "<Dif1><Level2>Level2 content</Level2></Dif1>");
_LIT8(KParseLocalNs, "<Level1 xmlns=\"Default:NS:Test\"><Level2>Level2 content</Level2></Level1>");
_LIT8(KParseLocalNsQ, "<TestPre:Level1 xmlns:TestPre=\"Default:NS:Test\"><Level2>Level2 content</Level2></TestPre:Level1>");
_LIT8(KAttribute, "Atripuutti");
_LIT8(KAttributeValue, "JustValue");
_LIT8(KParseElemMsg, "<BaseFrag><Level2>Level2 content</Level2></BaseFrag>");
_LIT8(KElementXml, "<BaseFrag></BaseFrag>");

/**
* Result and reference are indentical Test case should be passed.
*/
const TInt KResultOK = 0;
/**
* There is no result. Test case should be failed.
*/
const TInt KResultFailedNoResult = 1;
/**
* There is no reference. Test case should be failed.
*/
const TInt KResultFailedNoReference = 2;
/**
* Tesult and  reference are not identical. Test case should be failed.
*/
const TInt KResultFailedNotIdentical = 3;

/**
* A string in reference file was not found on the source.  Test case should be failed.
*/
const TInt KResultFailedFound = 4;

//===============================Serene status
const TInt KSubmit			= 1;
const TInt KSend			= 2;
const TInt KNewUriL			= 3;
const TInt KNewUriLC		= 4;
const TInt KNewSDescLC		= 5;
const TInt KNewSDescL		= 6;
const TInt KNewFooASURL		= 7;
const TInt KNewLocalhost	= 8;
const TInt KSendFoobar		= 9;
const TInt KSendFW1			= 10;
const TInt KSendFW2			= 11;
const TInt KSendRegistered	= 12;
const TInt KGetListTrue		= 13;
const TInt KGetListFalse	= 14;
const TInt KGetListTrueUE	= 15;
const TInt KSendSOAP		= 16;
const TInt KSubmitSOAP		= 17;
const TInt KRegisterAndSend    = 18;
const TInt KNewSPatternL	= 19;
const TInt KNewSPatternLC	= 20;
const TInt KBasicNewL		= 21;
const TInt KBasicNewLC		= 22;
const TInt KBasicEndpointURINewL		= 23;
const TInt KBasicEndpointURINewLC		= 24;
const TInt KSendEndPContr				= 25;
const TInt KBasicAuthentication			= 26;
const TInt KRegisterAndSendFalseLogin	= 27;
const TInt KSubmitNonAlloc				= 28;
const TInt KSubmitSOAPRequest			= 29;
const TInt KBasicAuthenticationFalse	= 30;
const TInt KSendSOAPRequest				= 31;
const TInt KImplTesting					= 32;
const TInt KSendLong					= 33;
const TInt KEndpointMovedTest			= 34;
const TInt KGetConnectionFooContaract	= 35;
const TInt KSendASAbort					= 36;
const TInt KInvalidLogin				= 37;
const TInt KInvalidHost					= 38;
const TInt KLowercase					= 40;
const TInt KUppercase 					= 41;
const TInt KAllowed 					= 42;
const TInt KAllowedUppercase			= 43;
const TInt KUppercaseAllowed			= 44;
const TInt KAllowUpperTrun 				= 45;
const TInt KInitialOK					= 46;
const TInt KBasicDisco 					= 47;
const TInt KInvalidCredentials 			= 48;
const TInt KUnexistantDS				= 49;
const TInt KTruncate 					= 50;
const TInt KMultippleROs 				= 51;
const TInt KDSFailed 					= 52;
const TInt KDSFailedResult 				= 53;
const TInt KNoCredentials 				= 54;
const TInt KConnectAS					= 55;
const TInt KSendBUCF	 				= 56;
const TInt KSendBUCFBody 				= 57;
const TInt KSendBUCFEnvelope			= 58;
const TInt KInvalidWSP					= 59;
const TInt KFacets						= 60;
const TInt KDSEcrypted					= 61;
const TInt KNoResourceID				= 62;
const TInt KSendInvalidXML				= 63;
const TInt KSendInvalidSOAP				= 64;
const TInt KSendYomi					= 65;
const TInt KSendBUCFEnvelope2			= 66;
const TInt KDelegateParsing				= 67;	
const TInt KDelegateParsing2			= 68;	
const TInt KDetach						= 69;
const TInt KNonSupportedAM				= 70;
const TInt KCredentialsExpires			= 71;
const TInt KServerError500				= 72;
const TInt KServerError404				= 73;
const TInt KHasFacet					= 74;
const TInt KIsReady						= 75;
const TInt KCompleteServerMessagesOnOff_1 = 76;
const TInt KCompleteServerMessagesOnOff_2 = 77;
const TInt KCompleteServerMessagesOnOff_3 = 78;
const TInt KCompleteServerMessagesOnOff_4 = 79;
const TInt KPerformanceSOAPSubmit		= 80;



//NONSHARABLE_CLASS(CWSTester)
class CWSTester: public CScriptBase, 	public MSenServiceConsumer
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        static CWSTester* NewL( CTestModuleIf& aTestModuleIf );
        
        /**
        * Destructor.
        */
        virtual ~CWSTester();

    public: // New functions
        
        /**
        * ?member_description.
        * @since ?Series60_version
        * @param ?arg1 ?description
        * @return ?description
        */
        //?type ?member_function( ?type ?arg1 );

    public: // Functions from base classes

        /**
        * From CScriptBase Runs a script line.
        * @since ?Series60_version
        * @param aItem Script line containing method name and parameters
        * @return Symbian OS error code
        */
        virtual TInt RunMethodL( CStifItemParser& aItem );
        /**
         * Method used to log version of test module
         */
        void SendTestModuleVersion();
                
    protected:  // New functions
        
        /**
        * ?member_description.
        * @since ?Series60_version
        * @param ?arg1 ?description
        * @return ?description
        */
        //?type ?member_function( ?type ?arg1 );

    protected:  // Functions from base classes
        
        /**
        * From ?base_class ?member_description
        */
        //?type ?member_function();

    private:

        /**
        * C++ default constructor.
        */
        CWSTester( CTestModuleIf& aTestModuleIf );

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

        // Prohibit copy constructor if not deriving from CBase.
        // ?classname( const ?classname& );
        // Prohibit assigment operator if not deriving from CBase.
        // ?classname& operator=( const ?classname& );
    
        /**
        * Frees all resources allocated from test methods.
        * @since ?Series60_version
        */
        void Delete();
        


		TInt CheckNonIncludanceL(TPtrC aSrcFile, TPtrC aReferenceFile);
		TInt CheckIncludanceL(TPtrC aSrcFile, TPtrC aReferenceFile);
		TInt TestFacets();
		HBufC8* DeBase64DescL(TDesC8& aMessage);
        /**
        * Test methods are listed below. 
        */

/*################################################
*
*        
*   SERVICE MANAGER DLL
*
*
*################################################*/

/*-----------------------------------------------
            Service Manager
-----------------------------------------------*/

    virtual TInt _S_NewServiceManager( CStifItemParser& aItem );
    virtual TInt _S_RegisterIdentityProvider( CStifItemParser& aItem );
    virtual TInt _S_UnregisterIdentityProvider( CStifItemParser& aItem );
    virtual TInt _S_AssociateService( CStifItemParser& aItem );
    virtual TInt _S_DissociateService( CStifItemParser& aItem );
    virtual TInt _S_RegisterServiceDescription( CStifItemParser& aItem );
    virtual TInt _S_UnregisterServiceDescription( CStifItemParser& aItem );
    virtual TInt _S_ServiceDescriptions( CStifItemParser& aItem );
   	virtual TInt _S_ServiceDescriptionsByUri( CStifItemParser& aItem );
	virtual TInt _S_InstallFramework( CStifItemParser& aItem );


/*################################################
*
*        
*   XML DLL
*
*
*################################################*/

/*-----------------------------------------------
            SAX based parsing
-----------------------------------------------*/
virtual TInt _S_NewSAXFragment( CStifItemParser& aItem );
virtual TInt _S_SAXTest( CStifItemParser& aItem );

/*-----------------------------------------------
            DOM based parsing
-----------------------------------------------*/
		virtual TInt _S_LocalName( CStifItemParser& aItem );
		virtual TInt _S_NamespaceURI( CStifItemParser& aItem );
		virtual TInt _S_SetNamespace( CStifItemParser& aItem );
		virtual TInt _S_NsPrefix( CStifItemParser& aItem );
		virtual TInt _S_SetPrefix( CStifItemParser& aItem );
		virtual TInt _S_HasContent( CStifItemParser& aItem );
		virtual TInt _S_Content( CStifItemParser& aItem );
		virtual TInt _S_ContentUnicode( CStifItemParser& aItem );
		virtual TInt _S_SetContent( CStifItemParser& aItem );
		virtual TInt _S_AddNamespace( CStifItemParser& aItem );
		virtual TInt _S_AttrValue( CStifItemParser& aItem );
		virtual TInt _S_AddAttr( CStifItemParser& aItem );
		virtual TInt _C_Namespace( CStifItemParser& aItem );
		virtual TInt _C_Elements( CStifItemParser& aItem );
		virtual TInt _C_Attributes( CStifItemParser& aItem );
		virtual TInt _C_Namespaces( CStifItemParser& aItem );
		virtual TInt _C_Parent( CStifItemParser& aItem );
		virtual TInt _C_Root( CStifItemParser& aItem );
		virtual TInt _C_SetParent( CStifItemParser& aItem );
		virtual TInt _C_Element( CStifItemParser& aItem );
		virtual TInt _C_CreateElement( CStifItemParser& aItem );
		virtual TInt _C_InsertElement( CStifItemParser& aItem );
		virtual TInt _S_AddElement( CStifItemParser& aItem );
		virtual TInt _S_RemoveElement( CStifItemParser& aItem );
		virtual TInt _C_ReplaceElement( CStifItemParser& aItem );
		virtual TInt _S_AsXml( CStifItemParser& aItem );
		virtual TInt _S_AsXmlUnicode( CStifItemParser& aItem );
		virtual TInt _C_AsElement( CStifItemParser& aItem );
		virtual TInt _C_CopyFrom( CStifItemParser& aItem );
		virtual TInt _C_Detach( CStifItemParser& aItem );
		virtual TInt _C_Child( CStifItemParser& aItem );
		virtual TInt _C_AllocAttrValue( CStifItemParser& aItem );
		virtual TInt _S_Set( CStifItemParser& aItem );
		virtual TInt _S_WriteAsXMLTo( CStifItemParser& aItem );
		virtual TInt _S_WriteNamespacesTo( CStifItemParser& aItem );
		virtual TInt _S_ContentWriteStream( CStifItemParser& aItem );
		virtual TInt _S_SetAttributes( CStifItemParser& aItem );

/*################################################
*
*        
*   SERVICE DESCRIPTION DLL
*
*
*################################################*/
/*-----------------------------------------------
            Service Connection
-----------------------------------------------*/
        virtual TInt _S_NewServiceConnection( CStifItemParser& aItem );
   		virtual TInt _S_CompleteServerMessagesOnOff( CStifItemParser& aItem );
		virtual TInt _S_TransactionCompleted( CStifItemParser& aItem );
		virtual TInt _S_StartTransaction( CStifItemParser& aItem );

/*-----------------------------------------------
            XML Service Description
-----------------------------------------------*/
        
        virtual TInt _S_NewXMLServiceDescription( CStifItemParser& aItem );
        virtual TInt _S_EndPoint( CStifItemParser& aItem );
        virtual TInt _S_Contract( CStifItemParser& aItem );
        virtual TInt _S_FrameworkId( CStifItemParser& aItem );
        virtual TInt _C_ProviderIDToService( CStifItemParser& aItem );
        virtual TInt _S_ConsumerIapId( CStifItemParser& aItem );
/*-----------------------------------------------
            Service Pattern
-----------------------------------------------*/
        virtual TInt _S_NewServicePattern( CStifItemParser& aItem );
/*-----------------------------------------------
            IdentityProvider
-----------------------------------------------*/
        virtual TInt _S_NewIdentityProvider( CStifItemParser& aItem );
        virtual TInt _S_ProviderID( CStifItemParser& aItem );
        virtual TInt _S_UserInfo( CStifItemParser& aItem );
/*################################################
*
*        
*   UTILS
*
*
*################################################*/

/*-----------------------------------------------
            SoapEnvelope
-----------------------------------------------*/
        virtual TInt _C_Body( CStifItemParser& aItem );
/*-----------------------------------------------
            SoapDateUtils
-----------------------------------------------*/
        virtual TInt _C_FromXmlDateTime( CStifItemParser& aItem );
        virtual TInt _C_ToXmlDateTimeUtf( CStifItemParser& aItem );



/*################################################
            MService Consumer implementation
################################################*/
		virtual void HandleMessageL(const TDesC8& aMessage);
		//virtual void HandleErrorL(const TDesC8& aError);
        virtual void HandleErrorL(const int aErrorCode, const TDesC8& aError);
		virtual void SetStatus(const TInt aStatus);

/*################################################
            Common
################################################*/
        virtual TInt _X_WaitForResponse( CStifItemParser& aItem );
        virtual TInt _X_Reference( CStifItemParser& aItem );
        virtual TInt _X_ReferenceFragment( CStifItemParser& aItem );
        virtual TInt _X_CheckResultFL( CStifItemParser& aItem );
        virtual TInt _X_LogResult( CStifItemParser& aItem );
        virtual TInt _X_Init( CStifItemParser& aItem );
        virtual TInt _X_DeleteFile( CStifItemParser& aItem );
		virtual TInt _X_TimeOut(CStifItemParser& aItem );
        virtual TInt _X_Flag(CStifItemParser& aItem );
		virtual TInt _X_NonIncludance( CStifItemParser& aItem );
		virtual TInt _X_Includance( CStifItemParser& aItem );
		virtual TInt _X_DeBase64( CStifItemParser& aItem );
		virtual TInt _X_CheckDir( CStifItemParser& aItem );
		virtual TInt _X_CheckFile( CStifItemParser& aItem );
		virtual TInt _X_SOAPRequest( CStifItemParser& aItem );		
		virtual TInt _X_NonExistence( CStifItemParser& aItem );
		virtual TInt _X_Iteration( CStifItemParser& aItem );

/*################################################
            IAP Selection
################################################*/


		virtual TInt _X_IAPList( CStifItemParser& aItem );
//		virtual TInt _C_SetIAP( CStifItemParser& aItem );
		

/*################################################
            Complex
################################################*/
        virtual TInt _C_ParseDomFragment( CStifItemParser& aItem );
        virtual TInt _C_ParseXMLDocument( CStifItemParser& aItem );
        virtual TInt _C_Dump(CStifItemParser& aItem );
   		virtual TInt _C_ParseToElement(CStifItemParser& aItem );


		void SendBUCFTest();
		void SendYomiTest();
		void SendInvalidTest();
		void SendInvalidSOAPTest();
		void SendBUCFBodyTest();
		void SendBUCFEnvelopeTest();
		void SendBUCFEnvelopeTest2();
        void SendSOAPTest();
        void SubmitSOAPTest();
   		void SendSOAPRequest(TInt aDelay);
		void SubmitSOAPRequest();        
		void CheckConnection();
		void PerformanceSOAPSubmit();

        TInt CheckResultL(TPtrC aSrcFile, TPtrC aReferenceFile);
        TInt CheckResultFragmentL(TPtrC aSrcFile, TPtrC aReferenceFile);
        void LogResultL(const TDesC16& aDesc16);
        void LogResultL(const TDesC8& aDesc8);
        TPtrC8 GetParC(CStifItemParser& aItem);
        void PopAndDestroyArgc();
   		CSenElement* ParseToElementL( HBufC8* pTestXml );

    public:     // Data
        // ?one_line_short_description_of_data
        //?data_declaration;
    
    protected:  // Data
        // ?one_line_short_description_of_data
        //?data_declaration;

    private:    // Data
		RStringPool iStringPool;
        //logging
        CStifLogger* iLog;
        //For decrypting data....
		TImCodecB64 iBase64Codec;
        RFs	iFsSession;
        TInt iRunCase;
        TInt iStarted;
        //for implemented void methos, if f.ex. handle message is wrongwe have to signalize error
        TInt iErrorsOccured;
        //counter for arguments in script, arguments have to destroyed after parsing
        TInt iArgc;
   		//RXMLReader iXmlReader;
        CSenXmlReader* iXmlReader;
   		CSenElement* iElement;


        RFile iResultFile;
        RFileWriteStream iWriter;
        TInt result;
        TPtrC iResFile;
        TInt iTestIteracion;

        // simple query
		TBuf8<255>	iSOAPRequest;

		TBool iCasePassed;

        
        CSenSoapMessage* iSOAPMessage;
//Service Connection
        CSenServiceConnection* iSenServiceConnection;
//Service Description
        CSenXmlServiceDescription* iSenXmlServiceDescription;
//Service manager
        CSenServiceManager*     iServiceManager;
//IdentityProvider
        CSenIdentityProvider*   iProvider;
//Credential
        CSenCredential*   iSenCredential;

		CSAXTester*		iSaxTester;
		CSenBaseFragment* iFrg;

    public:     // Friend classes
        //?friend_class_declaration;
    protected:  // Friend classes
        //?friend_class_declaration;
    private:    // Friend classes
        //?friend_class_declaration;

    };
#endif      // WSTESTER_H
            
// End of File
