--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/system/t_env_child.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,213 @@
+// 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;
+ }