Publish Ludarium source
Public source validation / source (push) Successful in 2m16s

This commit is contained in:
Ludarium release export
2026-09-03 02:08:58 +02:00
commit df869819ce
339 changed files with 46455 additions and 0 deletions
@@ -0,0 +1,61 @@
using System.Text;
using Ludarium.Application;
using Ludarium.Domain;
namespace Ludarium.UnitTests;
public sealed class BrowserGameDataPolicyTests
{
[Fact]
public void VerifiedBindingMatchesOnlyTheExactArtifactRevisionAndCore()
{
var gameId = Guid.NewGuid();
var artifactId = Guid.NewGuid();
var sha256 = new string('a', 64);
var artifact = Artifact(artifactId, version: 4, sha256: sha256);
var session = Session(gameId, artifactId, "fceumm");
var sourceId = BrowserGameDataPolicy.EncodeBinding(artifactId, artifact.Version, session.Core, sha256);
Assert.True(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId, session, artifact));
Assert.False(BrowserGameDataPolicy.Matches("ManualUpload", sourceId, session, artifact));
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, "not-base64", session, artifact));
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId,
session with { Core = "mgba" }, artifact));
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId, session,
artifact with { Version = artifact.Version + 1 }));
Assert.False(BrowserGameDataPolicy.Matches(BrowserGameDataPolicy.SourceType, sourceId, session,
artifact with { Sha256 = new string('b', 64) }));
}
[Fact]
public void RestoreScopeIsFixtureVerifiedAndStableAcrossCoreCasing()
{
var gameId = Guid.NewGuid();
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("FCEUMM"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("mgba"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("gambatte"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("snes9x"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("melonds"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("ppsspp"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("pcsx_rearmed"));
Assert.True(BrowserGameDataPolicy.SupportsAutomaticRestore("n64wasm"));
Assert.False(BrowserGameDataPolicy.SupportsAutomaticRestore("mupen64plus_next"));
Assert.Equal(BrowserGameDataPolicy.StableEntryId(gameId, "fceumm", GameDataKind.Save),
BrowserGameDataPolicy.StableEntryId(gameId, "FCEUMM", GameDataKind.Save));
Assert.NotEqual(BrowserGameDataPolicy.StableEntryId(gameId, "fceumm", GameDataKind.Save),
BrowserGameDataPolicy.StableEntryId(gameId, "fceumm", GameDataKind.SaveState));
Assert.Throws<ArgumentException>(() =>
BrowserGameDataPolicy.EncodeBinding(Guid.NewGuid(), 1, "mupen64plus_next", null));
}
private static Artifact Artifact(Guid id, long version, string sha256) =>
new(id, Guid.NewGuid(), "roms/nes/synthetic.nes", 16, DateTimeOffset.UnixEpoch,
ArtifactState.Present, MediaType.Rom, Confidence.High, null, DateTimeOffset.UnixEpoch,
DateTimeOffset.UnixEpoch, "ines", "nes", version, sha256);
private static BrowserPlaySession Session(Guid gameId, Guid artifactId, string core) =>
new(Guid.NewGuid(), gameId, artifactId, PlaySessionState.Ready, "nes", "Ludarium EmulatorJS",
core, "/player.html", Convert.ToHexString(Encoding.UTF8.GetBytes("token")),
DateTimeOffset.UnixEpoch, DateTimeOffset.UnixEpoch.AddHours(1));
}