更新客户端渲染,更新了壳

This commit is contained in:
QWQLwToo
2026-07-06 23:05:40 +08:00
parent e7dd87bf7e
commit 31d778710b
1311 changed files with 172662 additions and 1582 deletions
@@ -0,0 +1,85 @@
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT.
// Copyright (C) Leszek Pomianowski and WPF UI Contributors.
// All Rights Reserved.
using FlaUI.Core;
using FlaUI.Core.Tools;
using FlaUI.UIA3;
namespace Wpf.Ui.Gallery.IntegrationTests.Fixtures;
/// <summary>
/// Class managing the lifecycle of the tested application implementing <see cref="IAsyncLifetime"/>.
/// Uses <see cref="UIA3Automation"/> for UI automation.
/// </summary>
public sealed class TestedApplication : IAsyncLifetime
{
private const string ExecutableName = "Wpf.Ui.Gallery.exe";
private readonly AutomationBase automation = new UIA3Automation();
private Application? app;
private Window? mainWindow;
/// <summary>
/// Gets the wrapper for an application which should be automated.
/// </summary>
public Application? Application => app;
/// <summary>
/// Gets the main window of the applications process.
/// </summary>
public Window? MainWindow => mainWindow ??= app?.GetMainWindow(automation);
/// <inheritdoc />
public ValueTask InitializeAsync()
{
if (app is not null)
{
app.Close();
app.Dispose();
}
string path = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!,
ExecutableName
);
if (!File.Exists(path))
{
throw new InvalidOperationException(
$"Unable to find the application executable at path \"{path}\"."
);
}
app = Application.Launch(path);
app.WaitWhileMainHandleIsMissing(TimeSpan.FromMinutes(1));
return ValueTask.CompletedTask;
}
/// <inheritdoc />
public ValueTask DisposeAsync()
{
if (app is not null)
{
if (!app.HasExited)
{
app.Close();
}
// ReSharper disable once AccessToDisposedClosure
Retry.WhileFalse(() => app?.HasExited ?? true, TimeSpan.FromSeconds(2), ignoreException: true);
app.Dispose();
app = null;
}
automation?.Dispose();
return ValueTask.CompletedTask;
}
}