Files
MPF/MPF.Processors.Test/BaseProcessorTests.cs
2025-11-11 15:52:26 -05:00

314 lines
9.6 KiB
C#

using System;
using System.IO;
using SabreTools.Data.Models.Logiqx;
using Xunit;
namespace MPF.Processors.Test
{
public class BaseProcessorTests
{
#region GetGeneratedFilenames
[Fact]
public void GetGeneratedFilenames_NullSuffix_Standard()
{
string? filenameSuffix = null;
var actual = BaseProcessor.GetGeneratedFilenames(filenameSuffix);
Assert.Equal(4, actual.Count);
Assert.Equal("!protectionInfo.txt", actual[0]);
Assert.Equal("!submissionInfo.json", actual[1]);
Assert.Equal("!submissionInfo.json.gz", actual[2]);
Assert.Equal("!submissionInfo.txt", actual[3]);
}
[Fact]
public void GetGeneratedFilenames_EmptySuffix_Standard()
{
string? filenameSuffix = string.Empty;
var actual = BaseProcessor.GetGeneratedFilenames(filenameSuffix);
Assert.Equal(4, actual.Count);
Assert.Equal("!protectionInfo.txt", actual[0]);
Assert.Equal("!submissionInfo.json", actual[1]);
Assert.Equal("!submissionInfo.json.gz", actual[2]);
Assert.Equal("!submissionInfo.txt", actual[3]);
}
[Fact]
public void GetGeneratedFilenames_ValidSuffix_Modified()
{
string? filenameSuffix = "suffix";
var actual = BaseProcessor.GetGeneratedFilenames(filenameSuffix);
Assert.Equal(4, actual.Count);
Assert.Equal("!protectionInfo_suffix.txt", actual[0]);
Assert.Equal("!submissionInfo_suffix.json", actual[1]);
Assert.Equal("!submissionInfo_suffix.json.gz", actual[2]);
Assert.Equal("!submissionInfo_suffix.txt", actual[3]);
}
#endregion
#region GetGeneratedFilePaths
[Fact]
public void GetGeneratedFilePaths_NulloutputDirectory_Empty()
{
string? outputDirectory = null;
var actual = BaseProcessor.GetGeneratedFilePaths(outputDirectory, filenameSuffix: null);
Assert.Empty(actual);
}
[Fact]
public void GetGeneratedFilePaths_EmptyoutputDirectory_Empty()
{
string? outputDirectory = string.Empty;
var actual = BaseProcessor.GetGeneratedFilePaths(outputDirectory, filenameSuffix: null);
Assert.Empty(actual);
}
[Fact]
public void GetGeneratedFilePaths_InvalidoutputDirectory_Empty()
{
string? outputDirectory = "INVALID";
var actual = BaseProcessor.GetGeneratedFilePaths(outputDirectory, filenameSuffix: null);
Assert.Empty(actual);
}
[Fact]
public void GetGeneratedFilePaths_ValidoutputDirectory_Empty()
{
string? outputDirectory = Path.Combine(Environment.CurrentDirectory, "TestData", "BaseProcessor");
var actual = BaseProcessor.GetGeneratedFilePaths(outputDirectory, filenameSuffix: null);
Assert.Equal(4, actual.Count);
}
#endregion
#region GenerateDatafile
[Fact]
public void GenerateDatafile_Empty_Null()
{
string iso = string.Empty;
Datafile? actual = BaseProcessor.GenerateDatafile(iso);
Assert.Null(actual);
}
[Fact]
public void GenerateDatafile_Invalid_Null()
{
string iso = "INVALID";
Datafile? actual = BaseProcessor.GenerateDatafile(iso);
Assert.Null(actual);
}
[Fact]
public void GenerateDatafile_Valid_Filled()
{
string iso = Path.Combine(Environment.CurrentDirectory, "TestData", "PS3CFW", "BluRay", "test.iso");
var actual = BaseProcessor.GenerateDatafile(iso);
Assert.NotNull(actual);
Assert.NotNull(actual.Game);
var game = Assert.Single(actual.Game);
Assert.NotNull(game.Rom);
var rom = Assert.Single(game.Rom);
Assert.Equal("9", rom.Size);
Assert.Equal("560b9f59", rom.CRC);
Assert.Equal("edbb6676247e65c2245dd4883ed9fc24", rom.MD5);
Assert.Equal("1b33ad54d78085be5ecb1cf1b3e9da821e708075", rom.SHA1);
}
#endregion
#region GetPIC
[Fact]
public void GetPIC_InvalidPath_Null()
{
string picPath = "INVALID";
int trimLength = -1;
string? actual = BaseProcessor.GetPIC(picPath, trimLength);
Assert.Null(actual);
}
[Fact]
public void GetPIC_ValidPathZeroTrim_Empty()
{
string picPath = Path.Combine(Environment.CurrentDirectory, "TestData", "BaseProcessor", "pic.bin");
int trimLength = 0;
string? actual = BaseProcessor.GetPIC(picPath, trimLength);
Assert.NotNull(actual);
Assert.Empty(actual);
}
[Fact]
public void GetPIC_ValidPathDefaultTrim_Formatted()
{
string expected = "000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n000102030405060708090A0B0C0D0E0F\n";
string picPath = Path.Combine(Environment.CurrentDirectory, "TestData", "BaseProcessor", "pic.bin");
int trimLength = -1;
string? actual = BaseProcessor.GetPIC(picPath, trimLength);
Assert.NotNull(actual);
Assert.Equal(expected, actual);
}
[Fact]
public void GetPIC_ValidPathCustomTrim_Formatted()
{
string expected = "000102030405060708090A0B0C0D0E0F\n";
string picPath = Path.Combine(Environment.CurrentDirectory, "TestData", "BaseProcessor", "pic.bin");
int trimLength = 32;
string? actual = BaseProcessor.GetPIC(picPath, trimLength);
Assert.NotNull(actual);
Assert.Equal(expected, actual);
}
#endregion
#region GetPVD
// TODO: Create fake, 00-filled ISO for tests and implement
#endregion
#region IsAudio
[Fact]
public void IsAudio_Null_False()
{
string? cue = null;
bool actual = BaseProcessor.IsAudio(cue);
Assert.False(actual);
}
[Fact]
public void IsAudio_Empty_False()
{
string? cue = string.Empty;
bool actual = BaseProcessor.IsAudio(cue);
Assert.False(actual);
}
[Fact]
public void IsAudio_Invalid_False()
{
string? cue = @"INVALID";
bool actual = BaseProcessor.IsAudio(cue);
Assert.False(actual);
}
[Fact]
public void IsAudio_NoAudio_False()
{
string? cue = @"FILE ""track (Track 1).bin"" BINARY
TRACK 01 MODE1/2352
INDEX 01 00:00:00
FILE ""track (Track 2).bin"" BINARY
TRACK 02 MODE1/2352
INDEX 01 00:00:00";
bool actual = BaseProcessor.IsAudio(cue);
Assert.False(actual);
}
[Fact]
public void IsAudio_MixedTracks_False()
{
string? cue = @"FILE ""track (Track 1).bin"" BINARY
TRACK 01 MODE1/2352
INDEX 01 00:00:00
FILE ""track (Track 2).bin"" BINARY
TRACK 02 AUDIO
INDEX 00 00:00:00
INDEX 01 00:02:00";
bool actual = BaseProcessor.IsAudio(cue);
Assert.False(actual);
}
[Fact]
public void IsAudio_AllAudio_True()
{
string? cue = @"FILE ""track (Track 1).bin"" BINARY
TRACK 01 AUDIO
INDEX 00 00:00:00
INDEX 01 00:02:00
FILE ""track (Track 2).bin"" BINARY
TRACK 02 AUDIO
INDEX 00 00:00:00
INDEX 01 00:02:00";
bool actual = BaseProcessor.IsAudio(cue);
Assert.True(actual);
}
#endregion
#region SplitString
[Fact]
public void SplitString_NullString_Empty()
{
string? str = null;
int count = 0;
bool trim = false;
string actual = BaseProcessor.SplitString(str, count, trim);
Assert.Empty(actual);
}
[Fact]
public void SplitString_EmptyString_Empty()
{
string? str = string.Empty;
int count = 0;
bool trim = false;
string actual = BaseProcessor.SplitString(str, count, trim);
Assert.Empty(actual);
}
[Fact]
public void SplitString_ValidStringInvalidCount_Original()
{
string expected = "VALID\n";
string? str = "VALID";
int count = 0;
bool trim = false;
string actual = BaseProcessor.SplitString(str, count, trim);
Assert.Equal(expected, actual);
}
[Fact]
public void SplitString_ValidStringLessThanCount_Original()
{
string expected = "VALID\n";
string? str = "VALID";
int count = 10;
bool trim = false;
string actual = BaseProcessor.SplitString(str, count, trim);
Assert.Equal(expected, actual);
}
[Fact]
public void SplitString_ValidStringGreaterThanCount_Split()
{
string expected = "VA\nLI\nD\n";
string? str = "VALID";
int count = 2;
bool trim = false;
string actual = BaseProcessor.SplitString(str, count, trim);
Assert.Equal(expected, actual);
}
#endregion
}
}