using Avalonia;
using Avalonia.Headless;
using Xunit;
[assembly: AvaloniaTestApplication(typeof(AcDream.Launcher.Tests.TestAppBuilder))]
[assembly: AvaloniaTestIsolation(AvaloniaTestIsolationLevel.PerAssembly)]
// Compiled INTO the assembly on purpose. A xunit.runner.json expresses the same
// intent but only works if the file is copied beside the test DLL; under CI's
// `dotnet build` + `dotnet test --no-build` split it did not arrive, so the
// suite ran with parallel collections and MainWindowViewTests failed in Test
// Case Cleanup ("The calling thread cannot access this object") while passing
// locally. An assembly attribute cannot fail to deploy.
[assembly: CollectionBehavior(DisableTestParallelization = true)]
namespace AcDream.Launcher.Tests;
///
/// Headless Avalonia application entry point for [AvaloniaFact]/
/// [AvaloniaTheory] tests (see #399). Reuses the launcher's real
/// so the FluentTheme styles declared in App.axaml are
/// live for every test — 's controls (TreeView,
/// Button, TextBox, ...) need a real control theme to template and focus
/// correctly, not just an unstyled visual tree.
/// The assembly contains one Avalonia test that owns the complete window
/// matrix. Keep one application/dispatcher for that process: Avalonia 12's
/// per-test teardown can recreate the compositor after its render loop has
/// become owned by a different worker, producing a thread-affinity cleanup
/// failure after an otherwise passing test.
///
public static class TestAppBuilder
{
public static AppBuilder BuildAvaloniaApp() =>
AppBuilder.Configure()
.UseHeadless(new AvaloniaHeadlessPlatformOptions());
}