Files
LanMountainDesktop/LanMountainDesktop.Tests/HostAppSettingsOobeMergerTests.cs

143 lines
4.8 KiB
C#
Raw Normal View History

using LanMountainDesktop.Launcher.Services;
2026-05-12 16:46:49 +08:00
using LanMountainDesktop.Shared.Contracts.Launcher;
using Xunit;
namespace LanMountainDesktop.Tests;
public sealed class HostAppSettingsOobeMergerTests
{
[Fact]
public void MergeStartupPresentation_PreservesUnrelatedJsonKeys()
{
var dir = Path.Combine(Path.GetTempPath(), "LMD.OobeMerge", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
var path = Path.Combine(dir, "settings.json");
File.WriteAllText(path, """
{
"LanguageCode": "ja-JP",
"ShowInTaskbar": false,
"EnableFadeTransition": true,
"EnableSlideTransition": false
}
""");
try
{
HostAppSettingsOobeMerger.MergeStartupPresentation(
path,
new HostAppSettingsStartupChoices(
ShowInTaskbar: true,
EnableFadeTransition: false,
EnableSlideTransition: true,
FusedPopupExperience: true,
AutoStartWithWindows: true));
var json = File.ReadAllText(path);
using var doc = System.Text.Json.JsonDocument.Parse(json);
var root = doc.RootElement;
Assert.Equal("ja-JP", root.GetProperty("LanguageCode").GetString());
Assert.True(root.GetProperty("ShowInTaskbar").GetBoolean());
Assert.False(root.GetProperty("EnableFadeTransition").GetBoolean());
Assert.True(root.GetProperty("EnableSlideTransition").GetBoolean());
Assert.True(root.GetProperty("EnableFusedDesktop").GetBoolean());
Assert.True(root.GetProperty("EnableThreeFingerSwipe").GetBoolean());
Assert.True(root.GetProperty("AutoStartWithWindows").GetBoolean());
}
finally
{
Directory.Delete(dir, recursive: true);
}
}
[Fact]
public void GetSettingsFilePath_NormalizesDataRoot()
{
var root = Path.Combine(Path.GetTempPath(), "LMD.OobePath", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(root);
try
{
var path = HostAppSettingsOobeMerger.GetSettingsFilePath(root + Path.DirectorySeparatorChar);
Assert.Equal(Path.Combine(Path.GetFullPath(root), "settings.json"), path);
}
finally
{
Directory.Delete(root);
}
}
[Fact]
public void LoadStartupDefaults_WhenFusedAndSwipeDiffer_TreatsPopupExperienceAsBothTrue()
{
var dir = Path.Combine(Path.GetTempPath(), "LMD.OobeDefaults", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
var path = Path.Combine(dir, "settings.json");
File.WriteAllText(path, """
{
"EnableFusedDesktop": true,
"EnableThreeFingerSwipe": false
}
""");
try
{
var d = HostAppSettingsOobeMerger.LoadStartupDefaults(path);
Assert.False(d.FusedPopupExperience);
}
finally
{
Directory.Delete(dir, recursive: true);
}
}
2026-05-12 16:46:49 +08:00
[Theory]
[InlineData("RestartApp", MultiInstanceLaunchBehavior.RestartApp)]
[InlineData("OpenDesktopSilently", MultiInstanceLaunchBehavior.OpenDesktopSilently)]
[InlineData("PromptOnly", MultiInstanceLaunchBehavior.PromptOnly)]
[InlineData("NotifyAndOpenDesktop", MultiInstanceLaunchBehavior.NotifyAndOpenDesktop)]
public void LoadMultiInstanceLaunchBehavior_ReadsStringValues(
string value,
MultiInstanceLaunchBehavior expected)
{
var dir = Path.Combine(Path.GetTempPath(), "LMD.MultiInstanceSettings", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
var path = Path.Combine(dir, "settings.json");
File.WriteAllText(path, $$"""
{
"MultiInstanceLaunchBehavior": "{{value}}"
}
""");
try
{
Assert.Equal(expected, HostAppSettingsOobeMerger.LoadMultiInstanceLaunchBehavior(path));
}
finally
{
Directory.Delete(dir, recursive: true);
}
}
[Theory]
[InlineData("{}")]
[InlineData("{ \"MultiInstanceLaunchBehavior\": \"Unknown\" }")]
public void LoadMultiInstanceLaunchBehavior_FallsBackToNotifyAndOpenDesktop(string json)
{
var dir = Path.Combine(Path.GetTempPath(), "LMD.MultiInstanceSettings", Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(dir);
var path = Path.Combine(dir, "settings.json");
File.WriteAllText(path, json);
try
{
Assert.Equal(
MultiInstanceLaunchBehavior.NotifyAndOpenDesktop,
HostAppSettingsOobeMerger.LoadMultiInstanceLaunchBehavior(path));
}
finally
{
Directory.Delete(dir, recursive: true);
}
}
}