kerneltest/e32test/system/t_env_child.cpp
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:29:07 +0100
changeset 30 8aab599e3476
parent 0 a41df078684a
permissions -rw-r--r--
Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h) Have multiple extension sections in the bld.inf, one for each version of the compiler. The RVCT version building the tools will build the runtime libraries for its version, but make sure we extract all the other versions from zip archives. Also add the archive for RVCT4.

// 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 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:
// e32test\system\t_env.cpp
// 
//

#include <e32std.h>
#include <e32std_private.h>
#include <e32test.h>
#include <e32panic.h>
#include <e32msgqueue.h>
#include <f32file.h>

LOCAL_D RTest test(_L("T_ENV_CHILD"));



GLDEF_C TInt E32Main()
    {

	test.Title();
	test.Start(_L("Environment"));
	
	//parameter slot 1 contains a message queue of TInts which contain control messages
	//parameter slot 2 contains a message queue of TInts
	//parameter slot 3 is a mutex
	//parameter slot 4 is a semaphore
	//parameter slot 5 is a chunk

	RMsgQueue<TInt> controlQueue;
	TInt err = controlQueue.Open(1, EOwnerProcess);
	test(err==KErrNone);

	TInt t = 0;
	controlQueue.ReceiveBlocking(t);
	switch (t)
		{
		case 0:
			{
			// out of range test
			User::SetJustInTime(EFalse);
			RMsgQueue<TInt> intQueue;
			intQueue.Open(-1);			//should panic
			break;
			}

		case 1:
			{
			// out of range test
			User::SetJustInTime(EFalse);
			RMsgQueue<TInt> intQueue;
			intQueue.Open(4545);			//should panic
			break;
			}
				
		case 2:
			{
			//attempt to read slot which is empty
			RMsgQueue<TInt> intQueue;
			TInt ret = intQueue.Open(15);			//15 is empty
			test(ret == KErrNotFound);
			break;
			}
		
		case 3:
			//attempt to open incorrect handle type
			{
			RMutex mutex;
			TInt ret = mutex.Open(2);			//2 is a TInt queue
			test(ret == KErrArgument);
			break;
			}
		case 4:

			{
			//test passing a mutex (slot 3)
			RMutex mutex;
			mutex.Open(3, EOwnerThread);
			TFullName name = mutex.FullName();
			TInt ret = name.CompareF(_L("testmutex"));
			test (ret == KErrNone);
			mutex.Close();
			break;
			}

		case 5:
			{
			//test passing a semaphore (slot 4)
			RSemaphore sem;
			sem.Open(4, EOwnerThread);
			TFullName name = sem.FullName();
			TInt ret = name.CompareF(_L("testsemaphore"));
			test (ret == KErrNone);
			sem.Close();
			break;
			}

		case 6:
			{
			//test file handle (slots 7=session 8=file)
			_LIT8(KTestData,"test data");
			RFs session;
			session.Open(7);
			RFile file;
			TInt handle;
			TInt len = User::ParameterLength(8);
			test (len == 4);
			TInt ret = User::GetTIntParameter(8, handle);
			test(ret == KErrNone);
			file.Adopt(session, handle);
			TBuf8<100> rbuf;
			ret = file.Read(0, rbuf);
			test(ret == KErrNone);
			file.Close();
			ret = rbuf.CompareF(KTestData);
			test(ret == KErrNone);
			
			session.Close();
			break;
			}
	
		case 7:
			{
			//test a chunk in slot 5
			RChunk chunk;
			TInt ret = chunk.Open(5, EOwnerThread);
			test (ret == KErrNone);
			TFullName name = chunk.FullName();
			ret = name.CompareF(_L("testchunk"));
			test (ret == KErrNone);
			chunk.Close();

			break;
			}
		case 8:
			{
			//test passing a 16 bit descriptor // slot 15
			//_L("16 bit text"
			TBuf16<40> buf;
			TInt len = User::ParameterLength(15);
			TInt ret = User::GetDesParameter(15, buf);
			test (ret == KErrNone);
			test(buf.Length() == len/2);
			ret = buf.CompareF(_L("16 bit text"));
			test (ret == KErrNone);

			break;
			}
		case 9:
			{
			//test passing a 8 bit descriptor // slot 15
			TBuf8<40> buf;
			TInt len = User::ParameterLength(15);
			TInt ret = User::GetDesParameter(15, buf);
			test (ret == KErrNone);
			test (len == buf.Length());
			ret = buf.CompareF(_L8("8 bit text"));
			test (ret == KErrNone);
			break;
			}

		case 10:
			{
			User::SetJustInTime(EFalse);
			TPtr8 bad((TUint8*)0xfeed, 20);
			User::GetDesParameter(15, bad);
			break;
			}

		case 11:
			{
			//test passing zero length data
			TBuf8<40> buf;
			TInt len = User::ParameterLength(15);
			TInt ret = User::GetDesParameter(15, buf);
			test (ret == KErrNone);
			test (len == buf.Length());
			test (len == 0);
			break;
			}

		case 12:
			{
			//test getting command line, will be zero at the moment as just a reserved slot
			TBuf8<40> buf;
			TInt len = User::ParameterLength(0);
			TInt ret = User::GetDesParameter(0, buf);
			test (ret == KErrNone);
			test (len == buf.Length());
			test (len == 0);
			break;
			}
		
		default:
			test(0);
			break;
		}
		
	controlQueue.Close();
	test.End();
	return 0;
    }