mmtestenv/mmtestfwunittest/src/tsu_mmtsth13/TSU_MmTsth13.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 16:15:10 +0300
branchRCL_3
changeset 65 af86cc8a4692
parent 0 40261b775718
permissions -rw-r--r--
Revision: 201039 Kit: 201041

// Copyright (c) 2002-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 file contains the test steps for Unit Test Suite 13 : TestUtils.cpp
// 
//

// EPOC includes
#include <e32base.h>

// Test system includes
#include <testframework.h>

// Specific includes for this test suite
#include "TSU_MmTsthStep13.h"
#include "TSU_MmTsthSuite13.h"

// Specific includes for these test steps
#include "TSU_MmTsth13.h"

// --------------------------------------------

// Unit Test Suite 13 : TestUtils.cpp
// Depends on : none

// Tests :-
//  1. NewL / Construct - create with a CLog;
// RunUtils / RunUtilsL - script-line format testing :-
// 	2 Copy File
// 	3 Make Dir.
// 	4 Change Dir.
// 	5 Make Read/Write
// 	6 Delete File
// 	11 Syntax error (demonstrate no panic)

// NB! Test Utils in themselves are not test steps, and do NOT run in their own thread

// ------------------------
// RTestMmTsthU1301

RTestMmTsthU1301* RTestMmTsthU1301::NewL()
	{
	RTestMmTsthU1301* self = new(ELeave) RTestMmTsthU1301;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1301::RTestMmTsthU1301()
	{
	iTestStepName = _L("MM-TSTH-U-1301");
	}

// preamble
TVerdict RTestMmTsthU1301::OpenL()
	{
	// stub - purpose is that for this test we do not run the parent preamble
	// which initialises iTestUtils
	return iTestStepResult = EPass;
	}

// postamble
void RTestMmTsthU1301::Close()
	{
	}

// do the test step
TVerdict RTestMmTsthU1301::DoTestStepL()
	{
	// NB CTestUtils does not report errors, but it DOES log them.

	// NB a single run of TestFrameworkMain can only have ONE log file open at the server.
	// Hence we must use that one.

	TVerdict currentVerdict = EPass;

	INFO_PRINTF1(_L("Unit test for TestUtils : Construct"));

	CLog* theLog = iSuite->LogSystem();	// use the current log
	CTestUtils* theTestUtils = NULL;
	TRAPD(err, theTestUtils = CTestUtils::NewL(theLog));
	if(err != KErrNone)
		{
		ERR_PRINTF2(_L("CTestUtils::NewL() failed with error code %d"), err);
		return iTestStepResult = EFail;
		}

	delete theTestUtils;

	return iTestStepResult = currentVerdict; // should be EPass if we've got here
	}

// ------------------------
// RTestMmTsthU1302

RTestMmTsthU1302* RTestMmTsthU1302::NewL()
	{
	RTestMmTsthU1302* self = new(ELeave) RTestMmTsthU1302;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1302::RTestMmTsthU1302()
	{
	iTestStepName = _L("MM-TSTH-U-1302");
	}


// preamble
TVerdict RTestMmTsthU1302::OpenL()
	{
	// do the standard preamble
	TVerdict currentVerdict = RTSUMmTsthStep13::OpenL();
	if(currentVerdict != EPass)
		return currentVerdict;

	// do extra, to set up the files/directories we need, which are :-
	// C:\\TFData1\\testfile1.txt must exist
	// C:\\TFData2 must exist

	RFs theFs;
	theFs.Connect();
	RFile theFile;

	TFileName theDirName  = _L("c:\\TFData1\\");
	TFileName theFileName = _L("c:\\TFData1\\testfile1.txt");
	TInt rc = theFs.MkDir(theDirName);
	if (rc != KErrNone && rc != KErrAlreadyExists)
		{
		ERR_PRINTF2(_L("Preamble failed RFs::MkDir() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}
	rc = theFile.Replace(theFs, theFileName, EFileWrite | EFileStreamText); 

	// check if open fails 
	if (rc == KErrNone)
		{
		theFile.Write(_L8("This is a test file for MM_TSTH_U_1302\n"));
		theFile.Close();
		}
	else
		{
		ERR_PRINTF2(_L("Preamble failed RFile::Write() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	theDirName  = _L("c:\\TFData2\\");
	rc = theFs.MkDir(theDirName);
	if (rc != KErrNone && rc != KErrAlreadyExists)
		{
		ERR_PRINTF2(_L("Preamble failed RFs::MkDir() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	theFs.Close();
	return iTestStepResult = currentVerdict;
	}

// postamble
void RTestMmTsthU1302::Close()
	{
	// clean up the extra files / directories we created
	CleanupFileSystem();

	// do the standard postamble
	RTSUMmTsthStep13::Close();
	}

// do the test step
TVerdict RTestMmTsthU1302::DoTestStepL()
	{
	INFO_PRINTF1(_L("Unit test for TestUtils : RunUtils - CopyFile"));

	TVerdict currentVerdict = EPass;

	iTestUtils->RunUtils(_L("run_utils copyfile c:\\TFData1\\testfile1.txt c:\\TFData2\\testfile2.txt"));

	// check that testfile2.txt exists
	TUint dummy;
	RFs theFs;
	theFs.Connect();
	TInt rc = theFs.Att(_L("c:\\TFData2\\testfile2.txt"), dummy);
	if(rc != KErrNone)
		{
		ERR_PRINTF2(_L("CTestUtils : run_utils copyfile failed, error %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	// cleanup
	theFs.Close();
	return iTestStepResult = currentVerdict; // should be EPass if we've got here
	}

// --------------------
// RTestMmTsthU1303

RTestMmTsthU1303* RTestMmTsthU1303::NewL()
	{
	RTestMmTsthU1303* self = new(ELeave) RTestMmTsthU1303;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1303::RTestMmTsthU1303()
	{
	// store the name of this test case
	// this is the name that is used by the script file
	iTestStepName = _L("MM-TSTH-U-1303");
	}

// preamble
TVerdict RTestMmTsthU1303::OpenL()
	{
	// do the standard preamble
	TVerdict currentVerdict = RTSUMmTsthStep13::OpenL();
	if(currentVerdict != EPass)
		return currentVerdict;

	// do extra, to set up the files/directories we need, which are :-
	// C:\\TFData2 must not exist

	RFs theFs;
	CFileMan* theFm = NULL;
	theFs.Connect();
	TRAPD(err, theFm = CFileMan::NewL(theFs));
	if(err != KErrNone)
		{
		ERR_PRINTF2(_L("Cannot create CFileMan, error code %d"), err);
		theFs.Close();
		return iTestStepResult = EFail;
		}
	
	TInt rc = theFm->RmDir(_L("c:\\TFData2\\"));
	if (rc != KErrNone && rc != KErrPathNotFound)
		{
		ERR_PRINTF2(_L("Preamble failed CFileMan::RmDir() error code %d"), rc);
		currentVerdict = EFail;
		}

	theFs.Close();
	delete theFm;
	return iTestStepResult = currentVerdict;
	}

// postamble
void RTestMmTsthU1303::Close()
	{
	// clean up the extra files / directories we created
	CleanupFileSystem();

	// do the standard postamble
	RTSUMmTsthStep13::Close();
	}

// do the test step.
TVerdict RTestMmTsthU1303::DoTestStepL()
	{
	INFO_PRINTF1(_L("Unit test for TestUtils : RunUtils - MkDir"));

	TVerdict currentVerdict = EPass;

	iTestUtils->RunUtils(_L("run_utils mkdir c:\\TFData2\\"));

	// check that TFData2 exists
	TUint dummy;
	RFs theFs;
	theFs.Connect();
	TInt rc = theFs.Att(_L("c:\\TFData2\\"), dummy);
	if(rc != KErrNone)
		{
		ERR_PRINTF2(_L("CTestUtils : run_utils mkdir failed, error %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	theFs.Close();
	return iTestStepResult = currentVerdict; // should be EPass if we've got here
	}

// --------------------
// RTestMmTsthU1304
RTestMmTsthU1304* RTestMmTsthU1304::NewL()
	{
	RTestMmTsthU1304* self = new(ELeave) RTestMmTsthU1304;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1304::RTestMmTsthU1304()
	{
	iTestStepName = _L("MM-TSTH-U-1304");
	}

// preamble
TVerdict RTestMmTsthU1304::OpenL()
	{
	// do the standard preamble
	TVerdict currentVerdict = RTSUMmTsthStep13::OpenL();
	if(currentVerdict != EPass)
		return currentVerdict;

	// do extra, to set up the files/directories we need, which are :-
	// C:\\TFData1\\testfile1.txt must exist and be read-only
	
	RFs theFs;
	theFs.Connect();
	RFile theFile;

	TFileName theDirName  = _L("c:\\TFData1\\");
	TFileName theFileName = _L("c:\\TFData1\\testfile1.txt");
	TInt rc = theFs.MkDir(theDirName);
	if (rc != KErrNone && rc != KErrAlreadyExists)
		{
		ERR_PRINTF2(_L("Preamble failed RFs::MkDir() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}
	rc = theFile.Replace(theFs, theFileName, EFileWrite | EFileStreamText); 

	// check if open fails 
	if (rc == KErrNone)
		{
		theFile.Write(_L8("This is a test file for MM_TSTH_U_1304\n"));
		theFile.Close();
		}
	else
		{
		ERR_PRINTF2(_L("Preamble failed RFile::Replace() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	// set read-only
	rc = theFs.SetAtt(theFileName, KEntryAttReadOnly, 0);

	theFs.Close();
	return iTestStepResult = currentVerdict;
	}

// postamble
void RTestMmTsthU1304::Close()
	{
	// set the file read-write for deletion
	RFs theFs;
	theFs.Connect();
	TFileName theFileName = _L("c:\\TFData1\\testfile1.txt");
	theFs.SetAtt(theFileName, 0, KEntryAttReadOnly);
	theFs.Close();

	// clean up the extra files / directories we created
	CleanupFileSystem();

	// do the standard postamble
	RTSUMmTsthStep13::Close();
	}

// do the test step
TVerdict RTestMmTsthU1304::DoTestStepL()
	{
	INFO_PRINTF1(_L("Unit test for TestUtils : RunUtils - MakeReadWrite"));

	TVerdict currentVerdict = EPass;

	iTestUtils->RunUtils(_L("run_utils makereadwrite c:\\TFData1\\testfile1.txt"));

	// check that file exists and is read-only
	TUint theAtts;
	RFs theFs;
	theFs.Connect();
	theFs.Att(_L("c:\\TFData1\\testfile1.txt"), theAtts);
	if(theAtts & KEntryAttReadOnly)
		{
		ERR_PRINTF1(_L("CTestUtils : run_utils makereadwrite failed, file is still read-only"));
		theFs.Close();
		return iTestStepResult = EFail;
		}

	theFs.Close();
	return iTestStepResult = currentVerdict; // should be EPass if we've got here
	}

// --------------------
// RTestMmTsthU1305
RTestMmTsthU1305* RTestMmTsthU1305::NewL()
	{
	RTestMmTsthU1305* self = new(ELeave) RTestMmTsthU1305;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1305::RTestMmTsthU1305()
	{
	iTestStepName = _L("MM-TSTH-U-1305");
	}

// preamble
TVerdict RTestMmTsthU1305::OpenL()
	{
	// do the standard preamble
	TVerdict currentVerdict = RTSUMmTsthStep13::OpenL();
	if(currentVerdict != EPass)
		return currentVerdict;

	// do extra, to set up the files/directories we need, which are :-
	// C:\\TFData1\\testfile1.txt must exist and be read-write
	
	RFs theFs;
	theFs.Connect();
	RFile theFile;

	TFileName theDirName  = _L("c:\\TFData1\\");
	TFileName theFileName = _L("c:\\TFData1\\testfile1.txt");
	TInt rc = theFs.MkDir(theDirName);
	if (rc != KErrNone && rc != KErrAlreadyExists)
		{
		ERR_PRINTF2(_L("Preamble failed RFs::MkDir() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}
	rc = theFile.Replace(theFs, theFileName, EFileWrite | EFileStreamText); 

	// check if open fails 
	if (rc == KErrNone)
		{
		theFile.Write(_L8("This is a test file for MM_TSTH_U_1305\n"));
		theFile.Close();
		}
	else
		{
		ERR_PRINTF2(_L("Preamble failed RFile::Replace() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	// set read-write
	rc = theFs.SetAtt(theFileName, 0, KEntryAttReadOnly);

	theFs.Close();
	return iTestStepResult = currentVerdict;
	}

// postamble
void RTestMmTsthU1305::Close()
	{
	// clean up the extra files / directories we created
	CleanupFileSystem();

	// do the standard postamble
	RTSUMmTsthStep13::Close();
	}

// do the test step
TVerdict RTestMmTsthU1305::DoTestStepL()
	{
	INFO_PRINTF1(_L("Unit test for TestUtils : RunUtils - Delete"));

	TVerdict currentVerdict = EPass;

	iTestUtils->RunUtils(_L("run_utils delete c:\\TFData1\\testfile1.txt"));

	// check that file does not exist
	TUint dummy;
	RFs theFs;
	theFs.Connect();
	TInt rc = theFs.Att(_L("c:\\TFData1\\testfile1.txt"), dummy);
	if(rc != KErrNotFound)
		{
		ERR_PRINTF1(_L("CTestUtils : run_utils delete failed, file still exists"));
		theFs.Close();
		return iTestStepResult = EFail;
		}

	theFs.Close();
	return iTestStepResult = currentVerdict; // should be EPass if we've got here
	}

// ----------------------
// RTestMmTsthU1306

RTestMmTsthU1306* RTestMmTsthU1306::NewL()
	{
	RTestMmTsthU1306* self = new(ELeave) RTestMmTsthU1306;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1306::RTestMmTsthU1306()
	{
	iTestStepName = _L("MM-TSTH-U-1306");
	}

// preamble
TVerdict RTestMmTsthU1306::OpenL()
	{
	// do the standard preamble
	TVerdict currentVerdict = RTSUMmTsthStep13::OpenL();
	if(currentVerdict != EPass)
		return currentVerdict;

	// do extra, to set up the files/directories we need, which are :-
	// C:\\TFData2 must exist

	RFs theFs;
	theFs.Connect();

	TFileName theDirName  = _L("c:\\TFData2\\");
	TInt rc = theFs.MkDir(theDirName);
	if (rc != KErrNone && rc != KErrAlreadyExists)
		{
		ERR_PRINTF2(_L("Preamble failed RFs::MkDir() error code %d"), rc);
		theFs.Close();
		return iTestStepResult = EFail;
		}

	theFs.Close();
	return iTestStepResult = currentVerdict;
	}

// postamble
void RTestMmTsthU1306::Close()
	{
	// clean up the extra files / directories we created
	CleanupFileSystem();

	// do the standard postamble
	RTSUMmTsthStep13::Close();
	}

// do the test step.
TVerdict RTestMmTsthU1306::DoTestStepL()
	{

	INFO_PRINTF1(_L("This test step is not available on EKA2 - Passing test!"));
	return EPass;
	
	}

// --------------------
// RTestMmTsthU1311

RTestMmTsthU1311* RTestMmTsthU1311::NewL()
	{
	RTestMmTsthU1311* self = new(ELeave) RTestMmTsthU1311;
	return self;
	}

// Each test step initialises its own name.
RTestMmTsthU1311::RTestMmTsthU1311()
	{
	iTestStepName = _L("MM-TSTH-U-1311");
	}

// do the test step
TVerdict RTestMmTsthU1311::DoTestStepL()
	{
	// to demonstrate that bad syntax does not panic
	INFO_PRINTF1(_L("Unit test for TestUtils : RunUtils - bad syntax"));

	TVerdict currentVerdict = EPass;

	iTestUtils->RunUtils(_L("run_utils gobbledygook"));
	INFO_PRINTF1(_L("RunUtils did not panic"));

	return iTestStepResult = currentVerdict; // should be EPass if we've got here
	}

// --------------------