diff --git a/MPF.Core/Converters/EnumConverter.cs b/MPF.Core/Converters/EnumConverter.cs index 4bcc092e..e1da0fce 100644 --- a/MPF.Core/Converters/EnumConverter.cs +++ b/MPF.Core/Converters/EnumConverter.cs @@ -2,10 +2,10 @@ using System.Collections.Concurrent; using System.IO; using System.Reflection; -using MPF.Core.Data; #if NET_FRAMEWORK using IMAPI2; #endif +using MPF.Core.Data; using RedumpLib.Data; namespace MPF.Core.Converters @@ -103,7 +103,6 @@ namespace MPF.Core.Converters if (method == null) method = typeof(EnumConverter).GetMethod("LongName", new[] { typeof(Nullable<>).MakeGenericType(sourceType) }); - LongNameMethods.TryAdd(sourceType, method); } diff --git a/MPF.Library/MPF.Library.csproj b/MPF.Library/MPF.Library.csproj index 3012d25f..0f2bcd64 100644 --- a/MPF.Library/MPF.Library.csproj +++ b/MPF.Library/MPF.Library.csproj @@ -21,6 +21,10 @@ false + + NET_FRAMEWORK + + diff --git a/MPF.Test/Core/Converters/EnumConverterTests.cs b/MPF.Test/Core/Converters/EnumConverterTests.cs new file mode 100644 index 00000000..e7c5119d --- /dev/null +++ b/MPF.Test/Core/Converters/EnumConverterTests.cs @@ -0,0 +1,168 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +#if NET_FRAMEWORK +using IMAPI2; +#endif +using MPF.Core.Converters; +using MPF.Core.Data; +using Xunit; + +namespace MPF.Test.Core.Converters +{ + public class EnumConverterTests + { + #region Cross-enumeration conversions + + /// + /// DiscType values that map to InternalDriveType + /// + private static readonly DriveType[] _mappableDriveTypes = new DriveType[] + { + DriveType.CDRom, + DriveType.Fixed, + DriveType.Removable, + }; + +#if NET_FRAMEWORK + /// + /// IMAPI_MEDIA_PHYSICAL_TYPE values that map to MediaType + /// + private static readonly IMAPI_MEDIA_PHYSICAL_TYPE[] _mappableImapiTypes = new IMAPI_MEDIA_PHYSICAL_TYPE[] + { + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_UNKNOWN, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_CDROM, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_CDR, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_CDRW, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDROM, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDRAM, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDPLUSR, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDPLUSRW, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDDASHR, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDDASHRW, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DISK, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_HDDVDROM, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_HDDVDR, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_HDDVDRAM, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_BDROM, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_BDR, + IMAPI_MEDIA_PHYSICAL_TYPE.IMAPI_MEDIA_TYPE_BDRE, + }; +#endif + + /// + /// Check that every supported DriveType maps to an InternalDriveType + /// + /// DriveType value to check + /// True to expect a null mapping, false otherwise + [Theory] + [MemberData(nameof(GenerateDriveTypeMappingTestData))] + public void ToInternalDriveTypeTest(DriveType driveType, bool expectNull) + { + var actual = driveType.ToInternalDriveType(); + + if (expectNull) + Assert.Null(actual); + else + Assert.NotNull(actual); + } + +#if NET_FRAMEWORK + /// + /// Check that every supported IMAPI_MEDIA_PHYSICAL_TYPE maps to an MediaType + /// + /// IMAPI_MEDIA_PHYSICAL_TYPE value to check + /// True to expect a null mapping, false otherwise + [Theory] + [MemberData(nameof(GenerateImapiTypeMappingTestData))] + public void IMAPIToMediaTypeTest(IMAPI_MEDIA_PHYSICAL_TYPE imapiType, bool expectNull) + { + var actual = imapiType.IMAPIToMediaType(); + + if (expectNull) + Assert.Null(actual); + else + Assert.NotNull(actual); + } +#endif + + /// + /// Generate a test set of DriveType values + /// + /// MemberData-compatible list of DriveType values + public static List GenerateDriveTypeMappingTestData() + { + var testData = new List() { new object[] { null, true } }; + foreach (DriveType driveType in Enum.GetValues(typeof(DriveType))) + { + if (_mappableDriveTypes.Contains(driveType)) + testData.Add(new object[] { driveType, false }); + else + testData.Add(new object[] { driveType, true }); + } + + return testData; + } + +#if NET_FRAMEWORK + /// + /// Generate a test set of IMAPI_MEDIA_PHYSICAL_TYPE values + /// + /// MemberData-compatible list of IMAPI_MEDIA_PHYSICAL_TYPE values + public static List GenerateImapiTypeMappingTestData() + { + var testData = new List() { new object[] { null, false } }; + foreach (IMAPI_MEDIA_PHYSICAL_TYPE imapiType in Enum.GetValues(typeof(IMAPI_MEDIA_PHYSICAL_TYPE))) + { + if (_mappableImapiTypes.Contains(imapiType)) + testData.Add(new object[] { imapiType, false }); + else + testData.Add(new object[] { imapiType, true }); + } + + return testData; + } +#endif + + #endregion + + #region Convert to Long Name + + // TODO: Maybe add a test for the generic "GetLongName" method + + /// + /// Check that every InternalProgram has a long name provided + /// + /// InternalProgram value to check + [Theory] + [MemberData(nameof(GenerateInternalProgramTestData))] + public void InternalProgramLongNameTest(InternalProgram? internalProgram) + { + string actual = internalProgram.LongName(); + Assert.NotNull(actual); + } + + /// + /// Generate a test set of InternalProgram values + /// + /// MemberData-compatible list of InternalProgram values + public static List GenerateInternalProgramTestData() + { + var testData = new List() { new object[] { null } }; + foreach (InternalProgram? internalProgram in Enum.GetValues(typeof(InternalProgram))) + { + testData.Add(new object[] { internalProgram }); + } + + return testData; + } + + #endregion + + // TODO: Add from-string tests + } +} diff --git a/MPF.Test/MPF.Test.csproj b/MPF.Test/MPF.Test.csproj index 0614897d..a64d4bd9 100644 --- a/MPF.Test/MPF.Test.csproj +++ b/MPF.Test/MPF.Test.csproj @@ -6,6 +6,31 @@ false + + NET_FRAMEWORK + + + + + {2735412F-7F64-5B0F-8F00-5D77AFBE261E} + 1 + 0 + 0 + tlbimp + False + True + + + {2C941FD0-975B-59BE-A960-9A2A262853A5} + 1 + 0 + 0 + tlbimp + False + True + + + diff --git a/MPF.Test/RedumpLib/ExtensionsTests.cs b/MPF.Test/RedumpLib/ExtensionsTests.cs index e6122b54..101535ac 100644 --- a/MPF.Test/RedumpLib/ExtensionsTests.cs +++ b/MPF.Test/RedumpLib/ExtensionsTests.cs @@ -145,6 +145,7 @@ namespace MPF.Test.RedumpLib /// Check that every DiscCategory has a long name provided /// /// DiscCategory value to check + /// True to expect a null value, false otherwise [Theory] [MemberData(nameof(GenerateDiscCategoryTestData))] public void DiscCategoryLongNameTest(DiscCategory? discCategory, bool expectNull)