112 lines
4.0 KiB
C#
112 lines
4.0 KiB
C#
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.");
|
|
}
|
|
}
|