mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
Introduce a persistent LauncherDebugSettingsStore and wire it into ErrorWindow and SplashWindow so dev-mode and custom host path can be saved/loaded. Harden DeploymentLocator/FlexibleHostLocator to safely normalize and validate saved debug paths and log warnings for malformed values. Add a WaitingForShell startup state and recoverable-activation logic across App and LauncherFlowCoordinator (with registry updates) so Launcher can attach to an in-progress desktop shell rather than failing. Clean up ErrorDebugWindow UI/flow (WasAccepted flag, localization fixes, event wiring) and improve splash version population. Improve AppVersionProvider to trim surrounding quotes, robustly parse version.json via JsonDocument and read string properties; add unit tests for AppVersionProvider, DeploymentLocator and LauncherDebugSettingsStore. Also quote Exec commands in the csproj and harden scripts/Generate-VersionFile.ps1 (argument normalization, LiteralPath, error handling).
84 lines
2.6 KiB
C#
84 lines
2.6 KiB
C#
using LanMountainDesktop.Shared.Contracts.Launcher;
|
|
using Xunit;
|
|
|
|
namespace LanMountainDesktop.Tests;
|
|
|
|
public sealed class AppVersionProviderTests
|
|
{
|
|
[Fact]
|
|
public void ResolveFromPackageRoot_WhenVersionJsonExists_UsesVersionFile()
|
|
{
|
|
using var temp = TemporaryPackage.Create();
|
|
temp.CreateDeployment("app-0.8.5.7", """
|
|
{"Version":"0.8.5.7","Codename":"Administrate"}
|
|
""");
|
|
|
|
var info = AppVersionProvider.ResolveFromPackageRoot(temp.Root, "LanMountainDesktop.exe");
|
|
|
|
Assert.Equal("0.8.5.7", info.Version);
|
|
Assert.Equal("Administrate", info.Codename);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveFromPackageRoot_WhenVersionJsonIsMissing_FallsBackToDeploymentDirectory()
|
|
{
|
|
using var temp = TemporaryPackage.Create();
|
|
temp.CreateDeployment("app-0.8.5.7");
|
|
|
|
var info = AppVersionProvider.ResolveFromPackageRoot(temp.Root, "LanMountainDesktop.exe");
|
|
|
|
Assert.Equal("0.8.5.7", info.Version);
|
|
}
|
|
|
|
[Fact]
|
|
public void ResolveFromPackageRoot_WhenVersionJsonContainsQuotedValues_NormalizesValues()
|
|
{
|
|
using var temp = TemporaryPackage.Create();
|
|
temp.CreateDeployment("app-1.2.3", """
|
|
{"Version":"'1.2.3'","Codename":"'Administrate'"}
|
|
""");
|
|
|
|
var info = AppVersionProvider.ResolveFromPackageRoot(temp.Root, "LanMountainDesktop.exe");
|
|
|
|
Assert.Equal("1.2.3", info.Version);
|
|
Assert.Equal("Administrate", info.Codename);
|
|
}
|
|
|
|
private sealed class TemporaryPackage : IDisposable
|
|
{
|
|
private TemporaryPackage(string root)
|
|
{
|
|
Root = root;
|
|
}
|
|
|
|
public string Root { get; }
|
|
|
|
public static TemporaryPackage Create()
|
|
{
|
|
var root = Path.Combine(Path.GetTempPath(), "LanMountainDesktop.VersionTests", Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(root);
|
|
return new TemporaryPackage(root);
|
|
}
|
|
|
|
public void CreateDeployment(string name, string? versionJson = null)
|
|
{
|
|
var deployment = Path.Combine(Root, name);
|
|
Directory.CreateDirectory(deployment);
|
|
File.WriteAllText(Path.Combine(deployment, "LanMountainDesktop.exe"), string.Empty);
|
|
File.WriteAllText(Path.Combine(deployment, ".current"), string.Empty);
|
|
if (versionJson is not null)
|
|
{
|
|
File.WriteAllText(Path.Combine(deployment, "version.json"), versionJson);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (Directory.Exists(Root))
|
|
{
|
|
Directory.Delete(Root, recursive: true);
|
|
}
|
|
}
|
|
}
|
|
}
|