diff --git a/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs b/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs index 645812cefb..5613244461 100644 --- a/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs +++ b/src/Headless/Avalonia.Headless/HeadlessUnitTestSession.cs @@ -16,7 +16,7 @@ namespace Avalonia.Headless; /// /// Headless unit test session that needs to be used by the actual testing framework. /// All UI tests are supposed to be executed from one of the methods to keep execution flow on the UI thread. -/// Disposing unit test session stops internal dispatcher loop. +/// Disposing unit test session stops internal dispatcher loop. /// public sealed class HeadlessUnitTestSession : IDisposable, IAsyncDisposable { @@ -96,9 +96,18 @@ public sealed class HeadlessUnitTestSession : IDisposable, IAsyncDisposable using var globalCts = token.Register(s => ((CancellationTokenSource)s!).Cancel(), cts, true); using var localCts = cancellationToken.Register(s => ((CancellationTokenSource)s!).Cancel(), cts, true); - var application = _isolated - ? EnsureIsolatedApplication() - : EnsureSharedApplication(); + IDisposable application = null!; + try + { + application = _isolated + ? EnsureIsolatedApplication() + : EnsureSharedApplication(); + } + catch (Exception ex) + { + tcs.TrySetException(ex); + return; // Exit the dispatcher action if application initialization fails + } bool shouldCancel = false; Exception? caught = null; @@ -212,7 +221,7 @@ public sealed class HeadlessUnitTestSession : IDisposable, IAsyncDisposable } /// - /// Creates instance of . + /// Creates instance of . /// /// /// Parameter from which should be created. @@ -228,7 +237,7 @@ public sealed class HeadlessUnitTestSession : IDisposable, IAsyncDisposable } /// - /// Creates instance of . + /// Creates instance of . /// /// /// Parameter from which should be created. @@ -283,7 +292,7 @@ public sealed class HeadlessUnitTestSession : IDisposable, IAsyncDisposable } else { - action(); + action(); } } catch (OperationCanceledException) @@ -297,7 +306,7 @@ public sealed class HeadlessUnitTestSession : IDisposable, IAsyncDisposable /// /// Creates a session from AvaloniaTestApplicationAttribute attribute or reuses any existing. - /// If AvaloniaTestApplicationAttribute doesn't exist, empty application is used. + /// If AvaloniaTestApplicationAttribute doesn't exist, empty application is used. /// [UnconditionalSuppressMessage("Trimming", "IL2072", Justification = "AvaloniaTestApplicationAttribute attribute should preserve type information.")]