Files
metin-launcher/tests/Metin2Launcher.Tests/LauncherSettingsTests.cs
Jan Nedbal 1e6ab386cb launcher: add avalonia packages, settings, locale, and progress hook
Adds Avalonia 11 + CommunityToolkit.Mvvm package references (no UI code
yet), a flat-key Loc resource loader with embedded cs.json/en.json, the
LauncherSettings JSON store with dev-mode-gated manifest URL override,
and an optional IProgress<long> bytesProgress hook on BlobDownloader so
the upcoming GUI can drive a progress bar from per-blob byte counts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 13:15:07 +02:00

71 lines
2.2 KiB
C#

using Metin2Launcher.Config;
using Xunit;
namespace Metin2Launcher.Tests;
public class LauncherSettingsTests : IDisposable
{
private readonly string _tmp;
public LauncherSettingsTests()
{
_tmp = Path.Combine(Path.GetTempPath(), "metin-settings-" + Guid.NewGuid());
Directory.CreateDirectory(_tmp);
}
public void Dispose()
{
try { Directory.Delete(_tmp, recursive: true); } catch { }
}
[Fact]
public void Defaults_when_file_missing()
{
var path = Path.Combine(_tmp, "missing.json");
var s = LauncherSettings.Load(path);
Assert.Equal("cs", s.Locale);
Assert.False(s.DevMode);
Assert.Null(s.ManifestUrlOverride);
}
[Fact]
public void Save_then_load_round_trip()
{
var path = Path.Combine(_tmp, "s.json");
var s = new LauncherSettings { Locale = "en", DevMode = true, ManifestUrlOverride = "https://example.test/m.json" };
s.Save(path);
var loaded = LauncherSettings.Load(path);
Assert.Equal("en", loaded.Locale);
Assert.True(loaded.DevMode);
Assert.Equal("https://example.test/m.json", loaded.ManifestUrlOverride);
}
[Fact]
public void Override_ignored_when_devmode_off()
{
var s = new LauncherSettings { DevMode = false, ManifestUrlOverride = "https://evil.test/m.json" };
Assert.Equal(LauncherConfig.ManifestUrl, s.EffectiveManifestUrl());
Assert.Equal(LauncherConfig.SignatureUrl, s.EffectiveSignatureUrl());
Assert.Equal(LauncherConfig.BlobBaseUrl, s.EffectiveBlobBaseUrl());
}
[Fact]
public void Override_used_when_devmode_on()
{
var s = new LauncherSettings { DevMode = true, ManifestUrlOverride = "https://example.test/m.json" };
Assert.Equal("https://example.test/m.json", s.EffectiveManifestUrl());
Assert.Equal("https://example.test/m.json.sig", s.EffectiveSignatureUrl());
Assert.Equal("https://example.test/files", s.EffectiveBlobBaseUrl());
}
[Fact]
public void Corrupt_file_falls_back_to_defaults()
{
var path = Path.Combine(_tmp, "bad.json");
File.WriteAllText(path, "{not json");
var s = LauncherSettings.Load(path);
Assert.Equal("cs", s.Locale);
}
}