feat(linux): add graphical platform services

This commit is contained in:
Erik 2026-07-27 11:54:59 +02:00
parent 1628d9f587
commit 66f114b258
28 changed files with 1328 additions and 155 deletions

View file

@ -0,0 +1,56 @@
using AcDream.App.Platform;
namespace AcDream.App.Tests.Platform;
public sealed class GraphicalHostPlatformServicesTests
{
[Fact]
public void CurrentPlatformOwnsPathsPacingAndNativeClosure()
{
GraphicalHostPlatformServices platform =
GraphicalHostPlatformServices.Resolve();
Assert.NotNull(platform.Paths);
Assert.NotNull(platform.FramePacingWaiters);
Assert.Equal(3, platform.NativeDependencies.Count);
Assert.All(
platform.NativeDependencies,
dependency =>
{
Assert.False(string.IsNullOrWhiteSpace(dependency.Feature));
Assert.False(string.IsNullOrWhiteSpace(
dependency.PublishedFileName));
});
if (OperatingSystem.IsWindows())
{
Assert.Equal(
GraphicalHostOperatingSystem.Windows,
platform.OperatingSystem);
Assert.StartsWith(
"win-",
platform.RuntimeIdentifier,
StringComparison.Ordinal);
Assert.Contains(
platform.NativeDependencies,
dependency =>
dependency.PublishedFileName == "glfw3.dll");
return;
}
if (OperatingSystem.IsLinux())
{
Assert.Equal(
GraphicalHostOperatingSystem.Linux,
platform.OperatingSystem);
Assert.Equal("linux-x64", platform.RuntimeIdentifier);
Assert.Contains(
platform.NativeDependencies,
dependency =>
dependency.PublishedFileName == "libglfw.so.3");
return;
}
throw new PlatformNotSupportedException();
}
}

View file

@ -0,0 +1,66 @@
using AcDream.App.Platform;
using AcDream.Runtime.Platform;
namespace AcDream.App.Tests.Platform;
public sealed class GraphicalLegacyConfigurationMigratorTests
: IDisposable
{
private readonly string _root = Path.Combine(
Path.GetTempPath(),
"acdream-l0-migration-" + Guid.NewGuid().ToString("N"));
[Fact]
public void MissingCanonicalFilesAreCopiedWithoutOverwriting()
{
string legacy = Path.Combine(_root, "legacy");
string canonical = Path.Combine(_root, "canonical");
Directory.CreateDirectory(legacy);
Directory.CreateDirectory(canonical);
File.WriteAllText(
Path.Combine(legacy, "settings.json"),
"legacy-settings");
File.WriteAllText(
Path.Combine(legacy, "keybinds.json"),
"legacy-keybinds");
File.WriteAllText(
Path.Combine(canonical, "keybinds.json"),
"canonical-keybinds");
var paths = new ApplicationPathSet(
canonical,
Path.Combine(_root, "data"),
Path.Combine(_root, "cache"),
legacy);
IReadOnlyList<string> migrated =
GraphicalLegacyConfigurationMigrator.Migrate(paths);
Assert.Single(migrated);
Assert.Equal(
"legacy-settings",
File.ReadAllText(paths.SettingsFile));
Assert.Equal(
"canonical-keybinds",
File.ReadAllText(paths.KeyBindingsFile));
}
[Fact]
public void NoLegacyDirectoryProducesNoWrites()
{
var paths = new ApplicationPathSet(
Path.Combine(_root, "canonical"),
Path.Combine(_root, "data"),
Path.Combine(_root, "cache"),
LegacyConfigDirectory: null);
Assert.Empty(
GraphicalLegacyConfigurationMigrator.Migrate(paths));
Assert.False(Directory.Exists(paths.ConfigDirectory));
}
public void Dispose()
{
if (Directory.Exists(_root))
Directory.Delete(_root, recursive: true);
}
}