mirror of
https://github.com/SabreTools/SabreTools.RedumpLib.git
synced 2026-02-04 05:36:11 +00:00
Fill out more tests
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.RedumpLib.Test
|
||||
@@ -10,7 +11,7 @@ namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("success_complete.json", false)]
|
||||
[InlineData("success_invalid.json", false)] // Fully in valid returns a default object
|
||||
[InlineData("success_invalid.json", false)] // Fully invalid returns a default object
|
||||
[InlineData("success_partial.json", false)]
|
||||
[InlineData("fail_invalid.json", true)]
|
||||
public void CreateFromFileTest(string filename, bool expectNull)
|
||||
@@ -24,5 +25,167 @@ namespace SabreTools.RedumpLib.Test
|
||||
// Check for an expected result
|
||||
Assert.Equal(expectNull, si == null);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EnsureAllSections_Null_Filled()
|
||||
{
|
||||
SubmissionInfo? si = null;
|
||||
var actual = Builder.EnsureAllSections(si);
|
||||
|
||||
Assert.NotNull(actual);
|
||||
Assert.NotNull(actual.CommonDiscInfo);
|
||||
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
|
||||
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
|
||||
Assert.NotNull(actual.VersionAndEditions);
|
||||
Assert.NotNull(actual.EDC);
|
||||
Assert.NotNull(actual.ParentCloneRelationship);
|
||||
Assert.NotNull(actual.Extras);
|
||||
Assert.NotNull(actual.CopyProtection);
|
||||
Assert.NotNull(actual.DumpersAndStatus);
|
||||
Assert.NotNull(actual.TracksAndWriteOffsets);
|
||||
Assert.NotNull(actual.SizeAndChecksums);
|
||||
Assert.NotNull(actual.DumpingInfo);
|
||||
Assert.NotNull(actual.Artifacts);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EnsureAllSections_Empty_Filled()
|
||||
{
|
||||
SubmissionInfo? si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = null,
|
||||
VersionAndEditions = null,
|
||||
EDC = null,
|
||||
ParentCloneRelationship = null,
|
||||
Extras = null,
|
||||
CopyProtection = null,
|
||||
DumpersAndStatus = null,
|
||||
TracksAndWriteOffsets = null,
|
||||
SizeAndChecksums = null,
|
||||
DumpingInfo = null,
|
||||
Artifacts = null,
|
||||
};
|
||||
var actual = Builder.EnsureAllSections(si);
|
||||
|
||||
Assert.NotNull(actual);
|
||||
Assert.NotNull(actual.CommonDiscInfo);
|
||||
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
|
||||
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
|
||||
Assert.NotNull(actual.VersionAndEditions);
|
||||
Assert.NotNull(actual.EDC);
|
||||
Assert.NotNull(actual.ParentCloneRelationship);
|
||||
Assert.NotNull(actual.Extras);
|
||||
Assert.NotNull(actual.CopyProtection);
|
||||
Assert.NotNull(actual.DumpersAndStatus);
|
||||
Assert.NotNull(actual.TracksAndWriteOffsets);
|
||||
Assert.NotNull(actual.SizeAndChecksums);
|
||||
Assert.NotNull(actual.DumpingInfo);
|
||||
Assert.NotNull(actual.Artifacts);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EnsureAllSections_Filled_Filled()
|
||||
{
|
||||
SubmissionInfo? si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection
|
||||
{
|
||||
CommentsSpecialFields = [],
|
||||
ContentsSpecialFields = [],
|
||||
},
|
||||
VersionAndEditions = new VersionAndEditionsSection(),
|
||||
EDC = new EDCSection(),
|
||||
ParentCloneRelationship = new ParentCloneRelationshipSection(),
|
||||
Extras = new ExtrasSection(),
|
||||
CopyProtection = new CopyProtectionSection(),
|
||||
DumpersAndStatus = new DumpersAndStatusSection(),
|
||||
TracksAndWriteOffsets = new TracksAndWriteOffsetsSection(),
|
||||
SizeAndChecksums = new SizeAndChecksumsSection(),
|
||||
DumpingInfo = new DumpingInfoSection(),
|
||||
Artifacts = [],
|
||||
};
|
||||
var actual = Builder.EnsureAllSections(si);
|
||||
|
||||
Assert.NotNull(actual);
|
||||
Assert.NotNull(actual.CommonDiscInfo);
|
||||
Assert.NotNull(actual.CommonDiscInfo.CommentsSpecialFields);
|
||||
Assert.NotNull(actual.CommonDiscInfo.ContentsSpecialFields);
|
||||
Assert.NotNull(actual.VersionAndEditions);
|
||||
Assert.NotNull(actual.EDC);
|
||||
Assert.NotNull(actual.ParentCloneRelationship);
|
||||
Assert.NotNull(actual.Extras);
|
||||
Assert.NotNull(actual.CopyProtection);
|
||||
Assert.NotNull(actual.DumpersAndStatus);
|
||||
Assert.NotNull(actual.TracksAndWriteOffsets);
|
||||
Assert.NotNull(actual.SizeAndChecksums);
|
||||
Assert.NotNull(actual.DumpingInfo);
|
||||
Assert.NotNull(actual.Artifacts);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InjectSubmissionInformation_BothNull_Null()
|
||||
{
|
||||
SubmissionInfo? si = null;
|
||||
SubmissionInfo? seed = null;
|
||||
|
||||
var actual = Builder.InjectSubmissionInformation(si, seed);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InjectSubmissionInformation_ValidInputNullSeed_Valid()
|
||||
{
|
||||
SubmissionInfo? si = new SubmissionInfo();
|
||||
SubmissionInfo? seed = null;
|
||||
|
||||
var actual = Builder.InjectSubmissionInformation(si, seed);
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InjectSubmissionInformation_BothValid_Valid()
|
||||
{
|
||||
SubmissionInfo? si = new SubmissionInfo();
|
||||
SubmissionInfo? seed = new SubmissionInfo();
|
||||
|
||||
var actual = Builder.InjectSubmissionInformation(si, seed);
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReplaceHtmlWithSiteCodes_EmptyString_Empty()
|
||||
{
|
||||
string original = string.Empty;
|
||||
string actual = Builder.ReplaceHtmlWithSiteCodes(original);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReplaceHtmlWithSiteCodes_NoReplace_Identical()
|
||||
{
|
||||
string original = "<p>Nothing here will be replaced</p>";
|
||||
string actual = Builder.ReplaceHtmlWithSiteCodes(original);
|
||||
Assert.Equal(original, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReplaceHtmlWithSiteCodes_StandardCode_Replaced()
|
||||
{
|
||||
string original = "<b>ISBN</b>: 000-0-00-000000-0";
|
||||
string expected = "[T:ISBN] 000-0-00-000000-0";
|
||||
|
||||
string actual = Builder.ReplaceHtmlWithSiteCodes(original);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReplaceHtmlWithSiteCodes_OutdatedCode_Replaced()
|
||||
{
|
||||
string original = "XMID: AB12345C";
|
||||
string expected = "<b>XMID</b>: AB12345C";
|
||||
|
||||
string actual = Builder.ReplaceHtmlWithSiteCodes(original);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
2105
SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs
Normal file
2105
SabreTools.RedumpLib.Test/Data/ExtensionsTests.cs
Normal file
File diff suppressed because it is too large
Load Diff
8
SabreTools.RedumpLib.Test/DownloaderTests.cs
Normal file
8
SabreTools.RedumpLib.Test/DownloaderTests.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
public class DownloaderTests
|
||||
{
|
||||
// Tests here will require installing and using the Moq library
|
||||
// to mock the RedumpClient type.
|
||||
}
|
||||
}
|
||||
@@ -1,201 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
public class EnumExtensionsTests
|
||||
{
|
||||
/// <summary>
|
||||
/// MediaType values that support drive speeds
|
||||
/// </summary>
|
||||
private static readonly MediaType?[] _supportDriveSpeeds =
|
||||
[
|
||||
MediaType.CDROM,
|
||||
MediaType.DVD,
|
||||
MediaType.GDROM,
|
||||
MediaType.HDDVD,
|
||||
MediaType.BluRay,
|
||||
MediaType.NintendoGameCubeGameDisc,
|
||||
MediaType.NintendoWiiOpticalDisc,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// RedumpSystem values that are considered Audio
|
||||
/// </summary>
|
||||
private static readonly RedumpSystem?[] _audioSystems =
|
||||
[
|
||||
RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem,
|
||||
RedumpSystem.AudioCD,
|
||||
RedumpSystem.DVDAudio,
|
||||
RedumpSystem.HasbroiONEducationalGamingSystem,
|
||||
RedumpSystem.HasbroVideoNow,
|
||||
RedumpSystem.HasbroVideoNowColor,
|
||||
RedumpSystem.HasbroVideoNowJr,
|
||||
RedumpSystem.HasbroVideoNowXP,
|
||||
RedumpSystem.PlayStationGameSharkUpdates,
|
||||
RedumpSystem.PhilipsCDi,
|
||||
RedumpSystem.SuperAudioCD,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// RedumpSystem values that are considered markers
|
||||
/// </summary>
|
||||
private static readonly RedumpSystem?[] _markerSystems =
|
||||
[
|
||||
RedumpSystem.MarkerArcadeEnd,
|
||||
RedumpSystem.MarkerComputerEnd,
|
||||
RedumpSystem.MarkerDiscBasedConsoleEnd,
|
||||
RedumpSystem.MarkerOtherEnd,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// RedumpSystem values that are have reversed ringcodes
|
||||
/// </summary>
|
||||
private static readonly RedumpSystem?[] _reverseRingcodeSystems =
|
||||
[
|
||||
RedumpSystem.SonyPlayStation2,
|
||||
RedumpSystem.SonyPlayStation3,
|
||||
RedumpSystem.SonyPlayStation4,
|
||||
RedumpSystem.SonyPlayStation5,
|
||||
RedumpSystem.SonyPlayStationPortable,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// RedumpSystem values that are considered XGD
|
||||
/// </summary>
|
||||
private static readonly RedumpSystem?[] _xgdSystems =
|
||||
[
|
||||
RedumpSystem.MicrosoftXbox,
|
||||
RedumpSystem.MicrosoftXbox360,
|
||||
RedumpSystem.MicrosoftXboxOne,
|
||||
RedumpSystem.MicrosoftXboxSeriesXS,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Check that all systems with reversed ringcodes are marked properly
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
/// <param name="expected">The expected value to come from the check</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateReversedRingcodeSystemsTestData))]
|
||||
public void HasReversedRingcodesTest(RedumpSystem? redumpSystem, bool expected)
|
||||
{
|
||||
bool actual = redumpSystem.HasReversedRingcodes();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that all audio systems are marked properly
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
/// <param name="expected">The expected value to come from the check</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateAudioSystemsTestData))]
|
||||
public void IsAudioTest(RedumpSystem? redumpSystem, bool expected)
|
||||
{
|
||||
bool actual = redumpSystem.IsAudio();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that all marker systems are marked properly
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
/// <param name="expected">The expected value to come from the check</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateMarkerSystemsTestData))]
|
||||
public void IsMarkerTest(RedumpSystem? redumpSystem, bool expected)
|
||||
{
|
||||
bool actual = redumpSystem.IsMarker();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that all XGD systems are marked properly
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
/// <param name="expected">The expected value to come from the check</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateXGDSystemsTestData))]
|
||||
public void IsXGDTest(RedumpSystem? redumpSystem, bool expected)
|
||||
{
|
||||
bool actual = redumpSystem.IsXGD();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of RedumpSystem values that are considered Audio
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of RedumpSystem values</returns>
|
||||
public static List<object?[]> GenerateAudioSystemsTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, false } };
|
||||
foreach (RedumpSystem redumpSystem in Enum.GetValues(typeof(RedumpSystem)))
|
||||
{
|
||||
if (_audioSystems.Contains(redumpSystem))
|
||||
testData.Add([redumpSystem, true]);
|
||||
else
|
||||
testData.Add([redumpSystem, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of RedumpSystem values that are considered markers
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of RedumpSystem values</returns>
|
||||
public static List<object?[]> GenerateMarkerSystemsTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, false } };
|
||||
foreach (RedumpSystem redumpSystem in Enum.GetValues(typeof(RedumpSystem)))
|
||||
{
|
||||
if (_markerSystems.Contains(redumpSystem))
|
||||
testData.Add([redumpSystem, true]);
|
||||
else
|
||||
testData.Add([redumpSystem, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of RedumpSystem values that are considered markers
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of RedumpSystem values</returns>
|
||||
public static List<object?[]> GenerateReversedRingcodeSystemsTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, false } };
|
||||
foreach (RedumpSystem redumpSystem in Enum.GetValues(typeof(RedumpSystem)))
|
||||
{
|
||||
if (_reverseRingcodeSystems.Contains(redumpSystem))
|
||||
testData.Add([redumpSystem, true]);
|
||||
else
|
||||
testData.Add([redumpSystem, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of RedumpSystem values that are considered XGD
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of RedumpSystem values</returns>
|
||||
public static List<object?[]> GenerateXGDSystemsTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, false } };
|
||||
foreach (RedumpSystem redumpSystem in Enum.GetValues(typeof(RedumpSystem)))
|
||||
{
|
||||
if (_xgdSystems.Contains(redumpSystem))
|
||||
testData.Add([redumpSystem, true]);
|
||||
else
|
||||
testData.Add([redumpSystem, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,717 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
// TODO: Add tests for string-to-enum conversion
|
||||
public class ExtensionsTests
|
||||
{
|
||||
#region Cross-Enumeration
|
||||
|
||||
/// <summary>
|
||||
/// DiscType values that map to MediaType
|
||||
/// </summary>
|
||||
private static readonly DiscType?[] _mappableDiscTypes =
|
||||
[
|
||||
DiscType.BD25,
|
||||
DiscType.BD33,
|
||||
DiscType.BD50,
|
||||
DiscType.BD66,
|
||||
DiscType.BD100,
|
||||
DiscType.BD128,
|
||||
DiscType.CD,
|
||||
DiscType.DVD5,
|
||||
DiscType.DVD9,
|
||||
DiscType.GDROM,
|
||||
DiscType.HDDVDSL,
|
||||
DiscType.HDDVDDL,
|
||||
DiscType.NintendoGameCubeGameDisc,
|
||||
DiscType.NintendoWiiOpticalDiscSL,
|
||||
DiscType.NintendoWiiOpticalDiscDL,
|
||||
DiscType.NintendoWiiUOpticalDiscSL,
|
||||
DiscType.UMDSL,
|
||||
DiscType.UMDDL,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// MediaType values that map to DiscType
|
||||
/// </summary>
|
||||
private static readonly MediaType?[] _mappableMediaTypes =
|
||||
[
|
||||
MediaType.BluRay,
|
||||
MediaType.CDROM,
|
||||
MediaType.DVD,
|
||||
MediaType.GDROM,
|
||||
MediaType.HDDVD,
|
||||
MediaType.NintendoGameCubeGameDisc,
|
||||
MediaType.NintendoWiiOpticalDisc,
|
||||
MediaType.NintendoWiiUOpticalDisc,
|
||||
MediaType.UMD,
|
||||
];
|
||||
|
||||
/// <summary>
|
||||
/// Check that every supported system has some set of MediaTypes supported
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateRedumpSystemMappingTestData))]
|
||||
public void MediaTypesTest(RedumpSystem? redumpSystem)
|
||||
{
|
||||
var actual = redumpSystem.MediaTypes();
|
||||
Assert.NotEmpty(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that both mappable and unmappable media types output correctly
|
||||
/// </summary>
|
||||
/// <param name="mediaType">MediaType value to check</param>
|
||||
/// <param name="expectNull">True to expect a null mapping, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateMediaTypeMappingTestData))]
|
||||
public void ToDiscTypeTest(MediaType? mediaType, bool expectNull)
|
||||
{
|
||||
DiscType? actual = mediaType.ToDiscType();
|
||||
Assert.Equal(expectNull, actual == null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that DiscType values all map to something appropriate
|
||||
/// </summary>
|
||||
/// <param name="discType">DiscType value to check</param>
|
||||
/// <param name="expectNull">True to expect a null mapping, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDiscTypeMappingTestData))]
|
||||
public void ToMediaTypeTest(DiscType? discType, bool expectNull)
|
||||
{
|
||||
MediaType? actual = discType.ToMediaType();
|
||||
Assert.Equal(expectNull, actual == null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DiscType values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DiscType values</returns>
|
||||
public static List<object?[]> GenerateDiscTypeMappingTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (DiscType? discType in Enum.GetValues(typeof(DiscType)))
|
||||
{
|
||||
if (_mappableDiscTypes.Contains(discType))
|
||||
testData.Add([discType, false]);
|
||||
else
|
||||
testData.Add([discType, true]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of RedumpSystem values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of RedumpSystem values</returns>
|
||||
public static List<object?[]> GenerateRedumpSystemMappingTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null } };
|
||||
foreach (RedumpSystem? redumpSystem in Enum.GetValues(typeof(RedumpSystem)))
|
||||
{
|
||||
testData.Add([redumpSystem]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of mappable media types
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of MediaTypes</returns>
|
||||
public static List<object?[]> GenerateMediaTypeMappingTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
|
||||
foreach (MediaType? mediaType in Enum.GetValues(typeof(MediaType)))
|
||||
{
|
||||
if (_mappableMediaTypes.Contains(mediaType))
|
||||
testData.Add([mediaType, false]);
|
||||
else
|
||||
testData.Add([mediaType, true]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Category
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DiscCategory has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="discCategory">DiscCategory value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDiscCategoryTestData))]
|
||||
public void DiscCategoryLongNameTest(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
var actual = discCategory.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DiscCategory values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DiscCategory values</returns>
|
||||
public static List<object?[]> GenerateDiscCategoryTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (DiscCategory? discCategory in Enum.GetValues(typeof(DiscCategory)))
|
||||
{
|
||||
testData.Add([discCategory, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Type
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DiscType has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="discType">DiscType value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateDiscTypeTestData))]
|
||||
public void DiscTypeLongNameTest(DiscType? discType, bool expectNull)
|
||||
{
|
||||
var actual = discType.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DiscType values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DiscType values</returns>
|
||||
public static List<object?[]> GenerateDiscTypeTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (DiscType? discType in Enum.GetValues(typeof(DiscType)))
|
||||
{
|
||||
if (discType == DiscType.NONE)
|
||||
testData.Add([discType, true]);
|
||||
else
|
||||
testData.Add([discType, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language
|
||||
|
||||
/// <summary>
|
||||
/// Check that every Language has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="language">Language value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateLanguageTestData))]
|
||||
public void LanguageLongNameTest(Language? language, bool expectNull)
|
||||
{
|
||||
var actual = language.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every Language has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="language">Language value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateLanguageTestData))]
|
||||
public void LanguageShortNameTest(Language? language, bool expectNull)
|
||||
{
|
||||
var actual = language.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every Language that has an ISO 639-1 code is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void LanguageNoDuplicateTwoLetterCodeTest()
|
||||
{
|
||||
var fullLanguages = Enum.GetValues(typeof(Language)).Cast<Language?>().ToList();
|
||||
var filteredLanguages = new Dictionary<string, Language?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (Language? language in fullLanguages)
|
||||
{
|
||||
var code = language.TwoLetterCode();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredLanguages.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredLanguages[code] = language;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredLanguages.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every Language that has a standard/bibliographic ISO 639-2 code is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void LanguageNoDuplicateThreeLetterCodeTest()
|
||||
{
|
||||
var fullLanguages = Enum.GetValues(typeof(Language)).Cast<Language?>().ToList();
|
||||
var filteredLanguages = new Dictionary<string, Language?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (Language? language in fullLanguages)
|
||||
{
|
||||
var code = language.ThreeLetterCode();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredLanguages.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredLanguages[code] = language;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredLanguages.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every Language that has a terminology ISO 639-2 code is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void LanguageNoDuplicateThreeLetterCodeAltTest()
|
||||
{
|
||||
var fullLanguages = Enum.GetValues(typeof(Language)).Cast<Language?>().ToList();
|
||||
var filteredLanguages = new Dictionary<string, Language?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (Language? language in fullLanguages)
|
||||
{
|
||||
var code = language.ThreeLetterCodeAlt();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredLanguages.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredLanguages[code] = language;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredLanguages.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of Language values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of Language values</returns>
|
||||
public static List<object?[]> GenerateLanguageTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (Language? language in Enum.GetValues(typeof(Language)))
|
||||
{
|
||||
testData.Add([language, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language Selection
|
||||
|
||||
/// <summary>
|
||||
/// Check that every LanguageSelection has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="languageSelection">LanguageSelection value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateLanguageSelectionTestData))]
|
||||
public void LanguageSelectionLongNameTest(LanguageSelection? languageSelection, bool expectNull)
|
||||
{
|
||||
var actual = languageSelection.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of LanguageSelection values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of LanguageSelection values</returns>
|
||||
public static List<object?[]> GenerateLanguageSelectionTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (LanguageSelection? languageSelection in Enum.GetValues(typeof(LanguageSelection)))
|
||||
{
|
||||
testData.Add([languageSelection, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Media Type
|
||||
|
||||
/// <summary>
|
||||
/// Check that every MediaType has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="mediaType">MediaType value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateMediaTypeTestData))]
|
||||
public void MediaTypeLongNameTest(MediaType? mediaType, bool expectNull)
|
||||
{
|
||||
var actual = mediaType.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every MediaType has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="mediaType">MediaType value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateMediaTypeTestData))]
|
||||
public void MediaTypeShortNameTest(MediaType? mediaType, bool expectNull)
|
||||
{
|
||||
var actual = mediaType.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of MediaType values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of MediaType values</returns>
|
||||
public static List<object?[]> GenerateMediaTypeTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (MediaType? mediaType in Enum.GetValues(typeof(MediaType)))
|
||||
{
|
||||
testData.Add([mediaType, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Region
|
||||
|
||||
/// <summary>
|
||||
/// Check that every Region has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="region">Region value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateRegionTestData))]
|
||||
public void RegionLongNameTest(Region? region, bool expectNull)
|
||||
{
|
||||
var actual = region.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every Region has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="region">Region value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateRegionTestData))]
|
||||
public void RegionShortNameTest(Region? region, bool expectNull)
|
||||
{
|
||||
var actual = region.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensure that every Language that has an ISO 639-1 code is unique
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void RegionNoDuplicateShortNameTest()
|
||||
{
|
||||
var fullRegions = Enum.GetValues(typeof(Region)).Cast<Region?>().ToList();
|
||||
var filteredRegions = new Dictionary<string, Region?>();
|
||||
|
||||
int totalCount = 0;
|
||||
foreach (Region? region in fullRegions)
|
||||
{
|
||||
var code = region.ShortName();
|
||||
if (string.IsNullOrEmpty(code))
|
||||
continue;
|
||||
|
||||
// Throw if the code already exists
|
||||
if (filteredRegions.ContainsKey(code))
|
||||
throw new DuplicateNameException($"Code {code} already in dictionary");
|
||||
|
||||
filteredRegions[code] = region;
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
Assert.Equal(totalCount, filteredRegions.Count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of Region values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of Region values</returns>
|
||||
public static List<object?[]> GenerateRegionTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (Region? region in Enum.GetValues(typeof(Region)))
|
||||
{
|
||||
testData.Add([region, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Site Code
|
||||
|
||||
/// <summary>
|
||||
/// Check that every SiteCode has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="siteCode">SiteCode value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateSiteCodeTestData))]
|
||||
public void SiteCodeLongNameTest(SiteCode? siteCode, bool expectNull)
|
||||
{
|
||||
var actual = siteCode.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every SiteCode has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="siteCode">SiteCode value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateSiteCodeTestData))]
|
||||
public void SiteCodeShortNameTest(SiteCode? siteCode, bool expectNull)
|
||||
{
|
||||
var actual = siteCode.ShortName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of SiteCode values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of SiteCode values</returns>
|
||||
public static List<object?[]> GenerateSiteCodeTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (SiteCode? siteCode in Enum.GetValues(typeof(SiteCode)))
|
||||
{
|
||||
testData.Add([siteCode, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region System
|
||||
|
||||
/// <summary>
|
||||
/// Check that every RedumpSystem has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateRedumpSystemTestData))]
|
||||
public void RedumpSystemLongNameTest(RedumpSystem? redumpSystem, bool expectNull)
|
||||
{
|
||||
var actual = redumpSystem.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
// TODO: Re-enable the following test once non-Redump systems are accounted for
|
||||
|
||||
/// <summary>
|
||||
/// Check that every RedumpSystem has a short name provided
|
||||
/// </summary>
|
||||
/// <param name="redumpSystem">RedumpSystem value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
//[Theory]
|
||||
//[MemberData(nameof(GenerateRedumpSystemTestData))]
|
||||
//public void RedumpSystemShortNameTest(RedumpSystem? redumpSystem, bool expectNull)
|
||||
//{
|
||||
// string actual = redumpSystem.ShortName();
|
||||
|
||||
// if (expectNull)
|
||||
// Assert.Null(actual);
|
||||
// else
|
||||
// Assert.NotNull(actual);
|
||||
//}
|
||||
|
||||
// TODO: Test the other attributes as well
|
||||
// Most are bool checks so they're not as interesting to have unit tests around
|
||||
// SystemCategory always returns something as well, so is it worth testing?
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of RedumpSystem values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of RedumpSystem values</returns>
|
||||
public static List<object?[]> GenerateRedumpSystemTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (RedumpSystem? redumpSystem in Enum.GetValues(typeof(RedumpSystem)))
|
||||
{
|
||||
// We want to skip all markers for this
|
||||
if (redumpSystem.IsMarker())
|
||||
continue;
|
||||
|
||||
testData.Add([redumpSystem, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region System Category
|
||||
|
||||
/// <summary>
|
||||
/// Check that every SystemCategory has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="systemCategory">SystemCategory value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateSystemCategoryTestData))]
|
||||
public void SystemCategoryLongNameTest(SystemCategory? systemCategory, bool expectNull)
|
||||
{
|
||||
var actual = systemCategory.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of SystemCategory values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of SystemCategory values</returns>
|
||||
public static List<object?[]> GenerateSystemCategoryTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, true } };
|
||||
foreach (SystemCategory? systemCategory in Enum.GetValues(typeof(SystemCategory)))
|
||||
{
|
||||
if (systemCategory == SystemCategory.NONE)
|
||||
testData.Add([systemCategory, true]);
|
||||
else
|
||||
testData.Add([systemCategory, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Yes/No
|
||||
|
||||
/// <summary>
|
||||
/// Check that every YesNo has a long name provided
|
||||
/// </summary>
|
||||
/// <param name="yesNo">YesNo value to check</param>
|
||||
/// <param name="expectNull">True to expect a null value, false otherwise</param>
|
||||
[Theory]
|
||||
[MemberData(nameof(GenerateYesNoTestData))]
|
||||
public void YesNoLongNameTest(YesNo? yesNo, bool expectNull)
|
||||
{
|
||||
string actual = yesNo.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of YesNo values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of YesNo values</returns>
|
||||
public static List<object?[]> GenerateYesNoTestData()
|
||||
{
|
||||
var testData = new List<object?[]>() { new object?[] { null, false } };
|
||||
foreach (YesNo? yesNo in Enum.GetValues(typeof(YesNo)))
|
||||
{
|
||||
testData.Add([yesNo, false]);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
851
SabreTools.RedumpLib.Test/FormatterTests.cs
Normal file
851
SabreTools.RedumpLib.Test/FormatterTests.cs
Normal file
@@ -0,0 +1,851 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
public class FormatterTests
|
||||
{
|
||||
#region ProcessSpecialFields
|
||||
|
||||
// TODO: Write tests for ProcessSpecialFields
|
||||
|
||||
#endregion
|
||||
|
||||
#region CommonDiscInfoSection
|
||||
|
||||
// TODO: Write tests for FormatOutputData(CommonDiscInfoSection)
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_CDINullSACNull_Minimal()
|
||||
{
|
||||
string expected = "Common Disc Info:\n\tRegion: SPACE! (CHANGE THIS)\n\tLanguages: SILENCE! (CHANGE THIS)\n\n\tRingcode Information:\n\n\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
CommonDiscInfoSection? section = null;
|
||||
SizeAndChecksumsSection? sac = null;
|
||||
int? fullyMatchedID = null;
|
||||
List<int>? partiallyMatchedIDs = null;
|
||||
|
||||
Formatter.FormatOutputData(builder,
|
||||
section,
|
||||
sac,
|
||||
fullyMatchedID,
|
||||
partiallyMatchedIDs);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region VersionAndEditionsSection
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_VAENull_Minimal()
|
||||
{
|
||||
string expected = "Version and Editions:\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
VersionAndEditionsSection? section = null;
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_VAE_Formatted()
|
||||
{
|
||||
string expected = "Version and Editions:\n\tVersion: XXXXXX\n\tEdition/Release: XXXXXX\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
VersionAndEditionsSection? section = new VersionAndEditionsSection
|
||||
{
|
||||
Version = "XXXXXX",
|
||||
OtherEditions = "XXXXXX",
|
||||
};
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region EDCSection
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_EDCNull_Minimal()
|
||||
{
|
||||
string expected = "EDC:\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
EDCSection? section = null;
|
||||
RedumpSystem? system = RedumpSystem.SonyPlayStation;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_EDCInvalidSystem_Empty()
|
||||
{
|
||||
string expected = string.Empty;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
EDCSection? section = null;
|
||||
RedumpSystem? system = RedumpSystem.IBMPCcompatible;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_EDC_Formatted()
|
||||
{
|
||||
string expected = "EDC:\n\tEDC: Yes\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
EDCSection? section = new EDCSection { EDC = YesNo.Yes };
|
||||
RedumpSystem? system = RedumpSystem.SonyPlayStation;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ExtrasSection
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_ExtrasNull_Empty()
|
||||
{
|
||||
string expected = string.Empty;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
ExtrasSection? section = null;
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_ExtrasInvalid_Empty()
|
||||
{
|
||||
string expected = string.Empty;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
ExtrasSection? section = new ExtrasSection
|
||||
{
|
||||
PVD = null,
|
||||
PIC = null,
|
||||
BCA = null,
|
||||
SecuritySectorRanges = null,
|
||||
};
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_Extras_Formatted()
|
||||
{
|
||||
string expected = "Extras:\n\tPrimary Volume Descriptor (PVD): XXXXXX\n\tDisc Key: XXXXXX\n\tDisc ID: XXXXXX\n\tPermanent Information & Control (PIC): XXXXXX\n\tHeader: XXXXXX\n\tBCA: XXXXXX\n\tSecurity Sector Ranges: XXXXXX\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
ExtrasSection? section = new ExtrasSection
|
||||
{
|
||||
PVD = "XXXXXX",
|
||||
DiscKey = "XXXXXX",
|
||||
DiscID = "XXXXXX",
|
||||
PIC = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
BCA = "XXXXXX",
|
||||
SecuritySectorRanges = "XXXXXX",
|
||||
};
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region CopyProtectionSection
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_COPNull_Empty()
|
||||
{
|
||||
string expected = string.Empty;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
CopyProtectionSection? section = null;
|
||||
RedumpSystem? system = RedumpSystem.IBMPCcompatible;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_COPInvalid_Empty()
|
||||
{
|
||||
string expected = string.Empty;
|
||||
|
||||
var builder = new StringBuilder();
|
||||
CopyProtectionSection? section = new CopyProtectionSection
|
||||
{
|
||||
Protection = null,
|
||||
AntiModchip = null,
|
||||
LibCrypt = null,
|
||||
LibCryptData = null,
|
||||
SecuROMData = null,
|
||||
};
|
||||
RedumpSystem? system = RedumpSystem.IBMPCcompatible;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_COP_Formatted()
|
||||
{
|
||||
string expected = "Copy Protection:\n\tCopy Protection: XXXXXX\n\tSubIntention Data (SecuROM/LibCrypt): XXXXXX\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
CopyProtectionSection? section = new CopyProtectionSection
|
||||
{
|
||||
AntiModchip = YesNo.Yes,
|
||||
LibCrypt = YesNo.Yes,
|
||||
LibCryptData = "XXXXXX",
|
||||
Protection = "XXXXXX",
|
||||
SecuROMData = "XXXXXX",
|
||||
};
|
||||
RedumpSystem? system = RedumpSystem.IBMPCcompatible;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_COPPSX_Formatted()
|
||||
{
|
||||
string expected = "Copy Protection:\n\tAnti-modchip: Yes\n\tLibCrypt: Yes\n\tSubIntention Data (SecuROM/LibCrypt): XXXXXX\n\tCopy Protection: XXXXXX\n\tSubIntention Data (SecuROM/LibCrypt): XXXXXX\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
CopyProtectionSection? section = new CopyProtectionSection
|
||||
{
|
||||
AntiModchip = YesNo.Yes,
|
||||
LibCrypt = YesNo.Yes,
|
||||
LibCryptData = "XXXXXX",
|
||||
Protection = "XXXXXX",
|
||||
SecuROMData = "XXXXXX",
|
||||
};
|
||||
RedumpSystem? system = RedumpSystem.SonyPlayStation;
|
||||
|
||||
Formatter.FormatOutputData(builder, section, system);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region TracksAndWriteOffsetsSection
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_TAWOInvalid_Minimal()
|
||||
{
|
||||
string expected = "Tracks and Write Offsets:\n\tDAT:\n\n\n\n\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
TracksAndWriteOffsetsSection? section = new TracksAndWriteOffsetsSection();
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_TAWO_Formatted()
|
||||
{
|
||||
string expected = "Tracks and Write Offsets:\n\tDAT:\n\nXXXXXX\n\n\n\tCuesheet: XXXXXX\n\tWrite Offset: XXXXXX\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
TracksAndWriteOffsetsSection? section = new TracksAndWriteOffsetsSection
|
||||
{
|
||||
ClrMameProData = "XXXXXX",
|
||||
Cuesheet = "XXXXXX",
|
||||
OtherWriteOffsets = "XXXXXX",
|
||||
};
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SizeAndChecksumsSection
|
||||
|
||||
// TODO: Write tests for FormatOutputData(SizeAndChecksumsSection)
|
||||
|
||||
#endregion
|
||||
|
||||
#region DumpingInfoSection
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_DINull_Minimal()
|
||||
{
|
||||
string expected = "Dumping Info:\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
DumpingInfoSection? section = null;
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatOutputData_DI_Formatted()
|
||||
{
|
||||
string expected = "Dumping Info:\n\tFrontend Version: XXXXXX\n\tDumping Program: XXXXXX\n\tDate: XXXXXX\n\tParameters: XXXXXX\n\tManufacturer: XXXXXX\n\tModel: XXXXXX\n\tFirmware: XXXXXX\n\tReported Disc Type: XXXXXX\n\tC2 Error Count: XXXXXX\n";
|
||||
|
||||
var builder = new StringBuilder();
|
||||
DumpingInfoSection? section = new DumpingInfoSection
|
||||
{
|
||||
FrontendVersion = "XXXXXX",
|
||||
DumpingProgram = "XXXXXX",
|
||||
DumpingDate = "XXXXXX",
|
||||
DumpingParameters = "XXXXXX",
|
||||
Manufacturer = "XXXXXX",
|
||||
Model = "XXXXXX",
|
||||
Firmware = "XXXXXX",
|
||||
ReportedDiscType = "XXXXXX",
|
||||
C2ErrorsCount = "XXXXXX",
|
||||
};
|
||||
|
||||
Formatter.FormatOutputData(builder, section);
|
||||
|
||||
string actual = builder.ToString();
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region FormatSiteTag
|
||||
|
||||
[Fact]
|
||||
public void FormatSiteTag_NoValue_Empty()
|
||||
{
|
||||
SiteCode code = SiteCode.AlternativeTitle;
|
||||
string value = string.Empty;
|
||||
|
||||
string actual = Formatter.FormatSiteTag(code, value);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatSiteTag_Standard_Formatted()
|
||||
{
|
||||
string expected = "[T:ALT] XXXXXX";
|
||||
SiteCode code = SiteCode.AlternativeTitle;
|
||||
string value = "XXXXXX";
|
||||
|
||||
string actual = Formatter.FormatSiteTag(code, value);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatSiteTag_BooleanTrue_Formatted()
|
||||
{
|
||||
string expected = "[T:VCD]";
|
||||
SiteCode code = SiteCode.VCD;
|
||||
string value = "True";
|
||||
|
||||
string actual = Formatter.FormatSiteTag(code, value);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatSiteTag_BooleanFalse_Empty()
|
||||
{
|
||||
SiteCode code = SiteCode.VCD;
|
||||
string value = "XXXXXX";
|
||||
|
||||
string actual = Formatter.FormatSiteTag(code, value);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FormatSiteTag_Multiline_Formatted()
|
||||
{
|
||||
string expected = "[T:X]\nXXXXXX\n";
|
||||
SiteCode code = SiteCode.Extras;
|
||||
string value = "XXXXXX";
|
||||
|
||||
string actual = Formatter.FormatSiteTag(code, value);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetFixedMediaType
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_NullType_Null()
|
||||
{
|
||||
MediaType? mediaType = null;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_UnformattedType_Formatted()
|
||||
{
|
||||
string? expected = "CD-ROM";
|
||||
|
||||
MediaType? mediaType = MediaType.CDROM;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_DVD9_Formatted()
|
||||
{
|
||||
string? expected = "DVD-ROM-9";
|
||||
|
||||
MediaType? mediaType = MediaType.DVD;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = 12345;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_DVD5_Formatted()
|
||||
{
|
||||
string? expected = "DVD-ROM-5";
|
||||
|
||||
MediaType? mediaType = MediaType.DVD;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD128_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-128";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = 12345;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD100_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-100";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = 12345;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD66PIC_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-66";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = Models.PIC.Constants.DiscTypeIdentifierROMUltra;
|
||||
long? size = null;
|
||||
long? layerbreak = 12345;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD66Size_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-66";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = null;
|
||||
long? size = 53_687_063_713;
|
||||
long? layerbreak = 12345;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD50_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-50";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = 12345;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD33PIC_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-33";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = Models.PIC.Constants.DiscTypeIdentifierROMUltra;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD33Size_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-33";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = null;
|
||||
long? size = 26_843_531_857;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_BD25_Formatted()
|
||||
{
|
||||
string? expected = "BD-ROM-25";
|
||||
|
||||
MediaType? mediaType = MediaType.BluRay;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_HDDVDDL_Formatted()
|
||||
{
|
||||
string? expected = "HD-DVD-ROM-DL";
|
||||
|
||||
MediaType? mediaType = MediaType.HDDVD;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = 12345;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_HDDVDSL_Formatted()
|
||||
{
|
||||
string? expected = "HD-DVD-ROM-SL";
|
||||
|
||||
MediaType? mediaType = MediaType.HDDVD;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_UMDDL_Formatted()
|
||||
{
|
||||
string? expected = "UMD-DL";
|
||||
|
||||
MediaType? mediaType = MediaType.UMD;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = 12345;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetFixedMediaType_UMDSL_Formatted()
|
||||
{
|
||||
string? expected = "UMD-SL";
|
||||
|
||||
MediaType? mediaType = MediaType.UMD;
|
||||
string? picIdentifier = null;
|
||||
long? size = null;
|
||||
long? layerbreak = null;
|
||||
long? layerbreak2 = null;
|
||||
long? layerbreak3 = null;
|
||||
|
||||
string? actual = Formatter.GetFixedMediaType(mediaType,
|
||||
picIdentifier,
|
||||
size,
|
||||
layerbreak,
|
||||
layerbreak2,
|
||||
layerbreak3);
|
||||
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region OrderCommentTags
|
||||
|
||||
[Fact]
|
||||
public void OrderCommentTags_Empty_Empty()
|
||||
{
|
||||
Dictionary<SiteCode, string> tags = [];
|
||||
var actual = Formatter.OrderCommentTags(tags);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OrderCommentTags_NoMatch_Empty()
|
||||
{
|
||||
var tags = new Dictionary<SiteCode, string>
|
||||
{
|
||||
{ SiteCode.Applications, "XXXXXX" },
|
||||
};
|
||||
var actual = Formatter.OrderCommentTags(tags);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OrderCommentTags_All_Ordered()
|
||||
{
|
||||
Dictionary<SiteCode, string> tags = [];
|
||||
foreach (SiteCode code in Enum.GetValues<SiteCode>())
|
||||
{
|
||||
tags[code] = "XXXXXX";
|
||||
}
|
||||
|
||||
var actual = Formatter.OrderCommentTags(tags);
|
||||
|
||||
Assert.NotEmpty(actual);
|
||||
var actualCodes = actual.Select(kvp => kvp.Key);
|
||||
Assert.True(Formatter.OrderedCommentCodes.SequenceEqual(actualCodes));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region OrderContentTags
|
||||
|
||||
[Fact]
|
||||
public void OrderContentTags_Empty_Empty()
|
||||
{
|
||||
Dictionary<SiteCode, string> tags = [];
|
||||
var actual = Formatter.OrderContentTags(tags);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OrderContentTags_NoMatch_Empty()
|
||||
{
|
||||
var tags = new Dictionary<SiteCode, string>
|
||||
{
|
||||
{ SiteCode.AlternativeTitle, "XXXXXX" },
|
||||
};
|
||||
var actual = Formatter.OrderContentTags(tags);
|
||||
Assert.Empty(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OrderContentTags_All_Ordered()
|
||||
{
|
||||
Dictionary<SiteCode, string> tags = [];
|
||||
foreach (SiteCode code in Enum.GetValues<SiteCode>())
|
||||
{
|
||||
tags[code] = "XXXXXX";
|
||||
}
|
||||
|
||||
var actual = Formatter.OrderContentTags(tags);
|
||||
|
||||
Assert.NotEmpty(actual);
|
||||
var actualCodes = actual.Select(kvp => kvp.Key);
|
||||
Assert.True(Formatter.OrderedContentCodes.SequenceEqual(actualCodes));
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -161,6 +161,7 @@ namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
DumpingProgram = "DiscImageCreator 20500101",
|
||||
DumpingDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||
DumpingParameters = "cd dvd bd sacd fd hdd",
|
||||
Manufacturer = "ATAPI",
|
||||
Model = "Optical Drive",
|
||||
Firmware = "1.23",
|
||||
|
||||
304
SabreTools.RedumpLib.Test/ValidatorTests.cs
Normal file
304
SabreTools.RedumpLib.Test/ValidatorTests.cs
Normal file
@@ -0,0 +1,304 @@
|
||||
using SabreTools.RedumpLib.Data;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.RedumpLib.Test
|
||||
{
|
||||
public class ValidatorTests
|
||||
{
|
||||
// Most tests here will require installing and using the Moq library
|
||||
// to mock the RedumpClient type.
|
||||
|
||||
[Fact]
|
||||
public void NormalizeDiscType_InvalidMedia_Untouched()
|
||||
{
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = null }
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Null(si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NormalizeDiscType_InvalidSizeChecksums_Untouched()
|
||||
{
|
||||
DiscType expected = DiscType.CD;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = DiscType.CD },
|
||||
SizeAndChecksums = null,
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NormalizeDiscType_UnformattedType_Fixed()
|
||||
{
|
||||
DiscType expected = DiscType.CD;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = DiscType.CD },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection(),
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.DVD5)]
|
||||
[InlineData(DiscType.DVD9)]
|
||||
public void NormalizeDiscType_DVD9_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.DVD9;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection { Layerbreak = 12345 },
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.DVD5)]
|
||||
[InlineData(DiscType.DVD9)]
|
||||
public void NormalizeDiscType_DVD5_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.DVD5;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection(),
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD128_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD128;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection { Layerbreak3 = 12345 },
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD100_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD100;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection { Layerbreak2 = 12345 },
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD66PIC_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD66;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection
|
||||
{
|
||||
Layerbreak = 12345,
|
||||
PICIdentifier = Models.PIC.Constants.DiscTypeIdentifierROMUltra,
|
||||
},
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD66Size_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD66;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection
|
||||
{
|
||||
Layerbreak = 12345,
|
||||
Size = 50_050_629_633,
|
||||
},
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD50_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD50;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection { Layerbreak = 12345 },
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD33PIC_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD33;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection
|
||||
{
|
||||
PICIdentifier = Models.PIC.Constants.DiscTypeIdentifierROMUltra,
|
||||
},
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD33Size_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD33;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection
|
||||
{
|
||||
Size = 25_025_314_817,
|
||||
},
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.BD25)]
|
||||
[InlineData(DiscType.BD33)]
|
||||
[InlineData(DiscType.BD50)]
|
||||
[InlineData(DiscType.BD66)]
|
||||
[InlineData(DiscType.BD100)]
|
||||
[InlineData(DiscType.BD128)]
|
||||
public void NormalizeDiscType_BD25_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.BD25;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection(),
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.UMDSL)]
|
||||
[InlineData(DiscType.UMDDL)]
|
||||
public void NormalizeDiscType_UMDDL_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.UMDDL;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection { Layerbreak = 12345 },
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(DiscType.UMDSL)]
|
||||
[InlineData(DiscType.UMDDL)]
|
||||
public void NormalizeDiscType_UMDSL_Fixed(DiscType type)
|
||||
{
|
||||
DiscType expected = DiscType.UMDSL;
|
||||
SubmissionInfo si = new SubmissionInfo
|
||||
{
|
||||
CommonDiscInfo = new CommonDiscInfoSection { Media = type },
|
||||
SizeAndChecksums = new SizeAndChecksumsSection(),
|
||||
};
|
||||
|
||||
Validator.NormalizeDiscType(si);
|
||||
|
||||
Assert.Equal(expected, si.CommonDiscInfo.Media);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -653,6 +653,7 @@ namespace SabreTools.RedumpLib
|
||||
info.TracksAndWriteOffsets ??= new TracksAndWriteOffsetsSection();
|
||||
info.SizeAndChecksums ??= new SizeAndChecksumsSection();
|
||||
info.DumpingInfo ??= new DumpingInfoSection();
|
||||
info.Artifacts ??= [];
|
||||
|
||||
// Ensure special dictionaries
|
||||
info.CommonDiscInfo.CommentsSpecialFields ??= [];
|
||||
@@ -666,11 +667,11 @@ namespace SabreTools.RedumpLib
|
||||
/// </summary>
|
||||
/// <param name="info">Existing submission information</param>
|
||||
/// <param name="seed">User-supplied submission information</param>
|
||||
public static void InjectSubmissionInformation(SubmissionInfo? info, SubmissionInfo? seed)
|
||||
public static SubmissionInfo? InjectSubmissionInformation(SubmissionInfo? info, SubmissionInfo? seed)
|
||||
{
|
||||
// If we have any invalid info
|
||||
if (seed == null)
|
||||
return;
|
||||
return info;
|
||||
|
||||
// Ensure that required sections exist
|
||||
info = EnsureAllSections(info);
|
||||
@@ -728,6 +729,8 @@ namespace SabreTools.RedumpLib
|
||||
// Info that only overwrites if supplied
|
||||
if (!string.IsNullOrEmpty(seed.CopyProtection.Protection)) info.CopyProtection.Protection = seed.CopyProtection.Protection;
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -739,9 +742,10 @@ namespace SabreTools.RedumpLib
|
||||
/// </summary>
|
||||
/// <param name="text">Text block to process</param>
|
||||
/// <returns>Processed text block, if possible</returns>
|
||||
private static string ReplaceHtmlWithSiteCodes(this string text)
|
||||
internal static string ReplaceHtmlWithSiteCodes(this string text)
|
||||
{
|
||||
if (string.IsNullOrEmpty(text))
|
||||
// Empty strings are ignored
|
||||
if (text.Length == 0)
|
||||
return text;
|
||||
|
||||
foreach (SiteCode? siteCode in Enum.GetValues(typeof(SiteCode)))
|
||||
|
||||
@@ -1174,9 +1174,38 @@ namespace SabreTools.RedumpLib.Data
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if a site code should live in the comments section
|
||||
/// Check if a site code is boolean or not
|
||||
/// </summary>
|
||||
/// <param name="siteCode">SiteCode to check</param>
|
||||
/// <returns>True if the code field is a flag with no value, false otherwise</returns>
|
||||
public static bool IsBoolean(this SiteCode siteCode)
|
||||
=> ((SiteCode?)siteCode).IsBoolean();
|
||||
|
||||
/// <summary>
|
||||
/// Check if a site code is boolean or not
|
||||
/// </summary>
|
||||
/// <param name="siteCode">SiteCode to check</param>
|
||||
/// <returns>True if the code field is a flag with no value, false otherwise</returns>
|
||||
public static bool IsBoolean(this SiteCode? siteCode)
|
||||
{
|
||||
return siteCode switch
|
||||
{
|
||||
SiteCode.PostgapType => true,
|
||||
SiteCode.VCD => true,
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if a site code should live in the comments section
|
||||
/// </summary>
|
||||
/// <returns>True if the code field is in comments by default, false otherwise</returns>
|
||||
public static bool IsCommentCode(this SiteCode siteCode)
|
||||
=> ((SiteCode?)siteCode).IsCommentCode();
|
||||
|
||||
/// <summary>
|
||||
/// Check if a site code should live in the comments section
|
||||
/// </summary>
|
||||
/// <returns>True if the code field is in comments by default, false otherwise</returns>
|
||||
public static bool IsCommentCode(this SiteCode? siteCode)
|
||||
{
|
||||
@@ -1246,7 +1275,13 @@ namespace SabreTools.RedumpLib.Data
|
||||
/// <summary>
|
||||
/// Check if a site code should live in the contents section
|
||||
/// </summary>
|
||||
/// <param name="siteCode">SiteCode to check</param>
|
||||
/// <returns>True if the code field is in contents by default, false otherwise</returns>
|
||||
public static bool IsContentCode(this SiteCode siteCode)
|
||||
=> ((SiteCode?)siteCode).IsContentCode();
|
||||
|
||||
/// <summary>
|
||||
/// Check if a site code should live in the contents section
|
||||
/// </summary>
|
||||
/// <returns>True if the code field is in contents by default, false otherwise</returns>
|
||||
public static bool IsContentCode(this SiteCode? siteCode)
|
||||
{
|
||||
@@ -1270,7 +1305,13 @@ namespace SabreTools.RedumpLib.Data
|
||||
/// <summary>
|
||||
/// Check if a site code is multi-line or not
|
||||
/// </summary>
|
||||
/// <param name="siteCode">SiteCode to check</param>
|
||||
/// <returns>True if the code field is multiline by default, false otherwise</returns>
|
||||
public static bool IsMultiLine(this SiteCode siteCode)
|
||||
=> ((SiteCode?)siteCode).IsMultiLine();
|
||||
|
||||
/// <summary>
|
||||
/// Check if a site code is multi-line or not
|
||||
/// </summary>
|
||||
/// <returns>True if the code field is multiline by default, false otherwise</returns>
|
||||
public static bool IsMultiLine(this SiteCode? siteCode)
|
||||
{
|
||||
@@ -1295,16 +1336,26 @@ namespace SabreTools.RedumpLib.Data
|
||||
/// <summary>
|
||||
/// Get the HTML version for each known site code
|
||||
/// </summary>
|
||||
/// <param name="siteCode"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this SiteCode? siteCode) => AttributeHelper<SiteCode?>.GetAttribute(siteCode)?.LongName;
|
||||
public static string? LongName(this SiteCode siteCode)
|
||||
=> AttributeHelper<SiteCode>.GetAttribute(siteCode)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the HTML version for each known site code
|
||||
/// </summary>
|
||||
public static string? LongName(this SiteCode? siteCode)
|
||||
=> AttributeHelper<SiteCode?>.GetAttribute(siteCode)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the short tag for each known site code
|
||||
/// </summary>
|
||||
/// <param name="siteCode"></param>
|
||||
/// <returns></returns>
|
||||
public static string? ShortName(this SiteCode? siteCode) => AttributeHelper<SiteCode?>.GetAttribute(siteCode)?.ShortName;
|
||||
public static string? ShortName(this SiteCode siteCode)
|
||||
=> AttributeHelper<SiteCode>.GetAttribute(siteCode)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the short tag for each known site code
|
||||
/// </summary>
|
||||
public static string? ShortName(this SiteCode? siteCode)
|
||||
=> AttributeHelper<SiteCode?>.GetAttribute(siteCode)?.ShortName;
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -1319,20 +1370,46 @@ namespace SabreTools.RedumpLib.Data
|
||||
{
|
||||
return system switch
|
||||
{
|
||||
RedumpSystem.AmericanLaserGames3DO
|
||||
or RedumpSystem.AppleMacintosh
|
||||
or RedumpSystem.Atari3DO
|
||||
or RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem
|
||||
or RedumpSystem.NewJatreCDi
|
||||
// BIOS Sets
|
||||
RedumpSystem.MicrosoftXboxBIOS
|
||||
or RedumpSystem.NintendoGameCubeBIOS
|
||||
or RedumpSystem.SonyPlayStationBIOS
|
||||
or RedumpSystem.SonyPlayStation2BIOS => false,
|
||||
|
||||
// Disc-Based Consoles
|
||||
RedumpSystem.AtariJaguarCDInteractiveMultimediaSystem
|
||||
or RedumpSystem.BandaiPlaydiaQuickInteractiveSystem
|
||||
or RedumpSystem.BandaiPippin
|
||||
or RedumpSystem.HasbroVideoNow
|
||||
or RedumpSystem.HasbroVideoNowColor
|
||||
or RedumpSystem.HasbroVideoNowJr
|
||||
or RedumpSystem.HasbroVideoNowXP
|
||||
or RedumpSystem.NintendoGameCube
|
||||
or RedumpSystem.NintendoWii
|
||||
or RedumpSystem.NintendoWiiU
|
||||
or RedumpSystem.Panasonic3DOInteractiveMultiplayer
|
||||
or RedumpSystem.PhilipsCDi
|
||||
or RedumpSystem.PhilipsCDiDigitalVideo
|
||||
or RedumpSystem.Panasonic3DOInteractiveMultiplayer
|
||||
or RedumpSystem.PanasonicM2
|
||||
or RedumpSystem.PioneerLaserActive
|
||||
or RedumpSystem.SuperAudioCD => false,
|
||||
or RedumpSystem.MarkerDiscBasedConsoleEnd => false,
|
||||
|
||||
// Computers
|
||||
RedumpSystem.AppleMacintosh
|
||||
or RedumpSystem.MarkerComputerEnd => false,
|
||||
|
||||
// Arcade
|
||||
RedumpSystem.AmericanLaserGames3DO
|
||||
or RedumpSystem.Atari3DO
|
||||
or RedumpSystem.NewJatreCDi
|
||||
or RedumpSystem.PanasonicM2
|
||||
or RedumpSystem.MarkerArcadeEnd => false,
|
||||
|
||||
// Other
|
||||
RedumpSystem.PlayStationGameSharkUpdates
|
||||
or RedumpSystem.SuperAudioCD
|
||||
or RedumpSystem.MarkerOtherEnd => false,
|
||||
|
||||
null => false,
|
||||
_ => true,
|
||||
};
|
||||
}
|
||||
@@ -1383,6 +1460,14 @@ namespace SabreTools.RedumpLib.Data
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determine if a system is a marker value
|
||||
/// </summary>
|
||||
/// <param name="system">RedumpSystem value to check</param>
|
||||
/// <returns>True if the system is a marker value, false otherwise</returns>
|
||||
public static bool IsMarker(this RedumpSystem system)
|
||||
=> ((RedumpSystem?)system).IsMarker();
|
||||
|
||||
/// <summary>
|
||||
/// Determine if a system is a marker value
|
||||
/// </summary>
|
||||
@@ -1422,8 +1507,8 @@ namespace SabreTools.RedumpLib.Data
|
||||
/// </summary>
|
||||
public static List<string> ListSystems()
|
||||
{
|
||||
var systems = (RedumpSystem?[])Enum.GetValues(typeof(RedumpSystem));
|
||||
var knownSystems = Array.FindAll(systems, s => s != null && !s.IsMarker() && s.GetCategory() != SystemCategory.NONE);
|
||||
var systems = (RedumpSystem[])Enum.GetValues(typeof(RedumpSystem));
|
||||
var knownSystems = Array.FindAll(systems, s => !s.IsMarker() && s.GetCategory() != SystemCategory.NONE);
|
||||
Array.Sort(knownSystems, (x, y) => (x.LongName() ?? string.Empty).CompareTo(y.LongName() ?? string.Empty));
|
||||
return [.. Array.ConvertAll(knownSystems, val => $"{val.ShortName()} - {val.LongName()}")];
|
||||
}
|
||||
@@ -1460,6 +1545,12 @@ namespace SabreTools.RedumpLib.Data
|
||||
public static string? ShortName(this RedumpSystem? system)
|
||||
=> AttributeHelper<RedumpSystem?>.GetAttribute(system)?.ShortName;
|
||||
|
||||
/// <summary>
|
||||
/// Determine the category of a system
|
||||
/// </summary>
|
||||
public static SystemCategory GetCategory(this RedumpSystem system)
|
||||
=> ((RedumpSystem?)system).GetCategory();
|
||||
|
||||
/// <summary>
|
||||
/// Determine the category of a system
|
||||
/// </summary>
|
||||
@@ -2470,7 +2561,8 @@ namespace SabreTools.RedumpLib.Data
|
||||
/// </summary>
|
||||
/// <param name="category"></param>
|
||||
/// <returns></returns>
|
||||
public static string? LongName(this SystemCategory? category) => AttributeHelper<SystemCategory?>.GetAttribute(category)?.LongName;
|
||||
public static string? LongName(this SystemCategory? category)
|
||||
=> AttributeHelper<SystemCategory?>.GetAttribute(category)?.LongName;
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -2481,7 +2573,8 @@ namespace SabreTools.RedumpLib.Data
|
||||
/// </summary>
|
||||
/// <param name="yesno"></param>
|
||||
/// <returns></returns>
|
||||
public static string LongName(this YesNo? yesno) => AttributeHelper<YesNo?>.GetAttribute(yesno)?.LongName ?? "Yes/No";
|
||||
public static string LongName(this YesNo? yesno)
|
||||
=> AttributeHelper<YesNo?>.GetAttribute(yesno)?.LongName ?? "Yes/No";
|
||||
|
||||
/// <summary>
|
||||
/// Get the YesNo enum value for a given nullable boolean
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,10 @@
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<InternalsVisibleTo Include="SabreTools.RedumpLib.Test" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="../README.md" Pack="true" PackagePath="" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -21,6 +21,14 @@ namespace SabreTools.RedumpLib
|
||||
|
||||
switch (info.CommonDiscInfo.Media)
|
||||
{
|
||||
case DiscType.DVD5:
|
||||
case DiscType.DVD9:
|
||||
if (info.SizeAndChecksums.Layerbreak != default)
|
||||
info.CommonDiscInfo.Media = DiscType.DVD9;
|
||||
else
|
||||
info.CommonDiscInfo.Media = DiscType.DVD5;
|
||||
break;
|
||||
|
||||
case DiscType.BD25:
|
||||
case DiscType.BD33:
|
||||
case DiscType.BD50:
|
||||
@@ -31,13 +39,13 @@ namespace SabreTools.RedumpLib
|
||||
info.CommonDiscInfo.Media = DiscType.BD128;
|
||||
else if (info.SizeAndChecksums.Layerbreak2 != default)
|
||||
info.CommonDiscInfo.Media = DiscType.BD100;
|
||||
else if (info.SizeAndChecksums.Layerbreak != default && info.SizeAndChecksums.PICIdentifier == SabreTools.Models.PIC.Constants.DiscTypeIdentifierROMUltra)
|
||||
else if (info.SizeAndChecksums.Layerbreak != default && info.SizeAndChecksums.PICIdentifier == Models.PIC.Constants.DiscTypeIdentifierROMUltra)
|
||||
info.CommonDiscInfo.Media = DiscType.BD66;
|
||||
else if (info.SizeAndChecksums.Layerbreak != default && info.SizeAndChecksums.Size > 50_050_629_632)
|
||||
info.CommonDiscInfo.Media = DiscType.BD66;
|
||||
else if (info.SizeAndChecksums.Layerbreak != default)
|
||||
info.CommonDiscInfo.Media = DiscType.BD50;
|
||||
else if (info.SizeAndChecksums.PICIdentifier == SabreTools.Models.PIC.Constants.DiscTypeIdentifierROMUltra)
|
||||
else if (info.SizeAndChecksums.PICIdentifier == Models.PIC.Constants.DiscTypeIdentifierROMUltra)
|
||||
info.CommonDiscInfo.Media = DiscType.BD33;
|
||||
else if (info.SizeAndChecksums.Size > 25_025_314_816)
|
||||
info.CommonDiscInfo.Media = DiscType.BD33;
|
||||
@@ -45,14 +53,6 @@ namespace SabreTools.RedumpLib
|
||||
info.CommonDiscInfo.Media = DiscType.BD25;
|
||||
break;
|
||||
|
||||
case DiscType.DVD5:
|
||||
case DiscType.DVD9:
|
||||
if (info.SizeAndChecksums.Layerbreak != default)
|
||||
info.CommonDiscInfo.Media = DiscType.DVD9;
|
||||
else
|
||||
info.CommonDiscInfo.Media = DiscType.DVD5;
|
||||
break;
|
||||
|
||||
case DiscType.HDDVDSL:
|
||||
case DiscType.HDDVDDL:
|
||||
if (info.SizeAndChecksums.Layerbreak != default)
|
||||
|
||||
Reference in New Issue
Block a user