diff --git a/Raven.Tests.Silverlight.UnitTestProvider.Example/Tests.cs b/Raven.Tests.Silverlight.UnitTestProvider.Example/Tests.cs index 81a5faa..9555f19 100644 --- a/Raven.Tests.Silverlight.UnitTestProvider.Example/Tests.cs +++ b/Raven.Tests.Silverlight.UnitTestProvider.Example/Tests.cs @@ -41,6 +41,17 @@ public IEnumerable NewWay() Assert.AreEqual(42, another.Result); } + + [TestMethod] + [Asynchronous] + public async Task AnotherWay() + { + await SomeTestTask.DoSomethingAsync(); + int result = await SomeTestTask.DoSomethingAsync(); + await Delay(100); + + Assert.AreEqual(42, result); + } } public static class SomeTestTask diff --git a/Raven.Tests.Silverlight.UnitTestProvider/AsynchronousTaskTest.cs b/Raven.Tests.Silverlight.UnitTestProvider/AsynchronousTaskTest.cs index a42cbc4..d8a9fb5 100644 --- a/Raven.Tests.Silverlight.UnitTestProvider/AsynchronousTaskTest.cs +++ b/Raven.Tests.Silverlight.UnitTestProvider/AsynchronousTaskTest.cs @@ -21,6 +21,17 @@ public void ExecuteTest(MethodInfo test) ExecuteTestStep(enumerator); } + public void ExecuteTaskTest(MethodInfo test) + { + var task = (Task)test.Invoke(this, new object[] { }); + EnqueueConditional(() => task.IsCompleted || task.IsFaulted); + EnqueueCallback(() => + { + if (task.IsFaulted) throw task.Exception.InnerException; + }); + EnqueueTestComplete(); + } + private void ExecuteTestStep(IEnumerator enumerator) { bool moveNextSucceeded = enumerator.MoveNext(); diff --git a/Raven.Tests.Silverlight.UnitTestProvider/TestMethod.cs b/Raven.Tests.Silverlight.UnitTestProvider/TestMethod.cs index 0536ca1..8eca7f4 100644 --- a/Raven.Tests.Silverlight.UnitTestProvider/TestMethod.cs +++ b/Raven.Tests.Silverlight.UnitTestProvider/TestMethod.cs @@ -171,6 +171,12 @@ public virtual IEnumerable GetDynamicAttributes() public virtual void Invoke(object instance) { + if (methodInfo.ReturnType == typeof(Task) && typeof(AsynchronousTaskTest).IsAssignableFrom(instance.GetType())) + { + var executor = instance.GetType().GetMethod("ExecuteTaskTest"); + executor.Invoke(instance, new[] { methodInfo }); + } + else if (ReturnTypeForAsyncTaskTest.IsAssignableFrom(methodInfo.ReturnType) && typeof(AsynchronousTaskTest).IsAssignableFrom(instance.GetType())) { var executor = instance.GetType().GetMethod("ExecuteTest");