Exemple #1
0
    public Task CanCompleteAsyncCallsWithErrorsDuringDeserialization()
    {
        // Arrange
        var runtime = new TestJSRuntime();

        // Act/Assert: Tasks not initially completed
        var unrelatedTask = runtime.InvokeAsync <string>("unrelated call", Array.Empty <object>());
        var task          = runtime.InvokeAsync <int>("test identifier", Array.Empty <object>());

        Assert.False(unrelatedTask.IsCompleted);
        Assert.False(task.IsCompleted);
        var bytes  = Encoding.UTF8.GetBytes("Not a string");
        var reader = new Utf8JsonReader(bytes);

        // Act/Assert: Task can be failed
        runtime.EndInvokeJS(
            runtime.BeginInvokeCalls[1].AsyncHandle,
            /* succeeded: */ true,
            ref reader);
        Assert.False(unrelatedTask.IsCompleted);

        return(AssertTask());

        async Task AssertTask()
        {
            var jsException = await Assert.ThrowsAsync <JSException>(async() => await task);

            Assert.IsAssignableFrom <JsonException>(jsException.InnerException);
        }
    }
Exemple #2
0
    public void CanCompleteAsyncCallsAsFailure()
    {
        // Arrange
        var runtime = new TestJSRuntime();

        // Act/Assert: Tasks not initially completed
        var unrelatedTask = runtime.InvokeAsync <string>("unrelated call", Array.Empty <object>());
        var task          = runtime.InvokeAsync <string>("test identifier", Array.Empty <object>());

        Assert.False(unrelatedTask.IsCompleted);
        Assert.False(task.IsCompleted);
        var bytes  = Encoding.UTF8.GetBytes("\"This is a test exception\"");
        var reader = new Utf8JsonReader(bytes);

        reader.Read();

        // Act/Assert: Task can be failed
        runtime.EndInvokeJS(
            runtime.BeginInvokeCalls[1].AsyncHandle,
            /* succeeded: */ false,
            ref reader);
        Assert.False(unrelatedTask.IsCompleted);
        Assert.True(task.IsCompleted);

        var exception   = Assert.IsType <AggregateException>(task.AsTask().Exception);
        var jsException = Assert.IsType <JSException>(exception.InnerException);

        Assert.Equal("This is a test exception", jsException.Message);
    }
Exemple #3
0
    public Task CompletingSameAsyncCallMoreThanOnce_IgnoresSecondResultAsync()
    {
        // Arrange
        var runtime = new TestJSRuntime();

        // Act/Assert
        var task         = runtime.InvokeAsync <string>("test identifier", Array.Empty <object>());
        var asyncHandle  = runtime.BeginInvokeCalls[0].AsyncHandle;
        var firstReader  = new Utf8JsonReader(Encoding.UTF8.GetBytes("\"Some data\""));
        var secondReader = new Utf8JsonReader(Encoding.UTF8.GetBytes("\"Exception\""));

        runtime.EndInvokeJS(asyncHandle, true, ref firstReader);
        runtime.EndInvokeJS(asyncHandle, false, ref secondReader);

        return(AssertTask());

        async Task AssertTask()
        {
            var result = await task;

            Assert.Equal("Some data", result);
        }
    }
Exemple #4
0
    public void InvokeAsync_CompletesSuccessfullyBeforeTimeout()
    {
        // Arrange
        var runtime = new TestJSRuntime();

        runtime.DefaultTimeout = TimeSpan.FromSeconds(10);
        var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes("null"));

        // Act
        var task = runtime.InvokeAsync <object>("test identifier 1", "arg1", 123, true);

        runtime.EndInvokeJS(2, succeeded: true, ref reader);

        Assert.True(task.IsCompletedSuccessfully);
    }
Exemple #5
0
        public async Task InvokeAsync_CompletesSuccessfullyBeforeTimeout()
        {
            // Arrange
            var runtime = new TestJSRuntime();

            runtime.DefaultTimeout = TimeSpan.FromSeconds(10);

            // Act
            var task = runtime.InvokeAsync <object>("test identifier 1", "arg1", 123, true);

            runtime.EndInvokeJS(2, succeeded: true, null);

            // Assert
            await task;
        }
Exemple #6
0
    public void CanCompleteAsyncCallsWithComplexType()
    {
        // Arrange
        var runtime = new TestJSRuntime();

        var task   = runtime.InvokeAsync <TestPoco>("test identifier", Array.Empty <object>());
        var bytes  = Encoding.UTF8.GetBytes("{\"id\":10, \"name\": \"Test\"}");
        var reader = new Utf8JsonReader(bytes);

        // Act/Assert: Task can be completed
        runtime.EndInvokeJS(
            runtime.BeginInvokeCalls[0].AsyncHandle,
            /* succeeded: */ true,
            ref reader);
        Assert.True(task.IsCompleted);
        var poco = task.Result;

        Debug.Assert(poco != null);
        Assert.Equal(10, poco.Id);
        Assert.Equal("Test", poco.Name);
    }
Exemple #7
0
    public void CanCompleteAsyncCallsAsSuccess()
    {
        // Arrange
        var runtime = new TestJSRuntime();

        // Act/Assert: Tasks not initially completed
        var unrelatedTask = runtime.InvokeAsync <string>("unrelated call", Array.Empty <object>());
        var task          = runtime.InvokeAsync <string>("test identifier", Array.Empty <object>());

        Assert.False(unrelatedTask.IsCompleted);
        Assert.False(task.IsCompleted);
        var bytes  = Encoding.UTF8.GetBytes("\"my result\"");
        var reader = new Utf8JsonReader(bytes);

        // Act/Assert: Task can be completed
        runtime.EndInvokeJS(
            runtime.BeginInvokeCalls[1].AsyncHandle,
            /* succeeded: */ true,
            ref reader);
        Assert.False(unrelatedTask.IsCompleted);
        Assert.True(task.IsCompleted);
        Assert.Equal("my result", task.Result);
    }