diff --git a/CHANGELIST.md b/CHANGELIST.md index 5abb4c65..b7d2eb4d 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -45,6 +45,7 @@ - Wire up input boundaries - Fix required Int32 array input - Ensure dumping commands are tested +- Add tests around default values ### 3.2.4 (2024-11-24) diff --git a/MPF.ExecutionContexts.Test/AaruTests.cs b/MPF.ExecutionContexts.Test/AaruTests.cs index ac971431..a1e11427 100644 --- a/MPF.ExecutionContexts.Test/AaruTests.cs +++ b/MPF.ExecutionContexts.Test/AaruTests.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using MPF.ExecutionContexts.Aaru; using SabreTools.RedumpLib.Data; using Xunit; @@ -26,6 +27,42 @@ namespace MPF.ExecutionContexts.Test #endregion + #region Default Values + + private static Dictionary AllOptions = new() + { + [SettingConstants.EnableDebug] = "true", + [SettingConstants.EnableVerbose] = "true", + [SettingConstants.ForceDumping] = "true", + [SettingConstants.RereadCount] = "1000", + [SettingConstants.StripPersonalData] = "true", + }; + + [Theory] + [InlineData(null, null, null, "filename.bin", null, null)] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --store-encrypted True --title-keys False --trim True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.SegaDreamcast, MediaType.GDROM, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --store-encrypted True --title-keys False --trim True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.BDVideo, MediaType.BluRay, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --store-encrypted True --title-keys False --trim True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.NintendoGameCube, MediaType.NintendoGameCubeGameDisc, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.NintendoWii, MediaType.NintendoWiiOpticalDisc, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.NintendoWiiU, MediaType.NintendoWiiUOpticalDisc, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.FloppyDisk, "/dev/sr0", "filename.bin", 2, "--debug True --verbose True media dump --force True --private True --speed 2 --retry-passes 1000 /dev/sr0 \"filename.bin\"")] + public void DefaultValueTest(RedumpSystem? system, + MediaType? type, + string? drivePath, + string filename, + int? driveSpeed, + string? expected) + { + var context = new ExecutionContext(system, type, drivePath, filename, driveSpeed, AllOptions); + string? actual = context.GenerateParameters(); + Assert.Equal(expected, actual); + } + + #endregion + #region Archive Family [Theory] diff --git a/MPF.ExecutionContexts.Test/DiscImageCreatorTests.cs b/MPF.ExecutionContexts.Test/DiscImageCreatorTests.cs index 9b3d0c85..22ebd0b3 100644 --- a/MPF.ExecutionContexts.Test/DiscImageCreatorTests.cs +++ b/MPF.ExecutionContexts.Test/DiscImageCreatorTests.cs @@ -1,4 +1,5 @@ -using MPF.ExecutionContexts.DiscImageCreator; +using System.Collections.Generic; +using MPF.ExecutionContexts.DiscImageCreator; using SabreTools.RedumpLib.Data; using Xunit; @@ -39,6 +40,53 @@ namespace MPF.ExecutionContexts.Test #endregion + #region Default Values + + private static Dictionary AllOptions = new() + { + [SettingConstants.DVDRereadCount] = "1000", + [SettingConstants.MultiSectorRead] = "true", + [SettingConstants.MultiSectorReadValue] = "1000", + [SettingConstants.ParanoidMode] = "true", + [SettingConstants.QuietMode] = "true", + [SettingConstants.RereadCount] = "1000", + [SettingConstants.UseCMIFlag] = "true", + }; + + [Theory] + [InlineData(null, null, null, "filename.bin", null, null)] + [InlineData(RedumpSystem.AppleMacintosh, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /c2 1000 /q /mr 1000 /ns /sf /ss /s 2")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /c2 1000 /q /mr 1000 /ns /sf /ss /s 2")] + [InlineData(RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /aj /c2 1000 /q /mr 1000")] + [InlineData(RedumpSystem.HasbroVideoNow, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /a 0 /c2 1000 /q /mr 1000")] + [InlineData(RedumpSystem.HasbroVideoNowColor, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /a 0 /c2 1000 /q /mr 1000")] + [InlineData(RedumpSystem.HasbroVideoNowJr, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /a 0 /c2 1000 /q /mr 1000")] + [InlineData(RedumpSystem.HasbroVideoNowXP, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /a 0 /c2 1000 /q /mr 1000")] + [InlineData(RedumpSystem.SonyPlayStation, MediaType.CDROM, "/dev/sr0", "filename.bin", 2, "cd /dev/sr0 \"filename.bin\" 2 /c2 1000 /q /mr 1000 /nl /am")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, "/dev/sr0", "filename.bin", 2, "dvd /dev/sr0 \"filename.bin\" 2 /c /q /rr 1000 /sf")] + [InlineData(RedumpSystem.MicrosoftXbox, MediaType.DVD, "/dev/sr0", "filename.bin", 2, "xbox /dev/sr0 \"filename.bin\" 2 /q /rr 1000")] + [InlineData(RedumpSystem.MicrosoftXbox360, MediaType.DVD, "/dev/sr0", "filename.bin", 2, "xbox /dev/sr0 \"filename.bin\" 2 /q /rr 1000")] + [InlineData(RedumpSystem.NintendoGameCube, MediaType.NintendoGameCubeGameDisc, "/dev/sr0", "filename.bin", 2, "dvd /dev/sr0 \"filename.bin\" 2 /q /raw")] + [InlineData(RedumpSystem.NintendoWii, MediaType.NintendoWiiOpticalDisc, "/dev/sr0", "filename.bin", 2, "dvd /dev/sr0 \"filename.bin\" 2 /q /raw")] + [InlineData(RedumpSystem.SegaDreamcast, MediaType.GDROM, "/dev/sr0", "filename.bin", 2, "gd /dev/sr0 \"filename.bin\" 2 /c2 1000 /q")] + [InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, "/dev/sr0", "filename.bin", 2, "dvd /dev/sr0 \"filename.bin\" 2 /c /q /rr 1000")] + [InlineData(RedumpSystem.BDVideo, MediaType.BluRay, "/dev/sr0", "filename.bin", 2, "bd /dev/sr0 \"filename.bin\" 2 /q /rr 1000")] + [InlineData(RedumpSystem.NintendoWiiU, MediaType.NintendoWiiUOpticalDisc, "/dev/sr0", "filename.bin", 2, "bd /dev/sr0 \"filename.bin\" 2 /q")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.FloppyDisk, "/dev/sr0", "filename.bin", 2, "fd /dev/sr0 \"filename.bin\"")] + public void DefaultValueTest(RedumpSystem? system, + MediaType? type, + string? drivePath, + string filename, + int? driveSpeed, + string? expected) + { + var context = new ExecutionContext(system, type, drivePath, filename, driveSpeed, AllOptions); + string? actual = context.GenerateParameters(); + Assert.Equal(expected, actual); + } + + #endregion + #region Audio [Theory] diff --git a/MPF.ExecutionContexts.Test/RedumperTests.cs b/MPF.ExecutionContexts.Test/RedumperTests.cs index d66c8b72..6edac407 100644 --- a/MPF.ExecutionContexts.Test/RedumperTests.cs +++ b/MPF.ExecutionContexts.Test/RedumperTests.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using MPF.ExecutionContexts.Redumper; using SabreTools.RedumpLib.Data; using Xunit; @@ -26,6 +27,44 @@ namespace MPF.ExecutionContexts.Test #endregion + #region Default Values + + private static Dictionary AllOptions = new() + { + [SettingConstants.EnableDebug] = "true", + [SettingConstants.EnableLeadinRetry] = "true", + [SettingConstants.EnableVerbose] = "true", + [SettingConstants.LeadinRetryCount] = "1000", + [SettingConstants.ReadMethod] = "BE", + [SettingConstants.RereadCount] = "1000", + [SettingConstants.SectorOrder] = "DATA_C2_SUB", + [SettingConstants.UseGenericDriveType] = "true", + }; + + [Theory] + [InlineData(null, null, null, "filename.bin", null, "")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, "/dev/sr0", "path/filename.bin", 2, "cd skeleton --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.SuperAudioCD, MediaType.CDROM, "/dev/sr0", "path/filename.bin", 2, "sacd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, "/dev/sr0", "path/filename.bin", 2, "dvd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.NintendoGameCube, MediaType.NintendoGameCubeGameDisc, "/dev/sr0", "path/filename.bin", 2, "dvd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.NintendoWii, MediaType.NintendoWiiOpticalDisc, "/dev/sr0", "path/filename.bin", 2, "dvd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, "/dev/sr0", "path/filename.bin", 2, "dvd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.BDVideo, MediaType.BluRay, "/dev/sr0", "path/filename.bin", 2, "bd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + [InlineData(RedumpSystem.NintendoWiiU, MediaType.NintendoWiiUOpticalDisc, "/dev/sr0", "path/filename.bin", 2, "bd --verbose --debug --drive=/dev/sr0 --speed=1000 --retries=1000 --image-path=\"path\" --image-name=\"filename\" --drive-type=GENERIC --drive-read-method=BE --drive-sector-order=DATA_C2_SUB")] + public void DefaultValueTest(RedumpSystem? system, + MediaType? type, + string? drivePath, + string filename, + int? driveSpeed, + string? expected) + { + var context = new ExecutionContext(system, type, drivePath, filename, driveSpeed, AllOptions); + string? actual = context.GenerateParameters(); + Assert.Equal(expected, actual); + } + + #endregion + #region CD [Theory] diff --git a/MPF.ExecutionContexts/Aaru/ExecutionContext.cs b/MPF.ExecutionContexts/Aaru/ExecutionContext.cs index 6ea02dad..fc8b5bcf 100644 --- a/MPF.ExecutionContexts/Aaru/ExecutionContext.cs +++ b/MPF.ExecutionContexts/Aaru/ExecutionContext.cs @@ -684,7 +684,7 @@ namespace MPF.ExecutionContexts.Aaru this[FlagStrings.StoreEncryptedLong] = true; // TODO: Make this configurable (_inputs[FlagStrings.StoreEncryptedLong] as BooleanInput)?.SetValue(true); this[FlagStrings.TitleKeysLong] = false; // TODO: Make this configurable - (_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(true); + (_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(false); this[FlagStrings.TrimLong] = true; // TODO: Make this configurable (_inputs[FlagStrings.TrimLong] as BooleanInput)?.SetValue(true); break; @@ -695,7 +695,7 @@ namespace MPF.ExecutionContexts.Aaru this[FlagStrings.StoreEncryptedLong] = true; // TODO: Make this configurable (_inputs[FlagStrings.StoreEncryptedLong] as BooleanInput)?.SetValue(true); this[FlagStrings.TitleKeysLong] = false; // TODO: Make this configurable - (_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(true); + (_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(false); this[FlagStrings.TrimLong] = true; // TODO: Make this configurable (_inputs[FlagStrings.TrimLong] as BooleanInput)?.SetValue(true); break; @@ -703,7 +703,7 @@ namespace MPF.ExecutionContexts.Aaru this[FlagStrings.StoreEncryptedLong] = true; // TODO: Make this configurable (_inputs[FlagStrings.StoreEncryptedLong] as BooleanInput)?.SetValue(true); this[FlagStrings.TitleKeysLong] = false; // TODO: Make this configurable - (_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(true); + (_inputs[FlagStrings.TitleKeysLong] as BooleanInput)?.SetValue(false); this[FlagStrings.TrimLong] = true; // TODO: Make this configurable (_inputs[FlagStrings.TrimLong] as BooleanInput)?.SetValue(true); break; @@ -715,6 +715,9 @@ namespace MPF.ExecutionContexts.Aaru case SabreTools.RedumpLib.Data.MediaType.NintendoWiiOpticalDisc: // Currently no defaults set break; + case SabreTools.RedumpLib.Data.MediaType.NintendoWiiUOpticalDisc: + // Currently no defaults set + break; // Non-optical case SabreTools.RedumpLib.Data.MediaType.FloppyDisk: diff --git a/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs b/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs index fd27c56d..f2a3e680 100644 --- a/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs +++ b/MPF.ExecutionContexts/DiscImageCreator/ExecutionContext.cs @@ -1064,6 +1064,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator case SabreTools.RedumpLib.Data.MediaType.NintendoWiiOpticalDisc: this[FlagStrings.Raw] = true; break; + case SabreTools.RedumpLib.Data.MediaType.NintendoWiiUOpticalDisc: + // Currently no defaults set + break; // Non-optical case SabreTools.RedumpLib.Data.MediaType.FloppyDisk: @@ -1740,6 +1743,9 @@ namespace MPF.ExecutionContexts.DiscImageCreator case SabreTools.RedumpLib.Data.MediaType.NintendoWiiOpticalDisc: BaseCommand = CommandStrings.DigitalVideoDisc; return; + case SabreTools.RedumpLib.Data.MediaType.NintendoWiiUOpticalDisc: + BaseCommand = CommandStrings.BluRay; + return; case SabreTools.RedumpLib.Data.MediaType.FloppyDisk: BaseCommand = CommandStrings.Floppy; return; diff --git a/MPF.ExecutionContexts/Redumper/ExecutionContext.cs b/MPF.ExecutionContexts/Redumper/ExecutionContext.cs index af1b1758..c6c76e96 100644 --- a/MPF.ExecutionContexts/Redumper/ExecutionContext.cs +++ b/MPF.ExecutionContexts/Redumper/ExecutionContext.cs @@ -251,15 +251,6 @@ namespace MPF.ExecutionContexts.Redumper int? driveSpeed, Dictionary options) { - // If we don't have a CD, DVD, HD-DVD, or BD, we can't dump using redumper - if (MediaType != SabreTools.RedumpLib.Data.MediaType.CDROM - && MediaType != SabreTools.RedumpLib.Data.MediaType.DVD - && MediaType != SabreTools.RedumpLib.Data.MediaType.HDDVD - && MediaType != SabreTools.RedumpLib.Data.MediaType.BluRay) - { - return; - } - BaseCommand = CommandStrings.NONE; switch (MediaType) { @@ -271,12 +262,15 @@ namespace MPF.ExecutionContexts.Redumper }; break; case SabreTools.RedumpLib.Data.MediaType.DVD: + case SabreTools.RedumpLib.Data.MediaType.NintendoGameCubeGameDisc: + case SabreTools.RedumpLib.Data.MediaType.NintendoWiiOpticalDisc: ModeValues = [CommandStrings.DVD]; break; case SabreTools.RedumpLib.Data.MediaType.HDDVD: // TODO: Keep in sync if another command string shows up ModeValues = [CommandStrings.DVD]; break; case SabreTools.RedumpLib.Data.MediaType.BluRay: + case SabreTools.RedumpLib.Data.MediaType.NintendoWiiUOpticalDisc: ModeValues = [CommandStrings.BluRay]; break; default: @@ -294,12 +288,12 @@ namespace MPF.ExecutionContexts.Redumper if (GetBooleanSetting(options, SettingConstants.EnableVerbose, SettingConstants.EnableVerboseDefault)) { this[FlagStrings.Verbose] = true; - (_inputs[FlagStrings.Verbose] as BooleanInput)?.SetValue(true); + (_inputs[FlagStrings.Verbose] as FlagInput)?.SetValue(true); } if (GetBooleanSetting(options, SettingConstants.EnableDebug, SettingConstants.EnableDebugDefault)) { this[FlagStrings.Debug] = true; - (_inputs[FlagStrings.Debug] as BooleanInput)?.SetValue(true); + (_inputs[FlagStrings.Debug] as FlagInput)?.SetValue(true); } string? readMethod = GetStringSetting(options, SettingConstants.ReadMethod, SettingConstants.ReadMethodDefault);