diff Implab.Fx.Test/StaApartmentTests.cs @ 210:5dc21f6a3222 v2

Code review for RunnableComponent Added StaApartment class based on System.Windows.Forms.Application message loop
author cin
date Mon, 20 Mar 2017 17:44:18 +0300
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab.Fx.Test/StaApartmentTests.cs	Mon Mar 20 17:44:18 2017 +0300
@@ -0,0 +1,52 @@
+using System;
+using System.Reflection;
+using System.Threading;
+using Implab.Parallels;
+using Implab.Components;
+
+#if MONO
+
+using NUnit.Framework;
+using TestClassAttribute = NUnit.Framework.TestFixtureAttribute;
+using TestMethodAttribute = NUnit.Framework.TestAttribute;
+using AssertFailedException = NUnit.Framework.AssertionException;
+#else
+
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+#endif
+namespace Implab.Fx.Test {
+    [TestClass]
+    public class StaApartmentTests {
+        [TestMethod]
+        public void CreateDestroyApartment() {
+            var apartment = new StaApartment();
+            try {
+                Assert.IsNotNull(apartment.SyncContext);
+                Assert.Fail();
+            } catch (InvalidOperationException) {
+                // OK
+            }
+
+            apartment.Start().Join();
+            Assert.AreEqual(apartment.State, ExecutionState.Running);
+
+            Assert.IsNotNull(apartment.SyncContext);
+            apartment.Stop().Join();
+            
+            Assert.IsTrue(apartment.State == ExecutionState.Disposed);
+        }
+
+        [TestMethod]
+        public void InvokeInApartment() {
+            var apartment = new StaApartment();
+
+            apartment.Start().Join();
+
+            var apType = apartment.Invoke(() => { return Thread.CurrentThread.GetApartmentState(); }).Join();
+            Assert.AreEqual(apType, ApartmentState.STA);
+
+            apartment.Stop().Join();
+        }
+    }
+}