Example #1
0
        public void CompletedTaskShouldBeReturnedAsResolvedPromise()
        {
            var context = new Context();

            context.DefineVariable("testAwaitable").Assign(JSValue.Marshal(new Func <string, Task <string> >((input) =>
            {
                return(Task.FromResult(input));
            })));

            context.Eval("function testAsync() { return testAwaitable('test'); }");

            var task = context.GetVariable("testAsync").As <Function>().Call(new Arguments()).As <Promise>().Task;

            Assert.AreEqual("test", task.GetAwaiter().GetResult().ToString());
        }
Example #2
0
        public async Task RejectedPromiseShouldBeReturnedAsFaultedTask()
        {
            var context = new Context();

            context.DefineVariable("testAwaitable").Assign(JSValue.Marshal(new Func <string, Task <string> >(async(input) =>
            {
                await Task.Delay(500);

                throw new Exception();
            })));

            context.Eval("let result = null; async function testAsync() { result = await testAwaitable('test'); }");

            var task = context.GetVariable("testAsync").As <Function>().Call(new Arguments()).As <Promise>().Task;
            await Assert.ThrowsExceptionAsync <AggregateException>(async() =>
            {
                await task;
            });
        }
Example #3
0
        public async Task AsyncMethodShouldReturnValue()
        {
            // Arrange
            var request = "value";

            var script  = $@"
async function script() {{
    async function demo() {{
        let request = '{request}';
        let response = await fetch(request);
        check(response);
        return response;
    }}

    let result = await demo();
    check(result);
    return result;
}}
";
            var context = new Context();

            context
            .DefineVariable("fetch")
            .Assign(JSValue.Marshal(new Func <string, Task <string> >(FetchAsync)));

            context
            .DefineVariable("check")
            .Assign(JSValue.Marshal(new Action <string>((value) => { Assert.AreEqual(request, value); })));

            context.Eval(script);

            // Act
            var result = await context.GetVariable("script")
                         .As <Function>()
                         .Call(new Arguments())
                         .As <Promise>()
                         .Task;

            // Assert
            Assert.AreEqual(request, result.Value);
        }