Move existing tests to new projects

This commit is contained in:
Matt Nadareski
2024-12-03 13:27:55 -05:00
parent 61060e98df
commit 3829ee1bbe
15 changed files with 69 additions and 328 deletions

View File

@@ -2,6 +2,7 @@
- Update packages
- Add skeleton test projects for individual libraries
- Move existing tests to new projects
### 3.2.4 (2024-11-24)

View File

@@ -0,0 +1,59 @@
using System.Collections.Generic;
using MPF.ExecutionContexts.DiscImageCreator;
using Xunit;
namespace MPF.ExecutionContexts.Test
{
public class DiscImageCreatorTests
{
[Fact]
public void DiscImageCreatorAudioParametersTest()
{
string originalParameters = "audio F \"ISO\\Audio CD\\Audio CD.bin\" 72 -5 0";
// Validate that a common audio commandline is parsed
var executionContext = new ExecutionContext(originalParameters);
Assert.NotNull(executionContext);
// Validate that the same set of parameters are generated on the output
var newParameters = executionContext.GenerateParameters();
Assert.NotNull(newParameters);
Assert.Equal(originalParameters, newParameters);
}
[Fact]
public void DiscImageCreatorDataParametersTest()
{
string originalParameters = "data F \"ISO\\Data CD\\Data CD.bin\" 72 -5 0";
// Validate that a common audio commandline is parsed
var executionContext = new ExecutionContext(originalParameters);
Assert.NotNull(executionContext);
// Validate that the same set of parameters are generated on the output
var newParameters = executionContext.GenerateParameters();
Assert.NotNull(newParameters);
Assert.Equal(originalParameters, newParameters);
}
/// <summary>
/// Generate a HashSet of keys that are considered to be set
/// </summary>
/// <param name="executionContext">ExecutionContext object representing how to invoke the internal program</param>
/// <returns>HashSet representing the strings</returns>
private static HashSet<string> GenerateUsedKeys(ExecutionContext executionContext)
{
var usedKeys = new HashSet<string>();
if (executionContext?.Keys == null)
return usedKeys;
foreach (string key in executionContext.Keys)
{
if (executionContext[key] == true)
usedKeys.Add(key);
}
return usedKeys;
}
}
}

View File

@@ -22,7 +22,7 @@
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="MPF.Test" />
<InternalsVisibleTo Include="MPF.ExecutionContexts.Test" />
</ItemGroup>
<ItemGroup>

View File

@@ -2,7 +2,7 @@
using SabreTools.RedumpLib.Data;
using Xunit;
namespace MPF.Test.Frontend
namespace MPF.Frontend.Test
{
public class UIElementsTest
{

View File

@@ -2,7 +2,7 @@
using SabreTools.RedumpLib.Data;
using Xunit;
namespace MPF.Test.Frontend
namespace MPF.Frontend.Test
{
public class DumpEnvironmentTests
{

View File

@@ -4,7 +4,7 @@ using System.IO;
using MPF.Frontend;
using Xunit;
namespace MPF.Test.Frontend
namespace MPF.Frontend.Test
{
public class EnumConverterTests
{

View File

@@ -1,7 +1,7 @@
using MPF.Frontend;
using Xunit;
namespace MPF.Test.Frontend
namespace MPF.Frontend.Test
{
public class ResultEventArgsTests
{

View File

@@ -5,7 +5,7 @@ using SabreTools.RedumpLib;
using SabreTools.RedumpLib.Data;
using Xunit;
namespace MPF.Test.Frontend.Tools
namespace MPF.Frontend.Test.Tools
{
public class InfoToolTests
{

View File

@@ -4,7 +4,7 @@ using System.Linq;
using MPF.Frontend.Tools;
using Xunit;
namespace MPF.Test.Frontend.Tools
namespace MPF.Frontend.Test.Tools
{
public class ProtectionTests
{

View File

@@ -22,7 +22,7 @@
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="MPF.Test" />
<InternalsVisibleTo Include="MPF.Frontend.Test" />
</ItemGroup>
<ItemGroup>

View File

@@ -23,7 +23,7 @@
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="MPF.Test" />
<InternalsVisibleTo Include="MPF.Processors.Test" />
</ItemGroup>
<!-- Support for old .NET versions -->

View File

@@ -1,270 +0,0 @@
using System;
using System.Collections.Generic;
using MPF.ExecutionContexts.DiscImageCreator;
using MPF.Frontend;
using SabreTools.RedumpLib.Data;
using Xunit;
namespace MPF.Test.ExecutionContexts
{
public class DiscImageCreatorTests
{
#region Old Tests
[Theory]
[InlineData(RedumpSystem.MicrosoftXbox, MediaType.CDROM, CommandStrings.CompactDisc)]
[InlineData(RedumpSystem.MicrosoftXbox, MediaType.DVD, CommandStrings.XBOX)]
[InlineData(RedumpSystem.MicrosoftXbox, MediaType.LaserDisc, null)]
[InlineData(RedumpSystem.SonyPlayStation3, MediaType.BluRay, CommandStrings.BluRay)]
[InlineData(RedumpSystem.AppleMacintosh, MediaType.FloppyDisk, CommandStrings.Floppy)]
[InlineData(RedumpSystem.RawThrillsVarious, MediaType.GDROM, null)]
public void ParametersFromSystemAndTypeTest(RedumpSystem? knownSystem, MediaType? mediaType, string? expected)
{
var options = new Options();
var actual = new ExecutionContext(knownSystem, mediaType, "D:\\", "disc.bin", 16, options.Settings);
Assert.Equal(expected, actual.BaseCommand);
}
[Theory]
[InlineData(RedumpSystem.AppleMacintosh, MediaType.LaserDisc, null)] // Deliberately unsupported
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, new string[] { FlagStrings.C2Opcode, FlagStrings.NoFixSubQSecuROM, FlagStrings.ScanFileProtect })]
[InlineData(RedumpSystem.NintendoGameCube, MediaType.NintendoGameCubeGameDisc, new string[] { FlagStrings.Raw })]
public void ParametersFromOptionsSpecialDefaultTest(RedumpSystem? knownSystem, MediaType? mediaType, string[]? expected)
{
var options = new Options();
var actual = new ExecutionContext(knownSystem, mediaType, "D:\\", "disc.bin", 16, options.Settings);
var expectedSet = new HashSet<string>(expected ?? Array.Empty<string>());
HashSet<string> actualSet = GenerateUsedKeys(actual);
Assert.Equal(expectedSet, actualSet);
}
[Theory]
[InlineData(RedumpSystem.SegaDreamcast, MediaType.GDROM, 1000, new string[] { FlagStrings.C2Opcode })]
[InlineData(RedumpSystem.SegaDreamcast, MediaType.GDROM, -1, new string[] { FlagStrings.C2Opcode })]
public void ParametersFromOptionsC2RereadTest(RedumpSystem? knownSystem, MediaType? mediaType, int rereadC2, string[] expected)
{
var options = new Options { DICRereadCount = rereadC2 };
var actual = new ExecutionContext(knownSystem, mediaType, "D:\\", "disc.bin", 16, options.Settings);
var expectedSet = new HashSet<string>(expected ?? Array.Empty<string>());
HashSet<string> actualSet = GenerateUsedKeys(actual);
Assert.Equal(expectedSet, actualSet);
if (rereadC2 == -1 || !knownSystem.MediaTypes().Contains(mediaType))
Assert.Null(actual.C2OpcodeValue[0]);
else
Assert.Equal(rereadC2, actual.C2OpcodeValue[0]);
}
[Theory]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, 1000, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, -1, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.BluRay, 1000, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.BluRay, -1, new string[] { FlagStrings.DVDReread })]
public void ParametersFromOptionsDVDRereadTest(RedumpSystem? knownSystem, MediaType? mediaType, int rereadDVDBD, string[] expected)
{
var options = new Options { DICDVDRereadCount = rereadDVDBD };
var actual = new ExecutionContext(knownSystem, mediaType, "D:\\", "disc.bin", 16, options.Settings);
var expectedSet = new HashSet<string>(expected ?? Array.Empty<string>());
HashSet<string> actualSet = GenerateUsedKeys(actual);
Assert.Equal(expectedSet, actualSet);
if (rereadDVDBD == -1 || !knownSystem.MediaTypes().Contains(mediaType))
Assert.Null(actual.DVDRereadValue);
else
Assert.Equal(rereadDVDBD, actual.DVDRereadValue);
}
[Theory]
[InlineData(RedumpSystem.BDVideo, MediaType.BluRay, true, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.BDVideo, MediaType.BluRay, false, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, true, new string[] { FlagStrings.C2Opcode, FlagStrings.NoFixSubQSecuROM, FlagStrings.MultiSectorRead, FlagStrings.ScanFileProtect })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, false, new string[] { FlagStrings.C2Opcode, FlagStrings.NoFixSubQSecuROM, FlagStrings.ScanFileProtect })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, true, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, false, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, true, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, false, new string[] { FlagStrings.DVDReread })]
public void ParametersFromOptionsMultiSectorReadTest(RedumpSystem? knownSystem, MediaType? mediaType, bool multiSectorRead, string[] expected)
{
var options = new Options { DICMultiSectorRead = multiSectorRead };
var actual = new ExecutionContext(knownSystem, mediaType, "D:\\", "disc.bin", 16, options.Settings);
var expectedSet = new HashSet<string>(expected ?? Array.Empty<string>());
HashSet<string> actualSet = GenerateUsedKeys(actual);
Assert.Equal(expectedSet, actualSet);
if (expectedSet.Count != 1 && multiSectorRead)
Assert.Equal(0, actual.MultiSectorReadValue);
}
[Theory]
[InlineData(RedumpSystem.BDVideo, MediaType.BluRay, true, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.BDVideo, MediaType.BluRay, false, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, true, new string[] { FlagStrings.C2Opcode, FlagStrings.NoFixSubQSecuROM, FlagStrings.ScanFileProtect, FlagStrings.ScanSectorProtect, FlagStrings.SubchannelReadLevel })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.CDROM, false, new string[] { FlagStrings.C2Opcode, FlagStrings.NoFixSubQSecuROM, FlagStrings.ScanFileProtect })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, true, new string[] { FlagStrings.DVDReread, FlagStrings.ScanFileProtect })]
[InlineData(RedumpSystem.IBMPCcompatible, MediaType.DVD, false, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, true, new string[] { FlagStrings.DVDReread })]
[InlineData(RedumpSystem.HDDVDVideo, MediaType.HDDVD, false, new string[] { FlagStrings.DVDReread })]
public void ParametersFromOptionsParanoidModeTest(RedumpSystem? knownSystem, MediaType? mediaType, bool paranoidMode, string[] expected)
{
var options = new Options { DICParanoidMode = paranoidMode };
var actual = new ExecutionContext(knownSystem, mediaType, "D:\\", "disc.bin", 16, options.Settings);
var expectedSet = new HashSet<string>(expected ?? Array.Empty<string>());
HashSet<string> actualSet = GenerateUsedKeys(actual);
Assert.Equal(expectedSet, actualSet);
if (paranoidMode)
{
if (actualSet.Contains(FlagStrings.ScanSectorProtect))
Assert.True(actual[FlagStrings.ScanSectorProtect]);
if (actualSet.Contains(FlagStrings.SubchannelReadLevel))
{
Assert.True(actual[FlagStrings.SubchannelReadLevel]);
Assert.Equal(2, actual.SubchannelReadLevelValue);
}
}
else
{
if (actualSet.Contains(FlagStrings.ScanSectorProtect))
Assert.False(actual[FlagStrings.ScanSectorProtect]);
if (actualSet.Contains(FlagStrings.SubchannelReadLevel))
Assert.False(actual[FlagStrings.SubchannelReadLevel]);
Assert.Null(actual.SubchannelReadLevelValue);
}
}
[Theory]
[InlineData(null, false)]
[InlineData("", false)]
[InlineData("cd F test.bin 8 /c2 20", true)]
[InlineData("fd A test.img", true)]
[InlineData("dvd X super\\test.iso 8 /raw", true)]
[InlineData("bd D longer\\path_test.iso 16", true)]
[InlineData("stop D", true)]
[InlineData("ls", false)]
public void ValidateParametersTest(string? parameters, bool expected)
{
var actual = new ExecutionContext(parameters);
Assert.Equal(expected, actual.IsValid());
}
[Theory]
[InlineData(MediaType.CDROM, ".bin")]
[InlineData(MediaType.DVD, ".iso")]
[InlineData(MediaType.LaserDisc, ".raw")]
[InlineData(MediaType.NintendoWiiUOpticalDisc, ".wud")]
[InlineData(MediaType.FloppyDisk, ".img")]
[InlineData(MediaType.Cassette, ".wav")]
[InlineData(MediaType.NONE, null)]
public void MediaTypeToExtensionTest(MediaType? mediaType, string? expected)
{
var actual = Converters.Extension(mediaType);
Assert.Equal(expected, actual);
}
[Theory]
[InlineData(CommandStrings.Audio, MediaType.CDROM)]
[InlineData(CommandStrings.BluRay, MediaType.BluRay)]
[InlineData(CommandStrings.Close, null)]
[InlineData(CommandStrings.CompactDisc, MediaType.CDROM)]
[InlineData(CommandStrings.Data, MediaType.CDROM)]
[InlineData(CommandStrings.DigitalVideoDisc, MediaType.DVD)]
[InlineData(CommandStrings.Eject, null)]
[InlineData(CommandStrings.Floppy, MediaType.FloppyDisk)]
[InlineData(CommandStrings.GDROM, MediaType.GDROM)]
[InlineData(CommandStrings.MDS, null)]
[InlineData(CommandStrings.Reset, null)]
[InlineData(CommandStrings.SACD, MediaType.CDROM)]
[InlineData(CommandStrings.Start, null)]
[InlineData(CommandStrings.Stop, null)]
[InlineData(CommandStrings.Sub, null)]
[InlineData(CommandStrings.Swap, MediaType.GDROM)]
[InlineData(CommandStrings.XBOX, MediaType.DVD)]
public void BaseCommandToMediaTypeTest(string command, MediaType? expected)
{
MediaType? actual = Converters.ToMediaType(command);
Assert.Equal(expected, actual);
}
[Theory]
[InlineData(CommandStrings.Audio, RedumpSystem.AudioCD)]
[InlineData(CommandStrings.BluRay, RedumpSystem.SonyPlayStation3)]
[InlineData(CommandStrings.Close, null)]
[InlineData(CommandStrings.CompactDisc, RedumpSystem.IBMPCcompatible)]
[InlineData(CommandStrings.Data, RedumpSystem.IBMPCcompatible)]
[InlineData(CommandStrings.DigitalVideoDisc, RedumpSystem.IBMPCcompatible)]
[InlineData(CommandStrings.Eject, null)]
[InlineData(CommandStrings.Floppy, RedumpSystem.IBMPCcompatible)]
[InlineData(CommandStrings.GDROM, RedumpSystem.SegaDreamcast)]
[InlineData(CommandStrings.MDS, null)]
[InlineData(CommandStrings.Reset, null)]
[InlineData(CommandStrings.SACD, RedumpSystem.SuperAudioCD)]
[InlineData(CommandStrings.Start, null)]
[InlineData(CommandStrings.Stop, null)]
[InlineData(CommandStrings.Sub, null)]
[InlineData(CommandStrings.Swap, RedumpSystem.SegaDreamcast)]
[InlineData(CommandStrings.XBOX, RedumpSystem.MicrosoftXbox)]
public void BaseCommandToRedumpSystemTest(string command, RedumpSystem? expected)
{
RedumpSystem? actual = Converters.ToRedumpSystem(command);
Assert.Equal(expected, actual);
}
#endregion
[Fact]
public void DiscImageCreatorAudioParametersTest()
{
string originalParameters = "audio F \"ISO\\Audio CD\\Audio CD.bin\" 72 -5 0";
// Validate that a common audio commandline is parsed
var executionContext = new ExecutionContext(originalParameters);
Assert.NotNull(executionContext);
// Validate that the same set of parameters are generated on the output
var newParameters = executionContext.GenerateParameters();
Assert.NotNull(newParameters);
Assert.Equal(originalParameters, newParameters);
}
[Fact]
public void DiscImageCreatorDataParametersTest()
{
string originalParameters = "data F \"ISO\\Data CD\\Data CD.bin\" 72 -5 0";
// Validate that a common audio commandline is parsed
var executionContext = new ExecutionContext(originalParameters);
Assert.NotNull(executionContext);
// Validate that the same set of parameters are generated on the output
var newParameters = executionContext.GenerateParameters();
Assert.NotNull(newParameters);
Assert.Equal(originalParameters, newParameters);
}
/// <summary>
/// Generate a HashSet of keys that are considered to be set
/// </summary>
/// <param name="executionContext">ExecutionContext object representing how to invoke the internal program</param>
/// <returns>HashSet representing the strings</returns>
private static HashSet<string> GenerateUsedKeys(ExecutionContext executionContext)
{
var usedKeys = new HashSet<string>();
if (executionContext?.Keys == null)
return usedKeys;
foreach (string key in executionContext.Keys)
{
if (executionContext[key] == true)
usedKeys.Add(key);
}
return usedKeys;
}
}
}

View File

@@ -1,39 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0;net8.0;net9.0</TargetFrameworks>
<CheckEolTargetFramework>false</CheckEolTargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\MPF.ExecutionContexts\MPF.ExecutionContexts.csproj" />
<ProjectReference Include="..\MPF.Frontend\MPF.Frontend.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeCoverage" Version="17.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="SabreTools.RedumpLib" Version="1.6.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.abstractions" Version="2.0.3" />
<PackageReference Include="xunit.analyzers" Version="1.17.0" />
<PackageReference Include="xunit.assert" Version="2.9.2" />
<PackageReference Include="xunit.core" Version="2.9.2" />
<PackageReference Include="xunit.extensibility.core" Version="2.9.2" />
<PackageReference Include="xunit.extensibility.execution" Version="2.9.2" />
<PackageReference Include="xunit.runner.console" Version="2.9.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

@@ -47,10 +47,6 @@
<ReferenceWpfRoyaleTheme>false</ReferenceWpfRoyaleTheme>
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="MPF.Test" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\Icon.ico" />
<Resource Include="Images\ring-code-guide-1-layer.png" />

View File

@@ -5,8 +5,6 @@ VisualStudioVersion = 17.1.32407.343
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPF.UI", "MPF.UI\MPF.UI.csproj", "{7B1B75EB-8940-466F-BD51-76471A57F9BE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPF.Test", "MPF.Test\MPF.Test.csproj", "{7CC064D2-38AB-4A05-8519-28660DE4562A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPF.Check", "MPF.Check\MPF.Check.csproj", "{8CFDE289-E171-4D49-A40D-5293265C1253}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4D1DCF5A-F0B0-4E81-A05B-F1A7D37C9D9D}"
@@ -56,10 +54,6 @@ Global
{7B1B75EB-8940-466F-BD51-76471A57F9BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B1B75EB-8940-466F-BD51-76471A57F9BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B1B75EB-8940-466F-BD51-76471A57F9BE}.Release|Any CPU.Build.0 = Release|Any CPU
{7CC064D2-38AB-4A05-8519-28660DE4562A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7CC064D2-38AB-4A05-8519-28660DE4562A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CC064D2-38AB-4A05-8519-28660DE4562A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CC064D2-38AB-4A05-8519-28660DE4562A}.Release|Any CPU.Build.0 = Release|Any CPU
{8CFDE289-E171-4D49-A40D-5293265C1253}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CFDE289-E171-4D49-A40D-5293265C1253}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CFDE289-E171-4D49-A40D-5293265C1253}.Release|Any CPU.ActiveCfg = Release|Any CPU