public async Task DisposeAsync_CanDisposeAfterCallingRunAsync() { // Arrange var builder = new WebAssemblyHostBuilder(new TestJSUnmarshalledRuntime()); builder.Services.AddSingleton <DisposableService>(); var host = builder.Build(); var cultureProvider = new TestSatelliteResourcesLoader(); var disposable = host.Services.GetRequiredService <DisposableService>(); var cts = new CancellationTokenSource(); // Act await using (host) { var task = host.RunAsyncCore(cts.Token, cultureProvider); cts.Cancel(); await task.TimeoutAfter(TimeSpan.FromSeconds(3)); } // Assert Assert.Equal(1, disposable.DisposeCount); }
public async Task RunAsync_CanExitBasedOnCancellationToken() { // Arrange var builder = new WebAssemblyHostBuilder(new TestJSUnmarshalledRuntime()); var host = builder.Build(); var cultureProvider = new TestSatelliteResourcesLoader(); var cts = new CancellationTokenSource(); // Act var task = host.RunAsyncCore(cts.Token, cultureProvider); cts.Cancel(); await task.TimeoutAfter(TimeSpan.FromSeconds(3)); // Assert (does not throw) }
public async Task RunAsync_CallingTwiceCausesException() { // Arrange var builder = new WebAssemblyHostBuilder(new TestJSUnmarshalledRuntime()); var host = builder.Build(); var cultureProvider = new TestSatelliteResourcesLoader(); var cts = new CancellationTokenSource(); var task = host.RunAsyncCore(cts.Token, cultureProvider); // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>(() => host.RunAsyncCore(cts.Token)); cts.Cancel(); await task.TimeoutAfter(TimeSpan.FromSeconds(3)); // Assert Assert.Equal("The host has already started.", ex.Message); }