using System; using NUnit.Framework; namespace ln.threading.tests { public class PromiseTests { [Test] public void Test_A_Promises() { Promise p = new Promise((resolve,reject)=>{ resolve(1234); }); Assert.AreEqual(1234, p.Value); Assert.AreEqual( 33, new Promise((resolve,reject)=>{ resolve("resolved"); }) .Then((value)=>{ return 4; }) .Then((value)=>{ throw new Exception("TestException"); }) .Then((value)=>{ return value + 16; }) .Catch((e)=>{ return 32; }) .Then((value)=>{ return value + 1; }) .Value ); Assert.AreEqual( 23, new Promise((resolve,reject)=>{ resolve("resolved"); }) .Then((value)=>{ return 4; }) .Then((value)=>{ return value + 2; }) .Then((value)=>{ return value + 16; }) .Catch((e)=>{ return 32; }) .Then((value)=>{ return value + 1; }) .Value ); } [Test] public void Test_B_Promises() { Assert.AreEqual( "The magic result is 129", createTestPromise(1).Value ); Assert.AreEqual( "The magic result is 130", createTestPromise(2).Value ); Assert.AreEqual( "The magic result is 131", createTestPromise(3).Value ); Assert.AreEqual( "The magic result is 132", createTestPromise(4).Value ); Assert.AreEqual( "sorry, I have no result for you", createTestPromise(11).Value ); } public Promise createTestPromise(int i) { return new Promise((resolve, reject)=>{ resolve(i); }) .Then((n)=>{ if (n== 11) throw new Exception("I don't like 11"); return n + 128; }) .Then( (n)=>{ return string.Format("The magic result is {0}", n); }, (e)=>{ return "sorry, I have no result for you"; }) ; } } }