Mercurial > pub > ImplabNet
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 ()); + } + } +} +