diff Implab.Test/AsyncTests.cs @ 0:279591fb4df3

initial commit promises async model
author user@factory.site.local
date Fri, 23 Aug 2013 04:38:46 +0400
parents
children 381095ad0a69
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab.Test/AsyncTests.cs	Fri Aug 23 04:38:46 2013 +0400
@@ -0,0 +1,101 @@
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Implab;
+using System.Reflection;
+using System.Threading;
+
+namespace Implab.Tests
+{
+	[TestClass]
+	public class AsyncTests
+	{
+		[TestMethod]
+		public void ResolveTest ()
+		{
+			int res = -1;
+			var p = new Promise<int> ();
+			p.Then (x => res = x);
+			p.Resolve (100);
+
+			Assert.AreEqual (res, 100);
+		}
+
+        [TestMethod]
+		public void RejectTest ()
+		{
+			int res = -1;
+			Exception err = null;
+
+			var p = new Promise<int> ();
+			p.Then (x => res = x, e => err = e);
+			p.Reject (new ApplicationException ("error"));
+
+			Assert.AreEqual (res, -1);
+			Assert.AreEqual (err.Message, "error");
+
+		}
+
+        [TestMethod]
+		public void JoinSuccessTest ()
+		{
+			var p = new Promise<int> ();
+			p.Resolve (100);
+			Assert.AreEqual (p.Join (), 100);
+		}
+
+        [TestMethod]
+		public void JoinFailTest ()
+		{
+			var p = new Promise<int> ();
+			p.Reject (new ApplicationException ("failed"));
+
+			try {
+				p.Join ();
+				throw new ApplicationException ("WRONG!");
+			} catch (TargetInvocationException err) {
+				Assert.AreEqual (err.InnerException.Message, "failed");
+			} catch {
+				Assert.Fail ("Got wrong excaption");
+			}
+		}
+
+        [TestMethod]
+		public void MapTest ()
+		{
+			var p = new Promise<int> ();
+
+			var p2 = p.Map (x => x.ToString ());
+			p.Resolve (100);
+
+			Assert.AreEqual (p2.Join (), "100");
+		}
+
+        [TestMethod]
+		public void ChainTest ()
+		{
+			var p1 = new Promise<int> ();
+
+			var p3 = p1.Chain (x => {
+				var p2 = new Promise<string> ();
+				p2.Resolve (x.ToString ());
+				return p2;
+			});
+
+			p1.Resolve (100);
+
+			Assert.AreEqual (p3.Join (), "100");
+		}
+
+        [TestMethod]
+		public void PoolTest ()
+		{
+			var pid = Thread.CurrentThread.ManagedThreadId;
+			var p = AsyncPool.Invoke (() => {
+				return Thread.CurrentThread.ManagedThreadId;
+			});
+
+			Assert.AreNotEqual (pid, p.Join ());
+		}
+	}
+}
+