sharpemu/tests/SharpEmu.Libs.Tests/CommonDialog/WebBrowserDialogExportsTest...

66 lines
2.7 KiB
C#

// Copyright (C) 2026 SharpEmu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
using System.Buffers.Binary;
using SharpEmu.HLE;
using SharpEmu.Libs.CommonDialog;
using Xunit;
namespace SharpEmu.Libs.Tests.CommonDialog;
[CollectionDefinition("WebBrowserDialog", DisableParallelization = true)]
public sealed class WebBrowserDialogCollection;
[Collection("WebBrowserDialog")]
public sealed class WebBrowserDialogExportsTests : IDisposable
{
private const ulong MemoryBase = 0x1_0000_0000;
private readonly FakeCpuMemory _memory = new(MemoryBase, 0x1000);
private readonly CpuContext _context;
public WebBrowserDialogExportsTests()
{
WebBrowserDialogExports.ResetForTests();
_context = new CpuContext(_memory, Generation.Gen5);
}
public void Dispose() => WebBrowserDialogExports.ResetForTests();
[Fact]
public void HeadlessLifecycle_CompletesOnFirstStatusPoll()
{
Assert.Equal(WebBrowserDialogExports.StatusNone,
WebBrowserDialogExports.WebBrowserDialogGetStatus(_context));
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogInitialize(_context));
Assert.Equal(WebBrowserDialogExports.StatusInitialized,
WebBrowserDialogExports.WebBrowserDialogGetStatus(_context));
_context[CpuRegister.Rdi] = MemoryBase + 0x100;
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogOpen(_context));
Assert.Equal(WebBrowserDialogExports.StatusRunning, WebBrowserDialogExports.StatusForTests);
Assert.Equal(WebBrowserDialogExports.StatusFinished,
WebBrowserDialogExports.WebBrowserDialogGetStatus(_context));
var resultAddress = MemoryBase + 0x200;
_context[CpuRegister.Rdi] = resultAddress;
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogGetResult(_context));
Span<byte> result = stackalloc byte[sizeof(int)];
Assert.True(_memory.TryRead(resultAddress, result));
Assert.Equal(0, BinaryPrimitives.ReadInt32LittleEndian(result));
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogTerminate(_context));
Assert.Equal(WebBrowserDialogExports.StatusNone,
WebBrowserDialogExports.WebBrowserDialogGetStatus(_context));
}
[Fact]
public void Close_FinishesRunningDialogWithoutPolling()
{
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogInitialize(_context));
_context[CpuRegister.Rdi] = MemoryBase + 0x100;
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogOpenForPredeterminedContent(_context));
Assert.Equal(0, WebBrowserDialogExports.WebBrowserDialogClose(_context));
Assert.Equal(WebBrowserDialogExports.StatusFinished, WebBrowserDialogExports.StatusForTests);
}
}