graphicscomposition/surfaceupdate/tsrc/tsurfaceupdate.cpp
changeset 110 7f25ef56562d
parent 98 bf7481649c98
--- a/graphicscomposition/surfaceupdate/tsrc/tsurfaceupdate.cpp	Fri Jun 11 14:58:47 2010 +0300
+++ b/graphicscomposition/surfaceupdate/tsrc/tsurfaceupdate.cpp	Wed Jun 23 19:41:15 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 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"
@@ -1758,13 +1758,70 @@
 	session.Close();
 	}
 
+
+/**
+  @SYMTestCaseID GRAPHICS-SURFACEUPDATE-0019
+
+
+  @SYMPREQ 1007
+  
+  @SYMREQ 8223
+
+  @SYMTestCaseDesc Starting the surface update server in two different threads.
+
+  @SYMTestPriority High
+
+  @SYMTestStatus Implemented
+
+  @SYMTestActions Start the surface update server in two different threads.
+    
+  @SYMTestExpectedResults Thread 1: KErrNone
+     Thread 2: KErrNone
+     The "provider" returned to both threads should also be the same value!
+*/
+void CTSurfaceUpdate::TestCase12L()
+    {
+    MSurfaceUpdateServerProvider *surfaceUpdateProvider = NULL;
+    TInt res = StartSurfaceUpdateServer(surfaceUpdateProvider);
+    TEST(res == KErrNone);
+    User::LeaveIfError(res);
+
+    _LIT(KThreadName, "TestServerStartupTwoThreads");
+    TTime tm;
+    TBuf<32> buf;
+    tm.UniversalTime();
+    TRAP(res, tm.FormatL(buf, _L("_%H%T%S%C")));
+    TEST(res == KErrNone);
+    User::LeaveIfError(res);
+    TBuf<128> threadName(KThreadName);
+    threadName.Append(buf); //guarantee uniqueness  of the thread name
+    RThread thread;
+    MSurfaceUpdateServerProvider *surfaceUpdateProvider2 = NULL;
+    res = thread.Create(threadName,
+            TestServerStartupTwoThreads,
+            KDefaultStackSize,
+            &User::Heap(),
+            &surfaceUpdateProvider2);
+    TEST(res == KErrNone);
+    User::LeaveIfError(res);
+    TRequestStatus rendezvousStatus;
+    thread.Rendezvous(rendezvousStatus);
+    thread.Resume();
+    User::WaitForRequest(rendezvousStatus);
+    TEST(KErrNone == rendezvousStatus.Int());
+    // Check that we get the same provider for both threads!
+    TEST(surfaceUpdateProvider2 == surfaceUpdateProvider);
+    }
+
+
 /**
 Starting the update server in another thread - called from TestCase12
 */
-TInt CTSurfaceUpdate::TestServerStartupTwoThreads(TAny*)
+TInt CTSurfaceUpdate::TestServerStartupTwoThreads(TAny *aArgPtr)
 	{
-	MSurfaceUpdateServerProvider *surfaceUpdateProvider = NULL;
-	TInt res = StartSurfaceUpdateServer(surfaceUpdateProvider);
+	MSurfaceUpdateServerProvider **surfaceUpdateProviderPtr = 
+	        reinterpret_cast<MSurfaceUpdateServerProvider **>(aArgPtr);
+	TInt res = StartSurfaceUpdateServer(*surfaceUpdateProviderPtr);
 	return res;
 	}
 
@@ -2200,7 +2257,15 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 12:
+    case 12:
+        {
+        ((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0019"));
+        INFO_PRINTF1(_L("TestCase12L"));
+        TRAPD(ret, TestCase12L());
+        TEST(ret == KErrNone);
+        break;
+        }
+	case 13:
  		{
  		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0020"));
  		INFO_PRINTF1(_L("TestCase13L"));
@@ -2208,14 +2273,14 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 13:
+	case 14:
  		{
  		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0022"));
  		INFO_PRINTF1(_L("TestCase14"));
  		TestCase14();
  		break;
 		}
-	case 14:
+	case 15:
  		{
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0023"));
  		INFO_PRINTF1(_L("TestCase15"));
@@ -2223,7 +2288,7 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 15:
+	case 16:
  		{
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0024"));
  		INFO_PRINTF1(_L("TestCase16"));
@@ -2231,7 +2296,7 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 16:
+	case 17:
  		{
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0028"));
  		INFO_PRINTF1(_L("TestCase17"));
@@ -2239,7 +2304,7 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 17:
+	case 18:
  		{
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0025"));
  		INFO_PRINTF1(_L("TestCase18"));
@@ -2247,7 +2312,7 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 18:
+	case 19:
 		{
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0027"));
 	 	INFO_PRINTF1(_L("TestCaseNotifyWhenAvailableGlobal"));
@@ -2255,7 +2320,7 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 19:
+	case 20:
 		{
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0029"));
 	 	INFO_PRINTF1(_L("TestCaseRegisterIdenticalPrioritiesL"));
@@ -2263,7 +2328,7 @@
  		TEST(ret == KErrNone);
  		break;
 		}
-	case 20:
+	case 21:
  		{//should be the last test case
 		((CTSurfaceUpdateStep*)iStep)->SetTestStepID(_L("GRAPHICS-SURFACEUPDATE-0021"));
  		INFO_PRINTF1(_L("TestCaseTerminateServer"));