Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions WheelWizard.Test/Features/Dolphin/FeaturePathOwnershipTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,19 +94,19 @@ public void DistributionWithDolphin_UsesEffectiveLoadDirectory_WhileDownloadsFol
private static (ISettingsManager, DolphinPaths) CreateDolphinPaths(MockFileSystem fs, string userFolder)
{
var settings = Substitute.For<ISettingsManager>();
settings.USER_FOLDER_PATH.Returns(new WhWzSetting(typeof(string), "UserFolderPath", userFolder));
settings.DOLPHIN_LOCATION.Returns(new WhWzSetting(typeof(string), "DolphinLocation", "dolphin-emu"));
settings.USER_FOLDER_PATH.Returns(new WhWzSetting<string>("UserFolderPath", userFolder));
settings.DOLPHIN_LOCATION.Returns(new WhWzSetting<string>("DolphinLocation", "dolphin-emu"));
settings.LOAD_PATH.Returns(
new WhWzSetting(typeof(string), "LoadPath", "").SetValidation(value =>
new WhWzSetting<string>("LoadPath", "").SetValidation(value =>
value is string directory && !string.IsNullOrWhiteSpace(directory) && fs.Directory.Exists(directory)
)
);
settings.NAND_ROOT_PATH.Returns(
new WhWzSetting(typeof(string), "NandRootPath", "").SetValidation(value =>
new WhWzSetting<string>("NandRootPath", "").SetValidation(value =>
value is string directory && !string.IsNullOrWhiteSpace(directory) && fs.Directory.Exists(directory)
)
);
settings.Get<string>(Arg.Any<Setting>()).Returns(call => (string)call.Arg<Setting>().Get());
settings.Get<string>(Arg.Any<Setting<string>>()).Returns(call => (string)call.Arg<Setting<string>>().Get());
return (settings, new DolphinPaths(settings, new DolphinPathResolver(fs, Substitute.For<IRuntimeEnvironment>()), fs));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ private sealed class Fixture
public IDolphinVersionService Versions { get; } = Substitute.For<IDolphinVersionService>();
public ILinuxDolphinInstaller Installer { get; } = Substitute.For<ILinuxDolphinInstaller>();
public IDolphinLaunchPresentation Presentation { get; } = Substitute.For<IDolphinLaunchPresentation>();
public WhWzSetting GamePath { get; } = new(typeof(string), "GamePath", "/game.iso");
public WhWzSetting<string> GamePath { get; } = new("GamePath", "/game.iso");
public DolphinLaunchService Service { get; }

public Fixture(bool windows = false, string command = "dolphin-emu")
Expand Down
4 changes: 2 additions & 2 deletions WheelWizard.Test/Features/Launching/LaunchPathTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ public async Task BlockedDistributionPreflight_DoesNotKillPrepareOrWrite(bool be
private static ISettingsManager CreateSettings()
{
var settings = Substitute.For<ISettingsManager>();
settings.GAME_LOCATION.Returns(new WhWzSetting(typeof(string), "GamePath", "/game.iso"));
settings.Get<string>(Arg.Any<Setting>()).Returns(call => (string)call.Arg<Setting>().Get());
settings.GAME_LOCATION.Returns(new WhWzSetting<string>("GamePath", "/game.iso"));
settings.Get<string>(Arg.Any<Setting<string>>()).Returns(call => (string)call.Arg<Setting<string>>().Get());
return settings;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -122,11 +122,11 @@ public Fixture()
{
Fs.File.WriteAllText("/game.iso", "game");
var settings = Substitute.For<ISettingsManager>();
settings.GAME_LOCATION.Returns(new WhWzSetting(typeof(string), "Game", "/game.iso"));
settings.FORCE_WIIMOTE.Returns(new WhWzSetting(typeof(bool), "Force", true));
settings.LAUNCH_WITH_DOLPHIN.Returns(new WhWzSetting(typeof(bool), "Dolphin", false));
settings.Get<string>(Arg.Any<Setting>()).Returns(call => (string)call.Arg<Setting>().Get());
settings.Get<bool>(Arg.Any<Setting>()).Returns(call => (bool)call.Arg<Setting>().Get());
settings.GAME_LOCATION.Returns(new WhWzSetting<string>("Game", "/game.iso"));
settings.FORCE_WIIMOTE.Returns(new WhWzSetting<bool>("Force", true));
settings.LAUNCH_WITH_DOLPHIN.Returns(new WhWzSetting<bool>("Dolphin", false));
settings.Get<string>(Arg.Any<Setting<string>>()).Returns(call => (string)call.Arg<Setting<string>>().Get());
settings.Get<bool>(Arg.Any<Setting<bool>>()).Returns(call => (bool)call.Arg<Setting<bool>>().Get());
var paths = Substitute.For<ICustomDistributionPaths>();
paths.PatchesFolderPath.Returns("/stable-patches");
paths.BetaPatchesFolderPath.Returns("/beta-patches");
Expand Down
6 changes: 3 additions & 3 deletions WheelWizard.Test/Features/MiiRepositoryServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ public sealed class MiiRepositoryServiceTests
public MiiRepositoryServiceTests()
{
_settings = SettingsTestUtils.CreateSettingsStub(Path.GetDirectoryName(_sourceNand)!);
var nandSetting = new WhWzSetting(typeof(string), "NandRoot", _sourceNand);
var copySetting = new WhWzSetting(typeof(bool), "CopyNand", false);
var useSetting = new WhWzSetting(typeof(bool), "UseDolphinData", true);
var nandSetting = new WhWzSetting<string>("NandRoot", _sourceNand);
var copySetting = new WhWzSetting<bool>("CopyNand", false);
var useSetting = new WhWzSetting<bool>("UseDolphinData", true);
_settings.NAND_ROOT_PATH.Returns(nandSetting);
_settings.RECOMP_COPY_DOLPHIN_NAND.Returns(copySetting);
_settings.RECOMP_USE_DOLPHIN_DATA.Returns(useSetting);
Expand Down
24 changes: 11 additions & 13 deletions WheelWizard.Test/Features/Settings/DolphinSettingsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,15 @@ public class DolphinSettingTests
[Fact]
public void Constructor_Throws_WhenFileNameIsNotIni()
{
var action = () => new DolphinSetting(typeof(string), ("Dolphin.cfg", "General", "NANDRootPath"), "value");
var action = () => new DolphinSetting<string>(("Dolphin.cfg", "General", "NANDRootPath"), "value");

Assert.Throws<ArgumentException>(action);
}

[Fact]
public void SetFromString_ParsesEnumAndFormatsAsIntegerString()
{
var setting = new DolphinSetting(
typeof(DolphinShaderCompilationMode),
var setting = new DolphinSetting<DolphinShaderCompilationMode>(
("GFX.ini", "Settings", "ShaderCompilationMode"),
DolphinShaderCompilationMode.Default
);
Expand All @@ -34,9 +33,7 @@ public void SetFromString_ParsesEnumAndFormatsAsIntegerString()
[Fact]
public void Set_ReturnsFalseAndKeepsOldValue_WhenValidationFails()
{
var setting = new DolphinSetting(typeof(int), ("GFX.ini", "Settings", "InternalResolution"), 1).SetValidation(value =>
(int)value! >= 0
);
var setting = new DolphinSetting<int>(("GFX.ini", "Settings", "InternalResolution"), 1).SetValidation(value => value >= 0);
setting.Set(2);

var result = setting.Set(-1);
Expand All @@ -46,11 +43,12 @@ public void Set_ReturnsFalseAndKeepsOldValue_WhenValidationFails()
}

[Fact]
public void SetFromString_Throws_WhenTypeIsUnsupported()
public void SetFromString_ParsesTypedNumbers()
{
var setting = new DolphinSetting(typeof(decimal), ("GFX.ini", "Settings", "Price"), 1m);
var setting = new DolphinSetting<decimal>(("GFX.ini", "Settings", "Price"), 1m);

Assert.Throws<InvalidOperationException>(() => setting.SetFromString("3.14"));
Assert.True(setting.SetFromString("3.14"));
Assert.Equal(3.14m, setting.Value);
}
}

Expand All @@ -67,7 +65,7 @@ public void LoadSettings_ReadsExistingValue_FromIniFile()
fileSystem.Directory.CreateDirectory(configFolderPath);
fileSystem.File.WriteAllLines(iniPath, ["[General]", "NANDRootPath = /persisted"]);
var manager = new DolphinSettingManager(fileSystem);
var setting = new DolphinSetting(typeof(string), ("Dolphin.ini", "General", "NANDRootPath"), "/default");
var setting = new DolphinSetting<string>(("Dolphin.ini", "General", "NANDRootPath"), "/default");

manager.RegisterSetting(setting);
manager.LoadSettings(configFolderPath);
Expand All @@ -85,7 +83,7 @@ public void LoadSettings_UsesDefaultWithoutWriting_WhenIniEntryIsMissing()
fileSystem.Directory.CreateDirectory(configFolderPath);
fileSystem.File.WriteAllLines(iniPath, ["[General]", "OtherSetting = 1"]);
var manager = new DolphinSettingManager(fileSystem);
var setting = new DolphinSetting(typeof(string), ("Dolphin.ini", "General", "NANDRootPath"), "/default");
var setting = new DolphinSetting<string>(("Dolphin.ini", "General", "NANDRootPath"), "/default");

manager.RegisterSetting(setting);
manager.LoadSettings(configFolderPath);
Expand All @@ -105,7 +103,7 @@ public void SaveSettings_UpdatesExistingSettingLine_InIniFile()
fileSystem.Directory.CreateDirectory(configFolderPath);
fileSystem.File.WriteAllLines(iniPath, ["[General]", "NANDRootPath = /old"]);
var manager = new DolphinSettingManager(fileSystem);
var setting = new DolphinSetting(typeof(string), ("Dolphin.ini", "General", "NANDRootPath"), "/default");
var setting = new DolphinSetting<string>(("Dolphin.ini", "General", "NANDRootPath"), "/default");

manager.RegisterSetting(setting);
manager.LoadSettings(configFolderPath);
Expand All @@ -127,7 +125,7 @@ public void ReloadSettings_ReReadsFile_AfterItChangesOnDisk()
fileSystem.Directory.CreateDirectory(configFolderPath);
fileSystem.File.WriteAllLines(iniPath, ["[General]", "NANDRootPath = /first"]);
var manager = new DolphinSettingManager(fileSystem);
var setting = new DolphinSetting(typeof(string), ("Dolphin.ini", "General", "NANDRootPath"), "/default");
var setting = new DolphinSetting<string>(("Dolphin.ini", "General", "NANDRootPath"), "/default");

manager.RegisterSetting(setting);
manager.LoadSettings(configFolderPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void ApplicationSettings_SaveToRequestedDestination_WithoutChangingOrigin
const string originalJson = "{\"Volume\":12}";
fs.File.WriteAllText(original, originalJson);
var manager = new WhWzSettingManager(NullLogger<WhWzSettingManager>.Instance, fs);
var setting = new WhWzSetting(typeof(int), "Volume", 5);
var setting = new WhWzSetting<int>("Volume", 5);
manager.RegisterSetting(setting);

manager.LoadSettings(original);
Expand All @@ -43,7 +43,7 @@ public void DolphinSettings_ReloadAndSave_UseNewUserDirectory()
fs.File.WriteAllText(firstFile, originalIni);
fs.File.WriteAllText(secondFile, "[General]\nNANDRootPath = /second-nand\nOther = keep\n");
var manager = new DolphinSettingManager(fs);
var setting = new DolphinSetting(typeof(string), ("Dolphin.ini", "General", "NANDRootPath"), "");
var setting = new DolphinSetting<string>(("Dolphin.ini", "General", "NANDRootPath"), "");
manager.RegisterSetting(setting);

manager.LoadSettings(first);
Expand Down Expand Up @@ -72,7 +72,7 @@ public void RecompSettings_ReloadSaveAndRemove_PreserveOtherFileAndUnrelatedCont
["# keep comment", "[paths]", "nand_root = \"second\"", "other = true", "[video]", "show_fps = false"]
);
var manager = new RecompSettingManager(fs);
var setting = new RecompSetting(typeof(string), ("paths", "nand_root"), "", _ => { });
var setting = new RecompSetting<string>(("paths", "nand_root"), "", _ => { });
manager.RegisterSetting(setting);

manager.LoadSettings(first);
Expand All @@ -93,7 +93,7 @@ public void RecompSettings_DoNotCreateBackendOwnedFile_WhenMissing()
var fs = new MockFileSystem();
var configPath = fs.Path.GetFullPath("/missing/Config.toml");
var manager = new RecompSettingManager(fs);
var setting = new RecompSetting(typeof(bool), ("video", "show_fps"), false, _ => { });
var setting = new RecompSetting<bool>(("video", "show_fps"), false, _ => { });
manager.RegisterSetting(setting);

manager.LoadSettings(configPath);
Expand Down
15 changes: 7 additions & 8 deletions WheelWizard.Test/Features/Settings/SettingsRecoveryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public void DolphinEditPreservesExternalValuesAndReloadDoesNotCarryPreviousProfi
fs.Directory.CreateDirectory("/config");
fs.File.WriteAllText("/config/GFX.ini", "[Settings]\nShowFPS = False\nInternalResolution = 1\n");
var manager = new DolphinSettingManager(fs);
var fps = new DolphinSetting(typeof(bool), ("GFX.ini", "Settings", "ShowFPS"), false, s => manager.SaveSettings("/config", s));
var resolution = new DolphinSetting(typeof(int), ("GFX.ini", "Settings", "InternalResolution"), 1);
var fps = new DolphinSetting<bool>(("GFX.ini", "Settings", "ShowFPS"), false, s => manager.SaveSettings("/config", s));
var resolution = new DolphinSetting<int>(("GFX.ini", "Settings", "InternalResolution"), 1);
manager.RegisterSetting(fps);
manager.RegisterSetting(resolution);
manager.LoadSettings("/config");
Expand All @@ -39,7 +39,7 @@ public void RecompReloadMissingKeyUsesDefault()
fs.Directory.CreateDirectory("/config");
fs.File.WriteAllText("/config/Config.toml", "[video]\nshow_fps = false\n");
var manager = new RecompSettingManager(fs);
var setting = new RecompSetting(typeof(bool), ("video", "show_fps"), true, s => manager.SaveSettings("/config/Config.toml", s));
var setting = new RecompSetting<bool>(("video", "show_fps"), true, s => manager.SaveSettings("/config/Config.toml", s));
manager.RegisterSetting(setting);
manager.LoadSettings("/config/Config.toml");
fs.File.WriteAllText("/config/Config.toml", "[video]\n");
Expand All @@ -54,8 +54,7 @@ public void RecompReloadMissingKeyUsesDefault()
public void FailedSaveRollsBackAndCanBeRetried()
{
var fail = true;
var setting = new WhWzSetting(
typeof(bool),
var setting = new WhWzSetting<bool>(
"Enabled",
false,
_ =>
Expand Down Expand Up @@ -84,7 +83,7 @@ public void JsonRetainsExistingKeysAndUnknownValuesAndPreservesCorruptFile()
const string original = "{\"EnableAnimations\":false,\"FutureSetting\":{\"value\":2}}";
fs.File.WriteAllText(path, original);
var manager = new WhWzSettingManager(NullLogger<WhWzSettingManager>.Instance, fs);
var setting = new WhWzSetting(typeof(bool), "EnableAnimations", true, s => manager.SaveSettings(path, s));
var setting = new WhWzSetting<bool>("EnableAnimations", true, s => manager.SaveSettings(path, s));
manager.RegisterSetting(setting);
manager.LoadSettings(path);
Assert.Equal(false, setting.Get());
Expand All @@ -102,8 +101,8 @@ public void JsonRetainsExistingKeysAndUnknownValuesAndPreservesCorruptFile()
[Fact]
public void VirtualSettingTracksDependenciesAfterSetterFailure()
{
var source = new WhWzSetting(typeof(int), "source", 1);
using var derived = new VirtualSetting(typeof(int), _ => throw new IOException("save failed"), source.Get).SetDependencies(source);
var source = new WhWzSetting<int>("source", 1);
using var derived = new VirtualSetting<int>(_ => throw new IOException("save failed"), source.Get).SetDependencies(source);
Assert.False(derived.Set(2));
source.Set(3);
Assert.Equal(3, derived.Get());
Expand Down
Loading
Loading