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); } }
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); }
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); } }
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); }
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; }
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); }
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); }