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 (); 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 (); 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 (); p.Resolve (100); Assert.AreEqual (p.Join (), 100); } [TestMethod] public void JoinFailTest () { var p = new Promise (); 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 (); var p2 = p.Map (x => x.ToString ()); p.Resolve (100); Assert.AreEqual (p2.Join (), "100"); } [TestMethod] public void ChainTest () { var p1 = new Promise (); var p3 = p1.Chain (x => { var p2 = new Promise (); 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 ()); } } }