mirror of
https://github.com/SabreTools/SabreTools.RedumpLib.git
synced 2026-09-25 00:14:54 +00:00
Disc categories are the same, just ordered differently in the UI
This commit is contained in:
@@ -40,6 +40,69 @@ namespace SabreTools.RedumpLib.Test.Data
|
||||
|
||||
#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 DiscCategory_LongName(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
var actual = discCategory.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DiscCategory can be mapped from a string
|
||||
/// </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 DiscCategory_ToDiscCategory(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
string? longName = discCategory.LongName();
|
||||
string? longNameSpaceless = longName?.Replace(" ", string.Empty);
|
||||
|
||||
var actualNormal = longName.ToDiscCategory();
|
||||
var actualSpaceless = longNameSpaceless.ToDiscCategory();
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.Null(actualNormal);
|
||||
Assert.Null(actualSpaceless);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal(discCategory, actualNormal);
|
||||
Assert.Equal(discCategory, actualSpaceless);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DiscCategory values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DiscCategory values</returns>
|
||||
public static TheoryData<DiscCategory?, bool> GenerateDiscCategoryTestData()
|
||||
{
|
||||
var testData = new TheoryData<DiscCategory?, bool>() { { null, true } };
|
||||
foreach (DiscCategory? discCategory in Enum.GetValues<DiscCategory>().Cast<DiscCategory?>())
|
||||
{
|
||||
testData.Add(discCategory, false);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -117,69 +117,6 @@ namespace SabreTools.RedumpLib.Test.RedumpInfo
|
||||
|
||||
#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 DiscCategory_LongName(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
var actual = discCategory.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DiscCategory can be mapped from a string
|
||||
/// </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 DiscCategory_ToDiscCategory(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
string? longName = discCategory.LongName();
|
||||
string? longNameSpaceless = longName?.Replace(" ", string.Empty);
|
||||
|
||||
var actualNormal = longName.ToDiscCategory();
|
||||
var actualSpaceless = longNameSpaceless.ToDiscCategory();
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.Null(actualNormal);
|
||||
Assert.Null(actualSpaceless);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal(discCategory, actualNormal);
|
||||
Assert.Equal(discCategory, actualSpaceless);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DiscCategory values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DiscCategory values</returns>
|
||||
public static TheoryData<DiscCategory?, bool> GenerateDiscCategoryTestData()
|
||||
{
|
||||
var testData = new TheoryData<DiscCategory?, bool>() { { null, true } };
|
||||
foreach (DiscCategory? discCategory in Enum.GetValues<DiscCategory>().Cast<DiscCategory?>())
|
||||
{
|
||||
testData.Add(discCategory, false);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Subpath
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -118,69 +118,6 @@ namespace SabreTools.RedumpLib.Test.RedumpOrg
|
||||
|
||||
#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 DiscCategory_LongName(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
var actual = discCategory.LongName();
|
||||
|
||||
if (expectNull)
|
||||
Assert.Null(actual);
|
||||
else
|
||||
Assert.NotNull(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check that every DiscCategory can be mapped from a string
|
||||
/// </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 DiscCategory_ToDiscCategory(DiscCategory? discCategory, bool expectNull)
|
||||
{
|
||||
string? longName = discCategory.LongName();
|
||||
string? longNameSpaceless = longName?.Replace(" ", string.Empty);
|
||||
|
||||
var actualNormal = longName.ToDiscCategory();
|
||||
var actualSpaceless = longNameSpaceless.ToDiscCategory();
|
||||
|
||||
if (expectNull)
|
||||
{
|
||||
Assert.Null(actualNormal);
|
||||
Assert.Null(actualSpaceless);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Equal(discCategory, actualNormal);
|
||||
Assert.Equal(discCategory, actualSpaceless);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a test set of DiscCategory values
|
||||
/// </summary>
|
||||
/// <returns>MemberData-compatible list of DiscCategory values</returns>
|
||||
public static TheoryData<DiscCategory?, bool> GenerateDiscCategoryTestData()
|
||||
{
|
||||
var testData = new TheoryData<DiscCategory?, bool>() { { null, true } };
|
||||
foreach (DiscCategory? discCategory in Enum.GetValues<DiscCategory>().Cast<DiscCategory?>())
|
||||
{
|
||||
testData.Add(discCategory, false);
|
||||
}
|
||||
|
||||
return testData;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Subpath
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SabreTools.RedumpLib.RedumpOrg.Data;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpOrg.Converters
|
||||
namespace SabreTools.RedumpLib.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Serialize DiscCategory enum values
|
||||
@@ -2,6 +2,45 @@ using SabreTools.RedumpLib.Attributes;
|
||||
|
||||
namespace SabreTools.RedumpLib.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// List of all disc categories
|
||||
/// </summary>
|
||||
public enum DiscCategory
|
||||
{
|
||||
[HumanReadable(LongName = "Games")]
|
||||
Games = 1,
|
||||
|
||||
[HumanReadable(LongName = "Demos")]
|
||||
Demos = 2,
|
||||
|
||||
[HumanReadable(LongName = "Video")]
|
||||
Video = 3,
|
||||
|
||||
[HumanReadable(LongName = "Audio")]
|
||||
Audio = 4,
|
||||
|
||||
[HumanReadable(LongName = "Multimedia")]
|
||||
Multimedia = 5,
|
||||
|
||||
[HumanReadable(LongName = "Applications")]
|
||||
Applications = 6,
|
||||
|
||||
[HumanReadable(LongName = "Coverdiscs")]
|
||||
Coverdiscs = 7,
|
||||
|
||||
[HumanReadable(LongName = "Educational")]
|
||||
Educational = 8,
|
||||
|
||||
[HumanReadable(LongName = "Bonus Discs")]
|
||||
BonusDiscs = 9,
|
||||
|
||||
[HumanReadable(LongName = "Preproduction")]
|
||||
Preproduction = 10,
|
||||
|
||||
[HumanReadable(LongName = "Add-Ons")]
|
||||
AddOns = 11,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of all disc langauges
|
||||
/// </summary>
|
||||
|
||||
@@ -806,6 +806,45 @@ namespace SabreTools.RedumpLib.Data
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Category
|
||||
|
||||
/// <summary>
|
||||
/// Get the Redump longnames for each known category
|
||||
/// </summary>
|
||||
public static string? LongName(this DiscCategory category)
|
||||
=> ((DiscCategory?)category).LongName();
|
||||
|
||||
/// <summary>
|
||||
/// Get the Redump longnames for each known category
|
||||
/// </summary>
|
||||
public static string? LongName(this DiscCategory? category)
|
||||
=> AttributeHelper<DiscCategory?>.GetHumanReadableAttribute(category)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the Category enum value for a given string
|
||||
/// </summary>
|
||||
/// <param name="category">String value to convert</param>
|
||||
/// <returns>Category represented by the string, if possible</returns>
|
||||
public static DiscCategory? ToDiscCategory(this string? category)
|
||||
{
|
||||
// No value means no match
|
||||
if (category is null || category.Length == 0)
|
||||
return null;
|
||||
|
||||
category = category?.ToLowerInvariant();
|
||||
var categories = (DiscCategory[])Enum.GetValues(typeof(DiscCategory));
|
||||
|
||||
// Check long names
|
||||
int index = Array.FindIndex(categories, c => category == c.LongName()?.ToLowerInvariant()
|
||||
|| category == c.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return categories[index];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Language
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SabreTools.RedumpLib.RedumpInfo.Data;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo.Converters
|
||||
{
|
||||
/// <summary>
|
||||
/// Serialize DiscCategory enum values
|
||||
/// </summary>
|
||||
public class DiscCategoryConverter : JsonConverter<DiscCategory?>
|
||||
{
|
||||
public override bool CanRead { get { return true; } }
|
||||
|
||||
public override DiscCategory? ReadJson(JsonReader reader, Type objectType, DiscCategory? existingValue, bool hasExistingValue, JsonSerializer serializer)
|
||||
{
|
||||
// If we have a value already, don't overwrite it
|
||||
if (hasExistingValue)
|
||||
return existingValue;
|
||||
|
||||
// Read the value
|
||||
if (reader.Value is not string value)
|
||||
return null;
|
||||
|
||||
// Try to parse the value
|
||||
return value.ToDiscCategory();
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, DiscCategory? value, JsonSerializer serializer)
|
||||
{
|
||||
JToken t = JToken.FromObject(value.LongName() ?? string.Empty);
|
||||
t.WriteTo(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,45 +2,6 @@ using SabreTools.RedumpLib.Attributes;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpInfo.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// List of all disc categories
|
||||
/// </summary>
|
||||
public enum DiscCategory
|
||||
{
|
||||
[HumanReadable(LongName = "Add-Ons")]
|
||||
AddOns,
|
||||
|
||||
[HumanReadable(LongName = "Applications")]
|
||||
Applications,
|
||||
|
||||
[HumanReadable(LongName = "Audio")]
|
||||
Audio,
|
||||
|
||||
[HumanReadable(LongName = "Bonus Discs")]
|
||||
BonusDiscs,
|
||||
|
||||
[HumanReadable(LongName = "Coverdiscs")]
|
||||
Coverdiscs,
|
||||
|
||||
[HumanReadable(LongName = "Demos")]
|
||||
Demos,
|
||||
|
||||
[HumanReadable(LongName = "Educational")]
|
||||
Educational,
|
||||
|
||||
[HumanReadable(LongName = "Games")]
|
||||
Games,
|
||||
|
||||
[HumanReadable(LongName = "Multimedia")]
|
||||
Multimedia,
|
||||
|
||||
[HumanReadable(LongName = "Preproduction")]
|
||||
Preproduction,
|
||||
|
||||
[HumanReadable(LongName = "Video")]
|
||||
Video,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of all disc subpaths
|
||||
/// </summary>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SabreTools.RedumpLib.Attributes;
|
||||
using SabreTools.RedumpLib.Data;
|
||||
|
||||
@@ -100,45 +99,6 @@ namespace SabreTools.RedumpLib.RedumpInfo.Data
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Category
|
||||
|
||||
/// <summary>
|
||||
/// Get the Redump longnames for each known category
|
||||
/// </summary>
|
||||
public static string? LongName(this DiscCategory category)
|
||||
=> ((DiscCategory?)category).LongName();
|
||||
|
||||
/// <summary>
|
||||
/// Get the Redump longnames for each known category
|
||||
/// </summary>
|
||||
public static string? LongName(this DiscCategory? category)
|
||||
=> AttributeHelper<DiscCategory?>.GetHumanReadableAttribute(category)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the Category enum value for a given string
|
||||
/// </summary>
|
||||
/// <param name="category">String value to convert</param>
|
||||
/// <returns>Category represented by the string, if possible</returns>
|
||||
public static DiscCategory? ToDiscCategory(this string? category)
|
||||
{
|
||||
// No value means no match
|
||||
if (category is null || category.Length == 0)
|
||||
return null;
|
||||
|
||||
category = category?.ToLowerInvariant();
|
||||
var categories = (DiscCategory[])Enum.GetValues(typeof(DiscCategory));
|
||||
|
||||
// Check long names
|
||||
int index = Array.FindIndex(categories, c => category == c.LongName()?.ToLowerInvariant()
|
||||
|| category == c.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return categories[index];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Subpath
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -2,45 +2,6 @@ using SabreTools.RedumpLib.Attributes;
|
||||
|
||||
namespace SabreTools.RedumpLib.RedumpOrg.Data
|
||||
{
|
||||
/// <summary>
|
||||
/// List of all disc categories
|
||||
/// </summary>
|
||||
public enum DiscCategory
|
||||
{
|
||||
[HumanReadable(LongName = "Games")]
|
||||
Games = 1,
|
||||
|
||||
[HumanReadable(LongName = "Demos")]
|
||||
Demos = 2,
|
||||
|
||||
[HumanReadable(LongName = "Video")]
|
||||
Video = 3,
|
||||
|
||||
[HumanReadable(LongName = "Audio")]
|
||||
Audio = 4,
|
||||
|
||||
[HumanReadable(LongName = "Multimedia")]
|
||||
Multimedia = 5,
|
||||
|
||||
[HumanReadable(LongName = "Applications")]
|
||||
Applications = 6,
|
||||
|
||||
[HumanReadable(LongName = "Coverdiscs")]
|
||||
Coverdiscs = 7,
|
||||
|
||||
[HumanReadable(LongName = "Educational")]
|
||||
Educational = 8,
|
||||
|
||||
[HumanReadable(LongName = "Bonus Discs")]
|
||||
BonusDiscs = 9,
|
||||
|
||||
[HumanReadable(LongName = "Preproduction")]
|
||||
Preproduction = 10,
|
||||
|
||||
[HumanReadable(LongName = "Add-Ons")]
|
||||
AddOns = 11,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// List of all disc subpaths
|
||||
/// </summary>
|
||||
|
||||
@@ -71,45 +71,6 @@ namespace SabreTools.RedumpLib.RedumpOrg.Data
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Category
|
||||
|
||||
/// <summary>
|
||||
/// Get the Redump longnames for each known category
|
||||
/// </summary>
|
||||
public static string? LongName(this DiscCategory category)
|
||||
=> ((DiscCategory?)category).LongName();
|
||||
|
||||
/// <summary>
|
||||
/// Get the Redump longnames for each known category
|
||||
/// </summary>
|
||||
public static string? LongName(this DiscCategory? category)
|
||||
=> AttributeHelper<DiscCategory?>.GetHumanReadableAttribute(category)?.LongName;
|
||||
|
||||
/// <summary>
|
||||
/// Get the Category enum value for a given string
|
||||
/// </summary>
|
||||
/// <param name="category">String value to convert</param>
|
||||
/// <returns>Category represented by the string, if possible</returns>
|
||||
public static DiscCategory? ToDiscCategory(this string? category)
|
||||
{
|
||||
// No value means no match
|
||||
if (category is null || category.Length == 0)
|
||||
return null;
|
||||
|
||||
category = category?.ToLowerInvariant();
|
||||
var categories = (DiscCategory[])Enum.GetValues(typeof(DiscCategory));
|
||||
|
||||
// Check long names
|
||||
int index = Array.FindIndex(categories, c => category == c.LongName()?.ToLowerInvariant()
|
||||
|| category == c.LongName()?.Replace(" ", string.Empty)?.ToLowerInvariant());
|
||||
if (index > -1)
|
||||
return categories[index];
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Disc Subpath
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user