This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using Ludarium.Application;
|
||||
|
||||
namespace Ludarium.UnitTests;
|
||||
|
||||
public sealed class DolphinLaunchPolicyTests
|
||||
{
|
||||
[Fact]
|
||||
public void UniqueReadOnlyFixtureIsReleaseEligible()
|
||||
{
|
||||
var gameId = Guid.NewGuid();
|
||||
var candidate = Candidate("roms/wii/Synthetic.wbfs", true);
|
||||
|
||||
var capability = DolphinLaunchPolicy.EvaluateCapability(gameId, "wii", true, [candidate],
|
||||
DateTimeOffset.UnixEpoch, vaultBacked: true);
|
||||
|
||||
Assert.True(capability.Available);
|
||||
Assert.True(capability.AutomaticRestore);
|
||||
Assert.Equal("Dolphin", capability.Emulator);
|
||||
Assert.Equal("dolphin", capability.Player);
|
||||
Assert.Equal("wii", capability.Platform);
|
||||
Assert.True(capability.SupportsSavestates);
|
||||
|
||||
// Automatic restore is a live runtime property, never an assumption about the sidecar.
|
||||
Assert.False(DolphinLaunchPolicy.EvaluateCapability(gameId, "wii", true, [candidate],
|
||||
DateTimeOffset.UnixEpoch).AutomaticRestore);
|
||||
Assert.Equal("wii/Synthetic.wbfs", DolphinLaunchPolicy.ToRuntimePath("wii", candidate.RelativePath, "roms/wii"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AmbiguousWritableAndUnsafeSourcesFailClosed()
|
||||
{
|
||||
var first = Candidate("roms/gamecube/One.rvz", true);
|
||||
var second = Candidate("roms/gamecube/Two.iso", true);
|
||||
Assert.Null(DolphinLaunchPolicy.SelectGame([first, second]));
|
||||
Assert.Null(DolphinLaunchPolicy.SelectGame([first with { SourceReadOnly = false }]));
|
||||
Assert.Null(DolphinLaunchPolicy.SelectGame([first with { RelativePath = "../One.rvz" }]));
|
||||
Assert.False(DolphinLaunchPolicy.EvaluateCapability(Guid.NewGuid(), "gamecube", true,
|
||||
[first, second]).Available);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("ps2", true, NativeRemotePlayState.UnsupportedPlatform)]
|
||||
[InlineData("wii", false, NativeRemotePlayState.RuntimeUnavailable)]
|
||||
public void UnsupportedPlatformAndMissingRuntimeStayUnavailable(string platform, bool runtime,
|
||||
NativeRemotePlayState state)
|
||||
{
|
||||
var capability = DolphinLaunchPolicy.EvaluateCapability(Guid.NewGuid(), platform, runtime, []);
|
||||
Assert.Equal(state, capability.State);
|
||||
}
|
||||
|
||||
private static NativeLaunchCandidate Candidate(string path, bool readOnly) =>
|
||||
new(Guid.NewGuid(), path, 2 * 1024 * 1024, readOnly);
|
||||
}
|
||||
Reference in New Issue
Block a user