fix: apply direct runtime paths and respect taskbar

This commit is contained in:
2026-07-28 00:35:47 +09:00
parent e3b174eec7
commit 347900701b
16 changed files with 522 additions and 401 deletions

View File

@@ -0,0 +1,111 @@
namespace MBN_STOCK_WEBVIEW.LegacyWeb.Tests;
public sealed class LegacyWindowSizingNativeContractTests
{
private static readonly string Window = File.ReadAllText(Path.Combine(
FindRepositoryRoot(),
"src",
"MBN_STOCK_WEBVIEW.LegacyParityApp",
"MainWindow.xaml.cs"));
[Fact]
public void MainWindowClampsRestoreBoundsAndUsesWorkAreaAwareSystemMaximize()
{
var configureWindow = Slice(
Window,
"private void ConfigureWindow()",
"private async Task InitializeWebViewAsync()");
var displayArea = RequiredIndex(
configureWindow,
"DisplayArea.GetFromWindowId(windowId, DisplayAreaFallback.Primary)");
var workArea = RequiredIndex(
configureWindow,
"var workArea = displayArea.WorkArea;");
var resizeClient = RequiredIndex(
configureWindow,
"appWindow.ResizeClient(new SizeInt32(1905, 1015));");
var readOuterSize = RequiredIndex(
configureWindow,
"var requestedWindowSize = appWindow.Size;");
var moveAndResize = RequiredIndex(
configureWindow,
"appWindow.MoveAndResize(");
var workAreaX = RequiredIndex(configureWindow, "workArea.X,");
var workAreaY = RequiredIndex(configureWindow, "workArea.Y,");
var allowSystemMaximize = RequiredIndex(
configureWindow,
"presenter.IsMaximizable = true;");
var maximize = RequiredIndex(
configureWindow,
"presenter.Maximize();");
Assert.True(displayArea < workArea);
Assert.True(workArea < resizeClient);
Assert.True(resizeClient < readOuterSize);
Assert.True(readOuterSize < moveAndResize);
Assert.True(moveAndResize < workAreaX);
Assert.True(workAreaX < workAreaY);
Assert.True(moveAndResize < allowSystemMaximize);
Assert.True(allowSystemMaximize < maximize);
Assert.DoesNotContain(
"presenter.IsMaximizable = false;",
configureWindow,
StringComparison.Ordinal);
Assert.Contains(
"presenter.IsResizable = false;",
configureWindow,
StringComparison.Ordinal);
Assert.Contains(
"var requestedWindowSize = appWindow.Size;",
configureWindow,
StringComparison.Ordinal);
Assert.Contains(
"Math.Min(requestedWindowSize.Width, workArea.Width)",
configureWindow,
StringComparison.Ordinal);
Assert.Contains(
"Math.Min(requestedWindowSize.Height, workArea.Height)",
configureWindow,
StringComparison.Ordinal);
Assert.DoesNotContain(
"appWindow.Move(new PointInt32(",
configureWindow,
StringComparison.Ordinal);
}
private static int RequiredIndex(string value, string needle)
{
var index = value.IndexOf(needle, StringComparison.Ordinal);
Assert.True(index >= 0, $"Required marker was not found: {needle}");
return index;
}
private static string Slice(string value, string start, string end)
{
var startIndex = value.IndexOf(start, StringComparison.Ordinal);
var endIndex = value.IndexOf(
end,
startIndex + start.Length,
StringComparison.Ordinal);
Assert.True(startIndex >= 0, $"Required marker was not found: {start}");
Assert.True(endIndex >= 0, $"Required marker was not found: {end}");
return value[startIndex..endIndex];
}
private static string FindRepositoryRoot()
{
var directory = new DirectoryInfo(AppContext.BaseDirectory);
while (directory is not null)
{
if (File.Exists(Path.Combine(directory.FullName, "MBN_STOCK_WEBVIEW.sln")))
{
return directory.FullName;
}
directory = directory.Parent;
}
throw new DirectoryNotFoundException("Could not find the repository root.");
}
}