2007-09-25 Jonathan Pobst <monkey@jpobst.com>
authorJonathan Pobst <monkey@jpobst.com>
Tue, 25 Sep 2007 14:38:37 +0000 (14:38 -0000)
committerJonathan Pobst <monkey@jpobst.com>
Tue, 25 Sep 2007 14:38:37 +0000 (14:38 -0000)
* SynchronizationContext.cs: Implement SetSynchronizationContext.

2007-09-25  Jonathan Pobst  <monkey@jpobst.com>

* AsyncOperationManager.cs: Tie the SynchronizationContext here to
SynchronizationContext.Current.

2007-09-25  Jonathan Pobst  <monkey@jpobst.com>

* AsyncOperationManagerTest.cs: Add test for SynchronizationContext.

2007-09-25  Jonathan Pobst  <monkey@jpobst.com>

* System_test.dll.sources: Added AsyncOperationManagerTest.cs.

svn path=/trunk/mcs/; revision=86329

mcs/class/System/ChangeLog
mcs/class/System/System.ComponentModel/AsyncOperationManager.cs
mcs/class/System/System.ComponentModel/ChangeLog
mcs/class/System/System_test.dll.sources
mcs/class/System/Test/System.ComponentModel/AsyncOperationManagerTest.cs [new file with mode: 0644]
mcs/class/System/Test/System.ComponentModel/ChangeLog
mcs/class/corlib/System.Threading/ChangeLog
mcs/class/corlib/System.Threading/SynchronizationContext.cs

index ca0ad8aae651c29144445ff66b7ea04785db0780..469df7602fcdabbc4a3bbf636ea89221457926d0 100644 (file)
@@ -1,3 +1,7 @@
+2007-09-25  Jonathan Pobst  <monkey@jpobst.com>
+
+       * System_test.dll.sources: Added AsyncOperationManagerTest.cs.
+
 2007-09-17  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * System_test.dll.sources: Added ComponentResourceManagerTest.cs.
index 029f2ab15753228a8d2fd92cb4fb7107e12d3515..736788456c2f7e4f120721d876275c171a0de5b5 100644 (file)
@@ -35,26 +35,26 @@ namespace System.ComponentModel
 {
        public static class AsyncOperationManager
        {
-               static readonly SynchronizationContext default_context;
-               static SynchronizationContext current_context;
-
                static AsyncOperationManager ()
                {
-                       default_context = new SynchronizationContext ();
-                       current_context = default_context;
                }
 
                [EditorBrowsable (EditorBrowsableState.Advanced)]
                public static SynchronizationContext SynchronizationContext {
-                       get { return current_context; }
+                       get { 
+                               if (SynchronizationContext.Current == null)
+                                       SynchronizationContext.SetSynchronizationContext (new SynchronizationContext ());
+                               
+                               return SynchronizationContext.Current;
+                       }
                        [SecurityPermission (SecurityAction.LinkDemand)]
-                       set { current_context = value != null ? value : default_context; }
+                       set { SynchronizationContext.SetSynchronizationContext (value); }
                }
 
                public static AsyncOperation CreateOperation (object userSuppliedState)
                {
                        return new AsyncOperation (
-                               current_context, userSuppliedState);
+                               SynchronizationContext, userSuppliedState);
                }
        }
 }
index 2d05b504d3a387a64cc1127ef364c09ac0f74eb4..ec7d01ed94323bec9669298f70d326be5ea32803 100644 (file)
@@ -1,3 +1,8 @@
+2007-09-25  Jonathan Pobst  <monkey@jpobst.com>
+
+       * AsyncOperationManager.cs: Tie the SynchronizationContext here to
+       SynchronizationContext.Current.
+
 2007-09-17  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * ComponentResourceManager.cs: In ApplyResources, when culture is
index 89fd5f9f780350350737bb39476afaa563d3534f..6057e00b1fb50d4ede52bf5cc60fdf06ea5debac 100644 (file)
@@ -107,6 +107,7 @@ System.Collections.Specialized/OrderedDictionaryTest.cs
 System.Collections.Specialized/StringCollectionTest.cs
 System.Collections.Specialized/StringDictionaryTest.cs
 System.ComponentModel/ArrayConverterTests.cs
+System.ComponentModel/AsyncOperationManagerTest.cs
 System.ComponentModel/AttributeProviderAttributeTest.cs
 System.ComponentModel/BackgroundWorkerTest.cs
 System.ComponentModel/BindingListTest.cs
diff --git a/mcs/class/System/Test/System.ComponentModel/AsyncOperationManagerTest.cs b/mcs/class/System/Test/System.ComponentModel/AsyncOperationManagerTest.cs
new file mode 100644 (file)
index 0000000..4570e7e
--- /dev/null
@@ -0,0 +1,61 @@
+//\r
+// AsyncOperationManager.cs\r
+//\r
+// Author:\r
+//     Jonathan Pobst  <monkey@jpobst.com>\r
+//\r
+// Copyright (C) 2007 Novell, Inc.\r
+//\r
+\r
+#if NET_2_0\r
+\r
+using System;\r
+using System.Threading;\r
+using System.ComponentModel;\r
+using System.Globalization;\r
+\r
+using NUnit.Framework;\r
+\r
+namespace MonoTests.System.ComponentModel\r
+{\r
+       [TestFixture]\r
+       public class AsyncOperationManagerTest\r
+       {\r
+               [Test]\r
+               public void SyncContext ()\r
+               {\r
+                       SynchronizationContext sc1 = new SynchronizationContext ();\r
+                       SynchronizationContext sc2 = new SynchronizationContext ();\r
+\r
+                       Assert.IsNull (SynchronizationContext.Current, "A1");\r
+                       Assert.IsNotNull (AsyncOperationManager.SynchronizationContext, "A2");\r
+                       Assert.IsNotNull (SynchronizationContext.Current, "A3");\r
+                       \r
+                       SynchronizationContext.SetSynchronizationContext (sc1);\r
+\r
+                       Assert.AreSame (sc1, SynchronizationContext.Current, "A4");\r
+                       Assert.AreSame (sc1, AsyncOperationManager.SynchronizationContext, "A5");\r
+                       \r
+                       AsyncOperationManager.SynchronizationContext = sc2;\r
+\r
+                       Assert.AreSame (sc2, SynchronizationContext.Current, "A6");\r
+                       Assert.AreSame (sc2, AsyncOperationManager.SynchronizationContext, "A7");\r
+                       \r
+                       SynchronizationContext.SetSynchronizationContext (null);\r
+\r
+                       Assert.IsNull (SynchronizationContext.Current, "A8");\r
+                       // This is a brand new one, not sc1 or sc2\r
+                       Assert.IsNotNull (AsyncOperationManager.SynchronizationContext, "A9");\r
+                       Assert.IsNotNull (SynchronizationContext.Current, "A10");\r
+                       \r
+                       AsyncOperationManager.SynchronizationContext = null;\r
+\r
+                       Assert.IsNull (SynchronizationContext.Current, "A11");\r
+                       // This is a brand new one, not sc1 or sc2\r
+                       Assert.IsNotNull (AsyncOperationManager.SynchronizationContext, "A12");\r
+                       Assert.IsNotNull (SynchronizationContext.Current, "A13");\r
+               }\r
+       }\r
+}\r
+\r
+#endif\r
index d4b9b83adfc6c4225da735505b2e0ee4cd7f8e7d..68228e0d2c480bd3351721fcd09bbf759a799150 100644 (file)
@@ -1,3 +1,7 @@
+2007-09-25  Jonathan Pobst  <monkey@jpobst.com>
+
+       * AsyncOperationManagerTest.cs: Add test for SynchronizationContext.
+
 2007-09-17  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * ComponentResourceManagerTest.cs: Added tests for ctors,
index 788ddfddd7c9c78ceb8489240d78c24a13c30740..e85813908c722db41b238236a4ea7167f2d875dd 100644 (file)
@@ -1,3 +1,7 @@
+2007-09-25  Jonathan Pobst  <monkey@jpobst.com>
+
+       * SynchronizationContext.cs: Implement SetSynchronizationContext.
+
 2007-09-06  Dick Porter  <dick@ximian.com>
 
        * Timer.cs: Only hold a WeakReference to the runner thread, to
index 6ede32d76245ec724a7cf0fc8ec5a96a35de798e..9749f0f26adbcd7c79ac243965b94aa4fadcb4d4 100644 (file)
@@ -88,10 +88,9 @@ namespace System.Threading
                        Send (d, state);
                }
                
-               [MonoTODO]
                public static void SetSynchronizationContext (SynchronizationContext syncContext)
                {
-                       throw new NotImplementedException ();
+                       currentContext = syncContext;
                }
 
                [MonoTODO]