// Copyright (c) 2001-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:
// This contains CommDb Unit Test Cases 018.XX
// 
//

// EPOC includes
#include <e32base.h>
#include <commdb.h>
#include <d32comm.h>

// Test system includes
#include <networking/log.h>
#include <networking/teststep.h>
#include "Teststepcommdb.h"
#include "TestSuiteCommdb.h"
#include "Step_018_xx.h"



//
//	Test step 018.01
//

// constructor
CCommDbTest018_01::CCommDbTest018_01()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_01");
	}

// destructor
CCommDbTest018_01::~CCommDbTest018_01()
	{
	}


TVerdict CCommDbTest018_01::doTestStepPreambleL()
	{	
	openDbAndViewL(TPtrC(DIAL_OUT_ISP));
	return EPass;
	}


TInt CCommDbTest018_01::executeStepL()
	{
	TInt ret=KErrNone;

	//Verify DeleteRecord() by deleting the records in the Dial out ISP
	//table and then checking for their lack of existance

	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );

	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );

	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );
	//The table will now be empty

	delete iTheView;
	iTheView = 0;
	iTheView = iTheDb->OpenTableLC(TPtrC(DIAL_OUT_ISP ) );
	CleanupStack::Pop();

	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNotFound );
	
	return ret;
	}



TVerdict CCommDbTest018_01::doTestStepL( )
	{
	Log(_L("Step 018.01 called "));


	if ( executeStepL() == KErrNone )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}


//
//	Test step 018.02
//

// constructor
CCommDbTest018_02::CCommDbTest018_02()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_02");
	}

// destructor
CCommDbTest018_02::~CCommDbTest018_02()
	{
	}


TVerdict CCommDbTest018_02::doTestStepPreambleL()
	{	
	copyTestDatabase( EDatabase_1 );
	openDbAndViewL(TPtrC(DIAL_OUT_ISP));
	return EPass;
	}


TInt CCommDbTest018_02::executeStepL()
	{
	TInt ret=KErrNone;

	//Try to delete the last record in a view and then 
	//verify its deletion

	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	//The DAIL_OUT_ISP table only has 3 records, so we know
	//we are at the end.

	//Delete the last record
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );

	//The table should now only have 2 records
	
	delete iTheView;
	iTheView = 0;
	iTheView = iTheDb->OpenTableLC(TPtrC(DIAL_OUT_ISP ) );
	CleanupStack::Pop();
	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNotFound ); //no more records
	
	return ret;
	}



TVerdict CCommDbTest018_02::doTestStepL( )
	{
	Log(_L("Step 018.02 called "));


	if ( executeStepL() == KErrNone )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}

//
//	Test step 018.03
//

// constructor
CCommDbTest018_03::CCommDbTest018_03()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_03");
	}

// destructor
CCommDbTest018_03::~CCommDbTest018_03()
	{
	}


TVerdict CCommDbTest018_03::doTestStepPreambleL()
	{	
	openDbAndViewL(TPtrC(IAP));
	return EPass;
	}


TInt CCommDbTest018_03::executeStepL()
	{
	TInt ret=KErrNone;

	//Delete record in empty view
	CDBLEAVE( iTheView->DeleteRecord(), KErrNotFound );	

	return ret;
	}



TVerdict CCommDbTest018_03::doTestStepL( )
	{
	Log(_L("Step 018.03 called "));


	if ( executeStepL() == KErrNone )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}


//
//	Test step 018.04
//

// constructor
CCommDbTest018_04::CCommDbTest018_04()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_04");
	}

// destructor
CCommDbTest018_04::~CCommDbTest018_04()
	{
	}


TVerdict CCommDbTest018_04::doTestStepPreambleL()
	{	
	openDbAndViewL(TPtrC(DIAL_IN_ISP));
	return EPass;
	}


TInt CCommDbTest018_04::executeStepL()
	{
	TInt ret=KErrNone;

	//Delete a read only record 

	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );

	//Delete the read only record #5
	CDBLEAVE( iTheView->DeleteRecord(), KErrNone );

	//Open a new view and check that we've only 4 records left
	delete iTheView;
	iTheView = 0;
	iTheView = iTheDb->OpenTableLC(TPtrC(DIAL_IN_ISP ) );
	CleanupStack::Pop();
	CDBLEAVE( iTheView->GotoFirstRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNone );
	CDBLEAVE( iTheView->GotoNextRecord(), KErrNotFound ); //no more records
	

	return ret;
	}



TVerdict CCommDbTest018_04::doTestStepL( )
	{
	Log(_L("Step 018.04 called "));


	if ( executeStepL() == KErrNone )
		iTestStepResult = EPass;
	else
		iTestStepResult = EFail;

	return iTestStepResult;
	}


//
//	Test step 018.05
//

// constructor
CCommDbTest018_05::CCommDbTest018_05()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_05");
	}

// destructor
CCommDbTest018_05::~CCommDbTest018_05()
	{
	}

TVerdict CCommDbTest018_05::doTestStepL( )
	{
	Log(_L("Step 018.05 called "));

	iTestStepResult = EPass;

		// Heap test for 018.01

	CCommDbTest018_01* step018_01 = new(ELeave) CCommDbTest018_01;
	CleanupStack::PushL(step018_01);
	step018_01->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step018_01, KErrNone) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step018_01);


	return iTestStepResult;	
}


//
//	Test step 018.06
//

// constructor
CCommDbTest018_06::CCommDbTest018_06()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_06");
	}

// destructor
CCommDbTest018_06::~CCommDbTest018_06()
	{
	}

TVerdict CCommDbTest018_06::doTestStepL( )
	{
	Log(_L("Step 018.06 called "));

	iTestStepResult = EPass;
	
			// Heap test for 018.02

	CCommDbTest018_02* step018_02 = new CCommDbTest018_02;
	CleanupStack::PushL(step018_02);
	step018_02->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step018_02, KErrNone) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step018_02);
	
	return iTestStepResult;		
	}
	
//
//	Test step 018.07
//

// constructor
CCommDbTest018_07::CCommDbTest018_07()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_07");
	}

// destructor
CCommDbTest018_07::~CCommDbTest018_07()
	{
	}

TVerdict CCommDbTest018_07::doTestStepL( )
	{
	Log(_L("Step 018.07 called "));

	iTestStepResult = EPass;
	
		// Heap test for 018.03

	CCommDbTest018_03* step018_03 = new CCommDbTest018_03;
	CleanupStack::PushL(step018_03);
	step018_03->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step018_03, KErrNone) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step018_03);
	
	return iTestStepResult;		
	}
	
//
//	Test step 018.08
//

// constructor
CCommDbTest018_08::CCommDbTest018_08()
	{
	// store the name of this test case
	iTestStepName = _L("step_018_08");
	}

// destructor
CCommDbTest018_08::~CCommDbTest018_08()
	{
	}

TVerdict CCommDbTest018_08::doTestStepL( )
	{
	Log(_L("Step 018.08 called "));

	iTestStepResult = EPass;
	
		// Heap test for 018.04

	CCommDbTest018_04* step018_04 = new CCommDbTest018_04;
	CleanupStack::PushL(step018_04);
	step018_04->iSuite = iSuite;
	if ( doTestStepWithHeapFailureL( *step018_04, KErrNone) == EFail )
		iTestStepResult = EFail;
	CleanupStack::PopAndDestroy(step018_04);
	
	return iTestStepResult;		
	}
	

//EOF
