mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-02-05 13:49:52 +00:00
Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a3e69e8ed | ||
|
|
67ee595eb4 | ||
|
|
992f8eaeb8 | ||
|
|
dde5a57136 | ||
|
|
ae49950ae6 | ||
|
|
b56ea3a479 | ||
|
|
03d4ea046d | ||
|
|
248741b2c0 | ||
|
|
ef307664e2 | ||
|
|
05c497a5a0 | ||
|
|
f8239780b2 | ||
|
|
ff12bf8205 | ||
|
|
0c3adf055c | ||
|
|
d9b1f5d45f | ||
|
|
5ab3dded30 | ||
|
|
991d9ead27 | ||
|
|
25c0d036f2 | ||
|
|
c06d8151e6 | ||
|
|
0e9ba25637 | ||
|
|
bd7ca7f3a7 | ||
|
|
26146554a3 | ||
|
|
884746a5a1 | ||
|
|
ab0e68110c | ||
|
|
e166d18903 | ||
|
|
2152ba43a8 | ||
|
|
f42c5d04ee | ||
|
|
ea535fa393 | ||
|
|
e6d118e8cc | ||
|
|
35a921e436 | ||
|
|
25cc3e42f3 | ||
|
|
14344756da | ||
|
|
cb270d3185 | ||
|
|
d5cef39f1b | ||
|
|
b782af427e | ||
|
|
6b503a0733 | ||
|
|
4a3741312e | ||
|
|
aed140a684 | ||
|
|
5b93df9703 | ||
|
|
5ae162400c | ||
|
|
f828b57159 | ||
|
|
d0cfc67f07 | ||
|
|
2f48c3110c | ||
|
|
6cdc35c82f | ||
|
|
9214a22cc9 | ||
|
|
5ba1156245 | ||
|
|
cb91cdff1d | ||
|
|
4df6a4e79d | ||
|
|
5b82a48267 | ||
|
|
8f70c50a48 | ||
|
|
5fe4d81fa4 | ||
|
|
7d3addbf0a | ||
|
|
b7d5873eb7 | ||
|
|
4e40cc19d5 | ||
|
|
1bc9316bc1 | ||
|
|
c995ec1dca | ||
|
|
4d2fbbae04 | ||
|
|
2776928946 | ||
|
|
8cc87c6540 | ||
|
|
3c212022aa | ||
|
|
511c4d09e5 | ||
|
|
d7eba27dc5 | ||
|
|
09370618ca | ||
|
|
2197167088 | ||
|
|
b527635fe7 | ||
|
|
695309bc32 | ||
|
|
97b2f68ec7 | ||
|
|
593044dbf3 | ||
|
|
1fcf44fb8d | ||
|
|
a2a472baf9 | ||
|
|
b5b4a50d94 | ||
|
|
f1b5464052 | ||
|
|
2c0224db22 | ||
|
|
1e78eecb40 | ||
|
|
3626faea60 | ||
|
|
a0177f1174 | ||
|
|
db5fe4a2cd | ||
|
|
5716143168 | ||
|
|
2a59b23149 | ||
|
|
bdbec4ed02 | ||
|
|
25193f1805 |
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net20;net35;net40;net452;net462;net472;net48;netcoreapp3.1;net5.0;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
|
||||
@@ -9,7 +9,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
<Version>1.7.0</Version>
|
||||
<Version>1.8.0</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Support All Frameworks -->
|
||||
@@ -30,4 +30,8 @@
|
||||
<ProjectReference Include="..\SabreTools.Serialization\SabreTools.Serialization.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="SabreTools.IO" Version="1.6.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -20,7 +20,7 @@ namespace InfoPrint
|
||||
/// </summary>
|
||||
public List<string> InputPaths { get; private set; } = [];
|
||||
|
||||
#if NETCOREAPP3_1_OR_GREATER
|
||||
#if NETCOREAPP
|
||||
/// <summary>
|
||||
/// Enable JSON output
|
||||
/// </summary>
|
||||
@@ -76,7 +76,7 @@ namespace InfoPrint
|
||||
|
||||
case "-j":
|
||||
case "--json":
|
||||
#if NET6_0_OR_GREATER
|
||||
#if NETCOREAPP
|
||||
options.Json = true;
|
||||
#else
|
||||
Console.WriteLine("JSON output not available in .NET Framework");
|
||||
@@ -111,7 +111,7 @@ namespace InfoPrint
|
||||
Console.WriteLine("Options:");
|
||||
Console.WriteLine("-?, -h, --help Display this help text and quit");
|
||||
Console.WriteLine("-d, --debug Enable debug mode");
|
||||
#if NET6_0_OR_GREATER
|
||||
#if NETCOREAPP
|
||||
Console.WriteLine("-j, --json Print info as JSON");
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -48,11 +48,7 @@ namespace InfoPrint
|
||||
}
|
||||
else if (Directory.Exists(path))
|
||||
{
|
||||
#if NET20 || NET35
|
||||
foreach (string file in Directory.GetFiles(path, "*", SearchOption.AllDirectories))
|
||||
#else
|
||||
foreach (string file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories))
|
||||
#endif
|
||||
foreach (string file in IOExtensions.SafeEnumerateFiles(path, "*", SearchOption.AllDirectories))
|
||||
{
|
||||
PrintFileInfo(file, json, debug);
|
||||
}
|
||||
@@ -99,7 +95,7 @@ namespace InfoPrint
|
||||
// Get the base info output name
|
||||
string filenameBase = $"info-{DateTime.Now:yyyy-MM-dd_HHmmss.ffff}";
|
||||
|
||||
#if NET6_0_OR_GREATER
|
||||
#if NETCOREAPP
|
||||
// If we have the JSON flag
|
||||
if (json)
|
||||
{
|
||||
|
||||
173
SabreTools.Serialization.Test/CrossModel/ArchiveDotOrgTests.cs
Normal file
173
SabreTools.Serialization.Test/CrossModel/ArchiveDotOrgTests.cs
Normal file
@@ -0,0 +1,173 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class ArchiveDotOrgTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.ArchiveDotOrg();
|
||||
|
||||
// Build the data
|
||||
Models.ArchiveDotOrg.Files files = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(files);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.ArchiveDotOrg.Files? newFiles = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newFiles);
|
||||
Assert.NotNull(newFiles.File);
|
||||
var newFile = Assert.Single(newFiles.File);
|
||||
Validate(newFile);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.ArchiveDotOrg.Files Build()
|
||||
{
|
||||
var file = new Models.ArchiveDotOrg.File
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Source = "XXXXXX",
|
||||
BitTorrentMagnetHash = "XXXXXX",
|
||||
LastModifiedTime = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
CRC32 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
FileCount = "XXXXXX",
|
||||
Format = "XXXXXX",
|
||||
Original = "XXXXXX",
|
||||
Summation = "XXXXXX",
|
||||
MatrixNumber = "XXXXXX",
|
||||
CollectionCatalogNumber = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
ASRDetectedLang = "XXXXXX",
|
||||
ASRDetectedLangConf = "XXXXXX",
|
||||
ASRTranscribedLang = "XXXXXX",
|
||||
WhisperASRModuleVersion = "XXXXXX",
|
||||
WhisperModelHash = "XXXXXX",
|
||||
WhisperModelName = "XXXXXX",
|
||||
WhisperVersion = "XXXXXX",
|
||||
ClothCoverDetectionModuleVersion = "XXXXXX",
|
||||
hOCRCharToWordhOCRVersion = "XXXXXX",
|
||||
hOCRCharToWordModuleVersion = "XXXXXX",
|
||||
hOCRFtsTexthOCRVersion = "XXXXXX",
|
||||
hOCRFtsTextModuleVersion = "XXXXXX",
|
||||
hOCRPageIndexhOCRVersion = "XXXXXX",
|
||||
hOCRPageIndexModuleVersion = "XXXXXX",
|
||||
TesseractOCR = "XXXXXX",
|
||||
TesseractOCRConverted = "XXXXXX",
|
||||
TesseractOCRDetectedLang = "XXXXXX",
|
||||
TesseractOCRDetectedLangConf = "XXXXXX",
|
||||
TesseractOCRDetectedScript = "XXXXXX",
|
||||
TesseractOCRDetectedScriptConf = "XXXXXX",
|
||||
TesseractOCRModuleVersion = "XXXXXX",
|
||||
TesseractOCRParameters = "XXXXXX",
|
||||
PDFModuleVersion = "XXXXXX",
|
||||
WordConfidenceInterval0To10 = "XXXXXX",
|
||||
WordConfidenceInterval11To20 = "XXXXXX",
|
||||
WordConfidenceInterval21To30 = "XXXXXX",
|
||||
WordConfidenceInterval31To40 = "XXXXXX",
|
||||
WordConfidenceInterval41To50 = "XXXXXX",
|
||||
WordConfidenceInterval51To60 = "XXXXXX",
|
||||
WordConfidenceInterval61To70 = "XXXXXX",
|
||||
WordConfidenceInterval71To80 = "XXXXXX",
|
||||
WordConfidenceInterval81To90 = "XXXXXX",
|
||||
WordConfidenceInterval91To100 = "XXXXXX",
|
||||
Album = "XXXXXX",
|
||||
Artist = "XXXXXX",
|
||||
Bitrate = "XXXXXX",
|
||||
Creator = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Length = "XXXXXX",
|
||||
PreviewImage = "XXXXXX",
|
||||
Rotation = "XXXXXX",
|
||||
Title = "XXXXXX",
|
||||
Track = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.ArchiveDotOrg.Files
|
||||
{
|
||||
File = [file]
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a File
|
||||
/// </summary>
|
||||
private static void Validate(Models.ArchiveDotOrg.File? file)
|
||||
{
|
||||
Assert.NotNull(file);
|
||||
Assert.Equal("XXXXXX", file.Name);
|
||||
Assert.Equal("XXXXXX", file.Source);
|
||||
Assert.Equal("XXXXXX", file.BitTorrentMagnetHash);
|
||||
Assert.Equal("XXXXXX", file.LastModifiedTime);
|
||||
Assert.Equal("XXXXXX", file.Size);
|
||||
Assert.Equal("XXXXXX", file.MD5);
|
||||
Assert.Equal("XXXXXX", file.CRC32);
|
||||
Assert.Equal("XXXXXX", file.SHA1);
|
||||
Assert.Equal("XXXXXX", file.FileCount);
|
||||
Assert.Equal("XXXXXX", file.Format);
|
||||
Assert.Equal("XXXXXX", file.Original);
|
||||
Assert.Equal("XXXXXX", file.Summation);
|
||||
Assert.Equal("XXXXXX", file.MatrixNumber);
|
||||
Assert.Equal("XXXXXX", file.CollectionCatalogNumber);
|
||||
Assert.Equal("XXXXXX", file.Publisher);
|
||||
Assert.Equal("XXXXXX", file.Comment);
|
||||
Assert.Equal("XXXXXX", file.ASRDetectedLang);
|
||||
Assert.Equal("XXXXXX", file.ASRDetectedLangConf);
|
||||
Assert.Equal("XXXXXX", file.ASRTranscribedLang);
|
||||
Assert.Equal("XXXXXX", file.WhisperASRModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.WhisperModelHash);
|
||||
Assert.Equal("XXXXXX", file.WhisperModelName);
|
||||
Assert.Equal("XXXXXX", file.WhisperVersion);
|
||||
Assert.Equal("XXXXXX", file.ClothCoverDetectionModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRCharToWordhOCRVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRCharToWordModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRFtsTexthOCRVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRFtsTextModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRPageIndexhOCRVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRPageIndexModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCR);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRConverted);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedLang);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedLangConf);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedScript);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedScriptConf);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRParameters);
|
||||
Assert.Equal("XXXXXX", file.PDFModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval0To10);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval11To20);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval21To30);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval31To40);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval41To50);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval51To60);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval61To70);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval71To80);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval81To90);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval91To100);
|
||||
Assert.Equal("XXXXXX", file.Album);
|
||||
Assert.Equal("XXXXXX", file.Artist);
|
||||
Assert.Equal("XXXXXX", file.Bitrate);
|
||||
Assert.Equal("XXXXXX", file.Creator);
|
||||
Assert.Equal("XXXXXX", file.Height);
|
||||
Assert.Equal("XXXXXX", file.Length);
|
||||
Assert.Equal("XXXXXX", file.PreviewImage);
|
||||
Assert.Equal("XXXXXX", file.Rotation);
|
||||
Assert.Equal("XXXXXX", file.Title);
|
||||
Assert.Equal("XXXXXX", file.Track);
|
||||
Assert.Equal("XXXXXX", file.Width);
|
||||
}
|
||||
}
|
||||
}
|
||||
111
SabreTools.Serialization.Test/CrossModel/AttractModeTests.cs
Normal file
111
SabreTools.Serialization.Test/CrossModel/AttractModeTests.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class AttractModeTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.AttractMode();
|
||||
|
||||
// Build the data
|
||||
Models.AttractMode.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.AttractMode.MetadataFile? newMf = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Header);
|
||||
Assert.NotNull(newMf.Row);
|
||||
var newRow = Assert.Single(newMf.Row);
|
||||
Validate(newRow);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.AttractMode.MetadataFile Build()
|
||||
{
|
||||
string[] header = ["header"];
|
||||
|
||||
var row = new Models.AttractMode.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Title = "XXXXXX",
|
||||
Emulator = "XXXXXX",
|
||||
CloneOf = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Manufacturer = "XXXXXX",
|
||||
Category = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
Rotation = "XXXXXX",
|
||||
Control = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
DisplayCount = "XXXXXX",
|
||||
DisplayType = "XXXXXX",
|
||||
AltRomname = "XXXXXX",
|
||||
AltTitle = "XXXXXX",
|
||||
Extra = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
Favorite = "XXXXXX",
|
||||
Tags = "XXXXXX",
|
||||
PlayedCount = "XXXXXX",
|
||||
PlayedTime = "XXXXXX",
|
||||
FileIsAvailable = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.AttractMode.MetadataFile
|
||||
{
|
||||
Header = header,
|
||||
Row = [row],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a header
|
||||
/// </summary>
|
||||
private static void Validate(string[]? header)
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
string column = Assert.Single(header);
|
||||
Assert.Equal("header", column);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void Validate(Models.AttractMode.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("XXXXXX", row.Title);
|
||||
Assert.Equal("XXXXXX", row.Emulator);
|
||||
Assert.Equal("XXXXXX", row.CloneOf);
|
||||
Assert.Equal("XXXXXX", row.Year);
|
||||
Assert.Equal("XXXXXX", row.Manufacturer);
|
||||
Assert.Equal("XXXXXX", row.Category);
|
||||
Assert.Equal("XXXXXX", row.Players);
|
||||
Assert.Equal("XXXXXX", row.Rotation);
|
||||
Assert.Equal("XXXXXX", row.Control);
|
||||
Assert.Equal("XXXXXX", row.Status);
|
||||
Assert.Equal("XXXXXX", row.DisplayCount);
|
||||
Assert.Equal("XXXXXX", row.DisplayType);
|
||||
Assert.Equal("XXXXXX", row.AltRomname);
|
||||
Assert.Equal("XXXXXX", row.AltTitle);
|
||||
Assert.Equal("XXXXXX", row.Extra);
|
||||
Assert.Equal("XXXXXX", row.Buttons);
|
||||
Assert.Equal("XXXXXX", row.Favorite);
|
||||
Assert.Equal("XXXXXX", row.Tags);
|
||||
Assert.Equal("XXXXXX", row.PlayedCount);
|
||||
Assert.Equal("XXXXXX", row.PlayedTime);
|
||||
Assert.Equal("XXXXXX", row.FileIsAvailable);
|
||||
}
|
||||
}
|
||||
}
|
||||
492
SabreTools.Serialization.Test/CrossModel/ClrMameProTests.cs
Normal file
492
SabreTools.Serialization.Test/CrossModel/ClrMameProTests.cs
Normal file
@@ -0,0 +1,492 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class ClrMameProTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Models.ClrMamePro.MetadataFile mf = Build(game: true);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.ClrMamePro.MetadataFile? newMf = serializer.Deserialize(metadata, game: true);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.ClrMamePro);
|
||||
Assert.NotNull(newMf.Game);
|
||||
var newGame = Assert.Single(newMf.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Models.ClrMamePro.MetadataFile mf = Build(game: false);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.ClrMamePro.MetadataFile? newMf = serializer.Deserialize(metadata, game: false);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.ClrMamePro);
|
||||
Assert.NotNull(newMf.Game);
|
||||
var newGame = Assert.Single(newMf.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.ClrMamePro.MetadataFile Build(bool game)
|
||||
{
|
||||
var cmp = new Models.ClrMamePro.ClrMamePro
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
RootDir = "XXXXXX",
|
||||
Category = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Author = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Url = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
ForceMerging = "XXXXXX",
|
||||
ForceZipping = "XXXXXX",
|
||||
ForcePacking = "XXXXXX",
|
||||
};
|
||||
|
||||
var release = new Models.ClrMamePro.Release
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Language = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var biosset = new Models.ClrMamePro.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.ClrMamePro.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Flags = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SHA384 = "XXXXXX",
|
||||
SHA512 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
xxHash364 = "XXXXXX",
|
||||
xxHash3128 = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Offs = "XXXXXX",
|
||||
Serial = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
MIA = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.ClrMamePro.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Flags = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.ClrMamePro.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var archive = new Models.ClrMamePro.Archive
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var media = new Models.ClrMamePro.Media
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
};
|
||||
|
||||
var chip = new Models.ClrMamePro.Chip
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Flags = "XXXXXX",
|
||||
Clock = "XXXXXX",
|
||||
};
|
||||
|
||||
var video = new Models.ClrMamePro.Video
|
||||
{
|
||||
Screen = "XXXXXX",
|
||||
Orientation = "XXXXXX",
|
||||
X = "XXXXXX",
|
||||
Y = "XXXXXX",
|
||||
AspectX = "XXXXXX",
|
||||
AspectY = "XXXXXX",
|
||||
Freq = "XXXXXX",
|
||||
};
|
||||
|
||||
var sound = new Models.ClrMamePro.Sound
|
||||
{
|
||||
Channels = "XXXXXX",
|
||||
};
|
||||
|
||||
var input = new Models.ClrMamePro.Input
|
||||
{
|
||||
Players = "XXXXXX",
|
||||
Control = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
Coins = "XXXXXX",
|
||||
Tilt = "XXXXXX",
|
||||
Service = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipswitch = new Models.ClrMamePro.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Entry = ["XXXXXX"],
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var driver = new Models.ClrMamePro.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Color = "XXXXXX",
|
||||
Sound = "XXXXXX",
|
||||
PaletteSize = "XXXXXX",
|
||||
Blit = "XXXXXX",
|
||||
};
|
||||
|
||||
// TODO: This omits Set, should that have a separate case?
|
||||
Models.ClrMamePro.GameBase gameBase = game
|
||||
? new Models.ClrMamePro.Game()
|
||||
: new Models.ClrMamePro.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.Category = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Release = [release];
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Archive = [archive];
|
||||
gameBase.Media = [media];
|
||||
gameBase.Chip = [chip];
|
||||
gameBase.Video = [video];
|
||||
gameBase.Sound = sound;
|
||||
gameBase.Input = input;
|
||||
gameBase.DipSwitch = [dipswitch];
|
||||
gameBase.Driver = driver;
|
||||
|
||||
return new Models.ClrMamePro.MetadataFile
|
||||
{
|
||||
ClrMamePro = cmp,
|
||||
Game = [gameBase],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ClrMamePro
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.ClrMamePro? cmp)
|
||||
{
|
||||
Assert.NotNull(cmp);
|
||||
Assert.Equal("XXXXXX", cmp.Name);
|
||||
Assert.Equal("XXXXXX", cmp.Description);
|
||||
Assert.Equal("XXXXXX", cmp.RootDir);
|
||||
Assert.Equal("XXXXXX", cmp.Category);
|
||||
Assert.Equal("XXXXXX", cmp.Version);
|
||||
Assert.Equal("XXXXXX", cmp.Date);
|
||||
Assert.Equal("XXXXXX", cmp.Author);
|
||||
Assert.Equal("XXXXXX", cmp.Homepage);
|
||||
Assert.Equal("XXXXXX", cmp.Url);
|
||||
Assert.Equal("XXXXXX", cmp.Comment);
|
||||
Assert.Equal("XXXXXX", cmp.Header);
|
||||
Assert.Equal("XXXXXX", cmp.Type);
|
||||
Assert.Equal("XXXXXX", cmp.ForceMerging);
|
||||
Assert.Equal("XXXXXX", cmp.ForceZipping);
|
||||
Assert.Equal("XXXXXX", cmp.ForcePacking);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.Category);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
|
||||
Assert.NotNull(gb.Release);
|
||||
var release = Assert.Single(gb.Release);
|
||||
Validate(release);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Archive);
|
||||
var archive = Assert.Single(gb.Archive);
|
||||
Validate(archive);
|
||||
|
||||
Assert.NotNull(gb.Media);
|
||||
var media = Assert.Single(gb.Media);
|
||||
Validate(media);
|
||||
|
||||
Assert.NotNull(gb.Chip);
|
||||
var chip = Assert.Single(gb.Chip);
|
||||
Validate(chip);
|
||||
|
||||
Assert.NotNull(gb.Video);
|
||||
var video = Assert.Single(gb.Video);
|
||||
Validate(video);
|
||||
|
||||
Validate(gb.Sound);
|
||||
Validate(gb.Input);
|
||||
|
||||
Assert.NotNull(gb.DipSwitch);
|
||||
var dipswitch = Assert.Single(gb.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
|
||||
Validate(gb.Driver);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Release
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Release? release)
|
||||
{
|
||||
Assert.NotNull(release);
|
||||
Assert.Equal("XXXXXX", release.Name);
|
||||
Assert.Equal("XXXXXX", release.Region);
|
||||
Assert.Equal("XXXXXX", release.Language);
|
||||
Assert.Equal("XXXXXX", release.Date);
|
||||
Assert.Equal("XXXXXX", release.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.MD5);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Flags);
|
||||
Assert.Equal("XXXXXX", rom.Date);
|
||||
Assert.Equal("XXXXXX", rom.SHA256);
|
||||
Assert.Equal("XXXXXX", rom.SHA384);
|
||||
Assert.Equal("XXXXXX", rom.SHA512);
|
||||
Assert.Equal("XXXXXX", rom.SpamSum);
|
||||
Assert.Equal("XXXXXX", rom.xxHash364);
|
||||
Assert.Equal("XXXXXX", rom.xxHash3128);
|
||||
Assert.Equal("XXXXXX", rom.Region);
|
||||
Assert.Equal("XXXXXX", rom.Offs);
|
||||
Assert.Equal("XXXXXX", rom.Serial);
|
||||
Assert.Equal("XXXXXX", rom.Header);
|
||||
Assert.Equal("XXXXXX", rom.Inverted);
|
||||
Assert.Equal("XXXXXX", rom.MIA);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Flags);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Archive
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Archive? archive)
|
||||
{
|
||||
Assert.NotNull(archive);
|
||||
Assert.Equal("XXXXXX", archive.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Media
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Media? media)
|
||||
{
|
||||
Assert.NotNull(media);
|
||||
Assert.Equal("XXXXXX", media.Name);
|
||||
Assert.Equal("XXXXXX", media.MD5);
|
||||
Assert.Equal("XXXXXX", media.SHA1);
|
||||
Assert.Equal("XXXXXX", media.SHA256);
|
||||
Assert.Equal("XXXXXX", media.SpamSum);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Chip
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Chip? chip)
|
||||
{
|
||||
Assert.NotNull(chip);
|
||||
Assert.Equal("XXXXXX", chip.Type);
|
||||
Assert.Equal("XXXXXX", chip.Name);
|
||||
Assert.Equal("XXXXXX", chip.Flags);
|
||||
Assert.Equal("XXXXXX", chip.Clock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Video
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Video? video)
|
||||
{
|
||||
Assert.NotNull(video);
|
||||
Assert.Equal("XXXXXX", video.Screen);
|
||||
Assert.Equal("XXXXXX", video.Orientation);
|
||||
Assert.Equal("XXXXXX", video.X);
|
||||
Assert.Equal("XXXXXX", video.Y);
|
||||
Assert.Equal("XXXXXX", video.AspectX);
|
||||
Assert.Equal("XXXXXX", video.AspectY);
|
||||
Assert.Equal("XXXXXX", video.Freq);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sound
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Sound? sound)
|
||||
{
|
||||
Assert.NotNull(sound);
|
||||
Assert.Equal("XXXXXX", sound.Channels);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Input
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Input? input)
|
||||
{
|
||||
Assert.NotNull(input);
|
||||
Assert.Equal("XXXXXX", input.Players);
|
||||
Assert.Equal("XXXXXX", input.Control);
|
||||
Assert.Equal("XXXXXX", input.Buttons);
|
||||
Assert.Equal("XXXXXX", input.Coins);
|
||||
Assert.Equal("XXXXXX", input.Tilt);
|
||||
Assert.Equal("XXXXXX", input.Service);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
|
||||
Assert.NotNull(dipswitch.Entry);
|
||||
string entry = Assert.Single(dipswitch.Entry);
|
||||
Assert.Equal("XXXXXX", entry);
|
||||
|
||||
Assert.Equal("XXXXXX", dipswitch.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Color);
|
||||
Assert.Equal("XXXXXX", driver.Sound);
|
||||
Assert.Equal("XXXXXX", driver.PaletteSize);
|
||||
Assert.Equal("XXXXXX", driver.Blit);
|
||||
}
|
||||
}
|
||||
}
|
||||
108
SabreTools.Serialization.Test/CrossModel/DosCenterTests.cs
Normal file
108
SabreTools.Serialization.Test/CrossModel/DosCenterTests.cs
Normal file
@@ -0,0 +1,108 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class DosCenterTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.DosCenter();
|
||||
|
||||
// Build the data
|
||||
Models.DosCenter.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.DosCenter.MetadataFile? newMf = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.DosCenter);
|
||||
Assert.NotNull(newMf.Game);
|
||||
var newGame = Assert.Single(newMf.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.DosCenter.MetadataFile Build()
|
||||
{
|
||||
var dc = new Models.DosCenter.DosCenter
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Author = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
};
|
||||
|
||||
var file = new Models.DosCenter.File
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
};
|
||||
|
||||
var game = new Models.DosCenter.Game
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
File = [file],
|
||||
};
|
||||
|
||||
return new Models.DosCenter.MetadataFile
|
||||
{
|
||||
DosCenter = dc,
|
||||
Game = [game],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DosCenter
|
||||
/// </summary>
|
||||
private static void Validate(Models.DosCenter.DosCenter? cmp)
|
||||
{
|
||||
Assert.NotNull(cmp);
|
||||
Assert.Equal("XXXXXX", cmp.Name);
|
||||
Assert.Equal("XXXXXX", cmp.Description);
|
||||
Assert.Equal("XXXXXX", cmp.Version);
|
||||
Assert.Equal("XXXXXX", cmp.Date);
|
||||
Assert.Equal("XXXXXX", cmp.Author);
|
||||
Assert.Equal("XXXXXX", cmp.Homepage);
|
||||
Assert.Equal("XXXXXX", cmp.Comment);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Game
|
||||
/// </summary>
|
||||
private static void Validate(Models.DosCenter.Game? game)
|
||||
{
|
||||
Assert.NotNull(game);
|
||||
Assert.Equal("XXXXXX", game.Name);
|
||||
|
||||
Assert.NotNull(game.File);
|
||||
var file = Assert.Single(game.File);
|
||||
Validate(file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a File
|
||||
/// </summary>
|
||||
private static void Validate(Models.DosCenter.File? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.Date);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class EverdriveSMDBTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.EverdriveSMDB();
|
||||
|
||||
// Build the data
|
||||
Models.EverdriveSMDB.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.EverdriveSMDB.MetadataFile? newMf = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Assert.NotNull(newMf.Row);
|
||||
var newRow = Assert.Single(newMf.Row);
|
||||
Validate(newRow);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.EverdriveSMDB.MetadataFile Build()
|
||||
{
|
||||
var row = new Models.EverdriveSMDB.Row
|
||||
{
|
||||
SHA256 = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
CRC32 = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.EverdriveSMDB.MetadataFile
|
||||
{
|
||||
Row = [row],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void Validate(Models.EverdriveSMDB.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.SHA256);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.CRC32);
|
||||
Assert.Equal("XXXXXX", row.Size);
|
||||
}
|
||||
}
|
||||
}
|
||||
326
SabreTools.Serialization.Test/CrossModel/HashfileTests.cs
Normal file
326
SabreTools.Serialization.Test/CrossModel/HashfileTests.cs
Normal file
@@ -0,0 +1,326 @@
|
||||
using System;
|
||||
using SabreTools.Hashing;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class HashfileTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripSFVTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.CRC32);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SFV);
|
||||
var newSfv = Assert.Single(newHf.SFV);
|
||||
Validate(newSfv);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMD2Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.MD2);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD2);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.MD2);
|
||||
var newMd2 = Assert.Single(newHf.MD2);
|
||||
Validate(newMd2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMD4Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.MD4);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD4);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.MD4);
|
||||
var newMd4 = Assert.Single(newHf.MD4);
|
||||
Validate(newMd4);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMD5Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.MD5);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.MD5);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.MD5);
|
||||
var newMd5 = Assert.Single(newHf.MD5);
|
||||
Validate(newMd5);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA1Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA1);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA1);
|
||||
var newSha1 = Assert.Single(newHf.SHA1);
|
||||
Validate(newSha1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA256Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA256);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA256);
|
||||
var newSha256 = Assert.Single(newHf.SHA256);
|
||||
Validate(newSha256);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA384Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA384);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA384);
|
||||
var newSha384 = Assert.Single(newHf.SHA384);
|
||||
Validate(newSha384);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA512Test()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SHA512);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA512);
|
||||
var newSha512 = Assert.Single(newHf.SHA512);
|
||||
Validate(newSha512);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSpamSumTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(hf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = serializer.Deserialize(metadata, HashType.SpamSum);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SpamSum);
|
||||
var newSpamsum = Assert.Single(newHf.SpamSum);
|
||||
Validate(newSpamsum);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Hashfile.Hashfile Build(HashType hashType)
|
||||
{
|
||||
return hashType switch
|
||||
{
|
||||
HashType.CRC32 => new Models.Hashfile.Hashfile { SFV = [new Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
|
||||
HashType.MD2 => new Models.Hashfile.Hashfile { MD2 = [new Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD4 => new Models.Hashfile.Hashfile { MD4 = [new Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD5 => new Models.Hashfile.Hashfile { MD5 = [new Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA1 => new Models.Hashfile.Hashfile { SHA1 = [new Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA256 => new Models.Hashfile.Hashfile { SHA256 = [new Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA384 => new Models.Hashfile.Hashfile { SHA384 = [new Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA512 => new Models.Hashfile.Hashfile { SHA512 = [new Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SpamSum => new Models.Hashfile.Hashfile { SpamSum = [new Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
_ => throw new ArgumentOutOfRangeException(),
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SFV
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SFV? sfv)
|
||||
{
|
||||
Assert.NotNull(sfv);
|
||||
Assert.Equal("XXXXXX", sfv.File);
|
||||
Assert.Equal("XXXXXX", sfv.Hash);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a MD2
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.MD2? md2)
|
||||
{
|
||||
Assert.NotNull(md2);
|
||||
Assert.Equal("XXXXXX", md2.Hash);
|
||||
Assert.Equal("XXXXXX", md2.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a MD4
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.MD4? md4)
|
||||
{
|
||||
Assert.NotNull(md4);
|
||||
Assert.Equal("XXXXXX", md4.Hash);
|
||||
Assert.Equal("XXXXXX", md4.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a MD5
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.MD5? md5)
|
||||
{
|
||||
Assert.NotNull(md5);
|
||||
Assert.Equal("XXXXXX", md5.Hash);
|
||||
Assert.Equal("XXXXXX", md5.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA1
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA1? sha1)
|
||||
{
|
||||
Assert.NotNull(sha1);
|
||||
Assert.Equal("XXXXXX", sha1.Hash);
|
||||
Assert.Equal("XXXXXX", sha1.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA256
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA256? sha256)
|
||||
{
|
||||
Assert.NotNull(sha256);
|
||||
Assert.Equal("XXXXXX", sha256.Hash);
|
||||
Assert.Equal("XXXXXX", sha256.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA384
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA384? sha384)
|
||||
{
|
||||
Assert.NotNull(sha384);
|
||||
Assert.Equal("XXXXXX", sha384.Hash);
|
||||
Assert.Equal("XXXXXX", sha384.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA512
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA512? sha512)
|
||||
{
|
||||
Assert.NotNull(sha512);
|
||||
Assert.Equal("XXXXXX", sha512.Hash);
|
||||
Assert.Equal("XXXXXX", sha512.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SpamSum
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SpamSum? spamsum)
|
||||
{
|
||||
Assert.NotNull(spamsum);
|
||||
Assert.Equal("XXXXXX", spamsum.Hash);
|
||||
Assert.Equal("XXXXXX", spamsum.File);
|
||||
}
|
||||
}
|
||||
}
|
||||
127
SabreTools.Serialization.Test/CrossModel/ListromTests.cs
Normal file
127
SabreTools.Serialization.Test/CrossModel/ListromTests.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class ListromTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Listrom();
|
||||
|
||||
// Build the data
|
||||
Models.Listrom.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listrom.MetadataFile? newMf = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Assert.NotNull(newMf.Set);
|
||||
Assert.Equal(2, newMf.Set.Length);
|
||||
|
||||
ValidateDevice(newMf.Set[0]);
|
||||
ValidateDriver(newMf.Set[1]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Listrom.MetadataFile Build()
|
||||
{
|
||||
var rom = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
Bad = true,
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
NoGoodDumpKnown = false,
|
||||
};
|
||||
|
||||
var disk = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bad = false,
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
NoGoodDumpKnown = true,
|
||||
};
|
||||
|
||||
var device = new Models.Listrom.Set()
|
||||
{
|
||||
Device = "XXXXXX",
|
||||
Row = [rom],
|
||||
};
|
||||
|
||||
var driver = new Models.Listrom.Set()
|
||||
{
|
||||
Driver = "XXXXXX",
|
||||
Row = [disk],
|
||||
};
|
||||
|
||||
return new Models.Listrom.MetadataFile
|
||||
{
|
||||
Set = [device, driver],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Set
|
||||
/// </summary>
|
||||
private static void ValidateDevice(Models.Listrom.Set? set)
|
||||
{
|
||||
Assert.NotNull(set);
|
||||
Assert.Equal("XXXXXX", set.Device);
|
||||
|
||||
Assert.NotNull(set.Row);
|
||||
var row = Assert.Single(set.Row);
|
||||
ValidateRom(row);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Set
|
||||
/// </summary>
|
||||
private static void ValidateDriver(Models.Listrom.Set? set)
|
||||
{
|
||||
Assert.NotNull(set);
|
||||
Assert.Equal("XXXXXX", set.Driver);
|
||||
|
||||
Assert.NotNull(set.Row);
|
||||
var row = Assert.Single(set.Row);
|
||||
ValidateDisk(row);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateRom(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("XXXXXX", row.Size);
|
||||
Assert.True(row.Bad);
|
||||
Assert.Equal("XXXXXX", row.CRC);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.False(row.NoGoodDumpKnown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateDisk(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.False(row.Bad);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.True(row.NoGoodDumpKnown);
|
||||
}
|
||||
}
|
||||
}
|
||||
878
SabreTools.Serialization.Test/CrossModel/ListxmlTests.cs
Normal file
878
SabreTools.Serialization.Test/CrossModel/ListxmlTests.cs
Normal file
@@ -0,0 +1,878 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class ListxmlTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Listxml();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.Mame mame = Build(game: true);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mame);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listxml.Mame? newMame = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMame);
|
||||
Assert.Equal("XXXXXX", newMame.Build);
|
||||
Assert.Equal("XXXXXX", newMame.Debug);
|
||||
Assert.Equal("XXXXXX", newMame.MameConfig);
|
||||
|
||||
Assert.NotNull(newMame.Game);
|
||||
var newGame = Assert.Single(newMame.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Listxml();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.Mame mame = Build(game: false);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mame);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listxml.Mame? newMame = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMame);
|
||||
Assert.Equal("XXXXXX", newMame.Build);
|
||||
Assert.Equal("XXXXXX", newMame.Debug);
|
||||
Assert.Equal("XXXXXX", newMame.MameConfig);
|
||||
|
||||
Assert.NotNull(newMame.Game);
|
||||
var newGame = Assert.Single(newMame.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Listxml.Mame Build(bool game)
|
||||
{
|
||||
var biosset = new Models.Listxml.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.Listxml.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bios = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Offset = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
Dispose = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.Listxml.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Index = "XXXXXX",
|
||||
Writable = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
};
|
||||
|
||||
var deviceref = new Models.Listxml.DeviceRef
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.Listxml.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var chip = new Models.Listxml.Chip
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
Clock = "XXXXXX",
|
||||
};
|
||||
|
||||
var display = new Models.Listxml.Display
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Rotate = "XXXXXX",
|
||||
FlipX = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
PixClock = "XXXXXX",
|
||||
HTotal = "XXXXXX",
|
||||
HBEnd = "XXXXXX",
|
||||
HBStart = "XXXXXX",
|
||||
VTotal = "XXXXXX",
|
||||
VBEnd = "XXXXXX",
|
||||
VBStart = "XXXXXX",
|
||||
};
|
||||
|
||||
var video = new Models.Listxml.Video
|
||||
{
|
||||
Screen = "XXXXXX",
|
||||
Orientation = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
AspectX = "XXXXXX",
|
||||
AspectY = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
};
|
||||
|
||||
var sound = new Models.Listxml.Sound
|
||||
{
|
||||
Channels = "XXXXXX",
|
||||
};
|
||||
|
||||
var control = new Models.Listxml.Control
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Player = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
ReqButtons = "XXXXXX",
|
||||
Minimum = "XXXXXX",
|
||||
Maximum = "XXXXXX",
|
||||
Sensitivity = "XXXXXX",
|
||||
KeyDelta = "XXXXXX",
|
||||
Reverse = "XXXXXX",
|
||||
Ways = "XXXXXX",
|
||||
Ways2 = "XXXXXX",
|
||||
Ways3 = "XXXXXX",
|
||||
};
|
||||
|
||||
var input = new Models.Listxml.Input
|
||||
{
|
||||
Service = "XXXXXX",
|
||||
Tilt = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
//ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
|
||||
Buttons = "XXXXXX",
|
||||
Coins = "XXXXXX",
|
||||
Control = [control],
|
||||
};
|
||||
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Relation = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var diplocation = new Models.Listxml.DipLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipvalue = new Models.Listxml.DipValue
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var dipswitch = new Models.Listxml.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
DipLocation = [diplocation],
|
||||
DipValue = [dipvalue],
|
||||
};
|
||||
|
||||
var conflocation = new Models.Listxml.ConfLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var confsetting = new Models.Listxml.ConfSetting
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var configuration = new Models.Listxml.Configuration
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
ConfLocation = [conflocation],
|
||||
ConfSetting = [confsetting],
|
||||
};
|
||||
|
||||
var analog = new Models.Listxml.Analog
|
||||
{
|
||||
Mask = "XXXXXX",
|
||||
};
|
||||
|
||||
var port = new Models.Listxml.Port
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Analog = [analog],
|
||||
};
|
||||
|
||||
var adjuster = new Models.Listxml.Adjuster
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var driver = new Models.Listxml.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Color = "XXXXXX",
|
||||
Sound = "XXXXXX",
|
||||
PaletteSize = "XXXXXX",
|
||||
Emulation = "XXXXXX",
|
||||
Cocktail = "XXXXXX",
|
||||
SaveState = "XXXXXX",
|
||||
RequiresArtwork = "XXXXXX",
|
||||
Unofficial = "XXXXXX",
|
||||
NoSoundHardware = "XXXXXX",
|
||||
Incomplete = "XXXXXX",
|
||||
};
|
||||
|
||||
var feature = new Models.Listxml.Feature
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Overall = "XXXXXX",
|
||||
};
|
||||
|
||||
var instance = new Models.Listxml.Instance
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
BriefName = "XXXXXX",
|
||||
};
|
||||
|
||||
var extension = new Models.Listxml.Extension
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var device = new Models.Listxml.Device
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
FixedImage = "XXXXXX",
|
||||
Mandatory = "XXXXXX",
|
||||
Interface = "XXXXXX",
|
||||
Instance = instance,
|
||||
Extension = [extension],
|
||||
};
|
||||
|
||||
var slotOption = new Models.Listxml.SlotOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
DevName = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var slot = new Models.Listxml.Slot
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
SlotOption = [slotOption],
|
||||
};
|
||||
|
||||
var softwarelist = new Models.Listxml.SoftwareList
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Filter = "XXXXXX",
|
||||
};
|
||||
|
||||
var ramoption = new Models.Listxml.RamOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
Models.Listxml.GameBase gameBase = game
|
||||
? new Models.Listxml.Game()
|
||||
: new Models.Listxml.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.SourceFile = "XXXXXX";
|
||||
gameBase.IsBios = "XXXXXX";
|
||||
gameBase.IsDevice = "XXXXXX";
|
||||
gameBase.IsMechanical = "XXXXXX";
|
||||
gameBase.Runnable = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.History = "XXXXXX";
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.DeviceRef = [deviceref];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Chip = [chip];
|
||||
gameBase.Display = [display];
|
||||
gameBase.Video = [video];
|
||||
gameBase.Sound = sound;
|
||||
gameBase.Input = input;
|
||||
gameBase.DipSwitch = [dipswitch];
|
||||
gameBase.Configuration = [configuration];
|
||||
gameBase.Port = [port];
|
||||
gameBase.Adjuster = [adjuster];
|
||||
gameBase.Driver = driver;
|
||||
gameBase.Feature = [feature];
|
||||
gameBase.Device = [device];
|
||||
gameBase.Slot = [slot];
|
||||
gameBase.SoftwareList = [softwarelist];
|
||||
gameBase.RamOption = [ramoption];
|
||||
|
||||
return new Models.Listxml.Mame
|
||||
{
|
||||
Build = "XXXXXX",
|
||||
Debug = "XXXXXX",
|
||||
MameConfig = "XXXXXX",
|
||||
Game = [gameBase],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.SourceFile);
|
||||
Assert.Equal("XXXXXX", gb.IsBios);
|
||||
Assert.Equal("XXXXXX", gb.IsDevice);
|
||||
Assert.Equal("XXXXXX", gb.IsMechanical);
|
||||
Assert.Equal("XXXXXX", gb.Runnable);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.History);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.DeviceRef);
|
||||
var deviceref = Assert.Single(gb.DeviceRef);
|
||||
Validate(deviceref);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Chip);
|
||||
var chip = Assert.Single(gb.Chip);
|
||||
Validate(chip);
|
||||
|
||||
Assert.NotNull(gb.Display);
|
||||
var display = Assert.Single(gb.Display);
|
||||
Validate(display);
|
||||
|
||||
Assert.NotNull(gb.Video);
|
||||
var video = Assert.Single(gb.Video);
|
||||
Validate(video);
|
||||
|
||||
Validate(gb.Sound);
|
||||
Validate(gb.Input);
|
||||
|
||||
Assert.NotNull(gb.DipSwitch);
|
||||
var dipswitch = Assert.Single(gb.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
|
||||
Assert.NotNull(gb.Configuration);
|
||||
var configuration = Assert.Single(gb.Configuration);
|
||||
Validate(configuration);
|
||||
|
||||
Assert.NotNull(gb.Port);
|
||||
var port = Assert.Single(gb.Port);
|
||||
Validate(port);
|
||||
|
||||
Assert.NotNull(gb.Adjuster);
|
||||
var adjuster = Assert.Single(gb.Adjuster);
|
||||
Validate(adjuster);
|
||||
|
||||
Validate(gb.Driver);
|
||||
|
||||
Assert.NotNull(gb.Feature);
|
||||
var feature = Assert.Single(gb.Feature);
|
||||
Validate(feature);
|
||||
|
||||
Assert.NotNull(gb.Device);
|
||||
var device = Assert.Single(gb.Device);
|
||||
Validate(device);
|
||||
|
||||
Assert.NotNull(gb.Slot);
|
||||
var slot = Assert.Single(gb.Slot);
|
||||
Validate(slot);
|
||||
|
||||
Assert.NotNull(gb.SoftwareList);
|
||||
var softwarelist = Assert.Single(gb.SoftwareList);
|
||||
Validate(softwarelist);
|
||||
|
||||
Assert.NotNull(gb.RamOption);
|
||||
var ramoption = Assert.Single(gb.RamOption);
|
||||
Validate(ramoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Bios);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Region);
|
||||
Assert.Equal("XXXXXX", rom.Offset);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Optional);
|
||||
Assert.Equal("XXXXXX", rom.Dispose);
|
||||
Assert.Equal("XXXXXX", rom.SoundOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Region);
|
||||
Assert.Equal("XXXXXX", disk.Index);
|
||||
Assert.Equal("XXXXXX", disk.Writable);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Optional);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DeviceRef
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DeviceRef? deviceref)
|
||||
{
|
||||
Assert.NotNull(deviceref);
|
||||
Assert.Equal("XXXXXX", deviceref.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Chip
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Chip? chip)
|
||||
{
|
||||
Assert.NotNull(chip);
|
||||
Assert.Equal("XXXXXX", chip.Name);
|
||||
Assert.Equal("XXXXXX", chip.Tag);
|
||||
Assert.Equal("XXXXXX", chip.Type);
|
||||
Assert.Equal("XXXXXX", chip.SoundOnly);
|
||||
Assert.Equal("XXXXXX", chip.Clock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Display
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Display? display)
|
||||
{
|
||||
Assert.NotNull(display);
|
||||
Assert.Equal("XXXXXX", display.Tag);
|
||||
Assert.Equal("XXXXXX", display.Type);
|
||||
Assert.Equal("XXXXXX", display.Rotate);
|
||||
Assert.Equal("XXXXXX", display.FlipX);
|
||||
Assert.Equal("XXXXXX", display.Width);
|
||||
Assert.Equal("XXXXXX", display.Height);
|
||||
Assert.Equal("XXXXXX", display.Refresh);
|
||||
Assert.Equal("XXXXXX", display.PixClock);
|
||||
Assert.Equal("XXXXXX", display.HTotal);
|
||||
Assert.Equal("XXXXXX", display.HBEnd);
|
||||
Assert.Equal("XXXXXX", display.HBStart);
|
||||
Assert.Equal("XXXXXX", display.VTotal);
|
||||
Assert.Equal("XXXXXX", display.VBEnd);
|
||||
Assert.Equal("XXXXXX", display.VBStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Video
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Video? video)
|
||||
{
|
||||
Assert.NotNull(video);
|
||||
Assert.Equal("XXXXXX", video.Screen);
|
||||
Assert.Equal("XXXXXX", video.Orientation);
|
||||
Assert.Equal("XXXXXX", video.Width);
|
||||
Assert.Equal("XXXXXX", video.Height);
|
||||
Assert.Equal("XXXXXX", video.AspectX);
|
||||
Assert.Equal("XXXXXX", video.AspectY);
|
||||
Assert.Equal("XXXXXX", video.Refresh);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sound
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sound? sound)
|
||||
{
|
||||
Assert.NotNull(sound);
|
||||
Assert.Equal("XXXXXX", sound.Channels);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Input
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Input? input)
|
||||
{
|
||||
Assert.NotNull(input);
|
||||
Assert.Equal("XXXXXX", input.Service);
|
||||
Assert.Equal("XXXXXX", input.Tilt);
|
||||
Assert.Equal("XXXXXX", input.Players);
|
||||
//Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
|
||||
Assert.Equal("XXXXXX", input.Buttons);
|
||||
Assert.Equal("XXXXXX", input.Coins);
|
||||
|
||||
Assert.NotNull(input.Control);
|
||||
var control = Assert.Single(input.Control);
|
||||
Validate(control);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Control
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Control? control)
|
||||
{
|
||||
Assert.NotNull(control);
|
||||
Assert.Equal("XXXXXX", control.Type);
|
||||
Assert.Equal("XXXXXX", control.Player);
|
||||
Assert.Equal("XXXXXX", control.Buttons);
|
||||
Assert.Equal("XXXXXX", control.ReqButtons);
|
||||
Assert.Equal("XXXXXX", control.Minimum);
|
||||
Assert.Equal("XXXXXX", control.Maximum);
|
||||
Assert.Equal("XXXXXX", control.Sensitivity);
|
||||
Assert.Equal("XXXXXX", control.KeyDelta);
|
||||
Assert.Equal("XXXXXX", control.Reverse);
|
||||
Assert.Equal("XXXXXX", control.Ways);
|
||||
Assert.Equal("XXXXXX", control.Ways2);
|
||||
Assert.Equal("XXXXXX", control.Ways3);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
Assert.Equal("XXXXXX", dipswitch.Tag);
|
||||
Assert.Equal("XXXXXX", dipswitch.Mask);
|
||||
Validate(dipswitch.Condition);
|
||||
|
||||
Assert.NotNull(dipswitch.DipLocation);
|
||||
var diplocation = Assert.Single(dipswitch.DipLocation);
|
||||
Validate(diplocation);
|
||||
|
||||
Assert.NotNull(dipswitch.DipValue);
|
||||
var dipvalue = Assert.Single(dipswitch.DipValue);
|
||||
Validate(dipvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Condition
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Condition? condition)
|
||||
{
|
||||
Assert.NotNull(condition);
|
||||
Assert.Equal("XXXXXX", condition.Tag);
|
||||
Assert.Equal("XXXXXX", condition.Mask);
|
||||
Assert.Equal("XXXXXX", condition.Relation);
|
||||
Assert.Equal("XXXXXX", condition.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipLocation? diplocation)
|
||||
{
|
||||
Assert.NotNull(diplocation);
|
||||
Assert.Equal("XXXXXX", diplocation.Name);
|
||||
Assert.Equal("XXXXXX", diplocation.Number);
|
||||
Assert.Equal("XXXXXX", diplocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipValue
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipValue? dipvalue)
|
||||
{
|
||||
Assert.NotNull(dipvalue);
|
||||
Assert.Equal("XXXXXX", dipvalue.Name);
|
||||
Assert.Equal("XXXXXX", dipvalue.Value);
|
||||
Assert.Equal("XXXXXX", dipvalue.Default);
|
||||
Validate(dipvalue.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Configuration
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Configuration? configuration)
|
||||
{
|
||||
Assert.NotNull(configuration);
|
||||
Assert.Equal("XXXXXX", configuration.Name);
|
||||
Assert.Equal("XXXXXX", configuration.Tag);
|
||||
Assert.Equal("XXXXXX", configuration.Mask);
|
||||
Validate(configuration.Condition);
|
||||
|
||||
Assert.NotNull(configuration.ConfLocation);
|
||||
var conflocation = Assert.Single(configuration.ConfLocation);
|
||||
Validate(conflocation);
|
||||
|
||||
Assert.NotNull(configuration.ConfSetting);
|
||||
var confsetting = Assert.Single(configuration.ConfSetting);
|
||||
Validate(confsetting);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfLocation? conflocation)
|
||||
{
|
||||
Assert.NotNull(conflocation);
|
||||
Assert.Equal("XXXXXX", conflocation.Name);
|
||||
Assert.Equal("XXXXXX", conflocation.Number);
|
||||
Assert.Equal("XXXXXX", conflocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfSetting
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfSetting? confsetting)
|
||||
{
|
||||
Assert.NotNull(confsetting);
|
||||
Assert.Equal("XXXXXX", confsetting.Name);
|
||||
Assert.Equal("XXXXXX", confsetting.Value);
|
||||
Assert.Equal("XXXXXX", confsetting.Default);
|
||||
Validate(confsetting.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Port
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Port? port)
|
||||
{
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("XXXXXX", port.Tag);
|
||||
|
||||
Assert.NotNull(port.Analog);
|
||||
var analog = Assert.Single(port.Analog);
|
||||
Validate(analog);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Analog
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Analog? analog)
|
||||
{
|
||||
Assert.NotNull(analog);
|
||||
Assert.Equal("XXXXXX", analog.Mask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Adjuster
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Adjuster? adjuster)
|
||||
{
|
||||
Assert.NotNull(adjuster);
|
||||
Assert.Equal("XXXXXX", adjuster.Name);
|
||||
Assert.Equal("XXXXXX", adjuster.Default);
|
||||
Validate(adjuster.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Color);
|
||||
Assert.Equal("XXXXXX", driver.Sound);
|
||||
Assert.Equal("XXXXXX", driver.PaletteSize);
|
||||
Assert.Equal("XXXXXX", driver.Emulation);
|
||||
Assert.Equal("XXXXXX", driver.Cocktail);
|
||||
Assert.Equal("XXXXXX", driver.SaveState);
|
||||
Assert.Equal("XXXXXX", driver.RequiresArtwork);
|
||||
Assert.Equal("XXXXXX", driver.Unofficial);
|
||||
Assert.Equal("XXXXXX", driver.NoSoundHardware);
|
||||
Assert.Equal("XXXXXX", driver.Incomplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Feature
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Feature? feature)
|
||||
{
|
||||
Assert.NotNull(feature);
|
||||
Assert.Equal("XXXXXX", feature.Type);
|
||||
Assert.Equal("XXXXXX", feature.Status);
|
||||
Assert.Equal("XXXXXX", feature.Overall);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Device
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Device? device)
|
||||
{
|
||||
Assert.NotNull(device);
|
||||
Assert.Equal("XXXXXX", device.Type);
|
||||
Assert.Equal("XXXXXX", device.Tag);
|
||||
Assert.Equal("XXXXXX", device.FixedImage);
|
||||
Assert.Equal("XXXXXX", device.Mandatory);
|
||||
Assert.Equal("XXXXXX", device.Interface);
|
||||
Validate(device.Instance);
|
||||
|
||||
Assert.NotNull(device.Extension);
|
||||
var extension = Assert.Single(device.Extension);
|
||||
Validate(extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Instance
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Instance? instance)
|
||||
{
|
||||
Assert.NotNull(instance);
|
||||
Assert.Equal("XXXXXX", instance.Name);
|
||||
Assert.Equal("XXXXXX", instance.BriefName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Extension
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Extension? extension)
|
||||
{
|
||||
Assert.NotNull(extension);
|
||||
Assert.Equal("XXXXXX", extension.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Slot
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Slot? slot)
|
||||
{
|
||||
Assert.NotNull(slot);
|
||||
Assert.Equal("XXXXXX", slot.Name);
|
||||
|
||||
Assert.NotNull(slot.SlotOption);
|
||||
var slotoption = Assert.Single(slot.SlotOption);
|
||||
Validate(slotoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SlotOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SlotOption? slotoption)
|
||||
{
|
||||
Assert.NotNull(slotoption);
|
||||
Assert.Equal("XXXXXX", slotoption.Name);
|
||||
Assert.Equal("XXXXXX", slotoption.DevName);
|
||||
Assert.Equal("XXXXXX", slotoption.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SoftwareList
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
|
||||
{
|
||||
Assert.NotNull(softwarelist);
|
||||
Assert.Equal("XXXXXX", softwarelist.Tag);
|
||||
Assert.Equal("XXXXXX", softwarelist.Name);
|
||||
Assert.Equal("XXXXXX", softwarelist.Status);
|
||||
Assert.Equal("XXXXXX", softwarelist.Filter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RamOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.RamOption? ramoption)
|
||||
{
|
||||
Assert.NotNull(ramoption);
|
||||
Assert.Equal("XXXXXX", ramoption.Name);
|
||||
Assert.Equal("XXXXXX", ramoption.Default);
|
||||
Assert.Equal("XXXXXX", ramoption.Content);
|
||||
}
|
||||
}
|
||||
}
|
||||
545
SabreTools.Serialization.Test/CrossModel/LogiqxTests.cs
Normal file
545
SabreTools.Serialization.Test/CrossModel/LogiqxTests.cs
Normal file
@@ -0,0 +1,545 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class LogiqxTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Logiqx();
|
||||
|
||||
// Build the data
|
||||
Models.Logiqx.Datafile df = Build(game: true);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(df);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Logiqx.Datafile? newDf = serializer.Deserialize(metadata, game: true);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newDf);
|
||||
Assert.Equal("XXXXXX", newDf.Build);
|
||||
Assert.Equal("XXXXXX", newDf.Debug);
|
||||
Assert.Equal("XXXXXX", newDf.SchemaLocation);
|
||||
Validate(newDf.Header);
|
||||
|
||||
Assert.NotNull(newDf.Game);
|
||||
var newGame = Assert.Single(newDf.Game);
|
||||
Validate(newGame);
|
||||
|
||||
// TODO: Unsupported
|
||||
Assert.Null(newDf.Dir);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.Logiqx();
|
||||
|
||||
// Build the data
|
||||
Models.Logiqx.Datafile df = Build(game: false);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(df);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Logiqx.Datafile? newDf = serializer.Deserialize(metadata, game: false);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newDf);
|
||||
Assert.Equal("XXXXXX", newDf.Build);
|
||||
Assert.Equal("XXXXXX", newDf.Debug);
|
||||
Assert.Equal("XXXXXX", newDf.SchemaLocation);
|
||||
Validate(newDf.Header);
|
||||
|
||||
Assert.NotNull(newDf.Game);
|
||||
var newGame = Assert.Single(newDf.Game);
|
||||
Validate(newGame);
|
||||
|
||||
// TODO: Unsupported
|
||||
Assert.Null(newDf.Dir);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Logiqx.Datafile Build(bool game)
|
||||
{
|
||||
var clrmamepro = new Models.Logiqx.ClrMamePro
|
||||
{
|
||||
Header = "XXXXXX",
|
||||
ForceMerging = "XXXXXX",
|
||||
ForceNodump = "XXXXXX",
|
||||
ForcePacking = "XXXXXX",
|
||||
};
|
||||
|
||||
var romcenter = new Models.Logiqx.RomCenter
|
||||
{
|
||||
Plugin = "XXXXXX",
|
||||
RomMode = "XXXXXX",
|
||||
BiosMode = "XXXXXX",
|
||||
SampleMode = "XXXXXX",
|
||||
LockRomMode = "XXXXXX",
|
||||
LockBiosMode = "XXXXXX",
|
||||
LockSampleMode = "XXXXXX",
|
||||
};
|
||||
|
||||
var header = new Models.Logiqx.Header
|
||||
{
|
||||
Id = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
RootDir = "XXXXXX",
|
||||
Category = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Author = "XXXXXX",
|
||||
Email = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Url = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
ClrMamePro = clrmamepro,
|
||||
RomCenter = romcenter,
|
||||
};
|
||||
|
||||
var trurip = new Models.Logiqx.Trurip
|
||||
{
|
||||
TitleID = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Developer = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Genre = "XXXXXX",
|
||||
Subgenre = "XXXXXX",
|
||||
Ratings = "XXXXXX",
|
||||
Score = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
Enabled = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
Source = "XXXXXX",
|
||||
CloneOf = "XXXXXX",
|
||||
RelatedTo = "XXXXXX",
|
||||
};
|
||||
|
||||
var release = new Models.Logiqx.Release
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Language = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var biosset = new Models.Logiqx.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.Logiqx.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SHA384 = "XXXXXX",
|
||||
SHA512 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
xxHash364 = "XXXXXX",
|
||||
xxHash3128 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Serial = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
MIA = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.Logiqx.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
};
|
||||
|
||||
var media = new Models.Logiqx.Media
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
};
|
||||
|
||||
var deviceRef = new Models.Logiqx.DeviceRef
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.Logiqx.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var archive = new Models.Logiqx.Archive
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var driver = new Models.Logiqx.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Emulation = "XXXXXX",
|
||||
Cocktail = "XXXXXX",
|
||||
SaveState = "XXXXXX",
|
||||
RequiresArtwork = "XXXXXX",
|
||||
Unofficial = "XXXXXX",
|
||||
NoSoundHardware = "XXXXXX",
|
||||
Incomplete = "XXXXXX",
|
||||
};
|
||||
|
||||
var softwarelist = new Models.Logiqx.SoftwareList
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Filter = "XXXXXX",
|
||||
};
|
||||
|
||||
Models.Logiqx.GameBase gameBase = game
|
||||
? new Models.Logiqx.Game()
|
||||
: new Models.Logiqx.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.SourceFile = "XXXXXX";
|
||||
gameBase.IsBios = "XXXXXX";
|
||||
gameBase.IsDevice = "XXXXXX";
|
||||
gameBase.IsMechanical = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Board = "XXXXXX";
|
||||
gameBase.RebuildTo = "XXXXXX";
|
||||
gameBase.Id = "XXXXXX";
|
||||
gameBase.CloneOfId = "XXXXXX";
|
||||
gameBase.Runnable = "XXXXXX";
|
||||
gameBase.Comment = ["XXXXXX"];
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.Publisher = "XXXXXX";
|
||||
gameBase.Category = ["XXXXXX"];
|
||||
gameBase.Trurip = trurip;
|
||||
gameBase.Release = [release];
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.Media = [media];
|
||||
gameBase.DeviceRef = [deviceRef];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Archive = [archive];
|
||||
gameBase.Driver = driver;
|
||||
gameBase.SoftwareList = [softwarelist];
|
||||
|
||||
return new Models.Logiqx.Datafile
|
||||
{
|
||||
Build = "XXXXXX",
|
||||
Debug = "XXXXXX",
|
||||
SchemaLocation = "XXXXXX",
|
||||
Header = header,
|
||||
Game = [gameBase],
|
||||
// Dir = [dir], // TODO: Unsupported
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Header
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Header? header)
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
Assert.Equal("XXXXXX", header.Id);
|
||||
Assert.Equal("XXXXXX", header.Name);
|
||||
Assert.Equal("XXXXXX", header.Description);
|
||||
Assert.Equal("XXXXXX", header.RootDir);
|
||||
Assert.Equal("XXXXXX", header.Category);
|
||||
Assert.Equal("XXXXXX", header.Version);
|
||||
Assert.Equal("XXXXXX", header.Date);
|
||||
Assert.Equal("XXXXXX", header.Author);
|
||||
Assert.Equal("XXXXXX", header.Email);
|
||||
Assert.Equal("XXXXXX", header.Homepage);
|
||||
Assert.Equal("XXXXXX", header.Url);
|
||||
Assert.Equal("XXXXXX", header.Comment);
|
||||
Assert.Equal("XXXXXX", header.Type);
|
||||
Validate(header.ClrMamePro);
|
||||
Validate(header.RomCenter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ClrMamePro
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.ClrMamePro? cmp)
|
||||
{
|
||||
Assert.NotNull(cmp);
|
||||
Assert.Equal("XXXXXX", cmp.Header);
|
||||
Assert.Equal("XXXXXX", cmp.ForceMerging);
|
||||
Assert.Equal("XXXXXX", cmp.ForceNodump);
|
||||
Assert.Equal("XXXXXX", cmp.ForcePacking);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RomCenter
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.RomCenter? rc)
|
||||
{
|
||||
Assert.NotNull(rc);
|
||||
Assert.Equal("XXXXXX", rc.Plugin);
|
||||
Assert.Equal("XXXXXX", rc.RomMode);
|
||||
Assert.Equal("XXXXXX", rc.BiosMode);
|
||||
Assert.Equal("XXXXXX", rc.SampleMode);
|
||||
Assert.Equal("XXXXXX", rc.LockRomMode);
|
||||
Assert.Equal("XXXXXX", rc.LockBiosMode);
|
||||
Assert.Equal("XXXXXX", rc.LockSampleMode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.SourceFile);
|
||||
Assert.Equal("XXXXXX", gb.IsBios);
|
||||
Assert.Equal("XXXXXX", gb.IsDevice);
|
||||
Assert.Equal("XXXXXX", gb.IsMechanical);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
Assert.Equal("XXXXXX", gb.Board);
|
||||
Assert.Equal("XXXXXX", gb.RebuildTo);
|
||||
Assert.Equal("XXXXXX", gb.Id);
|
||||
Assert.Equal("XXXXXX", gb.CloneOfId);
|
||||
Assert.Equal("XXXXXX", gb.Runnable);
|
||||
|
||||
Assert.NotNull(gb.Comment);
|
||||
string comment = Assert.Single(gb.Comment);
|
||||
Assert.Equal("XXXXXX", comment);
|
||||
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.Publisher);
|
||||
|
||||
Assert.NotNull(gb.Category);
|
||||
string category = Assert.Single(gb.Category);
|
||||
Assert.Equal("XXXXXX", category);
|
||||
|
||||
Validate(gb.Trurip);
|
||||
|
||||
Assert.NotNull(gb.Release);
|
||||
var release = Assert.Single(gb.Release);
|
||||
Validate(release);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.Media);
|
||||
var media = Assert.Single(gb.Media);
|
||||
Validate(media);
|
||||
|
||||
Assert.NotNull(gb.DeviceRef);
|
||||
var deviceref = Assert.Single(gb.DeviceRef);
|
||||
Validate(deviceref);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Archive);
|
||||
var archive = Assert.Single(gb.Archive);
|
||||
Validate(archive);
|
||||
|
||||
Validate(gb.Driver);
|
||||
|
||||
Assert.NotNull(gb.SoftwareList);
|
||||
var softwarelist = Assert.Single(gb.SoftwareList);
|
||||
Validate(softwarelist);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Trurip
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Trurip? trurip)
|
||||
{
|
||||
Assert.NotNull(trurip);
|
||||
Assert.Equal("XXXXXX", trurip.TitleID);
|
||||
Assert.Equal("XXXXXX", trurip.Publisher);
|
||||
Assert.Equal("XXXXXX", trurip.Developer);
|
||||
Assert.Equal("XXXXXX", trurip.Year);
|
||||
Assert.Equal("XXXXXX", trurip.Genre);
|
||||
Assert.Equal("XXXXXX", trurip.Subgenre);
|
||||
Assert.Equal("XXXXXX", trurip.Ratings);
|
||||
Assert.Equal("XXXXXX", trurip.Score);
|
||||
Assert.Equal("XXXXXX", trurip.Players);
|
||||
Assert.Equal("XXXXXX", trurip.Enabled);
|
||||
Assert.Equal("XXXXXX", trurip.CRC);
|
||||
Assert.Equal("XXXXXX", trurip.Source);
|
||||
Assert.Equal("XXXXXX", trurip.CloneOf);
|
||||
Assert.Equal("XXXXXX", trurip.RelatedTo);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Release
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Release? release)
|
||||
{
|
||||
Assert.NotNull(release);
|
||||
Assert.Equal("XXXXXX", release.Name);
|
||||
Assert.Equal("XXXXXX", release.Region);
|
||||
Assert.Equal("XXXXXX", release.Language);
|
||||
Assert.Equal("XXXXXX", release.Date);
|
||||
Assert.Equal("XXXXXX", release.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.MD5);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.SHA256);
|
||||
Assert.Equal("XXXXXX", rom.SHA384);
|
||||
Assert.Equal("XXXXXX", rom.SHA512);
|
||||
Assert.Equal("XXXXXX", rom.SpamSum);
|
||||
Assert.Equal("XXXXXX", rom.xxHash364);
|
||||
Assert.Equal("XXXXXX", rom.xxHash3128);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Serial);
|
||||
Assert.Equal("XXXXXX", rom.Header);
|
||||
Assert.Equal("XXXXXX", rom.Date);
|
||||
Assert.Equal("XXXXXX", rom.Inverted);
|
||||
Assert.Equal("XXXXXX", rom.MIA);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Region);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Media
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Media? media)
|
||||
{
|
||||
Assert.NotNull(media);
|
||||
Assert.Equal("XXXXXX", media.Name);
|
||||
Assert.Equal("XXXXXX", media.MD5);
|
||||
Assert.Equal("XXXXXX", media.SHA1);
|
||||
Assert.Equal("XXXXXX", media.SHA256);
|
||||
Assert.Equal("XXXXXX", media.SpamSum);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DeviceRef
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.DeviceRef? deviceref)
|
||||
{
|
||||
Assert.NotNull(deviceref);
|
||||
Assert.Equal("XXXXXX", deviceref.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Archive
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Archive? archive)
|
||||
{
|
||||
Assert.NotNull(archive);
|
||||
Assert.Equal("XXXXXX", archive.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Emulation);
|
||||
Assert.Equal("XXXXXX", driver.Cocktail);
|
||||
Assert.Equal("XXXXXX", driver.SaveState);
|
||||
Assert.Equal("XXXXXX", driver.RequiresArtwork);
|
||||
Assert.Equal("XXXXXX", driver.Unofficial);
|
||||
Assert.Equal("XXXXXX", driver.NoSoundHardware);
|
||||
Assert.Equal("XXXXXX", driver.Incomplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SoftwareList
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.SoftwareList? softwarelist)
|
||||
{
|
||||
Assert.NotNull(softwarelist);
|
||||
Assert.Equal("XXXXXX", softwarelist.Tag);
|
||||
Assert.Equal("XXXXXX", softwarelist.Name);
|
||||
Assert.Equal("XXXXXX", softwarelist.Status);
|
||||
Assert.Equal("XXXXXX", softwarelist.Filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
872
SabreTools.Serialization.Test/CrossModel/M1Tests.cs
Normal file
872
SabreTools.Serialization.Test/CrossModel/M1Tests.cs
Normal file
@@ -0,0 +1,872 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class M1Tests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.M1();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.M1 m1 = Build(game: true);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listxml.M1? newM1 = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newM1);
|
||||
Assert.Equal("XXXXXX", newM1.Version);
|
||||
|
||||
Assert.NotNull(newM1.Game);
|
||||
var newGame = Assert.Single(newM1.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.M1();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.M1 m1 = Build(game: false);
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(m1);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listxml.M1? newM1 = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newM1);
|
||||
Assert.Equal("XXXXXX", newM1.Version);
|
||||
|
||||
Assert.NotNull(newM1.Game);
|
||||
var newGame = Assert.Single(newM1.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Listxml.M1 Build(bool game)
|
||||
{
|
||||
var biosset = new Models.Listxml.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.Listxml.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bios = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Offset = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
Dispose = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.Listxml.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Index = "XXXXXX",
|
||||
Writable = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
};
|
||||
|
||||
var deviceref = new Models.Listxml.DeviceRef
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.Listxml.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var chip = new Models.Listxml.Chip
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
Clock = "XXXXXX",
|
||||
};
|
||||
|
||||
var display = new Models.Listxml.Display
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Rotate = "XXXXXX",
|
||||
FlipX = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
PixClock = "XXXXXX",
|
||||
HTotal = "XXXXXX",
|
||||
HBEnd = "XXXXXX",
|
||||
HBStart = "XXXXXX",
|
||||
VTotal = "XXXXXX",
|
||||
VBEnd = "XXXXXX",
|
||||
VBStart = "XXXXXX",
|
||||
};
|
||||
|
||||
var video = new Models.Listxml.Video
|
||||
{
|
||||
Screen = "XXXXXX",
|
||||
Orientation = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
AspectX = "XXXXXX",
|
||||
AspectY = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
};
|
||||
|
||||
var sound = new Models.Listxml.Sound
|
||||
{
|
||||
Channels = "XXXXXX",
|
||||
};
|
||||
|
||||
var control = new Models.Listxml.Control
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Player = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
ReqButtons = "XXXXXX",
|
||||
Minimum = "XXXXXX",
|
||||
Maximum = "XXXXXX",
|
||||
Sensitivity = "XXXXXX",
|
||||
KeyDelta = "XXXXXX",
|
||||
Reverse = "XXXXXX",
|
||||
Ways = "XXXXXX",
|
||||
Ways2 = "XXXXXX",
|
||||
Ways3 = "XXXXXX",
|
||||
};
|
||||
|
||||
var input = new Models.Listxml.Input
|
||||
{
|
||||
Service = "XXXXXX",
|
||||
Tilt = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
//ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
|
||||
Buttons = "XXXXXX",
|
||||
Coins = "XXXXXX",
|
||||
Control = [control],
|
||||
};
|
||||
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Relation = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var diplocation = new Models.Listxml.DipLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipvalue = new Models.Listxml.DipValue
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var dipswitch = new Models.Listxml.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
DipLocation = [diplocation],
|
||||
DipValue = [dipvalue],
|
||||
};
|
||||
|
||||
var conflocation = new Models.Listxml.ConfLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var confsetting = new Models.Listxml.ConfSetting
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var configuration = new Models.Listxml.Configuration
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
ConfLocation = [conflocation],
|
||||
ConfSetting = [confsetting],
|
||||
};
|
||||
|
||||
var analog = new Models.Listxml.Analog
|
||||
{
|
||||
Mask = "XXXXXX",
|
||||
};
|
||||
|
||||
var port = new Models.Listxml.Port
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Analog = [analog],
|
||||
};
|
||||
|
||||
var adjuster = new Models.Listxml.Adjuster
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var driver = new Models.Listxml.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Color = "XXXXXX",
|
||||
Sound = "XXXXXX",
|
||||
PaletteSize = "XXXXXX",
|
||||
Emulation = "XXXXXX",
|
||||
Cocktail = "XXXXXX",
|
||||
SaveState = "XXXXXX",
|
||||
RequiresArtwork = "XXXXXX",
|
||||
Unofficial = "XXXXXX",
|
||||
NoSoundHardware = "XXXXXX",
|
||||
Incomplete = "XXXXXX",
|
||||
};
|
||||
|
||||
var feature = new Models.Listxml.Feature
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Overall = "XXXXXX",
|
||||
};
|
||||
|
||||
var instance = new Models.Listxml.Instance
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
BriefName = "XXXXXX",
|
||||
};
|
||||
|
||||
var extension = new Models.Listxml.Extension
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var device = new Models.Listxml.Device
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
FixedImage = "XXXXXX",
|
||||
Mandatory = "XXXXXX",
|
||||
Interface = "XXXXXX",
|
||||
Instance = instance,
|
||||
Extension = [extension],
|
||||
};
|
||||
|
||||
var slotOption = new Models.Listxml.SlotOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
DevName = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var slot = new Models.Listxml.Slot
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
SlotOption = [slotOption],
|
||||
};
|
||||
|
||||
var softwarelist = new Models.Listxml.SoftwareList
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Filter = "XXXXXX",
|
||||
};
|
||||
|
||||
var ramoption = new Models.Listxml.RamOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
Models.Listxml.GameBase gameBase = game
|
||||
? new Models.Listxml.Game()
|
||||
: new Models.Listxml.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.SourceFile = "XXXXXX";
|
||||
gameBase.IsBios = "XXXXXX";
|
||||
gameBase.IsDevice = "XXXXXX";
|
||||
gameBase.IsMechanical = "XXXXXX";
|
||||
gameBase.Runnable = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.History = "XXXXXX";
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.DeviceRef = [deviceref];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Chip = [chip];
|
||||
gameBase.Display = [display];
|
||||
gameBase.Video = [video];
|
||||
gameBase.Sound = sound;
|
||||
gameBase.Input = input;
|
||||
gameBase.DipSwitch = [dipswitch];
|
||||
gameBase.Configuration = [configuration];
|
||||
gameBase.Port = [port];
|
||||
gameBase.Adjuster = [adjuster];
|
||||
gameBase.Driver = driver;
|
||||
gameBase.Feature = [feature];
|
||||
gameBase.Device = [device];
|
||||
gameBase.Slot = [slot];
|
||||
gameBase.SoftwareList = [softwarelist];
|
||||
gameBase.RamOption = [ramoption];
|
||||
|
||||
return new Models.Listxml.M1
|
||||
{
|
||||
Version = "XXXXXX",
|
||||
Game = [gameBase],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.SourceFile);
|
||||
Assert.Equal("XXXXXX", gb.IsBios);
|
||||
Assert.Equal("XXXXXX", gb.IsDevice);
|
||||
Assert.Equal("XXXXXX", gb.IsMechanical);
|
||||
Assert.Equal("XXXXXX", gb.Runnable);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.History);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.DeviceRef);
|
||||
var deviceref = Assert.Single(gb.DeviceRef);
|
||||
Validate(deviceref);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Chip);
|
||||
var chip = Assert.Single(gb.Chip);
|
||||
Validate(chip);
|
||||
|
||||
Assert.NotNull(gb.Display);
|
||||
var display = Assert.Single(gb.Display);
|
||||
Validate(display);
|
||||
|
||||
Assert.NotNull(gb.Video);
|
||||
var video = Assert.Single(gb.Video);
|
||||
Validate(video);
|
||||
|
||||
Validate(gb.Sound);
|
||||
Validate(gb.Input);
|
||||
|
||||
Assert.NotNull(gb.DipSwitch);
|
||||
var dipswitch = Assert.Single(gb.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
|
||||
Assert.NotNull(gb.Configuration);
|
||||
var configuration = Assert.Single(gb.Configuration);
|
||||
Validate(configuration);
|
||||
|
||||
Assert.NotNull(gb.Port);
|
||||
var port = Assert.Single(gb.Port);
|
||||
Validate(port);
|
||||
|
||||
Assert.NotNull(gb.Adjuster);
|
||||
var adjuster = Assert.Single(gb.Adjuster);
|
||||
Validate(adjuster);
|
||||
|
||||
Validate(gb.Driver);
|
||||
|
||||
Assert.NotNull(gb.Feature);
|
||||
var feature = Assert.Single(gb.Feature);
|
||||
Validate(feature);
|
||||
|
||||
Assert.NotNull(gb.Device);
|
||||
var device = Assert.Single(gb.Device);
|
||||
Validate(device);
|
||||
|
||||
Assert.NotNull(gb.Slot);
|
||||
var slot = Assert.Single(gb.Slot);
|
||||
Validate(slot);
|
||||
|
||||
Assert.NotNull(gb.SoftwareList);
|
||||
var softwarelist = Assert.Single(gb.SoftwareList);
|
||||
Validate(softwarelist);
|
||||
|
||||
Assert.NotNull(gb.RamOption);
|
||||
var ramoption = Assert.Single(gb.RamOption);
|
||||
Validate(ramoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Bios);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Region);
|
||||
Assert.Equal("XXXXXX", rom.Offset);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Optional);
|
||||
Assert.Equal("XXXXXX", rom.Dispose);
|
||||
Assert.Equal("XXXXXX", rom.SoundOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Region);
|
||||
Assert.Equal("XXXXXX", disk.Index);
|
||||
Assert.Equal("XXXXXX", disk.Writable);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Optional);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DeviceRef
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DeviceRef? deviceref)
|
||||
{
|
||||
Assert.NotNull(deviceref);
|
||||
Assert.Equal("XXXXXX", deviceref.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Chip
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Chip? chip)
|
||||
{
|
||||
Assert.NotNull(chip);
|
||||
Assert.Equal("XXXXXX", chip.Name);
|
||||
Assert.Equal("XXXXXX", chip.Tag);
|
||||
Assert.Equal("XXXXXX", chip.Type);
|
||||
Assert.Equal("XXXXXX", chip.SoundOnly);
|
||||
Assert.Equal("XXXXXX", chip.Clock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Display
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Display? display)
|
||||
{
|
||||
Assert.NotNull(display);
|
||||
Assert.Equal("XXXXXX", display.Tag);
|
||||
Assert.Equal("XXXXXX", display.Type);
|
||||
Assert.Equal("XXXXXX", display.Rotate);
|
||||
Assert.Equal("XXXXXX", display.FlipX);
|
||||
Assert.Equal("XXXXXX", display.Width);
|
||||
Assert.Equal("XXXXXX", display.Height);
|
||||
Assert.Equal("XXXXXX", display.Refresh);
|
||||
Assert.Equal("XXXXXX", display.PixClock);
|
||||
Assert.Equal("XXXXXX", display.HTotal);
|
||||
Assert.Equal("XXXXXX", display.HBEnd);
|
||||
Assert.Equal("XXXXXX", display.HBStart);
|
||||
Assert.Equal("XXXXXX", display.VTotal);
|
||||
Assert.Equal("XXXXXX", display.VBEnd);
|
||||
Assert.Equal("XXXXXX", display.VBStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Video
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Video? video)
|
||||
{
|
||||
Assert.NotNull(video);
|
||||
Assert.Equal("XXXXXX", video.Screen);
|
||||
Assert.Equal("XXXXXX", video.Orientation);
|
||||
Assert.Equal("XXXXXX", video.Width);
|
||||
Assert.Equal("XXXXXX", video.Height);
|
||||
Assert.Equal("XXXXXX", video.AspectX);
|
||||
Assert.Equal("XXXXXX", video.AspectY);
|
||||
Assert.Equal("XXXXXX", video.Refresh);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sound
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sound? sound)
|
||||
{
|
||||
Assert.NotNull(sound);
|
||||
Assert.Equal("XXXXXX", sound.Channels);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Input
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Input? input)
|
||||
{
|
||||
Assert.NotNull(input);
|
||||
Assert.Equal("XXXXXX", input.Service);
|
||||
Assert.Equal("XXXXXX", input.Tilt);
|
||||
Assert.Equal("XXXXXX", input.Players);
|
||||
//Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
|
||||
Assert.Equal("XXXXXX", input.Buttons);
|
||||
Assert.Equal("XXXXXX", input.Coins);
|
||||
|
||||
Assert.NotNull(input.Control);
|
||||
var control = Assert.Single(input.Control);
|
||||
Validate(control);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Control
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Control? control)
|
||||
{
|
||||
Assert.NotNull(control);
|
||||
Assert.Equal("XXXXXX", control.Type);
|
||||
Assert.Equal("XXXXXX", control.Player);
|
||||
Assert.Equal("XXXXXX", control.Buttons);
|
||||
Assert.Equal("XXXXXX", control.ReqButtons);
|
||||
Assert.Equal("XXXXXX", control.Minimum);
|
||||
Assert.Equal("XXXXXX", control.Maximum);
|
||||
Assert.Equal("XXXXXX", control.Sensitivity);
|
||||
Assert.Equal("XXXXXX", control.KeyDelta);
|
||||
Assert.Equal("XXXXXX", control.Reverse);
|
||||
Assert.Equal("XXXXXX", control.Ways);
|
||||
Assert.Equal("XXXXXX", control.Ways2);
|
||||
Assert.Equal("XXXXXX", control.Ways3);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
Assert.Equal("XXXXXX", dipswitch.Tag);
|
||||
Assert.Equal("XXXXXX", dipswitch.Mask);
|
||||
Validate(dipswitch.Condition);
|
||||
|
||||
Assert.NotNull(dipswitch.DipLocation);
|
||||
var diplocation = Assert.Single(dipswitch.DipLocation);
|
||||
Validate(diplocation);
|
||||
|
||||
Assert.NotNull(dipswitch.DipValue);
|
||||
var dipvalue = Assert.Single(dipswitch.DipValue);
|
||||
Validate(dipvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Condition
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Condition? condition)
|
||||
{
|
||||
Assert.NotNull(condition);
|
||||
Assert.Equal("XXXXXX", condition.Tag);
|
||||
Assert.Equal("XXXXXX", condition.Mask);
|
||||
Assert.Equal("XXXXXX", condition.Relation);
|
||||
Assert.Equal("XXXXXX", condition.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipLocation? diplocation)
|
||||
{
|
||||
Assert.NotNull(diplocation);
|
||||
Assert.Equal("XXXXXX", diplocation.Name);
|
||||
Assert.Equal("XXXXXX", diplocation.Number);
|
||||
Assert.Equal("XXXXXX", diplocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipValue
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipValue? dipvalue)
|
||||
{
|
||||
Assert.NotNull(dipvalue);
|
||||
Assert.Equal("XXXXXX", dipvalue.Name);
|
||||
Assert.Equal("XXXXXX", dipvalue.Value);
|
||||
Assert.Equal("XXXXXX", dipvalue.Default);
|
||||
Validate(dipvalue.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Configuration
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Configuration? configuration)
|
||||
{
|
||||
Assert.NotNull(configuration);
|
||||
Assert.Equal("XXXXXX", configuration.Name);
|
||||
Assert.Equal("XXXXXX", configuration.Tag);
|
||||
Assert.Equal("XXXXXX", configuration.Mask);
|
||||
Validate(configuration.Condition);
|
||||
|
||||
Assert.NotNull(configuration.ConfLocation);
|
||||
var conflocation = Assert.Single(configuration.ConfLocation);
|
||||
Validate(conflocation);
|
||||
|
||||
Assert.NotNull(configuration.ConfSetting);
|
||||
var confsetting = Assert.Single(configuration.ConfSetting);
|
||||
Validate(confsetting);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfLocation? conflocation)
|
||||
{
|
||||
Assert.NotNull(conflocation);
|
||||
Assert.Equal("XXXXXX", conflocation.Name);
|
||||
Assert.Equal("XXXXXX", conflocation.Number);
|
||||
Assert.Equal("XXXXXX", conflocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfSetting
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfSetting? confsetting)
|
||||
{
|
||||
Assert.NotNull(confsetting);
|
||||
Assert.Equal("XXXXXX", confsetting.Name);
|
||||
Assert.Equal("XXXXXX", confsetting.Value);
|
||||
Assert.Equal("XXXXXX", confsetting.Default);
|
||||
Validate(confsetting.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Port
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Port? port)
|
||||
{
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("XXXXXX", port.Tag);
|
||||
|
||||
Assert.NotNull(port.Analog);
|
||||
var analog = Assert.Single(port.Analog);
|
||||
Validate(analog);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Analog
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Analog? analog)
|
||||
{
|
||||
Assert.NotNull(analog);
|
||||
Assert.Equal("XXXXXX", analog.Mask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Adjuster
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Adjuster? adjuster)
|
||||
{
|
||||
Assert.NotNull(adjuster);
|
||||
Assert.Equal("XXXXXX", adjuster.Name);
|
||||
Assert.Equal("XXXXXX", adjuster.Default);
|
||||
Validate(adjuster.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Color);
|
||||
Assert.Equal("XXXXXX", driver.Sound);
|
||||
Assert.Equal("XXXXXX", driver.PaletteSize);
|
||||
Assert.Equal("XXXXXX", driver.Emulation);
|
||||
Assert.Equal("XXXXXX", driver.Cocktail);
|
||||
Assert.Equal("XXXXXX", driver.SaveState);
|
||||
Assert.Equal("XXXXXX", driver.RequiresArtwork);
|
||||
Assert.Equal("XXXXXX", driver.Unofficial);
|
||||
Assert.Equal("XXXXXX", driver.NoSoundHardware);
|
||||
Assert.Equal("XXXXXX", driver.Incomplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Feature
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Feature? feature)
|
||||
{
|
||||
Assert.NotNull(feature);
|
||||
Assert.Equal("XXXXXX", feature.Type);
|
||||
Assert.Equal("XXXXXX", feature.Status);
|
||||
Assert.Equal("XXXXXX", feature.Overall);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Device
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Device? device)
|
||||
{
|
||||
Assert.NotNull(device);
|
||||
Assert.Equal("XXXXXX", device.Type);
|
||||
Assert.Equal("XXXXXX", device.Tag);
|
||||
Assert.Equal("XXXXXX", device.FixedImage);
|
||||
Assert.Equal("XXXXXX", device.Mandatory);
|
||||
Assert.Equal("XXXXXX", device.Interface);
|
||||
Validate(device.Instance);
|
||||
|
||||
Assert.NotNull(device.Extension);
|
||||
var extension = Assert.Single(device.Extension);
|
||||
Validate(extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Instance
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Instance? instance)
|
||||
{
|
||||
Assert.NotNull(instance);
|
||||
Assert.Equal("XXXXXX", instance.Name);
|
||||
Assert.Equal("XXXXXX", instance.BriefName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Extension
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Extension? extension)
|
||||
{
|
||||
Assert.NotNull(extension);
|
||||
Assert.Equal("XXXXXX", extension.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Slot
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Slot? slot)
|
||||
{
|
||||
Assert.NotNull(slot);
|
||||
Assert.Equal("XXXXXX", slot.Name);
|
||||
|
||||
Assert.NotNull(slot.SlotOption);
|
||||
var slotoption = Assert.Single(slot.SlotOption);
|
||||
Validate(slotoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SlotOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SlotOption? slotoption)
|
||||
{
|
||||
Assert.NotNull(slotoption);
|
||||
Assert.Equal("XXXXXX", slotoption.Name);
|
||||
Assert.Equal("XXXXXX", slotoption.DevName);
|
||||
Assert.Equal("XXXXXX", slotoption.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SoftwareList
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
|
||||
{
|
||||
Assert.NotNull(softwarelist);
|
||||
Assert.Equal("XXXXXX", softwarelist.Tag);
|
||||
Assert.Equal("XXXXXX", softwarelist.Name);
|
||||
Assert.Equal("XXXXXX", softwarelist.Status);
|
||||
Assert.Equal("XXXXXX", softwarelist.Filter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RamOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.RamOption? ramoption)
|
||||
{
|
||||
Assert.NotNull(ramoption);
|
||||
Assert.Equal("XXXXXX", ramoption.Name);
|
||||
Assert.Equal("XXXXXX", ramoption.Default);
|
||||
Assert.Equal("XXXXXX", ramoption.Content);
|
||||
}
|
||||
}
|
||||
}
|
||||
450
SabreTools.Serialization.Test/CrossModel/OfflineListTests.cs
Normal file
450
SabreTools.Serialization.Test/CrossModel/OfflineListTests.cs
Normal file
@@ -0,0 +1,450 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class OfflineListTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.OfflineList();
|
||||
|
||||
// Build the data
|
||||
Models.OfflineList.Dat dat = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(dat);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.OfflineList.Dat? newDat = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newDat);
|
||||
Assert.Equal("XXXXXX", newDat.NoNamespaceSchemaLocation);
|
||||
Validate(newDat.Configuration);
|
||||
Validate(newDat.Games);
|
||||
Validate(newDat.GUI);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.OfflineList.Dat Build()
|
||||
{
|
||||
var infos = new Models.OfflineList.Infos
|
||||
{
|
||||
Title = new Models.OfflineList.Title
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Location = new Models.OfflineList.Location
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Publisher = new Models.OfflineList.Publisher
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
SourceRom = new Models.OfflineList.SourceRom
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
SaveType = new Models.OfflineList.SaveType
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
RomSize = new Models.OfflineList.RomSize
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
ReleaseNumber = new Models.OfflineList.ReleaseNumber
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
ImageNumber = new Models.OfflineList.ImageNumber
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
LanguageNumber = new Models.OfflineList.LanguageNumber
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Comment = new Models.OfflineList.Comment
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
RomCRC = new Models.OfflineList.RomCRC
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Im1CRC = new Models.OfflineList.Im1CRC
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Im2CRC = new Models.OfflineList.Im2CRC
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Languages = new Models.OfflineList.Languages
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
};
|
||||
|
||||
var canopen = new Models.OfflineList.CanOpen
|
||||
{
|
||||
Extension = ["XXXXXX"],
|
||||
};
|
||||
|
||||
var daturl = new Models.OfflineList.DatUrl
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var newdat = new Models.OfflineList.NewDat
|
||||
{
|
||||
DatVersionUrl = "XXXXXX",
|
||||
DatUrl = daturl,
|
||||
ImUrl = "XXXXXX",
|
||||
};
|
||||
|
||||
var find = new Models.OfflineList.Find
|
||||
{
|
||||
Operation = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var to = new Models.OfflineList.To
|
||||
{
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Auto = "XXXXXX",
|
||||
Find = [find],
|
||||
};
|
||||
|
||||
var search = new Models.OfflineList.Search
|
||||
{
|
||||
To = [to],
|
||||
};
|
||||
|
||||
var configuration = new Models.OfflineList.Configuration
|
||||
{
|
||||
DatName = "XXXXXX",
|
||||
ImFolder = "XXXXXX",
|
||||
DatVersion = "XXXXXX",
|
||||
System = "XXXXXX",
|
||||
ScreenshotsWidth = "XXXXXX",
|
||||
ScreenshotsHeight = "XXXXXX",
|
||||
Infos = infos,
|
||||
CanOpen = canopen,
|
||||
NewDat = newdat,
|
||||
Search = search,
|
||||
RomTitle = "XXXXXX",
|
||||
};
|
||||
|
||||
var fileromcrc = new Models.OfflineList.FileRomCRC
|
||||
{
|
||||
Extension = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var files = new Models.OfflineList.Files
|
||||
{
|
||||
RomCRC = [fileromcrc],
|
||||
};
|
||||
|
||||
var game = new Models.OfflineList.Game
|
||||
{
|
||||
ImageNumber = "XXXXXX",
|
||||
ReleaseNumber = "XXXXXX",
|
||||
Title = "XXXXXX",
|
||||
SaveType = "XXXXXX",
|
||||
RomSize = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Location = "XXXXXX",
|
||||
SourceRom = "XXXXXX",
|
||||
Language = "XXXXXX",
|
||||
Files = files,
|
||||
Im1CRC = "XXXXXX",
|
||||
Im2CRC = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
DuplicateID = "XXXXXX",
|
||||
};
|
||||
|
||||
var games = new Models.OfflineList.Games
|
||||
{
|
||||
Game = [game],
|
||||
};
|
||||
|
||||
var image = new Models.OfflineList.Image
|
||||
{
|
||||
X = "XXXXXX",
|
||||
Y = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
};
|
||||
|
||||
var images = new Models.OfflineList.Images
|
||||
{
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Image = [image],
|
||||
};
|
||||
|
||||
var gui = new Models.OfflineList.GUI
|
||||
{
|
||||
Images = images,
|
||||
};
|
||||
|
||||
return new Models.OfflineList.Dat
|
||||
{
|
||||
NoNamespaceSchemaLocation = "XXXXXX",
|
||||
Configuration = configuration,
|
||||
Games = games,
|
||||
GUI = gui,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Configuration
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Configuration? configuration)
|
||||
{
|
||||
Assert.NotNull(configuration);
|
||||
Assert.Equal("XXXXXX", configuration.DatName);
|
||||
Assert.Equal("XXXXXX", configuration.ImFolder);
|
||||
Assert.Equal("XXXXXX", configuration.DatVersion);
|
||||
Assert.Equal("XXXXXX", configuration.System);
|
||||
Assert.Equal("XXXXXX", configuration.ScreenshotsWidth);
|
||||
Assert.Equal("XXXXXX", configuration.ScreenshotsHeight);
|
||||
Validate(configuration.Infos);
|
||||
Validate(configuration.CanOpen);
|
||||
Validate(configuration.NewDat);
|
||||
Validate(configuration.Search);
|
||||
Assert.Equal("XXXXXX", configuration.RomTitle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Infos
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Infos? infos)
|
||||
{
|
||||
Assert.NotNull(infos);
|
||||
Validate(infos.Title);
|
||||
Validate(infos.Location);
|
||||
Validate(infos.Publisher);
|
||||
Validate(infos.SourceRom);
|
||||
Validate(infos.SaveType);
|
||||
Validate(infos.RomSize);
|
||||
Validate(infos.ReleaseNumber);
|
||||
Validate(infos.ImageNumber);
|
||||
Validate(infos.LanguageNumber);
|
||||
Validate(infos.Comment);
|
||||
Validate(infos.RomCRC);
|
||||
Validate(infos.Im1CRC);
|
||||
Validate(infos.Im2CRC);
|
||||
Validate(infos.Languages);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a InfoBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.InfoBase? info)
|
||||
{
|
||||
Assert.NotNull(info);
|
||||
Assert.Equal("XXXXXX", info.Visible);
|
||||
Assert.Equal("XXXXXX", info.InNamingOption);
|
||||
Assert.Equal("XXXXXX", info.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a CanOpen
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.CanOpen? canopen)
|
||||
{
|
||||
Assert.NotNull(canopen);
|
||||
Assert.NotNull(canopen.Extension);
|
||||
string extension = Assert.Single(canopen.Extension);
|
||||
Assert.Equal("XXXXXX", extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a NewDat
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.NewDat? newdat)
|
||||
{
|
||||
Assert.NotNull(newdat);
|
||||
Assert.Equal("XXXXXX", newdat.DatVersionUrl);
|
||||
Validate(newdat.DatUrl);
|
||||
Assert.Equal("XXXXXX", newdat.ImUrl);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DatUrl
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.DatUrl? daturl)
|
||||
{
|
||||
Assert.NotNull(daturl);
|
||||
Assert.Equal("XXXXXX", daturl.FileName);
|
||||
Assert.Equal("XXXXXX", daturl.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Search
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Search? search)
|
||||
{
|
||||
Assert.NotNull(search);
|
||||
Assert.NotNull(search.To);
|
||||
var to = Assert.Single(search.To);
|
||||
Validate(to);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a To
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.To? to)
|
||||
{
|
||||
Assert.NotNull(to);
|
||||
Assert.Equal("XXXXXX", to.Value);
|
||||
Assert.Equal("XXXXXX", to.Default);
|
||||
Assert.Equal("XXXXXX", to.Auto);
|
||||
|
||||
Assert.NotNull(to.Find);
|
||||
var find = Assert.Single(to.Find);
|
||||
Validate(find);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Find
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Find? find)
|
||||
{
|
||||
Assert.NotNull(find);
|
||||
Assert.Equal("XXXXXX", find.Operation);
|
||||
Assert.Equal("XXXXXX", find.Value);
|
||||
Assert.Equal("XXXXXX", find.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Games
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Games? games)
|
||||
{
|
||||
Assert.NotNull(games);
|
||||
Assert.NotNull(games.Game);
|
||||
var game = Assert.Single(games.Game);
|
||||
Validate(game);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Game
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Game? game)
|
||||
{
|
||||
Assert.NotNull(game);
|
||||
Assert.Equal("XXXXXX", game.ImageNumber);
|
||||
Assert.Equal("XXXXXX", game.ReleaseNumber);
|
||||
Assert.Equal("XXXXXX", game.Title);
|
||||
Assert.Equal("XXXXXX", game.SaveType);
|
||||
Assert.Equal("0", game.RomSize); // Converted due to filtering
|
||||
Assert.Equal("XXXXXX", game.Publisher);
|
||||
Assert.Equal("XXXXXX", game.Location);
|
||||
Assert.Equal("XXXXXX", game.SourceRom);
|
||||
Assert.Equal("XXXXXX", game.Language);
|
||||
Validate(game.Files);
|
||||
Assert.Equal("XXXXXX", game.Im1CRC);
|
||||
Assert.Equal("XXXXXX", game.Im2CRC);
|
||||
Assert.Equal("XXXXXX", game.Comment);
|
||||
Assert.Equal("XXXXXX", game.DuplicateID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Files
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Files? files)
|
||||
{
|
||||
Assert.NotNull(files);
|
||||
Assert.NotNull(files.RomCRC);
|
||||
var fileromcrc = Assert.Single(files.RomCRC);
|
||||
Validate(fileromcrc);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a FileRomCRC
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.FileRomCRC? fileromcrc)
|
||||
{
|
||||
Assert.NotNull(fileromcrc);
|
||||
Assert.Equal("XXXXXX", fileromcrc.Extension);
|
||||
Assert.Equal("XXXXXX", fileromcrc.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GUI
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.GUI? gui)
|
||||
{
|
||||
Assert.NotNull(gui);
|
||||
Validate(gui.Images);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Images
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Images? images)
|
||||
{
|
||||
Assert.NotNull(images);
|
||||
Assert.Equal("XXXXXX", images.Width);
|
||||
Assert.Equal("XXXXXX", images.Height);
|
||||
|
||||
Assert.NotNull(images.Image);
|
||||
var image = Assert.Single(images.Image);
|
||||
Validate(image);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Image
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Image? image)
|
||||
{
|
||||
Assert.NotNull(image);
|
||||
Assert.Equal("XXXXXX", image.X);
|
||||
Assert.Equal("XXXXXX", image.Y);
|
||||
Assert.Equal("XXXXXX", image.Width);
|
||||
Assert.Equal("XXXXXX", image.Height);
|
||||
}
|
||||
}
|
||||
}
|
||||
156
SabreTools.Serialization.Test/CrossModel/OpenMSXTests.cs
Normal file
156
SabreTools.Serialization.Test/CrossModel/OpenMSXTests.cs
Normal file
@@ -0,0 +1,156 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class OpenMSXTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.OpenMSX();
|
||||
|
||||
// Build the data
|
||||
Models.OpenMSX.SoftwareDb sdb = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(sdb);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.OpenMSX.SoftwareDb? newSdb = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newSdb);
|
||||
Assert.Equal("XXXXXX", newSdb.Timestamp);
|
||||
|
||||
Assert.NotNull(newSdb.Software);
|
||||
var software = Assert.Single(newSdb.Software);
|
||||
Validate(software);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.OpenMSX.SoftwareDb Build()
|
||||
{
|
||||
var original = new Models.OpenMSX.Original
|
||||
{
|
||||
Value = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.OpenMSX.Rom
|
||||
{
|
||||
Start = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Hash = "XXXXXX",
|
||||
Remark = "XXXXXX",
|
||||
};
|
||||
|
||||
var dump_rom = new Models.OpenMSX.Dump
|
||||
{
|
||||
Original = original,
|
||||
Rom = rom,
|
||||
};
|
||||
|
||||
var megarom = new Models.OpenMSX.MegaRom
|
||||
{
|
||||
Start = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Hash = "XXXXXX",
|
||||
Remark = "XXXXXX",
|
||||
};
|
||||
|
||||
var dump_megarom = new Models.OpenMSX.Dump
|
||||
{
|
||||
Original = original,
|
||||
Rom = megarom,
|
||||
};
|
||||
|
||||
var sccpluscart = new Models.OpenMSX.SCCPlusCart
|
||||
{
|
||||
Start = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Hash = "XXXXXX",
|
||||
Remark = "XXXXXX",
|
||||
};
|
||||
|
||||
var dump_sccpluscart = new Models.OpenMSX.Dump
|
||||
{
|
||||
Original = original,
|
||||
Rom = sccpluscart,
|
||||
};
|
||||
|
||||
var software = new Models.OpenMSX.Software
|
||||
{
|
||||
Title = "XXXXXX",
|
||||
GenMSXID = "XXXXXX",
|
||||
System = "XXXXXX",
|
||||
Company = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Country = "XXXXXX",
|
||||
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
|
||||
};
|
||||
|
||||
return new Models.OpenMSX.SoftwareDb
|
||||
{
|
||||
Timestamp = "XXXXXX",
|
||||
Software = [software],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Software
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.Software? software)
|
||||
{
|
||||
Assert.NotNull(software);
|
||||
Assert.Equal("XXXXXX", software.Title);
|
||||
Assert.Equal("XXXXXX", software.GenMSXID);
|
||||
Assert.Equal("XXXXXX", software.System);
|
||||
Assert.Equal("XXXXXX", software.Company);
|
||||
Assert.Equal("XXXXXX", software.Year);
|
||||
Assert.Equal("XXXXXX", software.Country);
|
||||
|
||||
Assert.NotNull(software.Dump);
|
||||
Assert.Equal(3, software.Dump.Length);
|
||||
foreach (var dump in software.Dump)
|
||||
{
|
||||
Validate(dump);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Dump
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.Dump? dump)
|
||||
{
|
||||
Assert.NotNull(dump);
|
||||
Validate(dump.Original);
|
||||
Validate(dump.Rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Original
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.Original? original)
|
||||
{
|
||||
Assert.NotNull(original);
|
||||
Assert.Equal("XXXXXX", original.Value);
|
||||
Assert.Equal("XXXXXX", original.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RomBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.RomBase? rombase)
|
||||
{
|
||||
Assert.NotNull(rombase);
|
||||
Assert.Equal("XXXXXX", rombase.Start);
|
||||
Assert.Equal("XXXXXX", rombase.Type);
|
||||
Assert.Equal("XXXXXX", rombase.Hash);
|
||||
Assert.Equal("XXXXXX", rombase.Remark);
|
||||
}
|
||||
}
|
||||
}
|
||||
153
SabreTools.Serialization.Test/CrossModel/RomCenterTests.cs
Normal file
153
SabreTools.Serialization.Test/CrossModel/RomCenterTests.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class RomCenterTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.RomCenter();
|
||||
|
||||
// Build the data
|
||||
Models.RomCenter.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.RomCenter.MetadataFile? newMf = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Credits);
|
||||
Validate(newMf.Dat);
|
||||
Validate(newMf.Emulator);
|
||||
Validate(newMf.Games);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.RomCenter.MetadataFile Build()
|
||||
{
|
||||
var credits = new Models.RomCenter.Credits
|
||||
{
|
||||
Author = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Email = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Url = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
};
|
||||
|
||||
var dat = new Models.RomCenter.Dat
|
||||
{
|
||||
Version = "XXXXXX",
|
||||
Plugin = "XXXXXX",
|
||||
Split = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
};
|
||||
|
||||
var emulator = new Models.RomCenter.Emulator
|
||||
{
|
||||
RefName = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.RomCenter.Rom
|
||||
{
|
||||
ParentName = "XXXXXX",
|
||||
ParentDescription = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
RomName = "XXXXXX",
|
||||
RomCRC = "XXXXXX",
|
||||
RomSize = "XXXXXX",
|
||||
RomOf = "XXXXXX",
|
||||
MergeName = "XXXXXX",
|
||||
};
|
||||
|
||||
var games = new Models.RomCenter.Games
|
||||
{
|
||||
Rom = [rom],
|
||||
};
|
||||
|
||||
return new Models.RomCenter.MetadataFile
|
||||
{
|
||||
Credits = credits,
|
||||
Dat = dat,
|
||||
Emulator = emulator,
|
||||
Games = games,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Credits
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Credits? credits)
|
||||
{
|
||||
Assert.NotNull(credits);
|
||||
Assert.Equal("XXXXXX", credits.Author);
|
||||
Assert.Equal("XXXXXX", credits.Version);
|
||||
Assert.Equal("XXXXXX", credits.Email);
|
||||
Assert.Equal("XXXXXX", credits.Homepage);
|
||||
Assert.Equal("XXXXXX", credits.Url);
|
||||
Assert.Equal("XXXXXX", credits.Date);
|
||||
Assert.Equal("XXXXXX", credits.Comment);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Dat
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Dat? dat)
|
||||
{
|
||||
Assert.NotNull(dat);
|
||||
Assert.Equal("XXXXXX", dat.Version);
|
||||
Assert.Equal("XXXXXX", dat.Plugin);
|
||||
Assert.Equal("no", dat.Split); // Converted due to filtering
|
||||
Assert.Equal("no", dat.Merge); // Converted due to filtering
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Emulator
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Emulator? emulator)
|
||||
{
|
||||
Assert.NotNull(emulator);
|
||||
Assert.Equal("XXXXXX", emulator.RefName);
|
||||
Assert.Equal("XXXXXX", emulator.Version);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Games
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Games? games)
|
||||
{
|
||||
Assert.NotNull(games);
|
||||
Assert.NotNull(games.Rom);
|
||||
var rom = Assert.Single(games.Rom);
|
||||
Validate(rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.ParentName);
|
||||
Assert.Null(rom.ParentDescription); // This is unmappable
|
||||
Assert.Equal("XXXXXX", rom.GameName);
|
||||
Assert.Equal("XXXXXX", rom.GameDescription);
|
||||
Assert.Equal("XXXXXX", rom.RomName);
|
||||
Assert.Equal("XXXXXX", rom.RomCRC);
|
||||
Assert.Equal("XXXXXX", rom.RomSize);
|
||||
Assert.Equal("XXXXXX", rom.RomOf);
|
||||
Assert.Equal("XXXXXX", rom.MergeName);
|
||||
}
|
||||
}
|
||||
}
|
||||
182
SabreTools.Serialization.Test/CrossModel/SeparatedValueTests.cs
Normal file
182
SabreTools.Serialization.Test/CrossModel/SeparatedValueTests.cs
Normal file
@@ -0,0 +1,182 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class SeparatedValueTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.SeparatedValue();
|
||||
|
||||
// Build the data
|
||||
Models.SeparatedValue.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.SeparatedValue.MetadataFile? newMf = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Header);
|
||||
Assert.NotNull(newMf.Row);
|
||||
Assert.Equal(3, newMf.Row.Length);
|
||||
|
||||
ValidateDisk(newMf.Row[0]);
|
||||
ValidateMedia(newMf.Row[1]);
|
||||
ValidateRom(newMf.Row[2]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.SeparatedValue.MetadataFile Build()
|
||||
{
|
||||
string[] header = ["header"];
|
||||
|
||||
var disk = new Models.SeparatedValue.Row
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
InternalName = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
Type = "disk",
|
||||
DiskName = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
};
|
||||
|
||||
var media = new Models.SeparatedValue.Row
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
InternalName = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
Type = "media",
|
||||
DiskName = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.SeparatedValue.Row
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
InternalName = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
Type = "rom",
|
||||
RomName = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SHA384 = "XXXXXX",
|
||||
SHA512 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.SeparatedValue.MetadataFile
|
||||
{
|
||||
Header = header,
|
||||
Row = [disk, media, rom],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a header
|
||||
/// </summary>
|
||||
private static void Validate(string[]? header)
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
string column = Assert.Single(header);
|
||||
Assert.Equal("header", column);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateDisk(Models.SeparatedValue.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.FileName);
|
||||
Assert.Equal("XXXXXX", row.InternalName);
|
||||
Assert.Equal("XXXXXX", row.Description);
|
||||
Assert.Equal("XXXXXX", row.GameName);
|
||||
Assert.Equal("XXXXXX", row.GameDescription);
|
||||
Assert.Equal("disk", row.Type);
|
||||
Assert.Null(row.RomName);
|
||||
Assert.Equal("XXXXXX", row.DiskName);
|
||||
Assert.Null(row.Size);
|
||||
Assert.Null(row.CRC);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Null(row.SHA256);
|
||||
Assert.Null(row.SHA384);
|
||||
Assert.Null(row.SHA512);
|
||||
Assert.Null(row.SpamSum);
|
||||
Assert.Equal("XXXXXX", row.Status);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateMedia(Models.SeparatedValue.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.FileName);
|
||||
Assert.Equal("XXXXXX", row.InternalName);
|
||||
Assert.Equal("XXXXXX", row.Description);
|
||||
Assert.Equal("XXXXXX", row.GameName);
|
||||
Assert.Equal("XXXXXX", row.GameDescription);
|
||||
Assert.Equal("media", row.Type);
|
||||
Assert.Null(row.RomName);
|
||||
Assert.Equal("XXXXXX", row.DiskName);
|
||||
Assert.Null(row.Size);
|
||||
Assert.Null(row.CRC);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Equal("XXXXXX", row.SHA256);
|
||||
Assert.Null(row.SHA384);
|
||||
Assert.Null(row.SHA512);
|
||||
Assert.Equal("XXXXXX", row.SpamSum);
|
||||
Assert.Null(row.Status);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateRom(Models.SeparatedValue.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.FileName);
|
||||
Assert.Equal("XXXXXX", row.InternalName);
|
||||
Assert.Equal("XXXXXX", row.Description);
|
||||
Assert.Equal("XXXXXX", row.GameName);
|
||||
Assert.Equal("XXXXXX", row.GameDescription);
|
||||
Assert.Equal("rom", row.Type);
|
||||
Assert.Equal("XXXXXX", row.RomName);
|
||||
Assert.Null(row.DiskName);
|
||||
Assert.Equal("XXXXXX", row.Size);
|
||||
Assert.Equal("XXXXXX", row.CRC);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Equal("XXXXXX", row.SHA256);
|
||||
Assert.Equal("XXXXXX", row.SHA384);
|
||||
Assert.Equal("XXXXXX", row.SHA512);
|
||||
Assert.Equal("XXXXXX", row.SpamSum);
|
||||
Assert.Equal("XXXXXX", row.Status);
|
||||
}
|
||||
}
|
||||
}
|
||||
310
SabreTools.Serialization.Test/CrossModel/SoftwareListTests.cs
Normal file
310
SabreTools.Serialization.Test/CrossModel/SoftwareListTests.cs
Normal file
@@ -0,0 +1,310 @@
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.CrossModel
|
||||
{
|
||||
public class SoftwareListTests
|
||||
{
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the cross-model serializer
|
||||
var serializer = new Serialization.CrossModel.SoftwareList();
|
||||
|
||||
// Build the data
|
||||
Models.SoftwareList.SoftwareList sl = Build();
|
||||
|
||||
// Serialize to generic model
|
||||
Models.Metadata.MetadataFile? metadata = serializer.Serialize(sl);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.SoftwareList.SoftwareList? newSl = serializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newSl);
|
||||
Assert.Equal("XXXXXX", newSl.Name);
|
||||
Assert.Equal("XXXXXX", newSl.Description);
|
||||
Assert.Equal("XXXXXX", newSl.Notes);
|
||||
|
||||
Assert.NotNull(newSl.Software);
|
||||
var newSoftware = Assert.Single(newSl.Software);
|
||||
Validate(newSoftware);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.SoftwareList.SoftwareList Build()
|
||||
{
|
||||
var info = new Models.SoftwareList.Info
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var sharedfeat = new Models.SoftwareList.SharedFeat
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var feature = new Models.SoftwareList.Feature
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.SoftwareList.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
Length = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Offset = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
LoadFlag = "XXXXXX",
|
||||
};
|
||||
|
||||
var dataarea = new Models.SoftwareList.DataArea
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Endianness = "XXXXXX",
|
||||
Rom = [rom],
|
||||
};
|
||||
|
||||
var disk = new Models.SoftwareList.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Writeable = "XXXXXX",
|
||||
};
|
||||
|
||||
var diskarea = new Models.SoftwareList.DiskArea
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Disk = [disk],
|
||||
};
|
||||
|
||||
var dipvalue = new Models.SoftwareList.DipValue
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipswitch = new Models.SoftwareList.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
DipValue = [dipvalue],
|
||||
};
|
||||
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Interface = "XXXXXX",
|
||||
Feature = [feature],
|
||||
DataArea = [dataarea],
|
||||
DiskArea = [diskarea],
|
||||
DipSwitch = [dipswitch],
|
||||
};
|
||||
|
||||
var software = new Models.SoftwareList.Software
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
CloneOf = "XXXXXX",
|
||||
Supported = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Notes = "XXXXXX",
|
||||
Info = [info],
|
||||
SharedFeat = [sharedfeat],
|
||||
Part = [part],
|
||||
};
|
||||
|
||||
return new Models.SoftwareList.SoftwareList
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Notes = "XXXXXX",
|
||||
Software = [software],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Software
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Software? software)
|
||||
{
|
||||
Assert.NotNull(software);
|
||||
Assert.Equal("XXXXXX", software.Name);
|
||||
Assert.Equal("XXXXXX", software.CloneOf);
|
||||
Assert.Equal("XXXXXX", software.Supported);
|
||||
Assert.Equal("XXXXXX", software.Description);
|
||||
Assert.Equal("XXXXXX", software.Year);
|
||||
Assert.Equal("XXXXXX", software.Publisher);
|
||||
Assert.Equal("XXXXXX", software.Notes);
|
||||
|
||||
Assert.NotNull(software.Info);
|
||||
var info = Assert.Single(software.Info);
|
||||
Validate(info);
|
||||
|
||||
Assert.NotNull(software.SharedFeat);
|
||||
var sharedfeat = Assert.Single(software.SharedFeat);
|
||||
Validate(sharedfeat);
|
||||
|
||||
Assert.NotNull(software.Part);
|
||||
var part = Assert.Single(software.Part);
|
||||
Validate(part);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Info
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Info? info)
|
||||
{
|
||||
Assert.NotNull(info);
|
||||
Assert.Equal("XXXXXX", info.Name);
|
||||
Assert.Equal("XXXXXX", info.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SharedFeat
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.SharedFeat? sharedfeat)
|
||||
{
|
||||
Assert.NotNull(sharedfeat);
|
||||
Assert.Equal("XXXXXX", sharedfeat.Name);
|
||||
Assert.Equal("XXXXXX", sharedfeat.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Part
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Part? part)
|
||||
{
|
||||
Assert.NotNull(part);
|
||||
Assert.Equal("XXXXXX", part.Name);
|
||||
Assert.Equal("XXXXXX", part.Interface);
|
||||
|
||||
Assert.NotNull(part.Feature);
|
||||
var feature = Assert.Single(part.Feature);
|
||||
Validate(feature);
|
||||
|
||||
Assert.NotNull(part.DataArea);
|
||||
var dataarea = Assert.Single(part.DataArea);
|
||||
Validate(dataarea);
|
||||
|
||||
Assert.NotNull(part.DiskArea);
|
||||
var diskarea = Assert.Single(part.DiskArea);
|
||||
Validate(diskarea);
|
||||
|
||||
Assert.NotNull(part.DipSwitch);
|
||||
var dipswitch = Assert.Single(part.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Feature
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Feature? feature)
|
||||
{
|
||||
Assert.NotNull(feature);
|
||||
Assert.Equal("XXXXXX", feature.Name);
|
||||
Assert.Equal("XXXXXX", feature.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DataArea
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DataArea? dataarea)
|
||||
{
|
||||
Assert.NotNull(dataarea);
|
||||
Assert.Equal("XXXXXX", dataarea.Name);
|
||||
Assert.Equal("XXXXXX", dataarea.Size);
|
||||
Assert.Equal("XXXXXX", dataarea.Width);
|
||||
Assert.Equal("XXXXXX", dataarea.Endianness);
|
||||
|
||||
Assert.NotNull(dataarea.Rom);
|
||||
var rom = Assert.Single(dataarea.Rom);
|
||||
Validate(rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.Length);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Offset);
|
||||
Assert.Equal("XXXXXX", rom.Value);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.LoadFlag);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DiskArea
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DiskArea? diskarea)
|
||||
{
|
||||
Assert.NotNull(diskarea);
|
||||
Assert.Equal("XXXXXX", diskarea.Name);
|
||||
|
||||
Assert.NotNull(diskarea.Disk);
|
||||
var disk = Assert.Single(diskarea.Disk);
|
||||
Validate(disk);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Writeable);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
Assert.Equal("XXXXXX", dipswitch.Tag);
|
||||
Assert.Equal("XXXXXX", dipswitch.Mask);
|
||||
|
||||
Assert.NotNull(dipswitch.DipValue);
|
||||
var dipvalue = Assert.Single(dipswitch.DipValue);
|
||||
Validate(dipvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipValue
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DipValue? dipvalue)
|
||||
{
|
||||
Assert.NotNull(dipvalue);
|
||||
Assert.Equal("XXXXXX", dipvalue.Name);
|
||||
Assert.Equal("XXXXXX", dipvalue.Value);
|
||||
Assert.Equal("XXXXXX", dipvalue.Default);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/AACSTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/AACSTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class AACSTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new AACS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new AACS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new AACS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new AACS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new AACS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new AACS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class ArchiveDotOrgTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new ArchiveDotOrg();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.ArchiveDotOrg();
|
||||
var serializer = new Serialization.Serializers.ArchiveDotOrg();
|
||||
|
||||
// Build the data
|
||||
Models.ArchiveDotOrg.Files files = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(files);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.ArchiveDotOrg.Files? newFiles = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newFiles);
|
||||
Assert.NotNull(newFiles.File);
|
||||
var newFile = Assert.Single(newFiles.File);
|
||||
Validate(newFile);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.ArchiveDotOrg.Files Build()
|
||||
{
|
||||
var file = new Models.ArchiveDotOrg.File
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Source = "XXXXXX",
|
||||
BitTorrentMagnetHash = "XXXXXX",
|
||||
LastModifiedTime = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
CRC32 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
FileCount = "XXXXXX",
|
||||
Format = "XXXXXX",
|
||||
Original = "XXXXXX",
|
||||
Summation = "XXXXXX",
|
||||
MatrixNumber = "XXXXXX",
|
||||
CollectionCatalogNumber = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
ASRDetectedLang = "XXXXXX",
|
||||
ASRDetectedLangConf = "XXXXXX",
|
||||
ASRTranscribedLang = "XXXXXX",
|
||||
WhisperASRModuleVersion = "XXXXXX",
|
||||
WhisperModelHash = "XXXXXX",
|
||||
WhisperModelName = "XXXXXX",
|
||||
WhisperVersion = "XXXXXX",
|
||||
ClothCoverDetectionModuleVersion = "XXXXXX",
|
||||
hOCRCharToWordhOCRVersion = "XXXXXX",
|
||||
hOCRCharToWordModuleVersion = "XXXXXX",
|
||||
hOCRFtsTexthOCRVersion = "XXXXXX",
|
||||
hOCRFtsTextModuleVersion = "XXXXXX",
|
||||
hOCRPageIndexhOCRVersion = "XXXXXX",
|
||||
hOCRPageIndexModuleVersion = "XXXXXX",
|
||||
TesseractOCR = "XXXXXX",
|
||||
TesseractOCRConverted = "XXXXXX",
|
||||
TesseractOCRDetectedLang = "XXXXXX",
|
||||
TesseractOCRDetectedLangConf = "XXXXXX",
|
||||
TesseractOCRDetectedScript = "XXXXXX",
|
||||
TesseractOCRDetectedScriptConf = "XXXXXX",
|
||||
TesseractOCRModuleVersion = "XXXXXX",
|
||||
TesseractOCRParameters = "XXXXXX",
|
||||
PDFModuleVersion = "XXXXXX",
|
||||
WordConfidenceInterval0To10 = "XXXXXX",
|
||||
WordConfidenceInterval11To20 = "XXXXXX",
|
||||
WordConfidenceInterval21To30 = "XXXXXX",
|
||||
WordConfidenceInterval31To40 = "XXXXXX",
|
||||
WordConfidenceInterval41To50 = "XXXXXX",
|
||||
WordConfidenceInterval51To60 = "XXXXXX",
|
||||
WordConfidenceInterval61To70 = "XXXXXX",
|
||||
WordConfidenceInterval71To80 = "XXXXXX",
|
||||
WordConfidenceInterval81To90 = "XXXXXX",
|
||||
WordConfidenceInterval91To100 = "XXXXXX",
|
||||
Album = "XXXXXX",
|
||||
Artist = "XXXXXX",
|
||||
Bitrate = "XXXXXX",
|
||||
Creator = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Length = "XXXXXX",
|
||||
PreviewImage = "XXXXXX",
|
||||
Rotation = "XXXXXX",
|
||||
Title = "XXXXXX",
|
||||
Track = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.ArchiveDotOrg.Files
|
||||
{
|
||||
File = [file]
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a File
|
||||
/// </summary>
|
||||
private static void Validate(Models.ArchiveDotOrg.File? file)
|
||||
{
|
||||
Assert.NotNull(file);
|
||||
Assert.Equal("XXXXXX", file.Name);
|
||||
Assert.Equal("XXXXXX", file.Source);
|
||||
Assert.Equal("XXXXXX", file.BitTorrentMagnetHash);
|
||||
Assert.Equal("XXXXXX", file.LastModifiedTime);
|
||||
Assert.Equal("XXXXXX", file.Size);
|
||||
Assert.Equal("XXXXXX", file.MD5);
|
||||
Assert.Equal("XXXXXX", file.CRC32);
|
||||
Assert.Equal("XXXXXX", file.SHA1);
|
||||
Assert.Equal("XXXXXX", file.FileCount);
|
||||
Assert.Equal("XXXXXX", file.Format);
|
||||
Assert.Equal("XXXXXX", file.Original);
|
||||
Assert.Equal("XXXXXX", file.Summation);
|
||||
Assert.Equal("XXXXXX", file.MatrixNumber);
|
||||
Assert.Equal("XXXXXX", file.CollectionCatalogNumber);
|
||||
Assert.Equal("XXXXXX", file.Publisher);
|
||||
Assert.Equal("XXXXXX", file.Comment);
|
||||
Assert.Equal("XXXXXX", file.ASRDetectedLang);
|
||||
Assert.Equal("XXXXXX", file.ASRDetectedLangConf);
|
||||
Assert.Equal("XXXXXX", file.ASRTranscribedLang);
|
||||
Assert.Equal("XXXXXX", file.WhisperASRModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.WhisperModelHash);
|
||||
Assert.Equal("XXXXXX", file.WhisperModelName);
|
||||
Assert.Equal("XXXXXX", file.WhisperVersion);
|
||||
Assert.Equal("XXXXXX", file.ClothCoverDetectionModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRCharToWordhOCRVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRCharToWordModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRFtsTexthOCRVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRFtsTextModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRPageIndexhOCRVersion);
|
||||
Assert.Equal("XXXXXX", file.hOCRPageIndexModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCR);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRConverted);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedLang);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedLangConf);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedScript);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRDetectedScriptConf);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.TesseractOCRParameters);
|
||||
Assert.Equal("XXXXXX", file.PDFModuleVersion);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval0To10);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval11To20);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval21To30);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval31To40);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval41To50);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval51To60);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval61To70);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval71To80);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval81To90);
|
||||
Assert.Equal("XXXXXX", file.WordConfidenceInterval91To100);
|
||||
Assert.Equal("XXXXXX", file.Album);
|
||||
Assert.Equal("XXXXXX", file.Artist);
|
||||
Assert.Equal("XXXXXX", file.Bitrate);
|
||||
Assert.Equal("XXXXXX", file.Creator);
|
||||
Assert.Equal("XXXXXX", file.Height);
|
||||
Assert.Equal("XXXXXX", file.Length);
|
||||
Assert.Equal("XXXXXX", file.PreviewImage);
|
||||
Assert.Equal("XXXXXX", file.Rotation);
|
||||
Assert.Equal("XXXXXX", file.Title);
|
||||
Assert.Equal("XXXXXX", file.Track);
|
||||
Assert.Equal("XXXXXX", file.Width);
|
||||
}
|
||||
}
|
||||
}
|
||||
217
SabreTools.Serialization.Test/Deserializers/AttractModeTests.cs
Normal file
217
SabreTools.Serialization.Test/Deserializers/AttractModeTests.cs
Normal file
@@ -0,0 +1,217 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class AttractModeTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new AttractMode();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new AttractMode();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new AttractMode();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new AttractMode();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new AttractMode();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
var data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new AttractMode();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripShortTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.AttractMode();
|
||||
var serializer = new Serialization.Serializers.AttractMode();
|
||||
|
||||
// Build the data
|
||||
Models.AttractMode.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf, longHeader: false);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.AttractMode.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Header, longHeader: false);
|
||||
Assert.NotNull(newMf.Row);
|
||||
var newRow = Assert.Single(newMf.Row);
|
||||
Validate(newRow, longHeader: false);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripLongTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.AttractMode();
|
||||
var serializer = new Serialization.Serializers.AttractMode();
|
||||
|
||||
// Build the data
|
||||
Models.AttractMode.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf, longHeader: true);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.AttractMode.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Header, longHeader: true);
|
||||
Assert.NotNull(newMf.Row);
|
||||
var newRow = Assert.Single(newMf.Row);
|
||||
Validate(newRow, longHeader: true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.AttractMode.MetadataFile Build()
|
||||
{
|
||||
string[] header = ["header"];
|
||||
|
||||
var row = new Models.AttractMode.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Title = "XXXXXX",
|
||||
Emulator = "XXXXXX",
|
||||
CloneOf = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Manufacturer = "XXXXXX",
|
||||
Category = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
Rotation = "XXXXXX",
|
||||
Control = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
DisplayCount = "XXXXXX",
|
||||
DisplayType = "XXXXXX",
|
||||
AltRomname = "XXXXXX",
|
||||
AltTitle = "XXXXXX",
|
||||
Extra = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
Favorite = "XXXXXX",
|
||||
Tags = "XXXXXX",
|
||||
PlayedCount = "XXXXXX",
|
||||
PlayedTime = "XXXXXX",
|
||||
FileIsAvailable = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.AttractMode.MetadataFile
|
||||
{
|
||||
Header = header,
|
||||
Row = [row],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a header
|
||||
/// </summary>
|
||||
private static void Validate(string[]? header, bool longHeader)
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
if (longHeader)
|
||||
Assert.True(Serialization.Serializers.AttractMode.HeaderArrayWithRomname.SequenceEqual(header));
|
||||
else
|
||||
Assert.True(Serialization.Serializers.AttractMode.HeaderArrayWithoutRomname.SequenceEqual(header));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void Validate(Models.AttractMode.Row? row, bool longHeader)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("XXXXXX", row.Title);
|
||||
Assert.Equal("XXXXXX", row.Emulator);
|
||||
Assert.Equal("XXXXXX", row.CloneOf);
|
||||
Assert.Equal("XXXXXX", row.Year);
|
||||
Assert.Equal("XXXXXX", row.Manufacturer);
|
||||
Assert.Equal("XXXXXX", row.Category);
|
||||
Assert.Equal("XXXXXX", row.Players);
|
||||
Assert.Equal("XXXXXX", row.Rotation);
|
||||
Assert.Equal("XXXXXX", row.Control);
|
||||
Assert.Equal("XXXXXX", row.Status);
|
||||
Assert.Equal("XXXXXX", row.DisplayCount);
|
||||
Assert.Equal("XXXXXX", row.DisplayType);
|
||||
Assert.Equal("XXXXXX", row.AltRomname);
|
||||
Assert.Equal("XXXXXX", row.AltTitle);
|
||||
Assert.Equal("XXXXXX", row.Extra);
|
||||
Assert.Equal("XXXXXX", row.Buttons);
|
||||
if (longHeader)
|
||||
{
|
||||
Assert.Equal("XXXXXX", row.Favorite);
|
||||
Assert.Equal("XXXXXX", row.Tags);
|
||||
Assert.Equal("XXXXXX", row.PlayedCount);
|
||||
Assert.Equal("XXXXXX", row.PlayedTime);
|
||||
Assert.Equal("XXXXXX", row.FileIsAvailable);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Null(row.Favorite);
|
||||
Assert.Null(row.Tags);
|
||||
Assert.Null(row.PlayedCount);
|
||||
Assert.Null(row.PlayedTime);
|
||||
Assert.Null(row.FileIsAvailable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/BDPlusTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/BDPlusTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class BDPlusTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new BDPlus();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new BDPlus();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new BDPlus();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new BDPlus();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new BDPlus();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new BDPlus();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/BFPKTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/BFPKTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class BFPKTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new BFPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new BFPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new BFPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new BFPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new BFPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new BFPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/BSPTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/BSPTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class BSPTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new BSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new BSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new BSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new BSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new BSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new BSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/CFBTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/CFBTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class CFBTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new CFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new CFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new CFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new CFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new CFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new CFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/CHDTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/CHDTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class CHDTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new CHD();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new CHD();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new CHD();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new CHD();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new CHD();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new CHD();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/CIATests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/CIATests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class CIATests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new CIA();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new CIA();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new CIA();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new CIA();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new CIA();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new CIA();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/CatalogTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/CatalogTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class CatalogTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Catalog();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Catalog();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Catalog();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Catalog();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Catalog();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Catalog();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
561
SabreTools.Serialization.Test/Deserializers/ClrMameProTests.cs
Normal file
561
SabreTools.Serialization.Test/Deserializers/ClrMameProTests.cs
Normal file
@@ -0,0 +1,561 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class ClrMameProTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new ClrMamePro();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new ClrMamePro();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new ClrMamePro();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new ClrMamePro();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new ClrMamePro();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new ClrMamePro();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.ClrMamePro();
|
||||
var serializer = new Serialization.Serializers.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Models.ClrMamePro.MetadataFile mf = Build(game: true);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.ClrMamePro);
|
||||
Assert.NotNull(newMf.Game);
|
||||
var newGame = Assert.Single(newMf.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.ClrMamePro();
|
||||
var serializer = new Serialization.Serializers.ClrMamePro();
|
||||
|
||||
// Build the data
|
||||
Models.ClrMamePro.MetadataFile mf = Build(game: false);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.ClrMamePro.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.ClrMamePro);
|
||||
Assert.NotNull(newMf.Game);
|
||||
var newGame = Assert.Single(newMf.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.ClrMamePro.MetadataFile Build(bool game)
|
||||
{
|
||||
var cmp = new Models.ClrMamePro.ClrMamePro
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
RootDir = "XXXXXX",
|
||||
Category = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Author = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Url = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
ForceMerging = "XXXXXX",
|
||||
ForceZipping = "XXXXXX",
|
||||
ForcePacking = "XXXXXX",
|
||||
};
|
||||
|
||||
var release = new Models.ClrMamePro.Release
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Language = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var biosset = new Models.ClrMamePro.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.ClrMamePro.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Flags = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SHA384 = "XXXXXX",
|
||||
SHA512 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
xxHash364 = "XXXXXX",
|
||||
xxHash3128 = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Offs = "XXXXXX",
|
||||
Serial = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
MIA = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.ClrMamePro.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Flags = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.ClrMamePro.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var archive = new Models.ClrMamePro.Archive
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var media = new Models.ClrMamePro.Media
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
};
|
||||
|
||||
var chip = new Models.ClrMamePro.Chip
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Flags = "XXXXXX",
|
||||
Clock = "XXXXXX",
|
||||
};
|
||||
|
||||
var video = new Models.ClrMamePro.Video
|
||||
{
|
||||
Screen = "XXXXXX",
|
||||
Orientation = "XXXXXX",
|
||||
X = "XXXXXX",
|
||||
Y = "XXXXXX",
|
||||
AspectX = "XXXXXX",
|
||||
AspectY = "XXXXXX",
|
||||
Freq = "XXXXXX",
|
||||
};
|
||||
|
||||
var sound = new Models.ClrMamePro.Sound
|
||||
{
|
||||
Channels = "XXXXXX",
|
||||
};
|
||||
|
||||
var input = new Models.ClrMamePro.Input
|
||||
{
|
||||
Players = "XXXXXX",
|
||||
Control = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
Coins = "XXXXXX",
|
||||
Tilt = "XXXXXX",
|
||||
Service = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipswitch = new Models.ClrMamePro.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Entry = ["XXXXXX"],
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var driver = new Models.ClrMamePro.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Color = "XXXXXX",
|
||||
Sound = "XXXXXX",
|
||||
PaletteSize = "XXXXXX",
|
||||
Blit = "XXXXXX",
|
||||
};
|
||||
|
||||
// TODO: This omits Set, should that have a separate case?
|
||||
Models.ClrMamePro.GameBase gameBase = game
|
||||
? new Models.ClrMamePro.Game()
|
||||
: new Models.ClrMamePro.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.Category = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Release = [release];
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Archive = [archive];
|
||||
gameBase.Media = [media];
|
||||
gameBase.Chip = [chip];
|
||||
gameBase.Video = [video];
|
||||
gameBase.Sound = sound;
|
||||
gameBase.Input = input;
|
||||
gameBase.DipSwitch = [dipswitch];
|
||||
gameBase.Driver = driver;
|
||||
|
||||
return new Models.ClrMamePro.MetadataFile
|
||||
{
|
||||
ClrMamePro = cmp,
|
||||
Game = [gameBase],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ClrMamePro
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.ClrMamePro? cmp)
|
||||
{
|
||||
Assert.NotNull(cmp);
|
||||
Assert.Equal("XXXXXX", cmp.Name);
|
||||
Assert.Equal("XXXXXX", cmp.Description);
|
||||
Assert.Equal("XXXXXX", cmp.RootDir);
|
||||
Assert.Equal("XXXXXX", cmp.Category);
|
||||
Assert.Equal("XXXXXX", cmp.Version);
|
||||
Assert.Equal("XXXXXX", cmp.Date);
|
||||
Assert.Equal("XXXXXX", cmp.Author);
|
||||
Assert.Equal("XXXXXX", cmp.Homepage);
|
||||
Assert.Equal("XXXXXX", cmp.Url);
|
||||
Assert.Equal("XXXXXX", cmp.Comment);
|
||||
Assert.Equal("XXXXXX", cmp.Header);
|
||||
Assert.Equal("XXXXXX", cmp.Type);
|
||||
Assert.Equal("XXXXXX", cmp.ForceMerging);
|
||||
Assert.Equal("XXXXXX", cmp.ForceZipping);
|
||||
Assert.Equal("XXXXXX", cmp.ForcePacking);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.Category);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
|
||||
Assert.NotNull(gb.Release);
|
||||
var release = Assert.Single(gb.Release);
|
||||
Validate(release);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Archive);
|
||||
var archive = Assert.Single(gb.Archive);
|
||||
Validate(archive);
|
||||
|
||||
Assert.NotNull(gb.Media);
|
||||
var media = Assert.Single(gb.Media);
|
||||
Validate(media);
|
||||
|
||||
Assert.NotNull(gb.Chip);
|
||||
var chip = Assert.Single(gb.Chip);
|
||||
Validate(chip);
|
||||
|
||||
Assert.NotNull(gb.Video);
|
||||
var video = Assert.Single(gb.Video);
|
||||
Validate(video);
|
||||
|
||||
Validate(gb.Sound);
|
||||
Validate(gb.Input);
|
||||
|
||||
Assert.NotNull(gb.DipSwitch);
|
||||
var dipswitch = Assert.Single(gb.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
|
||||
Validate(gb.Driver);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Release
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Release? release)
|
||||
{
|
||||
Assert.NotNull(release);
|
||||
Assert.Equal("XXXXXX", release.Name);
|
||||
Assert.Equal("XXXXXX", release.Region);
|
||||
Assert.Equal("XXXXXX", release.Language);
|
||||
Assert.Equal("XXXXXX", release.Date);
|
||||
Assert.Equal("XXXXXX", release.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.MD5);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Flags);
|
||||
Assert.Equal("XXXXXX", rom.Date);
|
||||
Assert.Equal("XXXXXX", rom.SHA256);
|
||||
Assert.Equal("XXXXXX", rom.SHA384);
|
||||
Assert.Equal("XXXXXX", rom.SHA512);
|
||||
Assert.Equal("XXXXXX", rom.SpamSum);
|
||||
Assert.Equal("XXXXXX", rom.xxHash364);
|
||||
Assert.Equal("XXXXXX", rom.xxHash3128);
|
||||
Assert.Equal("XXXXXX", rom.Region);
|
||||
Assert.Equal("XXXXXX", rom.Offs);
|
||||
Assert.Equal("XXXXXX", rom.Serial);
|
||||
Assert.Equal("XXXXXX", rom.Header);
|
||||
Assert.Equal("XXXXXX", rom.Inverted);
|
||||
Assert.Equal("XXXXXX", rom.MIA);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Flags);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Archive
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Archive? archive)
|
||||
{
|
||||
Assert.NotNull(archive);
|
||||
Assert.Equal("XXXXXX", archive.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Media
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Media? media)
|
||||
{
|
||||
Assert.NotNull(media);
|
||||
Assert.Equal("XXXXXX", media.Name);
|
||||
Assert.Equal("XXXXXX", media.MD5);
|
||||
Assert.Equal("XXXXXX", media.SHA1);
|
||||
Assert.Equal("XXXXXX", media.SHA256);
|
||||
Assert.Equal("XXXXXX", media.SpamSum);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Chip
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Chip? chip)
|
||||
{
|
||||
Assert.NotNull(chip);
|
||||
Assert.Equal("XXXXXX", chip.Type);
|
||||
Assert.Equal("XXXXXX", chip.Name);
|
||||
Assert.Equal("XXXXXX", chip.Flags);
|
||||
Assert.Equal("XXXXXX", chip.Clock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Video
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Video? video)
|
||||
{
|
||||
Assert.NotNull(video);
|
||||
Assert.Equal("XXXXXX", video.Screen);
|
||||
Assert.Equal("XXXXXX", video.Orientation);
|
||||
Assert.Equal("XXXXXX", video.X);
|
||||
Assert.Equal("XXXXXX", video.Y);
|
||||
Assert.Equal("XXXXXX", video.AspectX);
|
||||
Assert.Equal("XXXXXX", video.AspectY);
|
||||
Assert.Equal("XXXXXX", video.Freq);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sound
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Sound? sound)
|
||||
{
|
||||
Assert.NotNull(sound);
|
||||
Assert.Equal("XXXXXX", sound.Channels);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Input
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Input? input)
|
||||
{
|
||||
Assert.NotNull(input);
|
||||
Assert.Equal("XXXXXX", input.Players);
|
||||
Assert.Equal("XXXXXX", input.Control);
|
||||
Assert.Equal("XXXXXX", input.Buttons);
|
||||
Assert.Equal("XXXXXX", input.Coins);
|
||||
Assert.Equal("XXXXXX", input.Tilt);
|
||||
Assert.Equal("XXXXXX", input.Service);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
|
||||
Assert.NotNull(dipswitch.Entry);
|
||||
string entry = Assert.Single(dipswitch.Entry);
|
||||
Assert.Equal("XXXXXX", entry);
|
||||
|
||||
Assert.Equal("XXXXXX", dipswitch.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.ClrMamePro.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Color);
|
||||
Assert.Equal("XXXXXX", driver.Sound);
|
||||
Assert.Equal("XXXXXX", driver.PaletteSize);
|
||||
Assert.Equal("XXXXXX", driver.Blit);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/CueSheetTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/CueSheetTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class CueSheetTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new CueSheet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new CueSheet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new CueSheet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new CueSheet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new CueSheet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new CueSheet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
176
SabreTools.Serialization.Test/Deserializers/DosCenterTests.cs
Normal file
176
SabreTools.Serialization.Test/Deserializers/DosCenterTests.cs
Normal file
@@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class DosCenterTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new DosCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new DosCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new DosCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new DosCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new DosCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new DosCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.DosCenter();
|
||||
var serializer = new Serialization.Serializers.DosCenter();
|
||||
|
||||
// Build the data
|
||||
Models.DosCenter.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.DosCenter.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.DosCenter);
|
||||
Assert.NotNull(newMf.Game);
|
||||
var newGame = Assert.Single(newMf.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.DosCenter.MetadataFile Build()
|
||||
{
|
||||
var dc = new Models.DosCenter.DosCenter
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Author = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
};
|
||||
|
||||
var file = new Models.DosCenter.File
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
Date = "XXXXXX XXXXXX",
|
||||
};
|
||||
|
||||
var game = new Models.DosCenter.Game
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
File = [file],
|
||||
};
|
||||
|
||||
return new Models.DosCenter.MetadataFile
|
||||
{
|
||||
DosCenter = dc,
|
||||
Game = [game],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DosCenter
|
||||
/// </summary>
|
||||
private static void Validate(Models.DosCenter.DosCenter? cmp)
|
||||
{
|
||||
Assert.NotNull(cmp);
|
||||
Assert.Equal("XXXXXX", cmp.Name);
|
||||
Assert.Equal("XXXXXX", cmp.Description);
|
||||
Assert.Equal("XXXXXX", cmp.Version);
|
||||
Assert.Equal("XXXXXX", cmp.Date);
|
||||
Assert.Equal("XXXXXX", cmp.Author);
|
||||
Assert.Equal("XXXXXX", cmp.Homepage);
|
||||
Assert.Equal("XXXXXX", cmp.Comment);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Game
|
||||
/// </summary>
|
||||
private static void Validate(Models.DosCenter.Game? game)
|
||||
{
|
||||
Assert.NotNull(game);
|
||||
Assert.Equal("XXXXXX", game.Name);
|
||||
|
||||
Assert.NotNull(game.File);
|
||||
var file = Assert.Single(game.File);
|
||||
Validate(file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a File
|
||||
/// </summary>
|
||||
private static void Validate(Models.DosCenter.File? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX XXXXXX", rom.Date);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class EverdriveSMDBTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new EverdriveSMDB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new EverdriveSMDB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new EverdriveSMDB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new EverdriveSMDB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new EverdriveSMDB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new EverdriveSMDB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.EverdriveSMDB();
|
||||
var serializer = new Serialization.Serializers.EverdriveSMDB();
|
||||
|
||||
// Build the data
|
||||
Models.EverdriveSMDB.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.EverdriveSMDB.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Assert.NotNull(newMf.Row);
|
||||
var newRow = Assert.Single(newMf.Row);
|
||||
Validate(newRow);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.EverdriveSMDB.MetadataFile Build()
|
||||
{
|
||||
var row = new Models.EverdriveSMDB.Row
|
||||
{
|
||||
SHA256 = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
CRC32 = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.EverdriveSMDB.MetadataFile
|
||||
{
|
||||
Row = [row],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void Validate(Models.EverdriveSMDB.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.SHA256);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.CRC32);
|
||||
Assert.Equal("XXXXXX", row.Size);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/GCFTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/GCFTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class GCFTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new GCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new GCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new GCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new GCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new GCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new GCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
401
SabreTools.Serialization.Test/Deserializers/HashfileTests.cs
Normal file
401
SabreTools.Serialization.Test/Deserializers/HashfileTests.cs
Normal file
@@ -0,0 +1,401 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class HashfileTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Hashfile();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Hashfile();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Hashfile();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Hashfile();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Hashfile();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Hashfile();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSFVTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.CRC32);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.CRC32);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.CRC32);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SFV);
|
||||
var newSfv = Assert.Single(newHf.SFV);
|
||||
Validate(newSfv);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMD2Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.MD2);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.MD2);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD2);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.MD2);
|
||||
var newMd2 = Assert.Single(newHf.MD2);
|
||||
Validate(newMd2);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMD4Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.MD4);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.MD4);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD4);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.MD4);
|
||||
var newMd4 = Assert.Single(newHf.MD4);
|
||||
Validate(newMd4);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMD5Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.MD5);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.MD5);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.MD5);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.MD5);
|
||||
var newMd5 = Assert.Single(newHf.MD5);
|
||||
Validate(newMd5);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA1Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA1);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.SHA1);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA1);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA1);
|
||||
var newSha1 = Assert.Single(newHf.SHA1);
|
||||
Validate(newSha1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA256Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA256);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.SHA256);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA256);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA256);
|
||||
var newSha256 = Assert.Single(newHf.SHA256);
|
||||
Validate(newSha256);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA384Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA384);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.SHA384);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA384);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA384);
|
||||
var newSha384 = Assert.Single(newHf.SHA384);
|
||||
Validate(newSha384);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSHA512Test()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SHA512);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.SHA512);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SHA512);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SHA512);
|
||||
var newSha512 = Assert.Single(newHf.SHA512);
|
||||
Validate(newSha512);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripSpamSumTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Hashfile();
|
||||
var serializer = new Serialization.Serializers.Hashfile();
|
||||
|
||||
// Build the data
|
||||
Models.Hashfile.Hashfile hf = Build(HashType.SpamSum);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(hf, HashType.SpamSum);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Hashfile.Hashfile? newHf = deserializer.Deserialize(actual, HashType.SpamSum);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newHf);
|
||||
Assert.NotNull(newHf.SpamSum);
|
||||
var newSpamsum = Assert.Single(newHf.SpamSum);
|
||||
Validate(newSpamsum);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Hashfile.Hashfile Build(HashType hashType)
|
||||
{
|
||||
return hashType switch
|
||||
{
|
||||
HashType.CRC32 => new Models.Hashfile.Hashfile { SFV = [new Models.Hashfile.SFV { File = "XXXXXX", Hash = "XXXXXX" }] },
|
||||
HashType.MD2 => new Models.Hashfile.Hashfile { MD2 = [new Models.Hashfile.MD2 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD4 => new Models.Hashfile.Hashfile { MD4 = [new Models.Hashfile.MD4 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.MD5 => new Models.Hashfile.Hashfile { MD5 = [new Models.Hashfile.MD5 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA1 => new Models.Hashfile.Hashfile { SHA1 = [new Models.Hashfile.SHA1 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA256 => new Models.Hashfile.Hashfile { SHA256 = [new Models.Hashfile.SHA256 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA384 => new Models.Hashfile.Hashfile { SHA384 = [new Models.Hashfile.SHA384 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SHA512 => new Models.Hashfile.Hashfile { SHA512 = [new Models.Hashfile.SHA512 { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
HashType.SpamSum => new Models.Hashfile.Hashfile { SpamSum = [new Models.Hashfile.SpamSum { Hash = "XXXXXX", File = "XXXXXX" }] },
|
||||
_ => throw new ArgumentOutOfRangeException(),
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SFV
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SFV? sfv)
|
||||
{
|
||||
Assert.NotNull(sfv);
|
||||
Assert.Equal("XXXXXX", sfv.File);
|
||||
Assert.Equal("XXXXXX", sfv.Hash);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a MD2
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.MD2? md2)
|
||||
{
|
||||
Assert.NotNull(md2);
|
||||
Assert.Equal("XXXXXX", md2.Hash);
|
||||
Assert.Equal("XXXXXX", md2.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a MD4
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.MD4? md4)
|
||||
{
|
||||
Assert.NotNull(md4);
|
||||
Assert.Equal("XXXXXX", md4.Hash);
|
||||
Assert.Equal("XXXXXX", md4.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a MD5
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.MD5? md5)
|
||||
{
|
||||
Assert.NotNull(md5);
|
||||
Assert.Equal("XXXXXX", md5.Hash);
|
||||
Assert.Equal("XXXXXX", md5.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA1
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA1? sha1)
|
||||
{
|
||||
Assert.NotNull(sha1);
|
||||
Assert.Equal("XXXXXX", sha1.Hash);
|
||||
Assert.Equal("XXXXXX", sha1.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA256
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA256? sha256)
|
||||
{
|
||||
Assert.NotNull(sha256);
|
||||
Assert.Equal("XXXXXX", sha256.Hash);
|
||||
Assert.Equal("XXXXXX", sha256.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA384
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA384? sha384)
|
||||
{
|
||||
Assert.NotNull(sha384);
|
||||
Assert.Equal("XXXXXX", sha384.Hash);
|
||||
Assert.Equal("XXXXXX", sha384.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SHA512
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SHA512? sha512)
|
||||
{
|
||||
Assert.NotNull(sha512);
|
||||
Assert.Equal("XXXXXX", sha512.Hash);
|
||||
Assert.Equal("XXXXXX", sha512.File);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SpamSum
|
||||
/// </summary>
|
||||
private static void Validate(Models.Hashfile.SpamSum? spamsum)
|
||||
{
|
||||
Assert.NotNull(spamsum);
|
||||
Assert.Equal("XXXXXX", spamsum.Hash);
|
||||
Assert.Equal("XXXXXX", spamsum.File);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/IRDTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/IRDTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class IRDTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new IRD();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new IRD();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new IRD();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new IRD();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new IRD();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new IRD();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class InstallShieldArchiveV3Tests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new InstallShieldArchiveV3();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new InstallShieldArchiveV3();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new InstallShieldArchiveV3();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new InstallShieldArchiveV3();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new InstallShieldArchiveV3();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new InstallShieldArchiveV3();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class InstallShieldCabinetTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new InstallShieldCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new InstallShieldCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new InstallShieldCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new InstallShieldCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new InstallShieldCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new InstallShieldCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class LinearExecutableTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new LinearExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new LinearExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new LinearExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new LinearExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new LinearExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new LinearExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
268
SabreTools.Serialization.Test/Deserializers/ListromTests.cs
Normal file
268
SabreTools.Serialization.Test/Deserializers/ListromTests.cs
Normal file
@@ -0,0 +1,268 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class ListromTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Listrom();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Listrom();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Listrom();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Listrom();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Listrom();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Listrom();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Listrom();
|
||||
var serializer = new Serialization.Serializers.Listrom();
|
||||
|
||||
// Build the data
|
||||
Models.Listrom.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mf);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listrom.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Assert.NotNull(newMf.Set);
|
||||
Assert.Equal(2, newMf.Set.Length);
|
||||
|
||||
ValidateDevice(newMf.Set[0]);
|
||||
ValidateDriver(newMf.Set[1]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Listrom.MetadataFile Build()
|
||||
{
|
||||
var romGood = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "12345",
|
||||
Bad = false,
|
||||
CRC = Hashing.ZeroHash.CRC32Str,
|
||||
SHA1 = Hashing.ZeroHash.SHA1Str,
|
||||
NoGoodDumpKnown = false,
|
||||
};
|
||||
|
||||
var romBad = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "12345",
|
||||
Bad = true,
|
||||
CRC = Hashing.ZeroHash.CRC32Str,
|
||||
SHA1 = Hashing.ZeroHash.SHA1Str,
|
||||
NoGoodDumpKnown = false,
|
||||
};
|
||||
|
||||
var diskGoodMd5 = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bad = false,
|
||||
MD5 = Hashing.ZeroHash.MD5Str,
|
||||
SHA1 = null,
|
||||
NoGoodDumpKnown = false,
|
||||
};
|
||||
|
||||
var diskGoodSha1 = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bad = false,
|
||||
MD5 = null,
|
||||
SHA1 = Hashing.ZeroHash.SHA1Str,
|
||||
NoGoodDumpKnown = false,
|
||||
};
|
||||
|
||||
var diskBad = new Models.Listrom.Row
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bad = false,
|
||||
MD5 = Hashing.ZeroHash.MD5Str,
|
||||
SHA1 = Hashing.ZeroHash.SHA1Str,
|
||||
NoGoodDumpKnown = true,
|
||||
};
|
||||
|
||||
var device = new Models.Listrom.Set()
|
||||
{
|
||||
Device = "XXXXXX",
|
||||
Row = [romGood, romBad],
|
||||
};
|
||||
|
||||
var driver = new Models.Listrom.Set()
|
||||
{
|
||||
Driver = "XXXXXX",
|
||||
Row = [diskGoodMd5, diskGoodSha1, diskBad],
|
||||
};
|
||||
|
||||
return new Models.Listrom.MetadataFile
|
||||
{
|
||||
Set = [device, driver],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Set
|
||||
/// </summary>
|
||||
private static void ValidateDevice(Models.Listrom.Set? set)
|
||||
{
|
||||
Assert.NotNull(set);
|
||||
Assert.Equal("XXXXXX", set.Device);
|
||||
|
||||
Assert.NotNull(set.Row);
|
||||
Assert.Equal(2, set.Row.Length);
|
||||
|
||||
ValidateGoodRom(set.Row[0]);
|
||||
ValidateBadRom(set.Row[1]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Set
|
||||
/// </summary>
|
||||
private static void ValidateDriver(Models.Listrom.Set? set)
|
||||
{
|
||||
Assert.NotNull(set);
|
||||
Assert.Equal("XXXXXX", set.Driver);
|
||||
|
||||
Assert.NotNull(set.Row);
|
||||
Assert.Equal(3, set.Row.Length);
|
||||
|
||||
ValidateGoodMd5Disk(set.Row[0]);
|
||||
ValidateGoodSha1Disk(set.Row[1]);
|
||||
ValidateBadDisk(set.Row[2]);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateGoodRom(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("12345", row.Size);
|
||||
Assert.False(row.Bad);
|
||||
Assert.Equal(Hashing.ZeroHash.CRC32Str, row.CRC);
|
||||
Assert.Equal(Hashing.ZeroHash.SHA1Str, row.SHA1);
|
||||
Assert.False(row.NoGoodDumpKnown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateBadRom(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.Equal("12345", row.Size);
|
||||
Assert.True(row.Bad);
|
||||
Assert.Equal(Hashing.ZeroHash.CRC32Str, row.CRC);
|
||||
Assert.Equal(Hashing.ZeroHash.SHA1Str, row.SHA1);
|
||||
Assert.False(row.NoGoodDumpKnown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateGoodMd5Disk(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.False(row.Bad);
|
||||
Assert.Equal(Hashing.ZeroHash.MD5Str, row.MD5);
|
||||
Assert.Null(row.SHA1);
|
||||
Assert.False(row.NoGoodDumpKnown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateGoodSha1Disk(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.False(row.Bad);
|
||||
Assert.Null(row.MD5);
|
||||
Assert.Equal(Hashing.ZeroHash.SHA1Str, row.SHA1);
|
||||
Assert.False(row.NoGoodDumpKnown);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateBadDisk(Models.Listrom.Row? row)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.Name);
|
||||
Assert.False(row.Bad);
|
||||
Assert.Null(row.MD5);
|
||||
Assert.Null(row.SHA1);
|
||||
Assert.True(row.NoGoodDumpKnown);
|
||||
}
|
||||
}
|
||||
}
|
||||
947
SabreTools.Serialization.Test/Deserializers/ListxmlTests.cs
Normal file
947
SabreTools.Serialization.Test/Deserializers/ListxmlTests.cs
Normal file
@@ -0,0 +1,947 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class ListxmlTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Listxml();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Listxml();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Listxml();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Listxml();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Listxml();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Listxml();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Listxml();
|
||||
var serializer = new Serialization.Serializers.Listxml();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.Mame mame = Build(game: true);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mame);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listxml.Mame? newMame = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMame);
|
||||
Assert.Equal("XXXXXX", newMame.Build);
|
||||
Assert.Equal("XXXXXX", newMame.Debug);
|
||||
Assert.Equal("XXXXXX", newMame.MameConfig);
|
||||
|
||||
Assert.NotNull(newMame.Game);
|
||||
var newGame = Assert.Single(newMame.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Listxml();
|
||||
var serializer = new Serialization.Serializers.Listxml();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.Mame mame = Build(game: false);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(mame);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Listxml.Mame? newMame = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMame);
|
||||
Assert.Equal("XXXXXX", newMame.Build);
|
||||
Assert.Equal("XXXXXX", newMame.Debug);
|
||||
Assert.Equal("XXXXXX", newMame.MameConfig);
|
||||
|
||||
Assert.NotNull(newMame.Game);
|
||||
var newGame = Assert.Single(newMame.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Listxml.Mame Build(bool game)
|
||||
{
|
||||
var biosset = new Models.Listxml.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.Listxml.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bios = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Offset = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
Dispose = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.Listxml.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Index = "XXXXXX",
|
||||
Writable = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
};
|
||||
|
||||
var deviceref = new Models.Listxml.DeviceRef
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.Listxml.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var chip = new Models.Listxml.Chip
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
Clock = "XXXXXX",
|
||||
};
|
||||
|
||||
var display = new Models.Listxml.Display
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Rotate = "XXXXXX",
|
||||
FlipX = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
PixClock = "XXXXXX",
|
||||
HTotal = "XXXXXX",
|
||||
HBEnd = "XXXXXX",
|
||||
HBStart = "XXXXXX",
|
||||
VTotal = "XXXXXX",
|
||||
VBEnd = "XXXXXX",
|
||||
VBStart = "XXXXXX",
|
||||
};
|
||||
|
||||
var video = new Models.Listxml.Video
|
||||
{
|
||||
Screen = "XXXXXX",
|
||||
Orientation = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
AspectX = "XXXXXX",
|
||||
AspectY = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
};
|
||||
|
||||
var sound = new Models.Listxml.Sound
|
||||
{
|
||||
Channels = "XXXXXX",
|
||||
};
|
||||
|
||||
var control = new Models.Listxml.Control
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Player = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
ReqButtons = "XXXXXX",
|
||||
Minimum = "XXXXXX",
|
||||
Maximum = "XXXXXX",
|
||||
Sensitivity = "XXXXXX",
|
||||
KeyDelta = "XXXXXX",
|
||||
Reverse = "XXXXXX",
|
||||
Ways = "XXXXXX",
|
||||
Ways2 = "XXXXXX",
|
||||
Ways3 = "XXXXXX",
|
||||
};
|
||||
|
||||
var input = new Models.Listxml.Input
|
||||
{
|
||||
Service = "XXXXXX",
|
||||
Tilt = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
//ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
|
||||
Buttons = "XXXXXX",
|
||||
Coins = "XXXXXX",
|
||||
Control = [control],
|
||||
};
|
||||
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Relation = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var diplocation = new Models.Listxml.DipLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipvalue = new Models.Listxml.DipValue
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var dipswitch = new Models.Listxml.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
DipLocation = [diplocation],
|
||||
DipValue = [dipvalue],
|
||||
};
|
||||
|
||||
var conflocation = new Models.Listxml.ConfLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var confsetting = new Models.Listxml.ConfSetting
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var configuration = new Models.Listxml.Configuration
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
ConfLocation = [conflocation],
|
||||
ConfSetting = [confsetting],
|
||||
};
|
||||
|
||||
var analog = new Models.Listxml.Analog
|
||||
{
|
||||
Mask = "XXXXXX",
|
||||
};
|
||||
|
||||
var port = new Models.Listxml.Port
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Analog = [analog],
|
||||
};
|
||||
|
||||
var adjuster = new Models.Listxml.Adjuster
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var driver = new Models.Listxml.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Color = "XXXXXX",
|
||||
Sound = "XXXXXX",
|
||||
PaletteSize = "XXXXXX",
|
||||
Emulation = "XXXXXX",
|
||||
Cocktail = "XXXXXX",
|
||||
SaveState = "XXXXXX",
|
||||
RequiresArtwork = "XXXXXX",
|
||||
Unofficial = "XXXXXX",
|
||||
NoSoundHardware = "XXXXXX",
|
||||
Incomplete = "XXXXXX",
|
||||
};
|
||||
|
||||
var feature = new Models.Listxml.Feature
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Overall = "XXXXXX",
|
||||
};
|
||||
|
||||
var instance = new Models.Listxml.Instance
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
BriefName = "XXXXXX",
|
||||
};
|
||||
|
||||
var extension = new Models.Listxml.Extension
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var device = new Models.Listxml.Device
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
FixedImage = "XXXXXX",
|
||||
Mandatory = "XXXXXX",
|
||||
Interface = "XXXXXX",
|
||||
Instance = instance,
|
||||
Extension = [extension],
|
||||
};
|
||||
|
||||
var slotOption = new Models.Listxml.SlotOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
DevName = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var slot = new Models.Listxml.Slot
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
SlotOption = [slotOption],
|
||||
};
|
||||
|
||||
var softwarelist = new Models.Listxml.SoftwareList
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Filter = "XXXXXX",
|
||||
};
|
||||
|
||||
var ramoption = new Models.Listxml.RamOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
Models.Listxml.GameBase gameBase = game
|
||||
? new Models.Listxml.Game()
|
||||
: new Models.Listxml.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.SourceFile = "XXXXXX";
|
||||
gameBase.IsBios = "XXXXXX";
|
||||
gameBase.IsDevice = "XXXXXX";
|
||||
gameBase.IsMechanical = "XXXXXX";
|
||||
gameBase.Runnable = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.History = "XXXXXX";
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.DeviceRef = [deviceref];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Chip = [chip];
|
||||
gameBase.Display = [display];
|
||||
gameBase.Video = [video];
|
||||
gameBase.Sound = sound;
|
||||
gameBase.Input = input;
|
||||
gameBase.DipSwitch = [dipswitch];
|
||||
gameBase.Configuration = [configuration];
|
||||
gameBase.Port = [port];
|
||||
gameBase.Adjuster = [adjuster];
|
||||
gameBase.Driver = driver;
|
||||
gameBase.Feature = [feature];
|
||||
gameBase.Device = [device];
|
||||
gameBase.Slot = [slot];
|
||||
gameBase.SoftwareList = [softwarelist];
|
||||
gameBase.RamOption = [ramoption];
|
||||
|
||||
return new Models.Listxml.Mame
|
||||
{
|
||||
Build = "XXXXXX",
|
||||
Debug = "XXXXXX",
|
||||
MameConfig = "XXXXXX",
|
||||
Game = [gameBase],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.SourceFile);
|
||||
Assert.Equal("XXXXXX", gb.IsBios);
|
||||
Assert.Equal("XXXXXX", gb.IsDevice);
|
||||
Assert.Equal("XXXXXX", gb.IsMechanical);
|
||||
Assert.Equal("XXXXXX", gb.Runnable);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.History);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.DeviceRef);
|
||||
var deviceref = Assert.Single(gb.DeviceRef);
|
||||
Validate(deviceref);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Chip);
|
||||
var chip = Assert.Single(gb.Chip);
|
||||
Validate(chip);
|
||||
|
||||
Assert.NotNull(gb.Display);
|
||||
var display = Assert.Single(gb.Display);
|
||||
Validate(display);
|
||||
|
||||
Assert.NotNull(gb.Video);
|
||||
var video = Assert.Single(gb.Video);
|
||||
Validate(video);
|
||||
|
||||
Validate(gb.Sound);
|
||||
Validate(gb.Input);
|
||||
|
||||
Assert.NotNull(gb.DipSwitch);
|
||||
var dipswitch = Assert.Single(gb.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
|
||||
Assert.NotNull(gb.Configuration);
|
||||
var configuration = Assert.Single(gb.Configuration);
|
||||
Validate(configuration);
|
||||
|
||||
Assert.NotNull(gb.Port);
|
||||
var port = Assert.Single(gb.Port);
|
||||
Validate(port);
|
||||
|
||||
Assert.NotNull(gb.Adjuster);
|
||||
var adjuster = Assert.Single(gb.Adjuster);
|
||||
Validate(adjuster);
|
||||
|
||||
Validate(gb.Driver);
|
||||
|
||||
Assert.NotNull(gb.Feature);
|
||||
var feature = Assert.Single(gb.Feature);
|
||||
Validate(feature);
|
||||
|
||||
Assert.NotNull(gb.Device);
|
||||
var device = Assert.Single(gb.Device);
|
||||
Validate(device);
|
||||
|
||||
Assert.NotNull(gb.Slot);
|
||||
var slot = Assert.Single(gb.Slot);
|
||||
Validate(slot);
|
||||
|
||||
Assert.NotNull(gb.SoftwareList);
|
||||
var softwarelist = Assert.Single(gb.SoftwareList);
|
||||
Validate(softwarelist);
|
||||
|
||||
Assert.NotNull(gb.RamOption);
|
||||
var ramoption = Assert.Single(gb.RamOption);
|
||||
Validate(ramoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Bios);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Region);
|
||||
Assert.Equal("XXXXXX", rom.Offset);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Optional);
|
||||
Assert.Equal("XXXXXX", rom.Dispose);
|
||||
Assert.Equal("XXXXXX", rom.SoundOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Region);
|
||||
Assert.Equal("XXXXXX", disk.Index);
|
||||
Assert.Equal("XXXXXX", disk.Writable);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Optional);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DeviceRef
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DeviceRef? deviceref)
|
||||
{
|
||||
Assert.NotNull(deviceref);
|
||||
Assert.Equal("XXXXXX", deviceref.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Chip
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Chip? chip)
|
||||
{
|
||||
Assert.NotNull(chip);
|
||||
Assert.Equal("XXXXXX", chip.Name);
|
||||
Assert.Equal("XXXXXX", chip.Tag);
|
||||
Assert.Equal("XXXXXX", chip.Type);
|
||||
Assert.Equal("XXXXXX", chip.SoundOnly);
|
||||
Assert.Equal("XXXXXX", chip.Clock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Display
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Display? display)
|
||||
{
|
||||
Assert.NotNull(display);
|
||||
Assert.Equal("XXXXXX", display.Tag);
|
||||
Assert.Equal("XXXXXX", display.Type);
|
||||
Assert.Equal("XXXXXX", display.Rotate);
|
||||
Assert.Equal("XXXXXX", display.FlipX);
|
||||
Assert.Equal("XXXXXX", display.Width);
|
||||
Assert.Equal("XXXXXX", display.Height);
|
||||
Assert.Equal("XXXXXX", display.Refresh);
|
||||
Assert.Equal("XXXXXX", display.PixClock);
|
||||
Assert.Equal("XXXXXX", display.HTotal);
|
||||
Assert.Equal("XXXXXX", display.HBEnd);
|
||||
Assert.Equal("XXXXXX", display.HBStart);
|
||||
Assert.Equal("XXXXXX", display.VTotal);
|
||||
Assert.Equal("XXXXXX", display.VBEnd);
|
||||
Assert.Equal("XXXXXX", display.VBStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Video
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Video? video)
|
||||
{
|
||||
Assert.NotNull(video);
|
||||
Assert.Equal("XXXXXX", video.Screen);
|
||||
Assert.Equal("XXXXXX", video.Orientation);
|
||||
Assert.Equal("XXXXXX", video.Width);
|
||||
Assert.Equal("XXXXXX", video.Height);
|
||||
Assert.Equal("XXXXXX", video.AspectX);
|
||||
Assert.Equal("XXXXXX", video.AspectY);
|
||||
Assert.Equal("XXXXXX", video.Refresh);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sound
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sound? sound)
|
||||
{
|
||||
Assert.NotNull(sound);
|
||||
Assert.Equal("XXXXXX", sound.Channels);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Input
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Input? input)
|
||||
{
|
||||
Assert.NotNull(input);
|
||||
Assert.Equal("XXXXXX", input.Service);
|
||||
Assert.Equal("XXXXXX", input.Tilt);
|
||||
Assert.Equal("XXXXXX", input.Players);
|
||||
//Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
|
||||
Assert.Equal("XXXXXX", input.Buttons);
|
||||
Assert.Equal("XXXXXX", input.Coins);
|
||||
|
||||
Assert.NotNull(input.Control);
|
||||
var control = Assert.Single(input.Control);
|
||||
Validate(control);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Control
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Control? control)
|
||||
{
|
||||
Assert.NotNull(control);
|
||||
Assert.Equal("XXXXXX", control.Type);
|
||||
Assert.Equal("XXXXXX", control.Player);
|
||||
Assert.Equal("XXXXXX", control.Buttons);
|
||||
Assert.Equal("XXXXXX", control.ReqButtons);
|
||||
Assert.Equal("XXXXXX", control.Minimum);
|
||||
Assert.Equal("XXXXXX", control.Maximum);
|
||||
Assert.Equal("XXXXXX", control.Sensitivity);
|
||||
Assert.Equal("XXXXXX", control.KeyDelta);
|
||||
Assert.Equal("XXXXXX", control.Reverse);
|
||||
Assert.Equal("XXXXXX", control.Ways);
|
||||
Assert.Equal("XXXXXX", control.Ways2);
|
||||
Assert.Equal("XXXXXX", control.Ways3);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
Assert.Equal("XXXXXX", dipswitch.Tag);
|
||||
Assert.Equal("XXXXXX", dipswitch.Mask);
|
||||
Validate(dipswitch.Condition);
|
||||
|
||||
Assert.NotNull(dipswitch.DipLocation);
|
||||
var diplocation = Assert.Single(dipswitch.DipLocation);
|
||||
Validate(diplocation);
|
||||
|
||||
Assert.NotNull(dipswitch.DipValue);
|
||||
var dipvalue = Assert.Single(dipswitch.DipValue);
|
||||
Validate(dipvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Condition
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Condition? condition)
|
||||
{
|
||||
Assert.NotNull(condition);
|
||||
Assert.Equal("XXXXXX", condition.Tag);
|
||||
Assert.Equal("XXXXXX", condition.Mask);
|
||||
Assert.Equal("XXXXXX", condition.Relation);
|
||||
Assert.Equal("XXXXXX", condition.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipLocation? diplocation)
|
||||
{
|
||||
Assert.NotNull(diplocation);
|
||||
Assert.Equal("XXXXXX", diplocation.Name);
|
||||
Assert.Equal("XXXXXX", diplocation.Number);
|
||||
Assert.Equal("XXXXXX", diplocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipValue
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipValue? dipvalue)
|
||||
{
|
||||
Assert.NotNull(dipvalue);
|
||||
Assert.Equal("XXXXXX", dipvalue.Name);
|
||||
Assert.Equal("XXXXXX", dipvalue.Value);
|
||||
Assert.Equal("XXXXXX", dipvalue.Default);
|
||||
Validate(dipvalue.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Configuration
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Configuration? configuration)
|
||||
{
|
||||
Assert.NotNull(configuration);
|
||||
Assert.Equal("XXXXXX", configuration.Name);
|
||||
Assert.Equal("XXXXXX", configuration.Tag);
|
||||
Assert.Equal("XXXXXX", configuration.Mask);
|
||||
Validate(configuration.Condition);
|
||||
|
||||
Assert.NotNull(configuration.ConfLocation);
|
||||
var conflocation = Assert.Single(configuration.ConfLocation);
|
||||
Validate(conflocation);
|
||||
|
||||
Assert.NotNull(configuration.ConfSetting);
|
||||
var confsetting = Assert.Single(configuration.ConfSetting);
|
||||
Validate(confsetting);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfLocation? conflocation)
|
||||
{
|
||||
Assert.NotNull(conflocation);
|
||||
Assert.Equal("XXXXXX", conflocation.Name);
|
||||
Assert.Equal("XXXXXX", conflocation.Number);
|
||||
Assert.Equal("XXXXXX", conflocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfSetting
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfSetting? confsetting)
|
||||
{
|
||||
Assert.NotNull(confsetting);
|
||||
Assert.Equal("XXXXXX", confsetting.Name);
|
||||
Assert.Equal("XXXXXX", confsetting.Value);
|
||||
Assert.Equal("XXXXXX", confsetting.Default);
|
||||
Validate(confsetting.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Port
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Port? port)
|
||||
{
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("XXXXXX", port.Tag);
|
||||
|
||||
Assert.NotNull(port.Analog);
|
||||
var analog = Assert.Single(port.Analog);
|
||||
Validate(analog);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Analog
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Analog? analog)
|
||||
{
|
||||
Assert.NotNull(analog);
|
||||
Assert.Equal("XXXXXX", analog.Mask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Adjuster
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Adjuster? adjuster)
|
||||
{
|
||||
Assert.NotNull(adjuster);
|
||||
Assert.Equal("XXXXXX", adjuster.Name);
|
||||
Assert.Equal("XXXXXX", adjuster.Default);
|
||||
Validate(adjuster.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Color);
|
||||
Assert.Equal("XXXXXX", driver.Sound);
|
||||
Assert.Equal("XXXXXX", driver.PaletteSize);
|
||||
Assert.Equal("XXXXXX", driver.Emulation);
|
||||
Assert.Equal("XXXXXX", driver.Cocktail);
|
||||
Assert.Equal("XXXXXX", driver.SaveState);
|
||||
Assert.Equal("XXXXXX", driver.RequiresArtwork);
|
||||
Assert.Equal("XXXXXX", driver.Unofficial);
|
||||
Assert.Equal("XXXXXX", driver.NoSoundHardware);
|
||||
Assert.Equal("XXXXXX", driver.Incomplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Feature
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Feature? feature)
|
||||
{
|
||||
Assert.NotNull(feature);
|
||||
Assert.Equal("XXXXXX", feature.Type);
|
||||
Assert.Equal("XXXXXX", feature.Status);
|
||||
Assert.Equal("XXXXXX", feature.Overall);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Device
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Device? device)
|
||||
{
|
||||
Assert.NotNull(device);
|
||||
Assert.Equal("XXXXXX", device.Type);
|
||||
Assert.Equal("XXXXXX", device.Tag);
|
||||
Assert.Equal("XXXXXX", device.FixedImage);
|
||||
Assert.Equal("XXXXXX", device.Mandatory);
|
||||
Assert.Equal("XXXXXX", device.Interface);
|
||||
Validate(device.Instance);
|
||||
|
||||
Assert.NotNull(device.Extension);
|
||||
var extension = Assert.Single(device.Extension);
|
||||
Validate(extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Instance
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Instance? instance)
|
||||
{
|
||||
Assert.NotNull(instance);
|
||||
Assert.Equal("XXXXXX", instance.Name);
|
||||
Assert.Equal("XXXXXX", instance.BriefName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Extension
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Extension? extension)
|
||||
{
|
||||
Assert.NotNull(extension);
|
||||
Assert.Equal("XXXXXX", extension.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Slot
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Slot? slot)
|
||||
{
|
||||
Assert.NotNull(slot);
|
||||
Assert.Equal("XXXXXX", slot.Name);
|
||||
|
||||
Assert.NotNull(slot.SlotOption);
|
||||
var slotoption = Assert.Single(slot.SlotOption);
|
||||
Validate(slotoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SlotOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SlotOption? slotoption)
|
||||
{
|
||||
Assert.NotNull(slotoption);
|
||||
Assert.Equal("XXXXXX", slotoption.Name);
|
||||
Assert.Equal("XXXXXX", slotoption.DevName);
|
||||
Assert.Equal("XXXXXX", slotoption.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SoftwareList
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
|
||||
{
|
||||
Assert.NotNull(softwarelist);
|
||||
Assert.Equal("XXXXXX", softwarelist.Tag);
|
||||
Assert.Equal("XXXXXX", softwarelist.Name);
|
||||
Assert.Equal("XXXXXX", softwarelist.Status);
|
||||
Assert.Equal("XXXXXX", softwarelist.Filter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RamOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.RamOption? ramoption)
|
||||
{
|
||||
Assert.NotNull(ramoption);
|
||||
Assert.Equal("XXXXXX", ramoption.Name);
|
||||
Assert.Equal("XXXXXX", ramoption.Default);
|
||||
Assert.Equal("XXXXXX", ramoption.Content);
|
||||
}
|
||||
}
|
||||
}
|
||||
614
SabreTools.Serialization.Test/Deserializers/LogiqxTests.cs
Normal file
614
SabreTools.Serialization.Test/Deserializers/LogiqxTests.cs
Normal file
@@ -0,0 +1,614 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class LogiqxTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Logiqx();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Logiqx();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Logiqx();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Logiqx();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Logiqx();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Logiqx();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Logiqx();
|
||||
var serializer = new Serialization.Serializers.Logiqx();
|
||||
|
||||
// Build the data
|
||||
Models.Logiqx.Datafile df = Build(game: true);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? metadata = serializer.Serialize(df);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Logiqx.Datafile? newDf = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newDf);
|
||||
Assert.Equal("XXXXXX", newDf.Build);
|
||||
Assert.Equal("XXXXXX", newDf.Debug);
|
||||
Assert.Equal("XXXXXX", newDf.SchemaLocation);
|
||||
Validate(newDf.Header);
|
||||
|
||||
Assert.NotNull(newDf.Game);
|
||||
var newGame = Assert.Single(newDf.Game);
|
||||
Validate(newGame);
|
||||
|
||||
// TODO: Unsupported
|
||||
Assert.Null(newDf.Dir);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.Logiqx();
|
||||
var serializer = new Serialization.Serializers.Logiqx();
|
||||
|
||||
// Build the data
|
||||
Models.Logiqx.Datafile df = Build(game: false);
|
||||
|
||||
// Serialize to stream
|
||||
Stream? metadata = serializer.Serialize(df);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.Logiqx.Datafile? newDf = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newDf);
|
||||
Assert.Equal("XXXXXX", newDf.Build);
|
||||
Assert.Equal("XXXXXX", newDf.Debug);
|
||||
Assert.Equal("XXXXXX", newDf.SchemaLocation);
|
||||
Validate(newDf.Header);
|
||||
|
||||
Assert.NotNull(newDf.Game);
|
||||
var newGame = Assert.Single(newDf.Game);
|
||||
Validate(newGame);
|
||||
|
||||
// TODO: Unsupported
|
||||
Assert.Null(newDf.Dir);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Logiqx.Datafile Build(bool game)
|
||||
{
|
||||
var clrmamepro = new Models.Logiqx.ClrMamePro
|
||||
{
|
||||
Header = "XXXXXX",
|
||||
ForceMerging = "XXXXXX",
|
||||
ForceNodump = "XXXXXX",
|
||||
ForcePacking = "XXXXXX",
|
||||
};
|
||||
|
||||
var romcenter = new Models.Logiqx.RomCenter
|
||||
{
|
||||
Plugin = "XXXXXX",
|
||||
RomMode = "XXXXXX",
|
||||
BiosMode = "XXXXXX",
|
||||
SampleMode = "XXXXXX",
|
||||
LockRomMode = "XXXXXX",
|
||||
LockBiosMode = "XXXXXX",
|
||||
LockSampleMode = "XXXXXX",
|
||||
};
|
||||
|
||||
var header = new Models.Logiqx.Header
|
||||
{
|
||||
Id = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
RootDir = "XXXXXX",
|
||||
Category = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Author = "XXXXXX",
|
||||
Email = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Url = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
ClrMamePro = clrmamepro,
|
||||
RomCenter = romcenter,
|
||||
};
|
||||
|
||||
var trurip = new Models.Logiqx.Trurip
|
||||
{
|
||||
TitleID = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Developer = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Genre = "XXXXXX",
|
||||
Subgenre = "XXXXXX",
|
||||
Ratings = "XXXXXX",
|
||||
Score = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
Enabled = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
Source = "XXXXXX",
|
||||
CloneOf = "XXXXXX",
|
||||
RelatedTo = "XXXXXX",
|
||||
};
|
||||
|
||||
var release = new Models.Logiqx.Release
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Language = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var biosset = new Models.Logiqx.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.Logiqx.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SHA384 = "XXXXXX",
|
||||
SHA512 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
xxHash364 = "XXXXXX",
|
||||
xxHash3128 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Serial = "XXXXXX",
|
||||
Header = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
MIA = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.Logiqx.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
};
|
||||
|
||||
var media = new Models.Logiqx.Media
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
};
|
||||
|
||||
var deviceRef = new Models.Logiqx.DeviceRef
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.Logiqx.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var archive = new Models.Logiqx.Archive
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var driver = new Models.Logiqx.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Emulation = "XXXXXX",
|
||||
Cocktail = "XXXXXX",
|
||||
SaveState = "XXXXXX",
|
||||
RequiresArtwork = "XXXXXX",
|
||||
Unofficial = "XXXXXX",
|
||||
NoSoundHardware = "XXXXXX",
|
||||
Incomplete = "XXXXXX",
|
||||
};
|
||||
|
||||
var softwarelist = new Models.Logiqx.SoftwareList
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Filter = "XXXXXX",
|
||||
};
|
||||
|
||||
Models.Logiqx.GameBase gameBase = game
|
||||
? new Models.Logiqx.Game()
|
||||
: new Models.Logiqx.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.SourceFile = "XXXXXX";
|
||||
gameBase.IsBios = "XXXXXX";
|
||||
gameBase.IsDevice = "XXXXXX";
|
||||
gameBase.IsMechanical = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Board = "XXXXXX";
|
||||
gameBase.RebuildTo = "XXXXXX";
|
||||
gameBase.Id = "XXXXXX";
|
||||
gameBase.CloneOfId = "XXXXXX";
|
||||
gameBase.Runnable = "XXXXXX";
|
||||
gameBase.Comment = ["XXXXXX"];
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.Publisher = "XXXXXX";
|
||||
gameBase.Category = ["XXXXXX"];
|
||||
gameBase.Trurip = trurip;
|
||||
gameBase.Release = [release];
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.Media = [media];
|
||||
gameBase.DeviceRef = [deviceRef];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Archive = [archive];
|
||||
gameBase.Driver = driver;
|
||||
gameBase.SoftwareList = [softwarelist];
|
||||
|
||||
return new Models.Logiqx.Datafile
|
||||
{
|
||||
Build = "XXXXXX",
|
||||
Debug = "XXXXXX",
|
||||
SchemaLocation = "XXXXXX",
|
||||
Header = header,
|
||||
Game = [gameBase],
|
||||
// Dir = [dir], // TODO: Unsupported
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Header
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Header? header)
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
Assert.Equal("XXXXXX", header.Id);
|
||||
Assert.Equal("XXXXXX", header.Name);
|
||||
Assert.Equal("XXXXXX", header.Description);
|
||||
Assert.Equal("XXXXXX", header.RootDir);
|
||||
Assert.Equal("XXXXXX", header.Category);
|
||||
Assert.Equal("XXXXXX", header.Version);
|
||||
Assert.Equal("XXXXXX", header.Date);
|
||||
Assert.Equal("XXXXXX", header.Author);
|
||||
Assert.Equal("XXXXXX", header.Email);
|
||||
Assert.Equal("XXXXXX", header.Homepage);
|
||||
Assert.Equal("XXXXXX", header.Url);
|
||||
Assert.Equal("XXXXXX", header.Comment);
|
||||
Assert.Equal("XXXXXX", header.Type);
|
||||
Validate(header.ClrMamePro);
|
||||
Validate(header.RomCenter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ClrMamePro
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.ClrMamePro? cmp)
|
||||
{
|
||||
Assert.NotNull(cmp);
|
||||
Assert.Equal("XXXXXX", cmp.Header);
|
||||
Assert.Equal("XXXXXX", cmp.ForceMerging);
|
||||
Assert.Equal("XXXXXX", cmp.ForceNodump);
|
||||
Assert.Equal("XXXXXX", cmp.ForcePacking);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RomCenter
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.RomCenter? rc)
|
||||
{
|
||||
Assert.NotNull(rc);
|
||||
Assert.Equal("XXXXXX", rc.Plugin);
|
||||
Assert.Equal("XXXXXX", rc.RomMode);
|
||||
Assert.Equal("XXXXXX", rc.BiosMode);
|
||||
Assert.Equal("XXXXXX", rc.SampleMode);
|
||||
Assert.Equal("XXXXXX", rc.LockRomMode);
|
||||
Assert.Equal("XXXXXX", rc.LockBiosMode);
|
||||
Assert.Equal("XXXXXX", rc.LockSampleMode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.SourceFile);
|
||||
Assert.Equal("XXXXXX", gb.IsBios);
|
||||
Assert.Equal("XXXXXX", gb.IsDevice);
|
||||
Assert.Equal("XXXXXX", gb.IsMechanical);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
Assert.Equal("XXXXXX", gb.Board);
|
||||
Assert.Equal("XXXXXX", gb.RebuildTo);
|
||||
Assert.Equal("XXXXXX", gb.Id);
|
||||
Assert.Equal("XXXXXX", gb.CloneOfId);
|
||||
Assert.Equal("XXXXXX", gb.Runnable);
|
||||
|
||||
Assert.NotNull(gb.Comment);
|
||||
string comment = Assert.Single(gb.Comment);
|
||||
Assert.Equal("XXXXXX", comment);
|
||||
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.Publisher);
|
||||
|
||||
Assert.NotNull(gb.Category);
|
||||
string category = Assert.Single(gb.Category);
|
||||
Assert.Equal("XXXXXX", category);
|
||||
|
||||
Validate(gb.Trurip);
|
||||
|
||||
Assert.NotNull(gb.Release);
|
||||
var release = Assert.Single(gb.Release);
|
||||
Validate(release);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.Media);
|
||||
var media = Assert.Single(gb.Media);
|
||||
Validate(media);
|
||||
|
||||
Assert.NotNull(gb.DeviceRef);
|
||||
var deviceref = Assert.Single(gb.DeviceRef);
|
||||
Validate(deviceref);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Archive);
|
||||
var archive = Assert.Single(gb.Archive);
|
||||
Validate(archive);
|
||||
|
||||
Validate(gb.Driver);
|
||||
|
||||
Assert.NotNull(gb.SoftwareList);
|
||||
var softwarelist = Assert.Single(gb.SoftwareList);
|
||||
Validate(softwarelist);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Trurip
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Trurip? trurip)
|
||||
{
|
||||
Assert.NotNull(trurip);
|
||||
Assert.Equal("XXXXXX", trurip.TitleID);
|
||||
Assert.Equal("XXXXXX", trurip.Publisher);
|
||||
Assert.Equal("XXXXXX", trurip.Developer);
|
||||
Assert.Equal("XXXXXX", trurip.Year);
|
||||
Assert.Equal("XXXXXX", trurip.Genre);
|
||||
Assert.Equal("XXXXXX", trurip.Subgenre);
|
||||
Assert.Equal("XXXXXX", trurip.Ratings);
|
||||
Assert.Equal("XXXXXX", trurip.Score);
|
||||
Assert.Equal("XXXXXX", trurip.Players);
|
||||
Assert.Equal("XXXXXX", trurip.Enabled);
|
||||
Assert.Equal("XXXXXX", trurip.CRC);
|
||||
Assert.Equal("XXXXXX", trurip.Source);
|
||||
Assert.Equal("XXXXXX", trurip.CloneOf);
|
||||
Assert.Equal("XXXXXX", trurip.RelatedTo);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Release
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Release? release)
|
||||
{
|
||||
Assert.NotNull(release);
|
||||
Assert.Equal("XXXXXX", release.Name);
|
||||
Assert.Equal("XXXXXX", release.Region);
|
||||
Assert.Equal("XXXXXX", release.Language);
|
||||
Assert.Equal("XXXXXX", release.Date);
|
||||
Assert.Equal("XXXXXX", release.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.MD5);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.SHA256);
|
||||
Assert.Equal("XXXXXX", rom.SHA384);
|
||||
Assert.Equal("XXXXXX", rom.SHA512);
|
||||
Assert.Equal("XXXXXX", rom.SpamSum);
|
||||
Assert.Equal("XXXXXX", rom.xxHash364);
|
||||
Assert.Equal("XXXXXX", rom.xxHash3128);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Serial);
|
||||
Assert.Equal("XXXXXX", rom.Header);
|
||||
Assert.Equal("XXXXXX", rom.Date);
|
||||
Assert.Equal("XXXXXX", rom.Inverted);
|
||||
Assert.Equal("XXXXXX", rom.MIA);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Region);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Media
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Media? media)
|
||||
{
|
||||
Assert.NotNull(media);
|
||||
Assert.Equal("XXXXXX", media.Name);
|
||||
Assert.Equal("XXXXXX", media.MD5);
|
||||
Assert.Equal("XXXXXX", media.SHA1);
|
||||
Assert.Equal("XXXXXX", media.SHA256);
|
||||
Assert.Equal("XXXXXX", media.SpamSum);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DeviceRef
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.DeviceRef? deviceref)
|
||||
{
|
||||
Assert.NotNull(deviceref);
|
||||
Assert.Equal("XXXXXX", deviceref.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Archive
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Archive? archive)
|
||||
{
|
||||
Assert.NotNull(archive);
|
||||
Assert.Equal("XXXXXX", archive.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Emulation);
|
||||
Assert.Equal("XXXXXX", driver.Cocktail);
|
||||
Assert.Equal("XXXXXX", driver.SaveState);
|
||||
Assert.Equal("XXXXXX", driver.RequiresArtwork);
|
||||
Assert.Equal("XXXXXX", driver.Unofficial);
|
||||
Assert.Equal("XXXXXX", driver.NoSoundHardware);
|
||||
Assert.Equal("XXXXXX", driver.Incomplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SoftwareList
|
||||
/// </summary>
|
||||
private static void Validate(Models.Logiqx.SoftwareList? softwarelist)
|
||||
{
|
||||
Assert.NotNull(softwarelist);
|
||||
Assert.Equal("XXXXXX", softwarelist.Tag);
|
||||
Assert.Equal("XXXXXX", softwarelist.Name);
|
||||
Assert.Equal("XXXXXX", softwarelist.Status);
|
||||
Assert.Equal("XXXXXX", softwarelist.Filter);
|
||||
}
|
||||
}
|
||||
}
|
||||
940
SabreTools.Serialization.Test/Deserializers/M1Tests.cs
Normal file
940
SabreTools.Serialization.Test/Deserializers/M1Tests.cs
Normal file
@@ -0,0 +1,940 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class M1Tests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new M1();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new M1();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new M1();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new M1();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new M1();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new M1();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripGameTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.M1();
|
||||
var serializer = new Serialization.Serializers.M1();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.M1 m1 = Build(game: true);
|
||||
|
||||
// Serialize to generic model
|
||||
Stream? metadata = serializer.Serialize(m1);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize to stream
|
||||
Models.Listxml.M1? newM1 = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newM1);
|
||||
Assert.Equal("XXXXXX", newM1.Version);
|
||||
|
||||
Assert.NotNull(newM1.Game);
|
||||
var newGame = Assert.Single(newM1.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripMachineTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.M1();
|
||||
var serializer = new Serialization.Serializers.M1();
|
||||
|
||||
// Build the data
|
||||
Models.Listxml.M1 m1 = Build(game: false);
|
||||
|
||||
// Serialize to generic model
|
||||
Stream? metadata = serializer.Serialize(m1);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize to stream
|
||||
Models.Listxml.M1? newM1 = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newM1);
|
||||
Assert.Equal("XXXXXX", newM1.Version);
|
||||
|
||||
Assert.NotNull(newM1.Game);
|
||||
var newGame = Assert.Single(newM1.Game);
|
||||
Validate(newGame);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.Listxml.M1 Build(bool game)
|
||||
{
|
||||
var biosset = new Models.Listxml.BiosSet
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.Listxml.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Bios = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Offset = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
Dispose = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
};
|
||||
|
||||
var disk = new Models.Listxml.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
Region = "XXXXXX",
|
||||
Index = "XXXXXX",
|
||||
Writable = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Optional = "XXXXXX",
|
||||
};
|
||||
|
||||
var deviceref = new Models.Listxml.DeviceRef
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var sample = new Models.Listxml.Sample
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var chip = new Models.Listxml.Chip
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
SoundOnly = "XXXXXX",
|
||||
Clock = "XXXXXX",
|
||||
};
|
||||
|
||||
var display = new Models.Listxml.Display
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Rotate = "XXXXXX",
|
||||
FlipX = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
PixClock = "XXXXXX",
|
||||
HTotal = "XXXXXX",
|
||||
HBEnd = "XXXXXX",
|
||||
HBStart = "XXXXXX",
|
||||
VTotal = "XXXXXX",
|
||||
VBEnd = "XXXXXX",
|
||||
VBStart = "XXXXXX",
|
||||
};
|
||||
|
||||
var video = new Models.Listxml.Video
|
||||
{
|
||||
Screen = "XXXXXX",
|
||||
Orientation = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
AspectX = "XXXXXX",
|
||||
AspectY = "XXXXXX",
|
||||
Refresh = "XXXXXX",
|
||||
};
|
||||
|
||||
var sound = new Models.Listxml.Sound
|
||||
{
|
||||
Channels = "XXXXXX",
|
||||
};
|
||||
|
||||
var control = new Models.Listxml.Control
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Player = "XXXXXX",
|
||||
Buttons = "XXXXXX",
|
||||
ReqButtons = "XXXXXX",
|
||||
Minimum = "XXXXXX",
|
||||
Maximum = "XXXXXX",
|
||||
Sensitivity = "XXXXXX",
|
||||
KeyDelta = "XXXXXX",
|
||||
Reverse = "XXXXXX",
|
||||
Ways = "XXXXXX",
|
||||
Ways2 = "XXXXXX",
|
||||
Ways3 = "XXXXXX",
|
||||
};
|
||||
|
||||
var input = new Models.Listxml.Input
|
||||
{
|
||||
Service = "XXXXXX",
|
||||
Tilt = "XXXXXX",
|
||||
Players = "XXXXXX",
|
||||
//ControlAttr = "XXXXXX", // Mututally exclusive with input.Control
|
||||
Buttons = "XXXXXX",
|
||||
Coins = "XXXXXX",
|
||||
Control = [control],
|
||||
};
|
||||
|
||||
var condition = new Models.Listxml.Condition
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Relation = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var diplocation = new Models.Listxml.DipLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipvalue = new Models.Listxml.DipValue
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var dipswitch = new Models.Listxml.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
DipLocation = [diplocation],
|
||||
DipValue = [dipvalue],
|
||||
};
|
||||
|
||||
var conflocation = new Models.Listxml.ConfLocation
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Number = "XXXXXX",
|
||||
Inverted = "XXXXXX",
|
||||
};
|
||||
|
||||
var confsetting = new Models.Listxml.ConfSetting
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var configuration = new Models.Listxml.Configuration
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
Condition = condition,
|
||||
ConfLocation = [conflocation],
|
||||
ConfSetting = [confsetting],
|
||||
};
|
||||
|
||||
var analog = new Models.Listxml.Analog
|
||||
{
|
||||
Mask = "XXXXXX",
|
||||
};
|
||||
|
||||
var port = new Models.Listxml.Port
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Analog = [analog],
|
||||
};
|
||||
|
||||
var adjuster = new Models.Listxml.Adjuster
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Condition = condition,
|
||||
};
|
||||
|
||||
var driver = new Models.Listxml.Driver
|
||||
{
|
||||
Status = "XXXXXX",
|
||||
Color = "XXXXXX",
|
||||
Sound = "XXXXXX",
|
||||
PaletteSize = "XXXXXX",
|
||||
Emulation = "XXXXXX",
|
||||
Cocktail = "XXXXXX",
|
||||
SaveState = "XXXXXX",
|
||||
RequiresArtwork = "XXXXXX",
|
||||
Unofficial = "XXXXXX",
|
||||
NoSoundHardware = "XXXXXX",
|
||||
Incomplete = "XXXXXX",
|
||||
};
|
||||
|
||||
var feature = new Models.Listxml.Feature
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Overall = "XXXXXX",
|
||||
};
|
||||
|
||||
var instance = new Models.Listxml.Instance
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
BriefName = "XXXXXX",
|
||||
};
|
||||
|
||||
var extension = new Models.Listxml.Extension
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
};
|
||||
|
||||
var device = new Models.Listxml.Device
|
||||
{
|
||||
Type = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
FixedImage = "XXXXXX",
|
||||
Mandatory = "XXXXXX",
|
||||
Interface = "XXXXXX",
|
||||
Instance = instance,
|
||||
Extension = [extension],
|
||||
};
|
||||
|
||||
var slotOption = new Models.Listxml.SlotOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
DevName = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var slot = new Models.Listxml.Slot
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
SlotOption = [slotOption],
|
||||
};
|
||||
|
||||
var softwarelist = new Models.Listxml.SoftwareList
|
||||
{
|
||||
Tag = "XXXXXX",
|
||||
Name = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Filter = "XXXXXX",
|
||||
};
|
||||
|
||||
var ramoption = new Models.Listxml.RamOption
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
Models.Listxml.GameBase gameBase = game
|
||||
? new Models.Listxml.Game()
|
||||
: new Models.Listxml.Machine();
|
||||
gameBase.Name = "XXXXXX";
|
||||
gameBase.SourceFile = "XXXXXX";
|
||||
gameBase.IsBios = "XXXXXX";
|
||||
gameBase.IsDevice = "XXXXXX";
|
||||
gameBase.IsMechanical = "XXXXXX";
|
||||
gameBase.Runnable = "XXXXXX";
|
||||
gameBase.CloneOf = "XXXXXX";
|
||||
gameBase.RomOf = "XXXXXX";
|
||||
gameBase.SampleOf = "XXXXXX";
|
||||
gameBase.Description = "XXXXXX";
|
||||
gameBase.Year = "XXXXXX";
|
||||
gameBase.Manufacturer = "XXXXXX";
|
||||
gameBase.History = "XXXXXX";
|
||||
gameBase.BiosSet = [biosset];
|
||||
gameBase.Rom = [rom];
|
||||
gameBase.Disk = [disk];
|
||||
gameBase.DeviceRef = [deviceref];
|
||||
gameBase.Sample = [sample];
|
||||
gameBase.Chip = [chip];
|
||||
gameBase.Display = [display];
|
||||
gameBase.Video = [video];
|
||||
gameBase.Sound = sound;
|
||||
gameBase.Input = input;
|
||||
gameBase.DipSwitch = [dipswitch];
|
||||
gameBase.Configuration = [configuration];
|
||||
gameBase.Port = [port];
|
||||
gameBase.Adjuster = [adjuster];
|
||||
gameBase.Driver = driver;
|
||||
gameBase.Feature = [feature];
|
||||
gameBase.Device = [device];
|
||||
gameBase.Slot = [slot];
|
||||
gameBase.SoftwareList = [softwarelist];
|
||||
gameBase.RamOption = [ramoption];
|
||||
|
||||
return new Models.Listxml.M1
|
||||
{
|
||||
Version = "XXXXXX",
|
||||
Game = [gameBase],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GameBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.GameBase? gb)
|
||||
{
|
||||
Assert.NotNull(gb);
|
||||
Assert.Equal("XXXXXX", gb.Name);
|
||||
Assert.Equal("XXXXXX", gb.SourceFile);
|
||||
Assert.Equal("XXXXXX", gb.IsBios);
|
||||
Assert.Equal("XXXXXX", gb.IsDevice);
|
||||
Assert.Equal("XXXXXX", gb.IsMechanical);
|
||||
Assert.Equal("XXXXXX", gb.Runnable);
|
||||
Assert.Equal("XXXXXX", gb.CloneOf);
|
||||
Assert.Equal("XXXXXX", gb.RomOf);
|
||||
Assert.Equal("XXXXXX", gb.SampleOf);
|
||||
Assert.Equal("XXXXXX", gb.Description);
|
||||
Assert.Equal("XXXXXX", gb.Year);
|
||||
Assert.Equal("XXXXXX", gb.Manufacturer);
|
||||
Assert.Equal("XXXXXX", gb.History);
|
||||
|
||||
Assert.NotNull(gb.BiosSet);
|
||||
var biosset = Assert.Single(gb.BiosSet);
|
||||
Validate(biosset);
|
||||
|
||||
Assert.NotNull(gb.Rom);
|
||||
var rom = Assert.Single(gb.Rom);
|
||||
Validate(rom);
|
||||
|
||||
Assert.NotNull(gb.Disk);
|
||||
var disk = Assert.Single(gb.Disk);
|
||||
Validate(disk);
|
||||
|
||||
Assert.NotNull(gb.DeviceRef);
|
||||
var deviceref = Assert.Single(gb.DeviceRef);
|
||||
Validate(deviceref);
|
||||
|
||||
Assert.NotNull(gb.Sample);
|
||||
var sample = Assert.Single(gb.Sample);
|
||||
Validate(sample);
|
||||
|
||||
Assert.NotNull(gb.Chip);
|
||||
var chip = Assert.Single(gb.Chip);
|
||||
Validate(chip);
|
||||
|
||||
Assert.NotNull(gb.Display);
|
||||
var display = Assert.Single(gb.Display);
|
||||
Validate(display);
|
||||
|
||||
Assert.NotNull(gb.Video);
|
||||
var video = Assert.Single(gb.Video);
|
||||
Validate(video);
|
||||
|
||||
Validate(gb.Sound);
|
||||
Validate(gb.Input);
|
||||
|
||||
Assert.NotNull(gb.DipSwitch);
|
||||
var dipswitch = Assert.Single(gb.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
|
||||
Assert.NotNull(gb.Configuration);
|
||||
var configuration = Assert.Single(gb.Configuration);
|
||||
Validate(configuration);
|
||||
|
||||
Assert.NotNull(gb.Port);
|
||||
var port = Assert.Single(gb.Port);
|
||||
Validate(port);
|
||||
|
||||
Assert.NotNull(gb.Adjuster);
|
||||
var adjuster = Assert.Single(gb.Adjuster);
|
||||
Validate(adjuster);
|
||||
|
||||
Validate(gb.Driver);
|
||||
|
||||
Assert.NotNull(gb.Feature);
|
||||
var feature = Assert.Single(gb.Feature);
|
||||
Validate(feature);
|
||||
|
||||
Assert.NotNull(gb.Device);
|
||||
var device = Assert.Single(gb.Device);
|
||||
Validate(device);
|
||||
|
||||
Assert.NotNull(gb.Slot);
|
||||
var slot = Assert.Single(gb.Slot);
|
||||
Validate(slot);
|
||||
|
||||
Assert.NotNull(gb.SoftwareList);
|
||||
var softwarelist = Assert.Single(gb.SoftwareList);
|
||||
Validate(softwarelist);
|
||||
|
||||
Assert.NotNull(gb.RamOption);
|
||||
var ramoption = Assert.Single(gb.RamOption);
|
||||
Validate(ramoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a BiosSet
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.BiosSet? biosset)
|
||||
{
|
||||
Assert.NotNull(biosset);
|
||||
Assert.Equal("XXXXXX", biosset.Name);
|
||||
Assert.Equal("XXXXXX", biosset.Description);
|
||||
Assert.Equal("XXXXXX", biosset.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Bios);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Merge);
|
||||
Assert.Equal("XXXXXX", rom.Region);
|
||||
Assert.Equal("XXXXXX", rom.Offset);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.Optional);
|
||||
Assert.Equal("XXXXXX", rom.Dispose);
|
||||
Assert.Equal("XXXXXX", rom.SoundOnly);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Merge);
|
||||
Assert.Equal("XXXXXX", disk.Region);
|
||||
Assert.Equal("XXXXXX", disk.Index);
|
||||
Assert.Equal("XXXXXX", disk.Writable);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Optional);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DeviceRef
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DeviceRef? deviceref)
|
||||
{
|
||||
Assert.NotNull(deviceref);
|
||||
Assert.Equal("XXXXXX", deviceref.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sample
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sample? sample)
|
||||
{
|
||||
Assert.NotNull(sample);
|
||||
Assert.Equal("XXXXXX", sample.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Chip
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Chip? chip)
|
||||
{
|
||||
Assert.NotNull(chip);
|
||||
Assert.Equal("XXXXXX", chip.Name);
|
||||
Assert.Equal("XXXXXX", chip.Tag);
|
||||
Assert.Equal("XXXXXX", chip.Type);
|
||||
Assert.Equal("XXXXXX", chip.SoundOnly);
|
||||
Assert.Equal("XXXXXX", chip.Clock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Display
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Display? display)
|
||||
{
|
||||
Assert.NotNull(display);
|
||||
Assert.Equal("XXXXXX", display.Tag);
|
||||
Assert.Equal("XXXXXX", display.Type);
|
||||
Assert.Equal("XXXXXX", display.Rotate);
|
||||
Assert.Equal("XXXXXX", display.FlipX);
|
||||
Assert.Equal("XXXXXX", display.Width);
|
||||
Assert.Equal("XXXXXX", display.Height);
|
||||
Assert.Equal("XXXXXX", display.Refresh);
|
||||
Assert.Equal("XXXXXX", display.PixClock);
|
||||
Assert.Equal("XXXXXX", display.HTotal);
|
||||
Assert.Equal("XXXXXX", display.HBEnd);
|
||||
Assert.Equal("XXXXXX", display.HBStart);
|
||||
Assert.Equal("XXXXXX", display.VTotal);
|
||||
Assert.Equal("XXXXXX", display.VBEnd);
|
||||
Assert.Equal("XXXXXX", display.VBStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Video
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Video? video)
|
||||
{
|
||||
Assert.NotNull(video);
|
||||
Assert.Equal("XXXXXX", video.Screen);
|
||||
Assert.Equal("XXXXXX", video.Orientation);
|
||||
Assert.Equal("XXXXXX", video.Width);
|
||||
Assert.Equal("XXXXXX", video.Height);
|
||||
Assert.Equal("XXXXXX", video.AspectX);
|
||||
Assert.Equal("XXXXXX", video.AspectY);
|
||||
Assert.Equal("XXXXXX", video.Refresh);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Sound
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Sound? sound)
|
||||
{
|
||||
Assert.NotNull(sound);
|
||||
Assert.Equal("XXXXXX", sound.Channels);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Input
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Input? input)
|
||||
{
|
||||
Assert.NotNull(input);
|
||||
Assert.Equal("XXXXXX", input.Service);
|
||||
Assert.Equal("XXXXXX", input.Tilt);
|
||||
Assert.Equal("XXXXXX", input.Players);
|
||||
//Assert.Equal("XXXXXX", input.ControlAttr); // Mututally exclusive with input.Control
|
||||
Assert.Equal("XXXXXX", input.Buttons);
|
||||
Assert.Equal("XXXXXX", input.Coins);
|
||||
|
||||
Assert.NotNull(input.Control);
|
||||
var control = Assert.Single(input.Control);
|
||||
Validate(control);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Control
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Control? control)
|
||||
{
|
||||
Assert.NotNull(control);
|
||||
Assert.Equal("XXXXXX", control.Type);
|
||||
Assert.Equal("XXXXXX", control.Player);
|
||||
Assert.Equal("XXXXXX", control.Buttons);
|
||||
Assert.Equal("XXXXXX", control.ReqButtons);
|
||||
Assert.Equal("XXXXXX", control.Minimum);
|
||||
Assert.Equal("XXXXXX", control.Maximum);
|
||||
Assert.Equal("XXXXXX", control.Sensitivity);
|
||||
Assert.Equal("XXXXXX", control.KeyDelta);
|
||||
Assert.Equal("XXXXXX", control.Reverse);
|
||||
Assert.Equal("XXXXXX", control.Ways);
|
||||
Assert.Equal("XXXXXX", control.Ways2);
|
||||
Assert.Equal("XXXXXX", control.Ways3);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
Assert.Equal("XXXXXX", dipswitch.Tag);
|
||||
Assert.Equal("XXXXXX", dipswitch.Mask);
|
||||
Validate(dipswitch.Condition);
|
||||
|
||||
Assert.NotNull(dipswitch.DipLocation);
|
||||
var diplocation = Assert.Single(dipswitch.DipLocation);
|
||||
Validate(diplocation);
|
||||
|
||||
Assert.NotNull(dipswitch.DipValue);
|
||||
var dipvalue = Assert.Single(dipswitch.DipValue);
|
||||
Validate(dipvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Condition
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Condition? condition)
|
||||
{
|
||||
Assert.NotNull(condition);
|
||||
Assert.Equal("XXXXXX", condition.Tag);
|
||||
Assert.Equal("XXXXXX", condition.Mask);
|
||||
Assert.Equal("XXXXXX", condition.Relation);
|
||||
Assert.Equal("XXXXXX", condition.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipLocation? diplocation)
|
||||
{
|
||||
Assert.NotNull(diplocation);
|
||||
Assert.Equal("XXXXXX", diplocation.Name);
|
||||
Assert.Equal("XXXXXX", diplocation.Number);
|
||||
Assert.Equal("XXXXXX", diplocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipValue
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.DipValue? dipvalue)
|
||||
{
|
||||
Assert.NotNull(dipvalue);
|
||||
Assert.Equal("XXXXXX", dipvalue.Name);
|
||||
Assert.Equal("XXXXXX", dipvalue.Value);
|
||||
Assert.Equal("XXXXXX", dipvalue.Default);
|
||||
Validate(dipvalue.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Configuration
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Configuration? configuration)
|
||||
{
|
||||
Assert.NotNull(configuration);
|
||||
Assert.Equal("XXXXXX", configuration.Name);
|
||||
Assert.Equal("XXXXXX", configuration.Tag);
|
||||
Assert.Equal("XXXXXX", configuration.Mask);
|
||||
Validate(configuration.Condition);
|
||||
|
||||
Assert.NotNull(configuration.ConfLocation);
|
||||
var conflocation = Assert.Single(configuration.ConfLocation);
|
||||
Validate(conflocation);
|
||||
|
||||
Assert.NotNull(configuration.ConfSetting);
|
||||
var confsetting = Assert.Single(configuration.ConfSetting);
|
||||
Validate(confsetting);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfLocation
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfLocation? conflocation)
|
||||
{
|
||||
Assert.NotNull(conflocation);
|
||||
Assert.Equal("XXXXXX", conflocation.Name);
|
||||
Assert.Equal("XXXXXX", conflocation.Number);
|
||||
Assert.Equal("XXXXXX", conflocation.Inverted);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a ConfSetting
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.ConfSetting? confsetting)
|
||||
{
|
||||
Assert.NotNull(confsetting);
|
||||
Assert.Equal("XXXXXX", confsetting.Name);
|
||||
Assert.Equal("XXXXXX", confsetting.Value);
|
||||
Assert.Equal("XXXXXX", confsetting.Default);
|
||||
Validate(confsetting.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Port
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Port? port)
|
||||
{
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("XXXXXX", port.Tag);
|
||||
|
||||
Assert.NotNull(port.Analog);
|
||||
var analog = Assert.Single(port.Analog);
|
||||
Validate(analog);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Analog
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Analog? analog)
|
||||
{
|
||||
Assert.NotNull(analog);
|
||||
Assert.Equal("XXXXXX", analog.Mask);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Adjuster
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Adjuster? adjuster)
|
||||
{
|
||||
Assert.NotNull(adjuster);
|
||||
Assert.Equal("XXXXXX", adjuster.Name);
|
||||
Assert.Equal("XXXXXX", adjuster.Default);
|
||||
Validate(adjuster.Condition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Driver
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Driver? driver)
|
||||
{
|
||||
Assert.NotNull(driver);
|
||||
Assert.Equal("XXXXXX", driver.Status);
|
||||
Assert.Equal("XXXXXX", driver.Color);
|
||||
Assert.Equal("XXXXXX", driver.Sound);
|
||||
Assert.Equal("XXXXXX", driver.PaletteSize);
|
||||
Assert.Equal("XXXXXX", driver.Emulation);
|
||||
Assert.Equal("XXXXXX", driver.Cocktail);
|
||||
Assert.Equal("XXXXXX", driver.SaveState);
|
||||
Assert.Equal("XXXXXX", driver.RequiresArtwork);
|
||||
Assert.Equal("XXXXXX", driver.Unofficial);
|
||||
Assert.Equal("XXXXXX", driver.NoSoundHardware);
|
||||
Assert.Equal("XXXXXX", driver.Incomplete);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Feature
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Feature? feature)
|
||||
{
|
||||
Assert.NotNull(feature);
|
||||
Assert.Equal("XXXXXX", feature.Type);
|
||||
Assert.Equal("XXXXXX", feature.Status);
|
||||
Assert.Equal("XXXXXX", feature.Overall);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Device
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Device? device)
|
||||
{
|
||||
Assert.NotNull(device);
|
||||
Assert.Equal("XXXXXX", device.Type);
|
||||
Assert.Equal("XXXXXX", device.Tag);
|
||||
Assert.Equal("XXXXXX", device.FixedImage);
|
||||
Assert.Equal("XXXXXX", device.Mandatory);
|
||||
Assert.Equal("XXXXXX", device.Interface);
|
||||
Validate(device.Instance);
|
||||
|
||||
Assert.NotNull(device.Extension);
|
||||
var extension = Assert.Single(device.Extension);
|
||||
Validate(extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Instance
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Instance? instance)
|
||||
{
|
||||
Assert.NotNull(instance);
|
||||
Assert.Equal("XXXXXX", instance.Name);
|
||||
Assert.Equal("XXXXXX", instance.BriefName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Extension
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Extension? extension)
|
||||
{
|
||||
Assert.NotNull(extension);
|
||||
Assert.Equal("XXXXXX", extension.Name);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Slot
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.Slot? slot)
|
||||
{
|
||||
Assert.NotNull(slot);
|
||||
Assert.Equal("XXXXXX", slot.Name);
|
||||
|
||||
Assert.NotNull(slot.SlotOption);
|
||||
var slotoption = Assert.Single(slot.SlotOption);
|
||||
Validate(slotoption);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SlotOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SlotOption? slotoption)
|
||||
{
|
||||
Assert.NotNull(slotoption);
|
||||
Assert.Equal("XXXXXX", slotoption.Name);
|
||||
Assert.Equal("XXXXXX", slotoption.DevName);
|
||||
Assert.Equal("XXXXXX", slotoption.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SoftwareList
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.SoftwareList? softwarelist)
|
||||
{
|
||||
Assert.NotNull(softwarelist);
|
||||
Assert.Equal("XXXXXX", softwarelist.Tag);
|
||||
Assert.Equal("XXXXXX", softwarelist.Name);
|
||||
Assert.Equal("XXXXXX", softwarelist.Status);
|
||||
Assert.Equal("XXXXXX", softwarelist.Filter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RamOption
|
||||
/// </summary>
|
||||
private static void Validate(Models.Listxml.RamOption? ramoption)
|
||||
{
|
||||
Assert.NotNull(ramoption);
|
||||
Assert.Equal("XXXXXX", ramoption.Name);
|
||||
Assert.Equal("XXXXXX", ramoption.Default);
|
||||
Assert.Equal("XXXXXX", ramoption.Content);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/MSDOSTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/MSDOSTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class MSDOSTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new MSDOS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new MSDOS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new MSDOS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new MSDOS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new MSDOS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new MSDOS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class MicrosoftCabinetTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new MicrosoftCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new MicrosoftCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new MicrosoftCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new MicrosoftCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new MicrosoftCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new MicrosoftCabinet();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/MoPaQTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/MoPaQTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class MoPaQTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new MoPaQ();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new MoPaQ();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new MoPaQ();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new MoPaQ();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new MoPaQ();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new MoPaQ();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/N3DSTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/N3DSTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class N3DSTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new N3DS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new N3DS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new N3DS();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new N3DS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new N3DS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new N3DS();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/NCFTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/NCFTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class NCFTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new NCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new NCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new NCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new NCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new NCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new NCF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class NewExecutableTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new NewExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new NewExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new NewExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new NewExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new NewExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new NewExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/NitroTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/NitroTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class NitroTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Nitro();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Nitro();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Nitro();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Nitro();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Nitro();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Nitro();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
518
SabreTools.Serialization.Test/Deserializers/OfflineListTests.cs
Normal file
518
SabreTools.Serialization.Test/Deserializers/OfflineListTests.cs
Normal file
@@ -0,0 +1,518 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class OfflineListTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new OfflineList();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new OfflineList();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new OfflineList();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new OfflineList();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new OfflineList();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new OfflineList();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.OfflineList();
|
||||
var serializer = new Serialization.Serializers.OfflineList();
|
||||
|
||||
// Build the data
|
||||
Models.OfflineList.Dat dat = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? metadata = serializer.Serialize(dat);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.OfflineList.Dat? newDat = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newDat);
|
||||
Assert.Equal("XXXXXX", newDat.NoNamespaceSchemaLocation);
|
||||
Validate(newDat.Configuration);
|
||||
Validate(newDat.Games);
|
||||
Validate(newDat.GUI);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.OfflineList.Dat Build()
|
||||
{
|
||||
var infos = new Models.OfflineList.Infos
|
||||
{
|
||||
Title = new Models.OfflineList.Title
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Location = new Models.OfflineList.Location
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Publisher = new Models.OfflineList.Publisher
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
SourceRom = new Models.OfflineList.SourceRom
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
SaveType = new Models.OfflineList.SaveType
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
RomSize = new Models.OfflineList.RomSize
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
ReleaseNumber = new Models.OfflineList.ReleaseNumber
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
ImageNumber = new Models.OfflineList.ImageNumber
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
LanguageNumber = new Models.OfflineList.LanguageNumber
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Comment = new Models.OfflineList.Comment
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
RomCRC = new Models.OfflineList.RomCRC
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Im1CRC = new Models.OfflineList.Im1CRC
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Im2CRC = new Models.OfflineList.Im2CRC
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
Languages = new Models.OfflineList.Languages
|
||||
{
|
||||
Visible = "XXXXXX",
|
||||
InNamingOption = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
},
|
||||
};
|
||||
|
||||
var canopen = new Models.OfflineList.CanOpen
|
||||
{
|
||||
Extension = ["XXXXXX"],
|
||||
};
|
||||
|
||||
var daturl = new Models.OfflineList.DatUrl
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var newdat = new Models.OfflineList.NewDat
|
||||
{
|
||||
DatVersionUrl = "XXXXXX",
|
||||
DatUrl = daturl,
|
||||
ImUrl = "XXXXXX",
|
||||
};
|
||||
|
||||
var find = new Models.OfflineList.Find
|
||||
{
|
||||
Operation = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var to = new Models.OfflineList.To
|
||||
{
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
Auto = "XXXXXX",
|
||||
Find = [find],
|
||||
};
|
||||
|
||||
var search = new Models.OfflineList.Search
|
||||
{
|
||||
To = [to],
|
||||
};
|
||||
|
||||
var configuration = new Models.OfflineList.Configuration
|
||||
{
|
||||
DatName = "XXXXXX",
|
||||
ImFolder = "XXXXXX",
|
||||
DatVersion = "XXXXXX",
|
||||
System = "XXXXXX",
|
||||
ScreenshotsWidth = "XXXXXX",
|
||||
ScreenshotsHeight = "XXXXXX",
|
||||
Infos = infos,
|
||||
CanOpen = canopen,
|
||||
NewDat = newdat,
|
||||
Search = search,
|
||||
RomTitle = "XXXXXX",
|
||||
};
|
||||
|
||||
var fileromcrc = new Models.OfflineList.FileRomCRC
|
||||
{
|
||||
Extension = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var files = new Models.OfflineList.Files
|
||||
{
|
||||
RomCRC = [fileromcrc],
|
||||
};
|
||||
|
||||
var game = new Models.OfflineList.Game
|
||||
{
|
||||
ImageNumber = "XXXXXX",
|
||||
ReleaseNumber = "XXXXXX",
|
||||
Title = "XXXXXX",
|
||||
SaveType = "XXXXXX",
|
||||
RomSize = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Location = "XXXXXX",
|
||||
SourceRom = "XXXXXX",
|
||||
Language = "XXXXXX",
|
||||
Files = files,
|
||||
Im1CRC = "XXXXXX",
|
||||
Im2CRC = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
DuplicateID = "XXXXXX",
|
||||
};
|
||||
|
||||
var games = new Models.OfflineList.Games
|
||||
{
|
||||
Game = [game],
|
||||
};
|
||||
|
||||
var image = new Models.OfflineList.Image
|
||||
{
|
||||
X = "XXXXXX",
|
||||
Y = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
};
|
||||
|
||||
var images = new Models.OfflineList.Images
|
||||
{
|
||||
Width = "XXXXXX",
|
||||
Height = "XXXXXX",
|
||||
Image = [image],
|
||||
};
|
||||
|
||||
var gui = new Models.OfflineList.GUI
|
||||
{
|
||||
Images = images,
|
||||
};
|
||||
|
||||
return new Models.OfflineList.Dat
|
||||
{
|
||||
NoNamespaceSchemaLocation = "XXXXXX",
|
||||
Configuration = configuration,
|
||||
Games = games,
|
||||
GUI = gui,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Configuration
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Configuration? configuration)
|
||||
{
|
||||
Assert.NotNull(configuration);
|
||||
Assert.Equal("XXXXXX", configuration.DatName);
|
||||
Assert.Equal("XXXXXX", configuration.ImFolder);
|
||||
Assert.Equal("XXXXXX", configuration.DatVersion);
|
||||
Assert.Equal("XXXXXX", configuration.System);
|
||||
Assert.Equal("XXXXXX", configuration.ScreenshotsWidth);
|
||||
Assert.Equal("XXXXXX", configuration.ScreenshotsHeight);
|
||||
Validate(configuration.Infos);
|
||||
Validate(configuration.CanOpen);
|
||||
Validate(configuration.NewDat);
|
||||
Validate(configuration.Search);
|
||||
Assert.Equal("XXXXXX", configuration.RomTitle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Infos
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Infos? infos)
|
||||
{
|
||||
Assert.NotNull(infos);
|
||||
Validate(infos.Title);
|
||||
Validate(infos.Location);
|
||||
Validate(infos.Publisher);
|
||||
Validate(infos.SourceRom);
|
||||
Validate(infos.SaveType);
|
||||
Validate(infos.RomSize);
|
||||
Validate(infos.ReleaseNumber);
|
||||
Validate(infos.ImageNumber);
|
||||
Validate(infos.LanguageNumber);
|
||||
Validate(infos.Comment);
|
||||
Validate(infos.RomCRC);
|
||||
Validate(infos.Im1CRC);
|
||||
Validate(infos.Im2CRC);
|
||||
Validate(infos.Languages);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a InfoBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.InfoBase? info)
|
||||
{
|
||||
Assert.NotNull(info);
|
||||
Assert.Equal("XXXXXX", info.Visible);
|
||||
Assert.Equal("XXXXXX", info.InNamingOption);
|
||||
Assert.Equal("XXXXXX", info.Default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a CanOpen
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.CanOpen? canopen)
|
||||
{
|
||||
Assert.NotNull(canopen);
|
||||
Assert.NotNull(canopen.Extension);
|
||||
string extension = Assert.Single(canopen.Extension);
|
||||
Assert.Equal("XXXXXX", extension);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a NewDat
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.NewDat? newdat)
|
||||
{
|
||||
Assert.NotNull(newdat);
|
||||
Assert.Equal("XXXXXX", newdat.DatVersionUrl);
|
||||
Validate(newdat.DatUrl);
|
||||
Assert.Equal("XXXXXX", newdat.ImUrl);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DatUrl
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.DatUrl? daturl)
|
||||
{
|
||||
Assert.NotNull(daturl);
|
||||
Assert.Equal("XXXXXX", daturl.FileName);
|
||||
Assert.Equal("XXXXXX", daturl.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Search
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Search? search)
|
||||
{
|
||||
Assert.NotNull(search);
|
||||
Assert.NotNull(search.To);
|
||||
var to = Assert.Single(search.To);
|
||||
Validate(to);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a To
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.To? to)
|
||||
{
|
||||
Assert.NotNull(to);
|
||||
Assert.Equal("XXXXXX", to.Value);
|
||||
Assert.Equal("XXXXXX", to.Default);
|
||||
Assert.Equal("XXXXXX", to.Auto);
|
||||
|
||||
Assert.NotNull(to.Find);
|
||||
var find = Assert.Single(to.Find);
|
||||
Validate(find);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Find
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Find? find)
|
||||
{
|
||||
Assert.NotNull(find);
|
||||
Assert.Equal("XXXXXX", find.Operation);
|
||||
Assert.Equal("XXXXXX", find.Value);
|
||||
Assert.Equal("XXXXXX", find.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Games
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Games? games)
|
||||
{
|
||||
Assert.NotNull(games);
|
||||
Assert.NotNull(games.Game);
|
||||
var game = Assert.Single(games.Game);
|
||||
Validate(game);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Game
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Game? game)
|
||||
{
|
||||
Assert.NotNull(game);
|
||||
Assert.Equal("XXXXXX", game.ImageNumber);
|
||||
Assert.Equal("XXXXXX", game.ReleaseNumber);
|
||||
Assert.Equal("XXXXXX", game.Title);
|
||||
Assert.Equal("XXXXXX", game.SaveType);
|
||||
Assert.Equal("XXXXXX", game.RomSize);
|
||||
Assert.Equal("XXXXXX", game.Publisher);
|
||||
Assert.Equal("XXXXXX", game.Location);
|
||||
Assert.Equal("XXXXXX", game.SourceRom);
|
||||
Assert.Equal("XXXXXX", game.Language);
|
||||
Validate(game.Files);
|
||||
Assert.Equal("XXXXXX", game.Im1CRC);
|
||||
Assert.Equal("XXXXXX", game.Im2CRC);
|
||||
Assert.Equal("XXXXXX", game.Comment);
|
||||
Assert.Equal("XXXXXX", game.DuplicateID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Files
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Files? files)
|
||||
{
|
||||
Assert.NotNull(files);
|
||||
Assert.NotNull(files.RomCRC);
|
||||
var fileromcrc = Assert.Single(files.RomCRC);
|
||||
Validate(fileromcrc);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a FileRomCRC
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.FileRomCRC? fileromcrc)
|
||||
{
|
||||
Assert.NotNull(fileromcrc);
|
||||
Assert.Equal("XXXXXX", fileromcrc.Extension);
|
||||
Assert.Equal("XXXXXX", fileromcrc.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a GUI
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.GUI? gui)
|
||||
{
|
||||
Assert.NotNull(gui);
|
||||
Validate(gui.Images);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Images
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Images? images)
|
||||
{
|
||||
Assert.NotNull(images);
|
||||
Assert.Equal("XXXXXX", images.Width);
|
||||
Assert.Equal("XXXXXX", images.Height);
|
||||
|
||||
Assert.NotNull(images.Image);
|
||||
var image = Assert.Single(images.Image);
|
||||
Validate(image);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Image
|
||||
/// </summary>
|
||||
private static void Validate(Models.OfflineList.Image? image)
|
||||
{
|
||||
Assert.NotNull(image);
|
||||
Assert.Equal("XXXXXX", image.X);
|
||||
Assert.Equal("XXXXXX", image.Y);
|
||||
Assert.Equal("XXXXXX", image.Width);
|
||||
Assert.Equal("XXXXXX", image.Height);
|
||||
}
|
||||
}
|
||||
}
|
||||
224
SabreTools.Serialization.Test/Deserializers/OpenMSXTests.cs
Normal file
224
SabreTools.Serialization.Test/Deserializers/OpenMSXTests.cs
Normal file
@@ -0,0 +1,224 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class OpenMSXTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new OpenMSX();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new OpenMSX();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new OpenMSX();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new OpenMSX();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new OpenMSX();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new OpenMSX();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.OpenMSX();
|
||||
var serializer = new Serialization.Serializers.OpenMSX();
|
||||
|
||||
// Build the data
|
||||
Models.OpenMSX.SoftwareDb sdb = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? metadata = serializer.Serialize(sdb);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.OpenMSX.SoftwareDb? newSdb = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newSdb);
|
||||
Assert.Equal("XXXXXX", newSdb.Timestamp);
|
||||
|
||||
Assert.NotNull(newSdb.Software);
|
||||
var software = Assert.Single(newSdb.Software);
|
||||
Validate(software);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.OpenMSX.SoftwareDb Build()
|
||||
{
|
||||
var original = new Models.OpenMSX.Original
|
||||
{
|
||||
Value = "XXXXXX",
|
||||
Content = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.OpenMSX.Rom
|
||||
{
|
||||
Start = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Hash = "XXXXXX",
|
||||
Remark = "XXXXXX",
|
||||
};
|
||||
|
||||
var dump_rom = new Models.OpenMSX.Dump
|
||||
{
|
||||
Original = original,
|
||||
Rom = rom,
|
||||
};
|
||||
|
||||
var megarom = new Models.OpenMSX.MegaRom
|
||||
{
|
||||
Start = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Hash = "XXXXXX",
|
||||
Remark = "XXXXXX",
|
||||
};
|
||||
|
||||
var dump_megarom = new Models.OpenMSX.Dump
|
||||
{
|
||||
Original = original,
|
||||
Rom = megarom,
|
||||
};
|
||||
|
||||
var sccpluscart = new Models.OpenMSX.SCCPlusCart
|
||||
{
|
||||
Start = "XXXXXX",
|
||||
Type = "XXXXXX",
|
||||
Hash = "XXXXXX",
|
||||
Remark = "XXXXXX",
|
||||
};
|
||||
|
||||
var dump_sccpluscart = new Models.OpenMSX.Dump
|
||||
{
|
||||
Original = original,
|
||||
Rom = sccpluscart,
|
||||
};
|
||||
|
||||
var software = new Models.OpenMSX.Software
|
||||
{
|
||||
Title = "XXXXXX",
|
||||
GenMSXID = "XXXXXX",
|
||||
System = "XXXXXX",
|
||||
Company = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Country = "XXXXXX",
|
||||
Dump = [dump_rom, dump_megarom, dump_sccpluscart],
|
||||
};
|
||||
|
||||
return new Models.OpenMSX.SoftwareDb
|
||||
{
|
||||
Timestamp = "XXXXXX",
|
||||
Software = [software],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Software
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.Software? software)
|
||||
{
|
||||
Assert.NotNull(software);
|
||||
Assert.Equal("XXXXXX", software.Title);
|
||||
Assert.Equal("XXXXXX", software.GenMSXID);
|
||||
Assert.Equal("XXXXXX", software.System);
|
||||
Assert.Equal("XXXXXX", software.Company);
|
||||
Assert.Equal("XXXXXX", software.Year);
|
||||
Assert.Equal("XXXXXX", software.Country);
|
||||
|
||||
Assert.NotNull(software.Dump);
|
||||
Assert.Equal(3, software.Dump.Length);
|
||||
foreach (var dump in software.Dump)
|
||||
{
|
||||
Validate(dump);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Dump
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.Dump? dump)
|
||||
{
|
||||
Assert.NotNull(dump);
|
||||
Validate(dump.Original);
|
||||
Validate(dump.Rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Original
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.Original? original)
|
||||
{
|
||||
Assert.NotNull(original);
|
||||
Assert.Equal("XXXXXX", original.Value);
|
||||
Assert.Equal("XXXXXX", original.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a RomBase
|
||||
/// </summary>
|
||||
private static void Validate(Models.OpenMSX.RomBase? rombase)
|
||||
{
|
||||
Assert.NotNull(rombase);
|
||||
Assert.Equal("XXXXXX", rombase.Start);
|
||||
Assert.Equal("XXXXXX", rombase.Type);
|
||||
Assert.Equal("XXXXXX", rombase.Hash);
|
||||
Assert.Equal("XXXXXX", rombase.Remark);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/PAKTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/PAKTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PAKTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PAK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PAK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PAK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PAK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PAK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PAK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/PFFTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/PFFTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PFFTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PFF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PFF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PFF();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PFF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PFF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PFF();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/PICTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/PICTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PICTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PIC();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PIC();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PIC();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PIC();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PIC();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PIC();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/PKZIPTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/PKZIPTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PKZIPTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PKZIP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PKZIP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PKZIP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PKZIP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PKZIP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PKZIP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PlayJAudioTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PlayJAudio();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PlayJAudio();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PlayJAudio();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PlayJAudio();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PlayJAudio();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PlayJAudio();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PlayJPlaylistTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PlayJPlaylist();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PlayJPlaylist();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PlayJPlaylist();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PlayJPlaylist();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PlayJPlaylist();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PlayJPlaylist();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class PortableExecutableTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new PortableExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new PortableExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new PortableExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new PortableExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new PortableExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new PortableExecutable();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/QuantumTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/QuantumTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class QuantumTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new Quantum();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new Quantum();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new Quantum();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new Quantum();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new Quantum();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new Quantum();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
221
SabreTools.Serialization.Test/Deserializers/RomCenterTests.cs
Normal file
221
SabreTools.Serialization.Test/Deserializers/RomCenterTests.cs
Normal file
@@ -0,0 +1,221 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class RomCenterTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new RomCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new RomCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new RomCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new RomCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new RomCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new RomCenter();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.RomCenter();
|
||||
var serializer = new Serialization.Serializers.RomCenter();
|
||||
|
||||
// Build the data
|
||||
Models.RomCenter.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? metadata = serializer.Serialize(mf);
|
||||
Assert.NotNull(metadata);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.RomCenter.MetadataFile? newMf = deserializer.Deserialize(metadata);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Credits);
|
||||
Validate(newMf.Dat);
|
||||
Validate(newMf.Emulator);
|
||||
Validate(newMf.Games);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.RomCenter.MetadataFile Build()
|
||||
{
|
||||
var credits = new Models.RomCenter.Credits
|
||||
{
|
||||
Author = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
Email = "XXXXXX",
|
||||
Homepage = "XXXXXX",
|
||||
Url = "XXXXXX",
|
||||
Date = "XXXXXX",
|
||||
Comment = "XXXXXX",
|
||||
};
|
||||
|
||||
var dat = new Models.RomCenter.Dat
|
||||
{
|
||||
Version = "XXXXXX",
|
||||
Plugin = "XXXXXX",
|
||||
Split = "XXXXXX",
|
||||
Merge = "XXXXXX",
|
||||
};
|
||||
|
||||
var emulator = new Models.RomCenter.Emulator
|
||||
{
|
||||
RefName = "XXXXXX",
|
||||
Version = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.RomCenter.Rom
|
||||
{
|
||||
ParentName = "XXXXXX",
|
||||
ParentDescription = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
RomName = "XXXXXX",
|
||||
RomCRC = "XXXXXX",
|
||||
RomSize = "XXXXXX",
|
||||
RomOf = "XXXXXX",
|
||||
MergeName = "XXXXXX",
|
||||
};
|
||||
|
||||
var games = new Models.RomCenter.Games
|
||||
{
|
||||
Rom = [rom],
|
||||
};
|
||||
|
||||
return new Models.RomCenter.MetadataFile
|
||||
{
|
||||
Credits = credits,
|
||||
Dat = dat,
|
||||
Emulator = emulator,
|
||||
Games = games,
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Credits
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Credits? credits)
|
||||
{
|
||||
Assert.NotNull(credits);
|
||||
Assert.Equal("XXXXXX", credits.Author);
|
||||
Assert.Equal("XXXXXX", credits.Version);
|
||||
Assert.Equal("XXXXXX", credits.Email);
|
||||
Assert.Equal("XXXXXX", credits.Homepage);
|
||||
Assert.Equal("XXXXXX", credits.Url);
|
||||
Assert.Equal("XXXXXX", credits.Date);
|
||||
Assert.Equal("XXXXXX", credits.Comment);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Dat
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Dat? dat)
|
||||
{
|
||||
Assert.NotNull(dat);
|
||||
Assert.Equal("XXXXXX", dat.Version);
|
||||
Assert.Equal("XXXXXX", dat.Plugin);
|
||||
Assert.Equal("XXXXXX", dat.Split);
|
||||
Assert.Equal("XXXXXX", dat.Merge);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Emulator
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Emulator? emulator)
|
||||
{
|
||||
Assert.NotNull(emulator);
|
||||
Assert.Equal("XXXXXX", emulator.RefName);
|
||||
Assert.Equal("XXXXXX", emulator.Version);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Games
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Games? games)
|
||||
{
|
||||
Assert.NotNull(games);
|
||||
Assert.NotNull(games.Rom);
|
||||
var rom = Assert.Single(games.Rom);
|
||||
Validate(rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.RomCenter.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.ParentName);
|
||||
Assert.Equal("XXXXXX", rom.ParentDescription);
|
||||
Assert.Equal("XXXXXX", rom.GameName);
|
||||
Assert.Equal("XXXXXX", rom.GameDescription);
|
||||
Assert.Equal("XXXXXX", rom.RomName);
|
||||
Assert.Equal("XXXXXX", rom.RomCRC);
|
||||
Assert.Equal("XXXXXX", rom.RomSize);
|
||||
Assert.Equal("XXXXXX", rom.RomOf);
|
||||
Assert.Equal("XXXXXX", rom.MergeName);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/SFBTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/SFBTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class SFBTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new SFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new SFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new SFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new SFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new SFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new SFB();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/SFOTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/SFOTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class SFOTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new SFO();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new SFO();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new SFO();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new SFO();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new SFO();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new SFO();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/SGATests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/SGATests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class SGATests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new SGA();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new SGA();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new SGA();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new SGA();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new SGA();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new SGA();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,308 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class SeparatedValueTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new SeparatedValue();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new SeparatedValue();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new SeparatedValue();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new SeparatedValue();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new SeparatedValue();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new SeparatedValue();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripShortTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.SeparatedValue();
|
||||
var serializer = new Serialization.Serializers.SeparatedValue();
|
||||
|
||||
// Build the data
|
||||
Models.SeparatedValue.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = Serialization.Serializers.SeparatedValue.SerializeStream(mf, longHeader: false);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.SeparatedValue.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Header, longHeader: false);
|
||||
Assert.NotNull(newMf.Row);
|
||||
Assert.Equal(3, newMf.Row.Length);
|
||||
|
||||
ValidateDisk(newMf.Row[0], longHeader: false);
|
||||
ValidateMedia(newMf.Row[1], longHeader: false);
|
||||
ValidateRom(newMf.Row[2], longHeader: false);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripLongTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.SeparatedValue();
|
||||
var serializer = new Serialization.Serializers.SeparatedValue();
|
||||
|
||||
// Build the data
|
||||
Models.SeparatedValue.MetadataFile mf = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = Serialization.Serializers.SeparatedValue.SerializeStream(mf, longHeader: true);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.SeparatedValue.MetadataFile? newMf = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newMf);
|
||||
Validate(newMf.Header, longHeader: true);
|
||||
Assert.NotNull(newMf.Row);
|
||||
Assert.Equal(3, newMf.Row.Length);
|
||||
|
||||
ValidateDisk(newMf.Row[0], longHeader: true);
|
||||
ValidateMedia(newMf.Row[1], longHeader: true);
|
||||
ValidateRom(newMf.Row[2], longHeader: true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.SeparatedValue.MetadataFile Build()
|
||||
{
|
||||
string[] header = ["header"];
|
||||
|
||||
var disk = new Models.SeparatedValue.Row
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
InternalName = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
Type = "disk",
|
||||
DiskName = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
};
|
||||
|
||||
var media = new Models.SeparatedValue.Row
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
InternalName = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
Type = "media",
|
||||
DiskName = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.SeparatedValue.Row
|
||||
{
|
||||
FileName = "XXXXXX",
|
||||
InternalName = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
GameName = "XXXXXX",
|
||||
GameDescription = "XXXXXX",
|
||||
Type = "rom",
|
||||
RomName = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
SHA256 = "XXXXXX",
|
||||
SHA384 = "XXXXXX",
|
||||
SHA512 = "XXXXXX",
|
||||
SpamSum = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
};
|
||||
|
||||
return new Models.SeparatedValue.MetadataFile
|
||||
{
|
||||
Header = header,
|
||||
Row = [disk, media, rom],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a header
|
||||
/// </summary>
|
||||
private static void Validate(string[]? header, bool longHeader)
|
||||
{
|
||||
Assert.NotNull(header);
|
||||
if (longHeader)
|
||||
Assert.True(Serialization.Serializers.SeparatedValue.HeaderArrayExtended.SequenceEqual(header));
|
||||
else
|
||||
Assert.True(Serialization.Serializers.SeparatedValue.HeaderArrayStandard.SequenceEqual(header));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateDisk(Models.SeparatedValue.Row? row, bool longHeader)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.FileName);
|
||||
Assert.Equal("XXXXXX", row.InternalName);
|
||||
Assert.Equal("XXXXXX", row.Description);
|
||||
Assert.Equal("XXXXXX", row.GameName);
|
||||
Assert.Equal("XXXXXX", row.GameDescription);
|
||||
Assert.Equal("disk", row.Type);
|
||||
Assert.NotNull(row.RomName); Assert.Empty(row.RomName);
|
||||
Assert.Equal("XXXXXX", row.DiskName);
|
||||
Assert.NotNull(row.Size); Assert.Empty(row.Size);
|
||||
Assert.NotNull(row.CRC); Assert.Empty(row.CRC);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.NotNull(row.CRC); Assert.Empty(row.CRC);
|
||||
if (longHeader)
|
||||
{
|
||||
Assert.NotNull(row.SHA384); Assert.Empty(row.SHA384);
|
||||
Assert.NotNull(row.SHA512); Assert.Empty(row.SHA512);
|
||||
Assert.NotNull(row.SpamSum); Assert.Empty(row.SpamSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Null(row.SHA384);
|
||||
Assert.Null(row.SHA512);
|
||||
Assert.Null(row.SpamSum);
|
||||
}
|
||||
Assert.Equal("XXXXXX", row.Status);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateMedia(Models.SeparatedValue.Row? row, bool longHeader)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.FileName);
|
||||
Assert.Equal("XXXXXX", row.InternalName);
|
||||
Assert.Equal("XXXXXX", row.Description);
|
||||
Assert.Equal("XXXXXX", row.GameName);
|
||||
Assert.Equal("XXXXXX", row.GameDescription);
|
||||
Assert.Equal("media", row.Type);
|
||||
Assert.NotNull(row.RomName); Assert.Empty(row.RomName);
|
||||
Assert.Equal("XXXXXX", row.DiskName);
|
||||
Assert.NotNull(row.Size); Assert.Empty(row.Size);
|
||||
Assert.NotNull(row.CRC); Assert.Empty(row.CRC);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Equal("XXXXXX", row.SHA256);
|
||||
if (longHeader)
|
||||
{
|
||||
Assert.NotNull(row.SHA384); Assert.Empty(row.SHA384);
|
||||
Assert.NotNull(row.SHA512); Assert.Empty(row.SHA512);
|
||||
Assert.Equal("XXXXXX", row.SpamSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Null(row.SHA384);
|
||||
Assert.Null(row.SHA512);
|
||||
Assert.Null(row.SpamSum);
|
||||
}
|
||||
Assert.NotNull(row.Status); Assert.Empty(row.Status);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Row
|
||||
/// </summary>
|
||||
private static void ValidateRom(Models.SeparatedValue.Row? row, bool longHeader)
|
||||
{
|
||||
Assert.NotNull(row);
|
||||
Assert.Equal("XXXXXX", row.FileName);
|
||||
Assert.Equal("XXXXXX", row.InternalName);
|
||||
Assert.Equal("XXXXXX", row.Description);
|
||||
Assert.Equal("XXXXXX", row.GameName);
|
||||
Assert.Equal("XXXXXX", row.GameDescription);
|
||||
Assert.Equal("rom", row.Type);
|
||||
Assert.Equal("XXXXXX", row.RomName);
|
||||
Assert.NotNull(row.DiskName);
|
||||
Assert.Empty(row.DiskName);
|
||||
Assert.Equal("XXXXXX", row.Size);
|
||||
Assert.Equal("XXXXXX", row.CRC);
|
||||
Assert.Equal("XXXXXX", row.MD5);
|
||||
Assert.Equal("XXXXXX", row.SHA1);
|
||||
Assert.Equal("XXXXXX", row.SHA256);
|
||||
if (longHeader)
|
||||
{
|
||||
Assert.Equal("XXXXXX", row.SHA384);
|
||||
Assert.Equal("XXXXXX", row.SHA512);
|
||||
Assert.Equal("XXXXXX", row.SpamSum);
|
||||
}
|
||||
else
|
||||
{
|
||||
Assert.Null(row.SHA384);
|
||||
Assert.Null(row.SHA512);
|
||||
Assert.Null(row.SpamSum);
|
||||
}
|
||||
Assert.Equal("XXXXXX", row.Status);
|
||||
}
|
||||
}
|
||||
}
|
||||
378
SabreTools.Serialization.Test/Deserializers/SoftwareListTests.cs
Normal file
378
SabreTools.Serialization.Test/Deserializers/SoftwareListTests.cs
Normal file
@@ -0,0 +1,378 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class SoftwareListTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new SoftwareList();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new SoftwareList();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new SoftwareList();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new SoftwareList();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new SoftwareList();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new SoftwareList();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RoundTripTest()
|
||||
{
|
||||
// Get the serializer and deserializer
|
||||
var deserializer = new Serialization.Deserializers.SoftwareList();
|
||||
var serializer = new Serialization.Serializers.SoftwareList();
|
||||
|
||||
// Build the data
|
||||
Models.SoftwareList.SoftwareList sl = Build();
|
||||
|
||||
// Serialize to stream
|
||||
Stream? actual = serializer.Serialize(sl);
|
||||
Assert.NotNull(actual);
|
||||
|
||||
// Serialize back to original model
|
||||
Models.SoftwareList.SoftwareList? newSl = deserializer.Deserialize(actual);
|
||||
|
||||
// Validate the data
|
||||
Assert.NotNull(newSl);
|
||||
Assert.Equal("XXXXXX", newSl.Name);
|
||||
Assert.Equal("XXXXXX", newSl.Description);
|
||||
Assert.Equal("XXXXXX", newSl.Notes);
|
||||
|
||||
Assert.NotNull(newSl.Software);
|
||||
var newSoftware = Assert.Single(newSl.Software);
|
||||
Validate(newSoftware);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build model for serialization and deserialization
|
||||
/// </summary>
|
||||
private static Models.SoftwareList.SoftwareList Build()
|
||||
{
|
||||
var info = new Models.SoftwareList.Info
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var sharedfeat = new Models.SoftwareList.SharedFeat
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var feature = new Models.SoftwareList.Feature
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
};
|
||||
|
||||
var rom = new Models.SoftwareList.Rom
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
Length = "XXXXXX",
|
||||
CRC = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Offset = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
LoadFlag = "XXXXXX",
|
||||
};
|
||||
|
||||
var dataarea = new Models.SoftwareList.DataArea
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Size = "XXXXXX",
|
||||
Width = "XXXXXX",
|
||||
Endianness = "XXXXXX",
|
||||
Rom = [rom],
|
||||
};
|
||||
|
||||
var disk = new Models.SoftwareList.Disk
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
MD5 = "XXXXXX",
|
||||
SHA1 = "XXXXXX",
|
||||
Status = "XXXXXX",
|
||||
Writeable = "XXXXXX",
|
||||
};
|
||||
|
||||
var diskarea = new Models.SoftwareList.DiskArea
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Disk = [disk],
|
||||
};
|
||||
|
||||
var dipvalue = new Models.SoftwareList.DipValue
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Value = "XXXXXX",
|
||||
Default = "XXXXXX",
|
||||
};
|
||||
|
||||
var dipswitch = new Models.SoftwareList.DipSwitch
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Tag = "XXXXXX",
|
||||
Mask = "XXXXXX",
|
||||
DipValue = [dipvalue],
|
||||
};
|
||||
|
||||
var part = new Models.SoftwareList.Part
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Interface = "XXXXXX",
|
||||
Feature = [feature],
|
||||
DataArea = [dataarea],
|
||||
DiskArea = [diskarea],
|
||||
DipSwitch = [dipswitch],
|
||||
};
|
||||
|
||||
var software = new Models.SoftwareList.Software
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
CloneOf = "XXXXXX",
|
||||
Supported = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Year = "XXXXXX",
|
||||
Publisher = "XXXXXX",
|
||||
Notes = "XXXXXX",
|
||||
Info = [info],
|
||||
SharedFeat = [sharedfeat],
|
||||
Part = [part],
|
||||
};
|
||||
|
||||
return new Models.SoftwareList.SoftwareList
|
||||
{
|
||||
Name = "XXXXXX",
|
||||
Description = "XXXXXX",
|
||||
Notes = "XXXXXX",
|
||||
Software = [software],
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Software
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Software? software)
|
||||
{
|
||||
Assert.NotNull(software);
|
||||
Assert.Equal("XXXXXX", software.Name);
|
||||
Assert.Equal("XXXXXX", software.CloneOf);
|
||||
Assert.Equal("XXXXXX", software.Supported);
|
||||
Assert.Equal("XXXXXX", software.Description);
|
||||
Assert.Equal("XXXXXX", software.Year);
|
||||
Assert.Equal("XXXXXX", software.Publisher);
|
||||
Assert.Equal("XXXXXX", software.Notes);
|
||||
|
||||
Assert.NotNull(software.Info);
|
||||
var info = Assert.Single(software.Info);
|
||||
Validate(info);
|
||||
|
||||
Assert.NotNull(software.SharedFeat);
|
||||
var sharedfeat = Assert.Single(software.SharedFeat);
|
||||
Validate(sharedfeat);
|
||||
|
||||
Assert.NotNull(software.Part);
|
||||
var part = Assert.Single(software.Part);
|
||||
Validate(part);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Info
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Info? info)
|
||||
{
|
||||
Assert.NotNull(info);
|
||||
Assert.Equal("XXXXXX", info.Name);
|
||||
Assert.Equal("XXXXXX", info.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a SharedFeat
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.SharedFeat? sharedfeat)
|
||||
{
|
||||
Assert.NotNull(sharedfeat);
|
||||
Assert.Equal("XXXXXX", sharedfeat.Name);
|
||||
Assert.Equal("XXXXXX", sharedfeat.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Part
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Part? part)
|
||||
{
|
||||
Assert.NotNull(part);
|
||||
Assert.Equal("XXXXXX", part.Name);
|
||||
Assert.Equal("XXXXXX", part.Interface);
|
||||
|
||||
Assert.NotNull(part.Feature);
|
||||
var feature = Assert.Single(part.Feature);
|
||||
Validate(feature);
|
||||
|
||||
Assert.NotNull(part.DataArea);
|
||||
var dataarea = Assert.Single(part.DataArea);
|
||||
Validate(dataarea);
|
||||
|
||||
Assert.NotNull(part.DiskArea);
|
||||
var diskarea = Assert.Single(part.DiskArea);
|
||||
Validate(diskarea);
|
||||
|
||||
Assert.NotNull(part.DipSwitch);
|
||||
var dipswitch = Assert.Single(part.DipSwitch);
|
||||
Validate(dipswitch);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Feature
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Feature? feature)
|
||||
{
|
||||
Assert.NotNull(feature);
|
||||
Assert.Equal("XXXXXX", feature.Name);
|
||||
Assert.Equal("XXXXXX", feature.Value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DataArea
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DataArea? dataarea)
|
||||
{
|
||||
Assert.NotNull(dataarea);
|
||||
Assert.Equal("XXXXXX", dataarea.Name);
|
||||
Assert.Equal("XXXXXX", dataarea.Size);
|
||||
Assert.Equal("XXXXXX", dataarea.Width);
|
||||
Assert.Equal("XXXXXX", dataarea.Endianness);
|
||||
|
||||
Assert.NotNull(dataarea.Rom);
|
||||
var rom = Assert.Single(dataarea.Rom);
|
||||
Validate(rom);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Rom
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Rom? rom)
|
||||
{
|
||||
Assert.NotNull(rom);
|
||||
Assert.Equal("XXXXXX", rom.Name);
|
||||
Assert.Equal("XXXXXX", rom.Size);
|
||||
Assert.Equal("XXXXXX", rom.Length);
|
||||
Assert.Equal("XXXXXX", rom.CRC);
|
||||
Assert.Equal("XXXXXX", rom.SHA1);
|
||||
Assert.Equal("XXXXXX", rom.Offset);
|
||||
Assert.Equal("XXXXXX", rom.Value);
|
||||
Assert.Equal("XXXXXX", rom.Status);
|
||||
Assert.Equal("XXXXXX", rom.LoadFlag);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DiskArea
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DiskArea? diskarea)
|
||||
{
|
||||
Assert.NotNull(diskarea);
|
||||
Assert.Equal("XXXXXX", diskarea.Name);
|
||||
|
||||
Assert.NotNull(diskarea.Disk);
|
||||
var disk = Assert.Single(diskarea.Disk);
|
||||
Validate(disk);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a Disk
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.Disk? disk)
|
||||
{
|
||||
Assert.NotNull(disk);
|
||||
Assert.Equal("XXXXXX", disk.Name);
|
||||
Assert.Equal("XXXXXX", disk.MD5);
|
||||
Assert.Equal("XXXXXX", disk.SHA1);
|
||||
Assert.Equal("XXXXXX", disk.Status);
|
||||
Assert.Equal("XXXXXX", disk.Writeable);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipSwitch
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DipSwitch? dipswitch)
|
||||
{
|
||||
Assert.NotNull(dipswitch);
|
||||
Assert.Equal("XXXXXX", dipswitch.Name);
|
||||
Assert.Equal("XXXXXX", dipswitch.Tag);
|
||||
Assert.Equal("XXXXXX", dipswitch.Mask);
|
||||
|
||||
Assert.NotNull(dipswitch.DipValue);
|
||||
var dipvalue = Assert.Single(dipswitch.DipValue);
|
||||
Validate(dipvalue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validate a DipValue
|
||||
/// </summary>
|
||||
private static void Validate(Models.SoftwareList.DipValue? dipvalue)
|
||||
{
|
||||
Assert.NotNull(dipvalue);
|
||||
Assert.Equal("XXXXXX", dipvalue.Name);
|
||||
Assert.Equal("XXXXXX", dipvalue.Value);
|
||||
Assert.Equal("XXXXXX", dipvalue.Default);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/VBSPTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/VBSPTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class VBSPTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new VBSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new VBSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new VBSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new VBSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new VBSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new VBSP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/VPKTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/VPKTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class VPKTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new VPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new VPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new VPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new VPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new VPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new VPK();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/WAD3Tests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/WAD3Tests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class WAD3Tests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new WAD3();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new WAD3();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new WAD3();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new WAD3();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new WAD3();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new WAD3();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
39
SabreTools.Serialization.Test/Deserializers/XMIDTests.cs
Normal file
39
SabreTools.Serialization.Test/Deserializers/XMIDTests.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class XMIDTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullString_Null()
|
||||
{
|
||||
string? data = null;
|
||||
var deserializer = new XMID();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyString_Null()
|
||||
{
|
||||
string? data = string.Empty;
|
||||
var deserializer = new XMID();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidString_Null()
|
||||
{
|
||||
string? data = "INVALID";
|
||||
var deserializer = new XMID();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
SabreTools.Serialization.Test/Deserializers/XZPTests.cs
Normal file
73
SabreTools.Serialization.Test/Deserializers/XZPTests.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class XZPTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullArray_Null()
|
||||
{
|
||||
byte[]? data = null;
|
||||
int offset = 0;
|
||||
var deserializer = new XZP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyArray_Null()
|
||||
{
|
||||
byte[]? data = [];
|
||||
int offset = 0;
|
||||
var deserializer = new XZP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidArray_Null()
|
||||
{
|
||||
byte[]? data = [.. Enumerable.Repeat<byte>(0xFF, 1024)];
|
||||
int offset = 0;
|
||||
var deserializer = new XZP();
|
||||
|
||||
var actual = deserializer.Deserialize(data, offset);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NullStream_Null()
|
||||
{
|
||||
Stream? data = null;
|
||||
var deserializer = new XZP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([]);
|
||||
var deserializer = new XZP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidStream_Null()
|
||||
{
|
||||
Stream? data = new MemoryStream([.. Enumerable.Repeat<byte>(0xFF, 1024)]);
|
||||
var deserializer = new XZP();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
38
SabreTools.Serialization.Test/Deserializers/XeMIDTests.cs
Normal file
38
SabreTools.Serialization.Test/Deserializers/XeMIDTests.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Deserializers
|
||||
{
|
||||
public class XeMIDTests
|
||||
{
|
||||
[Fact]
|
||||
public void NullString_Null()
|
||||
{
|
||||
string? data = null;
|
||||
var deserializer = new XeMID();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EmptyString_Null()
|
||||
{
|
||||
string? data = string.Empty;
|
||||
var deserializer = new XeMID();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void InvalidString_Null()
|
||||
{
|
||||
string? data = "INVALID";
|
||||
var deserializer = new XeMID();
|
||||
|
||||
var actual = deserializer.Deserialize(data);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,313 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using SabreTools.Hashing;
|
||||
using SabreTools.Serialization.Deserializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test
|
||||
{
|
||||
/// <remarks>
|
||||
/// Filenames that end in `-files` are real examples.
|
||||
/// All other files are artificial and may not fully represent real examples.
|
||||
/// </remarks>
|
||||
public class MetadataDeserializationTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("test-archivedotorg-files1.xml", 22)]
|
||||
[InlineData("test-archivedotorg-files2.xml", 13)]
|
||||
[InlineData("test-archivedotorg-files3.xml", 21)]
|
||||
[InlineData("test-archivedotorg-files4.xml", 19)]
|
||||
[InlineData("test-archivedotorg-files5.xml", 1390)]
|
||||
public void ArchiveDotOrgDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = ArchiveDotOrg.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.File);
|
||||
Assert.Equal(count, dat.File.Length);
|
||||
|
||||
// Validate we're not missing any attributes or elements
|
||||
foreach (var file in dat.File)
|
||||
{
|
||||
Assert.NotNull(file);
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-attractmode-files.txt", 11)]
|
||||
public void AttractModeDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = AttractMode.DeserializeFile(filename);
|
||||
|
||||
// Validate texpected: he values
|
||||
Assert.NotNull(dat?.Row);
|
||||
Assert.Equal(count, dat.Row.Length);
|
||||
|
||||
// Validate we're not missing any attributes or elements
|
||||
foreach (var file in dat.Row)
|
||||
{
|
||||
Assert.NotNull(file);
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-cmp-files1.dat", 59, true)]
|
||||
[InlineData("test-cmp-files2.dat", 312, false)]
|
||||
public void ClrMameProDeserializeTest(string path, long count, bool expectHeader)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = ClrMamePro.DeserializeFile(filename, quotes: true);
|
||||
|
||||
// Validate the values
|
||||
if (expectHeader)
|
||||
Assert.NotNull(dat?.ClrMamePro);
|
||||
else
|
||||
Assert.Null(dat?.ClrMamePro);
|
||||
|
||||
Assert.NotNull(dat?.Game);
|
||||
Assert.Equal(count, dat.Game.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-doscenter-files1.dat.gz", 34965)]
|
||||
[InlineData("test-doscenter-files2.dat.gz", 7189)]
|
||||
public void DosCenterDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = DosCenter.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.DosCenter);
|
||||
|
||||
Assert.NotNull(dat?.Game);
|
||||
Assert.Equal(count, dat.Game.Length);
|
||||
|
||||
foreach (var game in dat.Game)
|
||||
{
|
||||
Assert.NotNull(game.File);
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-smdb-files.txt", 6113)]
|
||||
public void EverdriveSMDBDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = EverdriveSMDB.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Row);
|
||||
Assert.Equal(count, dat.Row.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-sfv-files.sfv", HashType.CRC32, 100)]
|
||||
[InlineData("test-md5-files.md5", HashType.MD5, 100)]
|
||||
[InlineData("test-sha1-files.sha1", HashType.SHA1, 100)]
|
||||
[InlineData("test-sha256.sha256", HashType.SHA256, 1)]
|
||||
[InlineData("test-sha384.sha384", HashType.SHA384, 1)]
|
||||
[InlineData("test-sha512.sha512", HashType.SHA512, 1)]
|
||||
[InlineData("test-spamsum.spamsum", HashType.SpamSum, 1)]
|
||||
public void HashfileDeserializeTest(string path, HashType hash, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = Hashfile.DeserializeFile(filename, hash);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat);
|
||||
|
||||
switch (hash)
|
||||
{
|
||||
case HashType.CRC32:
|
||||
Assert.NotNull(dat.SFV);
|
||||
Assert.Equal(count, dat.SFV.Length);
|
||||
break;
|
||||
case HashType.MD5:
|
||||
Assert.NotNull(dat.MD5);
|
||||
Assert.Equal(count, dat.MD5.Length);
|
||||
break;
|
||||
case HashType.SHA1:
|
||||
Assert.NotNull(dat.SHA1);
|
||||
Assert.Equal(count, dat.SHA1.Length);
|
||||
break;
|
||||
case HashType.SHA256:
|
||||
Assert.NotNull(dat.SHA256);
|
||||
Assert.Equal(count, dat.SHA256.Length);
|
||||
break;
|
||||
case HashType.SHA384:
|
||||
Assert.NotNull(dat.SHA384);
|
||||
Assert.Equal(count, dat.SHA384.Length);
|
||||
break;
|
||||
case HashType.SHA512:
|
||||
Assert.NotNull(dat.SHA512);
|
||||
Assert.Equal(count, dat.SHA512.Length);
|
||||
break;
|
||||
case HashType.SpamSum:
|
||||
Assert.NotNull(dat.SpamSum);
|
||||
Assert.Equal(count, dat.SpamSum.Length);
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(hash));
|
||||
}
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-listrom-files.txt.gz", 45861)]
|
||||
public void ListromDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = Listrom.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Set);
|
||||
Assert.Equal(count, dat.Set.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-listxml-files1.xml.gz", 45861)]
|
||||
[InlineData("test-listxml-files2.xml", 3998)]
|
||||
public void ListxmlDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = Listxml.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Game);
|
||||
Assert.Equal(count, dat.Game.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-logiqx-files1.xml.gz", 45875)]
|
||||
[InlineData("test-logiqx-files2.xml", 761)]
|
||||
public void LogiqxDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = Logiqx.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Game);
|
||||
Assert.Equal(count, dat.Game.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-offlinelist-files.xml", 6750)]
|
||||
public void OfflineListDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = OfflineList.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Games?.Game);
|
||||
Assert.Equal(count, dat.Games.Game.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-openmsx-files.xml", 2550)]
|
||||
public void OpenMSXDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = OpenMSX.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat);
|
||||
Assert.NotNull(dat.Software);
|
||||
Assert.Equal(count, dat.Software.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-romcenter-files.dat", 901)]
|
||||
public void RomCenterDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = RomCenter.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Games?.Rom);
|
||||
Assert.Equal(count, dat.Games.Rom.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-csv-files1.csv", ',', 2)]
|
||||
[InlineData("test-csv-files2.csv", ',', 2)]
|
||||
[InlineData("test-ssv-files1.ssv", ';', 2)]
|
||||
[InlineData("test-ssv-files2.ssv", ';', 2)]
|
||||
[InlineData("test-tsv-files1.tsv", '\t', 2)]
|
||||
[InlineData("test-tsv-files2.tsv", '\t', 2)]
|
||||
public void SeparatedValueDeserializeTest(string path, char delim, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = SeparatedValue.DeserializeFile(filename, delim);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat?.Row);
|
||||
Assert.Equal(count, dat.Row.Length);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("test-softwarelist-files1.xml", 4531)]
|
||||
[InlineData("test-softwarelist-files2.xml", 2797)]
|
||||
[InlineData("test-softwarelist-files3.xml", 274)]
|
||||
public void SoftwareListDeserializeTest(string path, long count)
|
||||
{
|
||||
// Open the file for reading
|
||||
string filename = GetTestFilePath(path);
|
||||
|
||||
// Deserialize the file
|
||||
var dat = SoftwareList.DeserializeFile(filename);
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(dat);
|
||||
Assert.NotNull(dat.Software);
|
||||
Assert.Equal(count, dat.Software.Length);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the path to the test file
|
||||
/// </summary>
|
||||
private static string GetTestFilePath(string path)
|
||||
{
|
||||
return Path.Combine(Environment.CurrentDirectory, "TestData", path);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Security.Cryptography;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test
|
||||
{
|
||||
public class MetadataSerializationTests
|
||||
{
|
||||
[Fact]
|
||||
public void OpenMSXSeserializeTest()
|
||||
{
|
||||
// Create the object for serialization
|
||||
var dat = GenerateOpenMSX();
|
||||
|
||||
// Deserialize the file
|
||||
var stream = OpenMSX.SerializeStream(dat) as MemoryStream;
|
||||
|
||||
// Validate the values
|
||||
Assert.NotNull(stream);
|
||||
byte[] hash = SHA1.HashData(stream.GetBuffer());
|
||||
string hashstr = BitConverter.ToString(hash).Replace("-", string.Empty);
|
||||
Assert.Equal("CCBFAAB56BAAF6BE56A85918055784A615379659", hashstr);
|
||||
}
|
||||
|
||||
#region Payload Generators
|
||||
|
||||
/// <summary>
|
||||
/// Generate a consistent OpenMSX SoftwareDb for testing
|
||||
/// </summary>
|
||||
private static Models.OpenMSX.SoftwareDb GenerateOpenMSX()
|
||||
{
|
||||
var original = new Models.OpenMSX.Original
|
||||
{
|
||||
Value = "false",
|
||||
Content = "Original Name",
|
||||
};
|
||||
|
||||
var rom = new Models.OpenMSX.Rom
|
||||
{
|
||||
Start = "0x0000",
|
||||
Type = "Game",
|
||||
Hash = "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
Remark = "Comment",
|
||||
};
|
||||
|
||||
var megaRom = new Models.OpenMSX.MegaRom
|
||||
{
|
||||
Start = "0x1000",
|
||||
Type = "Software",
|
||||
Hash = "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
Remark = "Comment",
|
||||
};
|
||||
|
||||
var sccPlusCart = new Models.OpenMSX.SCCPlusCart
|
||||
{
|
||||
Start = "0x2000",
|
||||
Type = "Utility",
|
||||
Hash = "da39a3ee5e6b4b0d3255bfef95601890afd80709",
|
||||
Remark = "Comment",
|
||||
};
|
||||
|
||||
var dump = new Models.OpenMSX.Dump[]
|
||||
{
|
||||
new() { Original = original, Rom = rom },
|
||||
new() { Rom = megaRom },
|
||||
new() { Rom = sccPlusCart },
|
||||
};
|
||||
|
||||
var software = new Models.OpenMSX.Software
|
||||
{
|
||||
Title = "Software Title",
|
||||
GenMSXID = "00000", // Not required
|
||||
System = "MSX 2",
|
||||
Company = "Imaginary Company, Inc.",
|
||||
Year = "19xx",
|
||||
Country = "Imaginaria",
|
||||
Dump = dump,
|
||||
};
|
||||
|
||||
return new Models.OpenMSX.SoftwareDb
|
||||
{
|
||||
Timestamp = "1234567890",
|
||||
Software = [software],
|
||||
};
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -26,8 +26,9 @@
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="SabreTools.Models" Version="1.5.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="SabreTools.Hashing" Version="1.4.0" />
|
||||
<PackageReference Include="SabreTools.Models" Version="1.5.5" />
|
||||
<PackageReference Include="xunit" Version="2.9.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class ArchiveDotOrgTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new ArchiveDotOrg();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new ArchiveDotOrg();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class AttractModeTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new AttractMode();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new AttractMode();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/CatalogTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/CatalogTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class CatalogTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new Catalog();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new Catalog();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/ClrMameProTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/ClrMameProTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class ClrMameProTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new ClrMamePro();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new ClrMamePro();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/CueSheetTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/CueSheetTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class CueSheetTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new CueSheet();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new CueSheet();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/DosCenterTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/DosCenterTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class DosCenterTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new DosCenter();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new DosCenter();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class EverdriveSMDBTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new EverdriveSMDB();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new EverdriveSMDB();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/HashfileTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/HashfileTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class HashfileTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new Hashfile();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new Hashfile();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/IRDTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/IRDTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class IRDTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new IRD();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new IRD();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/ListromTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/ListromTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class ListromTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new Listrom();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new Listrom();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/ListxmlTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/ListxmlTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class ListxmlTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new Listxml();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new Listxml();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/LogiqxTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/LogiqxTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class LogiqxTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new Logiqx();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new Logiqx();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/M1Tests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/M1Tests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class M1Tests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new M1();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new M1();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class OfflineListTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new OfflineList();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new OfflineList();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/OpenMSXTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/OpenMSXTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class OpenMSXTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new OpenMSX();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new OpenMSX();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
25
SabreTools.Serialization.Test/Serializers/RomCenterTests.cs
Normal file
25
SabreTools.Serialization.Test/Serializers/RomCenterTests.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class RomCenterTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new RomCenter();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new RomCenter();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class SeparatedValueTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new SeparatedValue();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new SeparatedValue();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.IO;
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class SoftwareListTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeArray_Null_Null()
|
||||
{
|
||||
var serializer = new SoftwareList();
|
||||
byte[]? actual = serializer.SerializeArray(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SerializeStream_Null_Null()
|
||||
{
|
||||
var serializer = new SoftwareList();
|
||||
Stream? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
16
SabreTools.Serialization.Test/Serializers/XMIDTests.cs
Normal file
16
SabreTools.Serialization.Test/Serializers/XMIDTests.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class XMIDTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeString_Null_Null()
|
||||
{
|
||||
var serializer = new XMID();
|
||||
string? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
16
SabreTools.Serialization.Test/Serializers/XeMIDTests.cs
Normal file
16
SabreTools.Serialization.Test/Serializers/XeMIDTests.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using SabreTools.Serialization.Serializers;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Serialization.Test.Serializers
|
||||
{
|
||||
public class XeMIDTests
|
||||
{
|
||||
[Fact]
|
||||
public void SerializeString_Null_Null()
|
||||
{
|
||||
var serializer = new XeMID();
|
||||
string? actual = serializer.Serialize(null);
|
||||
Assert.Null(actual);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,228 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Source: https://ia902607.us.archive.org/4/items/adventuresofsher00doylrich/adventuresofsher00doylrich_files.xml
|
||||
-->
|
||||
<files>
|
||||
<file name="__ia_thumb.jpg" source="original">
|
||||
<mtime>1657820174</mtime>
|
||||
<size>23393</size>
|
||||
<md5>33ca910055358d18e116ea66a0abdf04</md5>
|
||||
<crc32>aad0f2dc</crc32>
|
||||
<sha1>fc6d673ef7fbe974bba88b8275c737eeb20b5ba8</sha1>
|
||||
<format>Item Tile</format>
|
||||
<rotation>0</rotation>
|
||||
</file>
|
||||
<file name="_cloth_detection.log" source="derivative">
|
||||
<cloth_cover_detection_module_version>1.2</cloth_cover_detection_module_version>
|
||||
<format>Cloth Cover Detection Log</format>
|
||||
<original>scandata.zip</original>
|
||||
<mtime>1682523106</mtime>
|
||||
<size>717</size>
|
||||
<md5>3ed8a80448263ebfad242b8fa5a1a18d</md5>
|
||||
<crc32>d886dce1</crc32>
|
||||
<sha1>4f8d103cf07c29e1d3bb8273870f1daca4a89f26</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich.djvu" source="derivative">
|
||||
<format>DjVu</format>
|
||||
<original>adventuresofsher00doylrich_djvu.xml</original>
|
||||
<mtime>1288609616</mtime>
|
||||
<size>11176526</size>
|
||||
<md5>52ccad905110bc7f3c0fe032ef744fa1</md5>
|
||||
<crc32>91973508</crc32>
|
||||
<sha1>aa5214400b60e3b68f5eaa9733e10af4bcfe4e8d</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich.gif" source="derivative">
|
||||
<format>Animated GIF</format>
|
||||
<original>adventuresofsher00doylrich_jp2.zip</original>
|
||||
<mtime>1288593173</mtime>
|
||||
<size>334379</size>
|
||||
<md5>4d56403c12771ed7e396f6187d95502d</md5>
|
||||
<crc32>1a8585c1</crc32>
|
||||
<sha1>6062155959dd69f279a489b3761afa0a1638173d</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich.pdf" source="derivative">
|
||||
<pdf_module_version>0.0.22</pdf_module_version>
|
||||
<format>Text PDF</format>
|
||||
<original>adventuresofsher00doylrich_page_numbers.json</original>
|
||||
<mtime>1682525473</mtime>
|
||||
<size>26126569</size>
|
||||
<md5>98ad55b9989671f823228055bfbca465</md5>
|
||||
<crc32>cdc5f40d</crc32>
|
||||
<sha1>e358dd22e04f7efcd4dfc8a6c2d714a0e0a8297c</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_archive.torrent" source="metadata">
|
||||
<btih>4b5bbf39f9e489f66e0c70a9ac45af495b31a2ba</btih>
|
||||
<mtime>1688944719</mtime>
|
||||
<size>17197</size>
|
||||
<md5>91aa4822d1552ef8bd08b27b14d8af4d</md5>
|
||||
<crc32>10a3d397</crc32>
|
||||
<sha1>9f5d4b652ac6903e218c8ff8e854482ab3d31b99</sha1>
|
||||
<format>Archive BitTorrent</format>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_chocr.html.gz" source="derivative">
|
||||
<ocr>tesseract 5.3.0-3-g9920</ocr>
|
||||
<ocr_parameters>lang-eng;two-pass-disabled;pass-dpi-disabled;autonomous-mode-disabled;binarisation-method-otsu</ocr_parameters>
|
||||
<ocr_module_version>0.0.21</ocr_module_version>
|
||||
<ocr_detected_script>Latin</ocr_detected_script>
|
||||
<ocr_detected_script_conf>0.8867</ocr_detected_script_conf>
|
||||
<ocr_detected_lang>en</ocr_detected_lang>
|
||||
<ocr_detected_lang_conf>1.0000</ocr_detected_lang_conf>
|
||||
<format>chOCR</format>
|
||||
<original>adventuresofsher00doylrich_jp2.zip</original>
|
||||
<mtime>1682523054</mtime>
|
||||
<size>8326755</size>
|
||||
<md5>cda085dadcc74ca4bbeb768b69e7b28b</md5>
|
||||
<crc32>faa3bbc1</crc32>
|
||||
<sha1>0ceffd2d58757e30ccfcc84ff6805093e32607b3</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_dc.xml" source="original">
|
||||
<format>Dublin Core</format>
|
||||
<mtime>1682518166</mtime>
|
||||
<size>1712</size>
|
||||
<md5>bb3294746c4d5bb8102f8426454b26fb</md5>
|
||||
<crc32>7c20c9c9</crc32>
|
||||
<sha1>2bc134939b5f044396c56af740ad55029978859e</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_djvu.txt" source="derivative">
|
||||
<format>DjVuTXT</format>
|
||||
<original>adventuresofsher00doylrich_djvu.xml</original>
|
||||
<mtime>1682523254</mtime>
|
||||
<size>613882</size>
|
||||
<md5>022b57b4017bbd8e6564c6e0968ad063</md5>
|
||||
<crc32>2828f839</crc32>
|
||||
<sha1>1535e2f509fc3a81c377d2b7270d21a95af71d65</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_djvu.xml" source="derivative">
|
||||
<format>Djvu XML</format>
|
||||
<original>adventuresofsher00doylrich_hocr.html</original>
|
||||
<mtime>1682523185</mtime>
|
||||
<size>8593952</size>
|
||||
<md5>6faee3cd4ba7b3eaca3a2f5f4e8414f6</md5>
|
||||
<crc32>51713c61</crc32>
|
||||
<sha1>16dc73c2bdce4705c37d86a798d83fb780929928</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_files.xml" source="original">
|
||||
<format>Metadata</format>
|
||||
<md5>f39ff302a7965a1a077f3c4962f5d2e9</md5>
|
||||
<summation>md5</summation>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_hocr.html" source="derivative">
|
||||
<hocr_char_to_word_module_version>1.1.0</hocr_char_to_word_module_version>
|
||||
<hocr_char_to_word_hocr_version>1.1.15</hocr_char_to_word_hocr_version>
|
||||
<ocr_parameters>lang-eng;two-pass-disabled;pass-dpi-disabled;autonomous-mode-disabled;binarisation-method-otsu</ocr_parameters>
|
||||
<ocr_module_version>0.0.21</ocr_module_version>
|
||||
<ocr_detected_script>Latin</ocr_detected_script>
|
||||
<ocr_detected_script_conf>0.8867</ocr_detected_script_conf>
|
||||
<ocr_detected_lang>en</ocr_detected_lang>
|
||||
<ocr_detected_lang_conf>1.0000</ocr_detected_lang_conf>
|
||||
<format>hOCR</format>
|
||||
<original>adventuresofsher00doylrich_chocr.html.gz</original>
|
||||
<mtime>1682523150</mtime>
|
||||
<size>15785810</size>
|
||||
<md5>afbb8a9c1e6c25b3755fa6345153b13d</md5>
|
||||
<crc32>e79c31fd</crc32>
|
||||
<sha1>8b7cd7fd2010544783277f502c4103310dc2e2c4</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_hocr_pageindex.json.gz" source="derivative">
|
||||
<hocr_pageindex_module_version>1.0.0</hocr_pageindex_module_version>
|
||||
<hocr_pageindex_hocr_version>1.1.15</hocr_pageindex_hocr_version>
|
||||
<format>OCR Page Index</format>
|
||||
<original>adventuresofsher00doylrich_hocr.html</original>
|
||||
<mtime>1682523219</mtime>
|
||||
<size>4232</size>
|
||||
<md5>aec425c66ef34149cff679b8998c2a36</md5>
|
||||
<crc32>9a6e2f76</crc32>
|
||||
<sha1>cc91c1eb055652ab6c9de878c6b54e8b95bddad1</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_hocr_searchtext.txt.gz" source="derivative">
|
||||
<hocr_fts_text_module_version>1.1.0</hocr_fts_text_module_version>
|
||||
<hocr_fts_text_hocr_version>1.1.15</hocr_fts_text_hocr_version>
|
||||
<word_conf_0_10>531</word_conf_0_10>
|
||||
<word_conf_11_20>242</word_conf_11_20>
|
||||
<word_conf_21_30>298</word_conf_21_30>
|
||||
<word_conf_31_40>321</word_conf_31_40>
|
||||
<word_conf_41_50>389</word_conf_41_50>
|
||||
<word_conf_51_60>450</word_conf_51_60>
|
||||
<word_conf_61_70>671</word_conf_61_70>
|
||||
<word_conf_71_80>1059</word_conf_71_80>
|
||||
<word_conf_81_90>3102</word_conf_81_90>
|
||||
<word_conf_91_100>103350</word_conf_91_100>
|
||||
<format>OCR Search Text</format>
|
||||
<original>adventuresofsher00doylrich_hocr.html</original>
|
||||
<mtime>1682523242</mtime>
|
||||
<size>224594</size>
|
||||
<md5>2e1011def53909a247f73af66420e0c3</md5>
|
||||
<crc32>32dddf59</crc32>
|
||||
<sha1>f303467ce8f109a1d9cf49f2038c9a1d43e3c63e</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_jp2.zip" source="derivative">
|
||||
<format>Single Page Processed JP2 ZIP</format>
|
||||
<original>adventuresofsher00doylrich_raw_jp2.zip</original>
|
||||
<mtime>1288593129</mtime>
|
||||
<size>203319748</size>
|
||||
<md5>2acbe6b61d35d8bd093127f0cef724c9</md5>
|
||||
<crc32>66bcf599</crc32>
|
||||
<sha1>a8801760eec5442176281584bd6242868f81cde5</sha1>
|
||||
<filecount>364</filecount>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_marc.xml" source="original">
|
||||
<format>MARC</format>
|
||||
<md5>e951175fb1ee03c706ab6ee34754a92c</md5>
|
||||
<mtime>1682518056</mtime>
|
||||
<size>7679</size>
|
||||
<crc32>3538b620</crc32>
|
||||
<sha1>8fd493fa0971c2f7c2fdb1d84e0ec4234b878ff4</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_meta.xml" source="original">
|
||||
<format>Metadata</format>
|
||||
<mtime>1682525557</mtime>
|
||||
<size>3790</size>
|
||||
<md5>e98cb44acdb4e4f070fddb8b1f328d93</md5>
|
||||
<crc32>04ee4346</crc32>
|
||||
<sha1>c687fc00d20b516b0cf19225296e984cbfe7c315</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_metasource.xml" source="original">
|
||||
<format>MARC Source</format>
|
||||
<md5>7099c2013db04ef8a7277386ce74de54</md5>
|
||||
<mtime>1682518056</mtime>
|
||||
<size>527</size>
|
||||
<crc32>6fa5d977</crc32>
|
||||
<sha1>34ed3e366ed809a1a39a265373b9cf5b8cc06f0c</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_page_numbers.json" source="derivative">
|
||||
<format>Page Numbers JSON</format>
|
||||
<original>adventuresofsher00doylrich_djvu.xml</original>
|
||||
<mtime>1682523259</mtime>
|
||||
<size>67337</size>
|
||||
<md5>f9179733924fa4566f0e9a05c8c276dd</md5>
|
||||
<crc32>2bd8369f</crc32>
|
||||
<sha1>e4104152caa990c72f986eb63c660239f0111feb</sha1>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_raw_jp2.zip" source="original">
|
||||
<format>Single Page Raw JP2 ZIP</format>
|
||||
<md5>d2a1137d4f8fed61be945f878444923b</md5>
|
||||
<mtime>1204986411</mtime>
|
||||
<size>370667543</size>
|
||||
<crc32>12eda51c</crc32>
|
||||
<sha1>402b01b5a734ae4f857991c0977ba629a8606932</sha1>
|
||||
<filecount>364</filecount>
|
||||
</file>
|
||||
<file name="adventuresofsher00doylrich_reviews.xml" source="original">
|
||||
<mtime>1688944715</mtime>
|
||||
<size>9412</size>
|
||||
<md5>ff0c9653a7aa865ea01e032e8b657736</md5>
|
||||
<crc32>7634dbbc</crc32>
|
||||
<sha1>f93a8206d6836f08c19dd023eb552bed2106cad9</sha1>
|
||||
<format>Metadata</format>
|
||||
</file>
|
||||
<file name="scandata.zip" source="original">
|
||||
<format>Scribe Scandata ZIP</format>
|
||||
<md5>506fdf9aa054fbc7e9e2577d05d5e7cf</md5>
|
||||
<mtime>1682523105</mtime>
|
||||
<size>55175976</size>
|
||||
<crc32>232ce248</crc32>
|
||||
<sha1>9adf53bc1b8e7be5afe3526d2ab64f9696058488</sha1>
|
||||
<filecount>11</filecount>
|
||||
</file>
|
||||
</files>
|
||||
@@ -1,119 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files>
|
||||
<file name="I have grown so used to you - J. Frank Hopkins.gif" source="derivative">
|
||||
<format>Animated GIF</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446681646</mtime>
|
||||
<size>83293</size>
|
||||
<md5>d60eddbc1d9915dc3a49889890c172d1</md5>
|
||||
<crc32>30fe3c3e</crc32>
|
||||
<sha1>80f7f6b523965b9dc4f997a775d03aab7f6dfcfb</sha1>
|
||||
</file>
|
||||
<file name="I have grown so used to you - J. Frank Hopkins.mp4" source="original">
|
||||
<mtime>1446681528</mtime>
|
||||
<size>69339907</size>
|
||||
<md5>867ad802b751623b409eb833a15d0b80</md5>
|
||||
<crc32>dbc81bfe</crc32>
|
||||
<sha1>5e860bdb6cad0b7f974ebe9ea391e26f4cd8c714</sha1>
|
||||
<format>MPEG4</format>
|
||||
<length>140.42</length>
|
||||
<height>720</height>
|
||||
<width>1280</width>
|
||||
</file>
|
||||
<file name="I have grown so used to you - J. Frank Hopkins.ogv" source="derivative">
|
||||
<format>Ogg Video</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446682043</mtime>
|
||||
<size>10548875</size>
|
||||
<md5>9a9dc6524b8ca0be68d1b0c3e9b2d0b2</md5>
|
||||
<crc32>5a17284d</crc32>
|
||||
<sha1>36b7e06adf4cf4f8fc159dba380dae9e632e410a</sha1>
|
||||
<length>140.42</length>
|
||||
<height>300</height>
|
||||
<width>533</width>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins.thumbs/I have grown so used to you - J. Frank Hopkins_000001.jpg" source="derivative">
|
||||
<format>Thumbnail</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446681658</mtime>
|
||||
<size>8382</size>
|
||||
<md5>dbb3838f9e348938ffabf8570809bd1b</md5>
|
||||
<crc32>ca0b9e96</crc32>
|
||||
<sha1>1efa60020eb9b0441256d00d51c1ef208cb50047</sha1>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins.thumbs/I have grown so used to you - J. Frank Hopkins_000045.jpg" source="derivative">
|
||||
<format>Thumbnail</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446681676</mtime>
|
||||
<size>8244</size>
|
||||
<md5>295c4e5fe1b56e0438008c60d28213b7</md5>
|
||||
<crc32>441108d4</crc32>
|
||||
<sha1>388801815d2aa0fa98c4a75589f73faeb958071f</sha1>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins.thumbs/I have grown so used to you - J. Frank Hopkins_000075.jpg" source="derivative">
|
||||
<format>Thumbnail</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446681693</mtime>
|
||||
<size>8321</size>
|
||||
<md5>94a0c9ae786011773c29be2bb844bd70</md5>
|
||||
<crc32>f09fea6a</crc32>
|
||||
<sha1>439476ad109f2f1edd0b85c2c04b5c6dfdfe0bce</sha1>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins.thumbs/I have grown so used to you - J. Frank Hopkins_000105.jpg" source="derivative">
|
||||
<format>Thumbnail</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446681710</mtime>
|
||||
<size>8342</size>
|
||||
<md5>a284cbd6a9288e29b7b03118c6658816</md5>
|
||||
<crc32>62785a42</crc32>
|
||||
<sha1>44dd6f1df0c681f410076035bc7b8b3bae81bff4</sha1>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins.thumbs/I have grown so used to you - J. Frank Hopkins_000135.jpg" source="derivative">
|
||||
<format>Thumbnail</format>
|
||||
<original>I have grown so used to you - J. Frank Hopkins.mp4</original>
|
||||
<mtime>1446681726</mtime>
|
||||
<size>8586</size>
|
||||
<md5>0f0d08441fc414794063b7e07d5d0947</md5>
|
||||
<crc32>dc6e44cf</crc32>
|
||||
<sha1>cfac85033a4d0a45cc1a5c8ffd2fb37263ecfa8e</sha1>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins_archive.torrent" source="metadata">
|
||||
<btih>65d70d3788efdc9fba994ac2abf4a82c3f3d3864</btih>
|
||||
<mtime>1688963806</mtime>
|
||||
<size>5514</size>
|
||||
<md5>5279f6df87259e51a00ef537cc91ce9b</md5>
|
||||
<crc32>eedeca57</crc32>
|
||||
<sha1>26830f2b391cd8ed60f5d793d87016a0f1496bdc</sha1>
|
||||
<format>Archive BitTorrent</format>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins_files.xml" source="original">
|
||||
<format>Metadata</format>
|
||||
<md5>954d2f3d58262e80c87a2f623a59200e</md5>
|
||||
<summation>md5</summation>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins_meta.sqlite" source="original">
|
||||
<mtime>1446681548</mtime>
|
||||
<size>12288</size>
|
||||
<md5>1da7d006f8f27b4fc9a1fd74941095cf</md5>
|
||||
<crc32>1308a8d9</crc32>
|
||||
<sha1>f31849351ed620108d7f3bb4af5aa5e40b4cdb7b</sha1>
|
||||
<format>Metadata</format>
|
||||
</file>
|
||||
<file name="IHaveGrownSoUsedToYouJ.FrankHopkins_meta.xml" source="original">
|
||||
<mtime>1682350692</mtime>
|
||||
<size>1161</size>
|
||||
<format>Metadata</format>
|
||||
<md5>740d1aa686af09659361ce8c10b6fcfe</md5>
|
||||
<crc32>3d03262a</crc32>
|
||||
<sha1>9272d98773615f94040f799d2341ba45c13d6218</sha1>
|
||||
</file>
|
||||
<file name="__ia_thumb.jpg" source="original">
|
||||
<mtime>1656366463</mtime>
|
||||
<size>9378</size>
|
||||
<md5>34dd181b0af401cfc3205b503ab63f48</md5>
|
||||
<crc32>72e288dc</crc32>
|
||||
<sha1>6bafe89be5f45e68eb641ae3aca960baa759bfe5</sha1>
|
||||
<format>Item Tile</format>
|
||||
<rotation>0</rotation>
|
||||
</file>
|
||||
</files>
|
||||
@@ -1,215 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a.jpg" source="derivative">
|
||||
<format>JPEG</format>
|
||||
<original>78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a.tif</original>
|
||||
<mtime>1501911616</mtime>
|
||||
<size>1326621</size>
|
||||
<md5>b50a8cc01a720df337cebbcb69e1cddf</md5>
|
||||
<crc32>b50088ba</crc32>
|
||||
<sha1>672d2922dff5a0954558b97d13301394870a6cc5</sha1>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a.tif" source="original">
|
||||
<mtime>1501911368</mtime>
|
||||
<size>37016416</size>
|
||||
<md5>77176ab4e12418558aefa6f4b709737a</md5>
|
||||
<crc32>3bbd199a</crc32>
|
||||
<sha1>64beda28ffd02a67b4c69e33e4b18a808b63453e</sha1>
|
||||
<format>TIFF</format>
|
||||
<matrix_number>69660BB</matrix_number>
|
||||
<collection-catalog-number>GBIA0011964A</collection-catalog-number>
|
||||
<publisher>Decca</publisher>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a.zip" source="original">
|
||||
<mtime>1684102561</mtime>
|
||||
<size>575486142</size>
|
||||
<md5>bd7f9d1d873b870c8b83f8b82ee6c503</md5>
|
||||
<crc32>d1186398</crc32>
|
||||
<sha1>1405bf17b31c0f25652399e820faa001922930a2</sha1>
|
||||
<format>ZIP</format>
|
||||
<filecount>9</filecount>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_archive.torrent" source="metadata">
|
||||
<btih>2abc74cbab976a03ca6afdcffb9fecfbf19c6f70</btih>
|
||||
<mtime>1688008658</mtime>
|
||||
<size>31306</size>
|
||||
<md5>6cc1a4bac4d031f48ffe313a39ffc65f</md5>
|
||||
<crc32>fddb76db</crc32>
|
||||
<sha1>3c880e5814be545914d7a1a61239bfe821505b7c</sha1>
|
||||
<format>Archive BitTorrent</format>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_files.xml" source="original">
|
||||
<format>Metadata</format>
|
||||
<md5>7bc8555ee3daef91f32efcfe143cf29b</md5>
|
||||
<summation>md5</summation>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_itemimage.jpg" source="original">
|
||||
<mtime>1501911384</mtime>
|
||||
<size>335881</size>
|
||||
<md5>929d45f445e54b72d511a663e7324b86</md5>
|
||||
<crc32>5266d154</crc32>
|
||||
<sha1>f01dfce276cb1ca73148b964b290ee92063ea4b2</sha1>
|
||||
<format>Item Image</format>
|
||||
<rotation>0</rotation>
|
||||
<matrix_number>69660BB</matrix_number>
|
||||
<collection-catalog-number>GBIA0011964A</collection-catalog-number>
|
||||
<publisher>Decca</publisher>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_meta.sqlite" source="original">
|
||||
<mtime>1684102571</mtime>
|
||||
<size>72704</size>
|
||||
<format>Metadata</format>
|
||||
<md5>38976e41f16009ed5e00723fabc9a4e6</md5>
|
||||
<crc32>0e30e5ef</crc32>
|
||||
<sha1>2bcad0eb21e2f77b54883d736faefa33f3cf787e</sha1>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_meta.xml" source="original">
|
||||
<mtime>1688008490</mtime>
|
||||
<size>2917</size>
|
||||
<format>Metadata</format>
|
||||
<md5>c5326c9a2198274fc206032da9301193</md5>
|
||||
<crc32>ca42acd0</crc32>
|
||||
<sha1>6eac8fecd728dafabef951da785ed2200d351dea</sha1>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_reviews.xml" source="original">
|
||||
<mtime>1659982866</mtime>
|
||||
<size>948</size>
|
||||
<md5>b67e874d814cf6988e2beb6b243ddc17</md5>
|
||||
<crc32>73b94665</crc32>
|
||||
<sha1>74a01e64dd82da073163f5f457525ab3b84e7497</sha1>
|
||||
<format>Metadata</format>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_roles.json" source="original">
|
||||
<mtime>1501911433</mtime>
|
||||
<size>80</size>
|
||||
<md5>bd244561b4d7c40c7bdd2d71a401829d</md5>
|
||||
<crc32>e2515f39</crc32>
|
||||
<sha1>93eccc18266c503b84dd47840c41baf2b0a361a5</sha1>
|
||||
<format>JSON</format>
|
||||
<matrix_number>69660BB</matrix_number>
|
||||
<collection-catalog-number>GBIA0011964A</collection-catalog-number>
|
||||
<publisher>Decca</publisher>
|
||||
</file>
|
||||
<file name="78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a_thumb.jpg" source="derivative">
|
||||
<format>JPEG Thumb</format>
|
||||
<original>78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a.tif</original>
|
||||
<mtime>1501911615</mtime>
|
||||
<size>9138</size>
|
||||
<md5>952296a31ff7efd183e2b74cf253640a</md5>
|
||||
<crc32>b616ba9c</crc32>
|
||||
<sha1>153f229b49cd4434605f3739576586bf5d7c9582</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored.afpk" source="derivative">
|
||||
<format>Columbia Peaks</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored.flac</original>
|
||||
<mtime>1599685667</mtime>
|
||||
<size>29912</size>
|
||||
<md5>5383c38733d9e66b747ec8102ddd0a75</md5>
|
||||
<crc32>3bb2ece6</crc32>
|
||||
<sha1>64bce8d6decac71824583cf12853d3e2c97d0206</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored.asr.srt" source="derivative">
|
||||
<format>SubRip</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored.asr.vtt</original>
|
||||
<mtime>1688008632</mtime>
|
||||
<size>1973</size>
|
||||
<md5>63a556629e33cc233dba249218af648b</md5>
|
||||
<crc32>477180f5</crc32>
|
||||
<sha1>d82d685af20ce28d21ab1eaa2a5efbf1bf354261</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored.asr.vtt" source="derivative">
|
||||
<format>Web Video Text Tracks</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored_intermediate_asr.json</original>
|
||||
<mtime>1688008577</mtime>
|
||||
<size>1925</size>
|
||||
<md5>c1b6808ac66b1fb89b6bf1517f6e9ed1</md5>
|
||||
<crc32>349354b8</crc32>
|
||||
<sha1>5fe6aa67644046ab07d61ce3644d388f575649e9</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored.flac" source="original">
|
||||
<mtime>1599685214</mtime>
|
||||
<size>48528837</size>
|
||||
<md5>2a2ab6af18cdad6f572bb634c4155a44</md5>
|
||||
<crc32>c1996233</crc32>
|
||||
<sha1>5cb6761e6e24c5545006dd127ce5e44483707982</sha1>
|
||||
<format>24bit Flac</format>
|
||||
<track>02</track>
|
||||
<length>184.55</length>
|
||||
<height>0</height>
|
||||
<width>0</width>
|
||||
<title>I Don't Want to Set the World on Fire (restored)</title>
|
||||
<creator>Durham</creator>
|
||||
<album>I Don't Want to Set the World on Fire</album>
|
||||
<artist>Ink Spots;Seiler;Marcus;Benjemen;Durham</artist>
|
||||
<comment>https://archive.org/details/78_i-dont-want-to-set-the-world-on-fire_ink-spots-seiler-marcus-benjemen-durham_gbia0011964a/I+Don%27t+Want+to+Set+the+World+on+Fire+-+Ink+Spots.flac\</comment>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored.mp3" source="derivative">
|
||||
<creator>Ink Spots;Seiler;Marcus;Benjemen;Durham</creator>
|
||||
<title>I Don't Want to Set the World on Fire (restored)</title>
|
||||
<track>02</track>
|
||||
<album>I Don't Want to Set the World on Fire</album>
|
||||
<bitrate>125</bitrate>
|
||||
<format>VBR MP3</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored.flac</original>
|
||||
<mtime>1599685494</mtime>
|
||||
<size>2996749</size>
|
||||
<md5>dc56351ccd39b09ced0a130fdcd8b2fc</md5>
|
||||
<crc32>38e842b0</crc32>
|
||||
<sha1>3e37080b5abde1be08f20072ca6fcd3f387dca15</sha1>
|
||||
<length>184.58</length>
|
||||
<height>640</height>
|
||||
<width>640</width>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored.png" source="derivative">
|
||||
<format>PNG</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored.flac</original>
|
||||
<mtime>1599685521</mtime>
|
||||
<size>35307</size>
|
||||
<md5>4bc62df3610dde296218e9782bf9cab1</md5>
|
||||
<crc32>ab0f45cf</crc32>
|
||||
<sha1>c3e0ce23e6990e1deabec942ff71e3178cf18310</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored_intermediate_asr.json" source="derivative">
|
||||
<format>Intermediate ASR JSON</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored_whisper_asr.json</original>
|
||||
<mtime>1688008526</mtime>
|
||||
<size>2672</size>
|
||||
<md5>5bdd50eff7abadfe6a7d764c20dc35d9</md5>
|
||||
<crc32>78a58328</crc32>
|
||||
<sha1>044c53e7cef9fd1536c484c71aa3e75b1306be3c</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored_spectrogram.png" source="derivative">
|
||||
<format>Spectrogram</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored.flac</original>
|
||||
<mtime>1599685546</mtime>
|
||||
<size>116769</size>
|
||||
<md5>2ea631450681b8d955a9fcf669891d4a</md5>
|
||||
<crc32>e32c035a</crc32>
|
||||
<sha1>fcb550c1596a93528802646f072cd1b19c1b139b</sha1>
|
||||
</file>
|
||||
<file name="I Don_t Want to Set the World on Fire - Ink Spots-restored_whisper_asr.json" source="derivative">
|
||||
<whisper_asr_module_version>20230611.01</whisper_asr_module_version>
|
||||
<whisper_version>20230314</whisper_version>
|
||||
<whisper_model_name>small.en</whisper_model_name>
|
||||
<whisper_model_hash>sha256:f953ad0fd29cacd07d5a9eda5624af0f6bcf2258be67c92b79389873d91e0872</whisper_model_hash>
|
||||
<asr_detected_lang>en</asr_detected_lang>
|
||||
<asr_detected_lang_conf>0.85381597280502</asr_detected_lang_conf>
|
||||
<asr_transcribed_lang>en</asr_transcribed_lang>
|
||||
<format>Whisper ASR JSON</format>
|
||||
<original>I Don_t Want to Set the World on Fire - Ink Spots-restored.mp3</original>
|
||||
<mtime>1688008489</mtime>
|
||||
<size>28875</size>
|
||||
<md5>3b7a44eb35530253c8f22e55542a9eed</md5>
|
||||
<crc32>c800afa0</crc32>
|
||||
<sha1>770e390e635b714058d148b06a92fffd3181e2ba</sha1>
|
||||
</file>
|
||||
<file name="__ia_thumb.jpg" source="original">
|
||||
<mtime>1634652950</mtime>
|
||||
<size>12863</size>
|
||||
<md5>bde829c30a7951d22eb88ad4c33f866c</md5>
|
||||
<crc32>e2abeb1a</crc32>
|
||||
<sha1>ac449c1db692c6c8e5af636012da5d275c000a4d</sha1>
|
||||
<format>Item Tile</format>
|
||||
<rotation>0</rotation>
|
||||
</file>
|
||||
</files>
|
||||
@@ -1,195 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files>
|
||||
<file name="__ia_thumb.jpg" source="original">
|
||||
<mtime>1688105563</mtime>
|
||||
<size>19642</size>
|
||||
<md5>2dc43777ab13cabd2324e25d8c69a790</md5>
|
||||
<crc32>e7f10d45</crc32>
|
||||
<sha1>1ed3cb724f1470cbb5056169fc731c642e36fc1b</sha1>
|
||||
<format>Item Tile</format>
|
||||
<rotation>0</rotation>
|
||||
</file>
|
||||
<file name="header/header_0000.jp2" source="original">
|
||||
<mtime>1686986524</mtime>
|
||||
<size>12013083</size>
|
||||
<md5>5928785725ea03932b3fd496d3f4c75e</md5>
|
||||
<crc32>53f8e9a7</crc32>
|
||||
<sha1>3af69d2c09d993d0f7bc81b7a2edfdd1f9b8446d</sha1>
|
||||
<format>JPEG 2000</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42.pdf" source="derivative">
|
||||
<pdf_module_version>0.0.23</pdf_module_version>
|
||||
<format>Text PDF</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_page_numbers.json</original>
|
||||
<mtime>1688105470</mtime>
|
||||
<size>98013235</size>
|
||||
<md5>8c206bd0aaf82698b3d502b233c6c2f8</md5>
|
||||
<crc32>ac64d257</crc32>
|
||||
<sha1>e6b7dfbde34f6a494f7795cd0edcb5676a8c37da</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_archive.torrent" source="metadata">
|
||||
<btih>bf04ea0f7c2dca19cf748e529611f497e6cba150</btih>
|
||||
<mtime>1688105603</mtime>
|
||||
<size>21259</size>
|
||||
<md5>0a3685a7ab0a0d0f9fdb4b913d31f8fd</md5>
|
||||
<crc32>70eb691b</crc32>
|
||||
<sha1>413c499bc001947b82030585c855958693cd2f78</sha1>
|
||||
<format>Archive BitTorrent</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_chocr.html.gz" source="derivative">
|
||||
<ocr>tesseract 5.3.0-3-g9920</ocr>
|
||||
<ocr_parameters>lang-eng;two-pass-disabled;pass-dpi-disabled;autonomous-mode-disabled;binarisation-method-otsu</ocr_parameters>
|
||||
<ocr_module_version>0.0.21</ocr_module_version>
|
||||
<ocr_detected_script>Latin</ocr_detected_script>
|
||||
<ocr_detected_script_conf>0.7458</ocr_detected_script_conf>
|
||||
<ocr_detected_lang>en</ocr_detected_lang>
|
||||
<ocr_detected_lang_conf>1.0000</ocr_detected_lang_conf>
|
||||
<format>chOCR</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_jp2.zip</original>
|
||||
<mtime>1688102450</mtime>
|
||||
<size>11484860</size>
|
||||
<md5>8fcb1864fd839ef3dcc6039b669b8f36</md5>
|
||||
<crc32>87f7f712</crc32>
|
||||
<sha1>15abc19f5cf46ccc4e8f1a5796ce6302869bffe5</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_djvu.txt" source="derivative">
|
||||
<format>DjVuTXT</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_djvu.xml</original>
|
||||
<mtime>1688103469</mtime>
|
||||
<size>759494</size>
|
||||
<md5>febe8a4594d3ef07af32f3fbed4d2764</md5>
|
||||
<crc32>98136b35</crc32>
|
||||
<sha1>5fe48b18f19568906680f8dd4936ec81ec143f9e</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_djvu.xml" source="derivative">
|
||||
<format>Djvu XML</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_hocr.html</original>
|
||||
<mtime>1688103134</mtime>
|
||||
<size>10726635</size>
|
||||
<md5>e06813d99e1adf8d6fff350899b5f846</md5>
|
||||
<crc32>35fd1344</crc32>
|
||||
<sha1>418da8f3cd5a9f6aac998ee5f0fa68a828aa78a8</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_files.xml" source="original">
|
||||
<format>Metadata</format>
|
||||
<md5>640a9c2fe776c10777911979bc04994a</md5>
|
||||
<summation>md5</summation>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_frame-md.json" source="original">
|
||||
<mtime>1686986516</mtime>
|
||||
<size>224</size>
|
||||
<md5>0f68d8e584bd1aea80a889525a00b547</md5>
|
||||
<crc32>2e83a589</crc32>
|
||||
<sha1>7fe89fdd2aa69246f30c34c73e57814f62154994</sha1>
|
||||
<format>JSON</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_hocr.html" source="derivative">
|
||||
<hocr_char_to_word_module_version>1.1.0</hocr_char_to_word_module_version>
|
||||
<hocr_char_to_word_hocr_version>1.1.15</hocr_char_to_word_hocr_version>
|
||||
<ocr_parameters>lang-eng;two-pass-disabled;pass-dpi-disabled;autonomous-mode-disabled;binarisation-method-otsu</ocr_parameters>
|
||||
<ocr_module_version>0.0.21</ocr_module_version>
|
||||
<ocr_detected_script>Latin</ocr_detected_script>
|
||||
<ocr_detected_script_conf>0.7458</ocr_detected_script_conf>
|
||||
<ocr_detected_lang>en</ocr_detected_lang>
|
||||
<ocr_detected_lang_conf>1.0000</ocr_detected_lang_conf>
|
||||
<format>hOCR</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_chocr.html.gz</original>
|
||||
<mtime>1688102642</mtime>
|
||||
<size>20717059</size>
|
||||
<md5>2313d8cbe745bf4994b86be8f09b241b</md5>
|
||||
<crc32>e3b89eb2</crc32>
|
||||
<sha1>b5d6e6d025dca7315307aee1032e3470eb797ac4</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_hocr_pageindex.json.gz" source="derivative">
|
||||
<hocr_pageindex_module_version>1.0.0</hocr_pageindex_module_version>
|
||||
<hocr_pageindex_hocr_version>1.1.15</hocr_pageindex_hocr_version>
|
||||
<format>OCR Page Index</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_hocr.html</original>
|
||||
<mtime>1688103151</mtime>
|
||||
<size>203</size>
|
||||
<md5>aaf29479ec4d752ab5011ef1629a1de0</md5>
|
||||
<crc32>de6755b7</crc32>
|
||||
<sha1>d71e9705a5f1abb4eadcd920b06a961bf0eb293c</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_hocr_searchtext.txt.gz" source="derivative">
|
||||
<hocr_fts_text_module_version>1.1.0</hocr_fts_text_module_version>
|
||||
<hocr_fts_text_hocr_version>1.1.15</hocr_fts_text_hocr_version>
|
||||
<word_conf_0_10>5195</word_conf_0_10>
|
||||
<word_conf_11_20>2390</word_conf_11_20>
|
||||
<word_conf_21_30>3139</word_conf_21_30>
|
||||
<word_conf_31_40>3258</word_conf_31_40>
|
||||
<word_conf_41_50>3191</word_conf_41_50>
|
||||
<word_conf_51_60>3213</word_conf_51_60>
|
||||
<word_conf_61_70>3776</word_conf_61_70>
|
||||
<word_conf_71_80>5252</word_conf_71_80>
|
||||
<word_conf_81_90>13153</word_conf_81_90>
|
||||
<word_conf_91_100>85216</word_conf_91_100>
|
||||
<format>OCR Search Text</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_hocr.html</original>
|
||||
<mtime>1688103216</mtime>
|
||||
<size>309695</size>
|
||||
<md5>3d209f772e41f56191cb37ac04f8965a</md5>
|
||||
<crc32>ea3470ec</crc32>
|
||||
<sha1>c425dbfdf9900a6f1cb594e4e4403333c2ef4f36</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_itemimage.png" source="original">
|
||||
<mtime>1686986511</mtime>
|
||||
<size>33159468</size>
|
||||
<md5>5e8e1ffe981317426081234ade24073e</md5>
|
||||
<crc32>b8456619</crc32>
|
||||
<sha1>2ffdc308b639959bbd13ddadbab8f8d4b847fbba</sha1>
|
||||
<format>Item Image</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_jp2.zip" source="original">
|
||||
<mtime>1686986495</mtime>
|
||||
<size>231100229</size>
|
||||
<md5>eac76d5be19d38caee6cdcee2b9ff936</md5>
|
||||
<crc32>c2ce4d1c</crc32>
|
||||
<sha1>858120c8724f345b206961abe508291565816b7d</sha1>
|
||||
<preview-image>n0</preview-image>
|
||||
<format>Single Page Processed JP2 ZIP</format>
|
||||
<filecount>13</filecount>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_meta.sqlite" source="original">
|
||||
<mtime>1686986699</mtime>
|
||||
<size>40960</size>
|
||||
<md5>385dd15968e9ce2a38ac48a2838e8c48</md5>
|
||||
<crc32>192d70cb</crc32>
|
||||
<sha1>09ab56c0b9b3eff6b0725364a4fd070705b80d2e</sha1>
|
||||
<format>Metadata</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_meta.xml" source="original">
|
||||
<mtime>1688105483</mtime>
|
||||
<size>3028</size>
|
||||
<md5>5ff8508ae78bdb3bbe56ab9de53b43bb</md5>
|
||||
<crc32>1b81e6e4</crc32>
|
||||
<sha1>30cc20a8cd9a9d726408f795b0fcc3db73459185</sha1>
|
||||
<format>Metadata</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_page_numbers.json" source="derivative">
|
||||
<format>Page Numbers JSON</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_djvu.xml</original>
|
||||
<mtime>1688103557</mtime>
|
||||
<size>2277</size>
|
||||
<md5>a1bc72e8504b217ccd46c678745982f4</md5>
|
||||
<crc32>634b90ea</crc32>
|
||||
<sha1>680343d1c42c0732cdc9c8b8c355e5985aab5d6a</sha1>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_rotations.json" source="original">
|
||||
<mtime>1686986519</mtime>
|
||||
<size>1334</size>
|
||||
<md5>37f40a3e763cda634832781f6f1d6775</md5>
|
||||
<crc32>328b653d</crc32>
|
||||
<sha1>f43ce2a767ee70f0c2cb2e004891f699213e27a1</sha1>
|
||||
<format>JSON</format>
|
||||
</file>
|
||||
<file name="per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_scandata.xml" source="derivative">
|
||||
<format>Scandata</format>
|
||||
<original>per_chicago-daily-tribune_the-chicago-daily-tribun_1883-04-13_42_djvu.xml</original>
|
||||
<mtime>1688103552</mtime>
|
||||
<size>4478</size>
|
||||
<md5>cfc96ac86bda784dd477131a9ce78d85</md5>
|
||||
<crc32>35d000b3</crc32>
|
||||
<sha1>45d344b009d902373579fd8939a1730b70a10ae4</sha1>
|
||||
</file>
|
||||
</files>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +0,0 @@
|
||||
#Romname;Title;Emulator;Cloneof;Year;Manufacturer;Category;Players;Rotation;Control;Status;DisplayCount;DisplayType;AltRomname;AltTitle;Extra;Buttons;Favourite;Tags;PlayedCount;PlayedTime;FileIsAvailable
|
||||
005;005;advmame;;1981;Sega;Maze / Shooter Small;2P alt;270;joystick (4-way),joystick (4-way);imperfect;1;raster;;;;1;;;0;;1
|
||||
alpine;Alpine Ski (set 1);advmame;;1982;Taito Corporation;Sports / Skiing;2P alt;270;joystick (2-way),joystick (2-way);good;1;raster;;;;1;;;0;;1
|
||||
amidar;Amidar;advmame;;1982;Konami;Maze / Outline;2P alt;90;joystick (4-way),joystick (4-way);good;1;raster;;;;1;;;0;;1
|
||||
anteater;Anteater;advmame;;1982;Tago Electronics;Maze / Collect;2P alt;90;joystick (4-way);good;1;raster;;;;1;;;0;;1
|
||||
armorcar;Armored Car (set 1);advmame;;1981;Stern Electronics;Maze / Collect;2P alt;90;joystick (4-way),joystick (4-way);good;1;raster;;;;2;;;0;;1
|
||||
assault;Assault (Rev B);advmame;;1988;Namco;Shooter / Driving;1P;90;double joystick (4-way),double joystick (4-way);good;1;raster;;;;1;;;0;;1
|
||||
astrob;Astro Blaster (version 3);advmame;;1981;Sega;Shooter / Gallery;2P alt;270;joystick (2-way),joystick (2-way);imperfect;1;raster;;;;2;;;0;;1
|
||||
astrof;Astro Fighter (set 1);advmame;;1979;Data East;Shooter / Gallery;2P alt;90;joystick (2-way),joystick (2-way);imperfect;1;raster;;;;1;;;0;;1
|
||||
attckufo;Attack UFO;advmame;;1980;Ryoto Electric Co.;Shooter / Gallery;2P alt;270;joystick (2-way),joystick (2-way);good;1;raster;;;;1;;;0;;1
|
||||
bagman;Bagman;advmame;;1982;Valadon Automation;Platform / Run Jump;2P alt;270;joystick (4-way),joystick (4-way);good;1;raster;;;;1;;;0;;1
|
||||
ballbomb;Balloon Bomber;advmame;;1980;Taito;Shooter / Gallery;2P alt;270;joystick (2-way),joystick (2-way);imperfect;1;raster;;;;1;;;0;;1
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user