mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add Disk tests, fix some Disk things
This commit is contained in:
@@ -117,7 +117,7 @@ namespace SabreTools.DatItems.Test
|
||||
SHA256 = sha256.FromHexString(),
|
||||
};
|
||||
|
||||
Formats.File actual = baseFile.ConvertToFile();
|
||||
File actual = baseFile.ConvertToFile();
|
||||
|
||||
Assert.Equal(crc, actual.CRC);
|
||||
Assert.Equal(md5, actual.MD5);
|
||||
@@ -269,7 +269,7 @@ namespace SabreTools.DatItems.Test
|
||||
string sha1 = TextHelper.NormalizeSHA1("1234abcd")!;
|
||||
string sha256 = TextHelper.NormalizeSHA256("1234abcd")!;
|
||||
|
||||
Formats.File file = new Formats.File
|
||||
File file = new File
|
||||
{
|
||||
CRC = crc,
|
||||
MD5 = md5,
|
||||
|
||||
247
SabreTools.DatItems.Test/Formats/DiskTests.cs
Normal file
247
SabreTools.DatItems.Test/Formats/DiskTests.cs
Normal file
@@ -0,0 +1,247 @@
|
||||
using SabreTools.DatItems.Formats;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.DatItems.Test.Formats
|
||||
{
|
||||
public class DiskTests
|
||||
{
|
||||
#region ConvertToRom
|
||||
|
||||
[Fact]
|
||||
public void ConvertToRomTest()
|
||||
{
|
||||
DiskArea diskArea = new DiskArea();
|
||||
diskArea.SetName("XXXXXX");
|
||||
|
||||
Machine machine = new Machine();
|
||||
machine.SetFieldValue(Models.Metadata.Machine.NameKey, "XXXXXX");
|
||||
|
||||
Part part = new Part();
|
||||
part.SetName("XXXXXX");
|
||||
|
||||
Source source = new Source(0, "XXXXXX");
|
||||
|
||||
Disk disk = new Disk();
|
||||
disk.SetName("XXXXXX");
|
||||
disk.SetFieldValue(Disk.DiskAreaKey, diskArea);
|
||||
disk.SetFieldValue(Models.Metadata.Disk.MergeKey, "XXXXXX");
|
||||
disk.SetFieldValue(Models.Metadata.Disk.RegionKey, "XXXXXX");
|
||||
disk.SetFieldValue(Models.Metadata.Disk.StatusKey, "XXXXXX");
|
||||
disk.SetFieldValue(Models.Metadata.Disk.OptionalKey, "XXXXXX");
|
||||
disk.SetFieldValue(Models.Metadata.Disk.MD5Key, "XXXXXX");
|
||||
disk.SetFieldValue(Models.Metadata.Disk.SHA1Key, "XXXXXX");
|
||||
disk.SetFieldValue(DatItem.DupeTypeKey, DupeType.All | DupeType.External);
|
||||
disk.SetFieldValue(DatItem.MachineKey, machine);
|
||||
disk.SetFieldValue(Disk.PartKey, part);
|
||||
disk.SetFieldValue(DatItem.RemoveKey, (bool?)false);
|
||||
disk.SetFieldValue(DatItem.SourceKey, source);
|
||||
|
||||
Rom actual = disk.ConvertToRom();
|
||||
|
||||
Assert.Equal("XXXXXX.chd", actual.GetName());
|
||||
Assert.Equal("XXXXXX", actual.GetStringFieldValue(Models.Metadata.Rom.MergeKey));
|
||||
Assert.Equal("XXXXXX", actual.GetStringFieldValue(Models.Metadata.Rom.RegionKey));
|
||||
Assert.Equal("XXXXXX", actual.GetStringFieldValue(Models.Metadata.Rom.StatusKey));
|
||||
Assert.Equal("XXXXXX", actual.GetStringFieldValue(Models.Metadata.Rom.OptionalKey));
|
||||
Assert.Equal("XXXXXX", actual.GetStringFieldValue(Models.Metadata.Rom.MD5Key));
|
||||
Assert.Equal("XXXXXX", actual.GetStringFieldValue(Models.Metadata.Rom.SHA1Key));
|
||||
Assert.Equal(DupeType.All | DupeType.External, actual.GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||
|
||||
Machine? actualMachine = actual.GetFieldValue<Machine?>(DatItem.MachineKey);
|
||||
Assert.NotNull(actualMachine);
|
||||
Assert.Equal("XXXXXX", actualMachine.GetStringFieldValue(Models.Metadata.Machine.NameKey));
|
||||
|
||||
Assert.Equal(false, actual.GetBoolFieldValue(DatItem.RemoveKey));
|
||||
|
||||
Part? actualPart = actual.GetFieldValue<Part?>(Rom.PartKey);
|
||||
Assert.NotNull(actualPart);
|
||||
Assert.Equal("XXXXXX", actualPart.GetStringFieldValue(Models.Metadata.Part.NameKey));
|
||||
|
||||
Source? actualSource = actual.GetFieldValue<Source?>(DatItem.SourceKey);
|
||||
Assert.NotNull(actualSource);
|
||||
Assert.Equal(0, actualSource.Index);
|
||||
Assert.Equal("XXXXXX", actualSource.Name);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region FillMissingInformation
|
||||
|
||||
[Fact]
|
||||
public void FillMissingInformation_BothEmpty()
|
||||
{
|
||||
Disk self = new Disk();
|
||||
Disk other = new Disk();
|
||||
|
||||
self.FillMissingInformation(other);
|
||||
|
||||
Assert.Null(self.GetStringFieldValue(Models.Metadata.Disk.MD5Key));
|
||||
Assert.Null(self.GetStringFieldValue(Models.Metadata.Disk.SHA1Key));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FillMissingInformation_AllMissing()
|
||||
{
|
||||
Disk self = new Disk();
|
||||
|
||||
Disk other = new Disk();
|
||||
other.SetFieldValue(Models.Metadata.Disk.MD5Key, "XXXXXX");
|
||||
other.SetFieldValue(Models.Metadata.Disk.SHA1Key, "XXXXXX");
|
||||
|
||||
self.FillMissingInformation(other);
|
||||
|
||||
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Disk.MD5Key));
|
||||
Assert.Equal("XXXXXX", self.GetStringFieldValue(Models.Metadata.Disk.SHA1Key));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetDuplicateSuffix
|
||||
|
||||
[Fact]
|
||||
public void GetDuplicateSuffix_Disk_NoHash_Generic()
|
||||
{
|
||||
Disk self = new Disk();
|
||||
string actual = self.GetDuplicateSuffix();
|
||||
Assert.Equal("_1", actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetDuplicateSuffix_Disk_MD5()
|
||||
{
|
||||
string hash = "XXXXXX";
|
||||
Disk self = new Disk();
|
||||
self.SetFieldValue(Models.Metadata.Disk.MD5Key, hash);
|
||||
|
||||
string actual = self.GetDuplicateSuffix();
|
||||
Assert.Equal($"_{hash}", actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetDuplicateSuffix_Disk_SHA1()
|
||||
{
|
||||
string hash = "XXXXXX";
|
||||
Disk self = new Disk();
|
||||
self.SetFieldValue(Models.Metadata.Disk.SHA1Key, hash);
|
||||
|
||||
string actual = self.GetDuplicateSuffix();
|
||||
Assert.Equal($"_{hash}", actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetKey
|
||||
|
||||
[Theory]
|
||||
[InlineData(ItemKey.NULL, false, false, "")]
|
||||
[InlineData(ItemKey.NULL, false, true, "")]
|
||||
[InlineData(ItemKey.NULL, true, false, "")]
|
||||
[InlineData(ItemKey.NULL, true, true, "")]
|
||||
[InlineData(ItemKey.Machine, false, false, "0000000000-Machine")]
|
||||
[InlineData(ItemKey.Machine, false, true, "Machine")]
|
||||
[InlineData(ItemKey.Machine, true, false, "0000000000-machine")]
|
||||
[InlineData(ItemKey.Machine, true, true, "machine")]
|
||||
[InlineData(ItemKey.CRC, false, false, "00000000")]
|
||||
[InlineData(ItemKey.CRC, false, true, "00000000")]
|
||||
[InlineData(ItemKey.CRC, true, false, "00000000")]
|
||||
[InlineData(ItemKey.CRC, true, true, "00000000")]
|
||||
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
|
||||
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
|
||||
[InlineData(ItemKey.MD5, true, false, "deadbeef")]
|
||||
[InlineData(ItemKey.MD5, true, true, "deadbeef")]
|
||||
[InlineData(ItemKey.SHA1, false, false, "DEADBEEF")]
|
||||
[InlineData(ItemKey.SHA1, false, true, "DEADBEEF")]
|
||||
[InlineData(ItemKey.SHA1, true, false, "deadbeef")]
|
||||
[InlineData(ItemKey.SHA1, true, true, "deadbeef")]
|
||||
[InlineData(ItemKey.SHA256, false, false, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA256, false, true, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA256, true, false, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA256, true, true, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA384, false, false, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA384, false, true, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA384, true, false, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA384, true, true, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA512, false, false, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SHA512, false, true, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SHA512, true, false, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SHA512, true, true, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SpamSum, false, false, "3::")]
|
||||
[InlineData(ItemKey.SpamSum, false, true, "3::")]
|
||||
[InlineData(ItemKey.SpamSum, true, false, "3::")]
|
||||
[InlineData(ItemKey.SpamSum, true, true, "3::")]
|
||||
public void GetKeyTest(ItemKey bucketedBy, bool lower, bool norename, string expected)
|
||||
{
|
||||
Machine machine = new Machine();
|
||||
machine.SetFieldValue(Models.Metadata.Machine.NameKey, "Machine");
|
||||
|
||||
DatItem datItem = new Disk();
|
||||
datItem.SetFieldValue(DatItem.SourceKey, new Source(0));
|
||||
datItem.SetFieldValue(DatItem.MachineKey, machine);
|
||||
datItem.SetFieldValue(Models.Metadata.Disk.MD5Key, "DEADBEEF");
|
||||
datItem.SetFieldValue(Models.Metadata.Disk.SHA1Key, "DEADBEEF");
|
||||
|
||||
string actual = datItem.GetKey(bucketedBy, lower, norename);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// TODO: Change when Machine retrieval gets fixed
|
||||
#region GetKeyDB
|
||||
|
||||
[Theory]
|
||||
[InlineData(ItemKey.NULL, false, false, "")]
|
||||
[InlineData(ItemKey.NULL, false, true, "")]
|
||||
[InlineData(ItemKey.NULL, true, false, "")]
|
||||
[InlineData(ItemKey.NULL, true, true, "")]
|
||||
[InlineData(ItemKey.Machine, false, false, "0000000000-Machine")]
|
||||
[InlineData(ItemKey.Machine, false, true, "Machine")]
|
||||
[InlineData(ItemKey.Machine, true, false, "0000000000-machine")]
|
||||
[InlineData(ItemKey.Machine, true, true, "machine")]
|
||||
[InlineData(ItemKey.CRC, false, false, "00000000")]
|
||||
[InlineData(ItemKey.CRC, false, true, "00000000")]
|
||||
[InlineData(ItemKey.CRC, true, false, "00000000")]
|
||||
[InlineData(ItemKey.CRC, true, true, "00000000")]
|
||||
[InlineData(ItemKey.MD5, false, false, "DEADBEEF")]
|
||||
[InlineData(ItemKey.MD5, false, true, "DEADBEEF")]
|
||||
[InlineData(ItemKey.MD5, true, false, "deadbeef")]
|
||||
[InlineData(ItemKey.MD5, true, true, "deadbeef")]
|
||||
[InlineData(ItemKey.SHA1, false, false, "DEADBEEF")]
|
||||
[InlineData(ItemKey.SHA1, false, true, "DEADBEEF")]
|
||||
[InlineData(ItemKey.SHA1, true, false, "deadbeef")]
|
||||
[InlineData(ItemKey.SHA1, true, true, "deadbeef")]
|
||||
[InlineData(ItemKey.SHA256, false, false, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA256, false, true, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA256, true, false, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA256, true, true, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")]
|
||||
[InlineData(ItemKey.SHA384, false, false, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA384, false, true, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA384, true, false, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA384, true, true, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b")]
|
||||
[InlineData(ItemKey.SHA512, false, false, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SHA512, false, true, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SHA512, true, false, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SHA512, true, true, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")]
|
||||
[InlineData(ItemKey.SpamSum, false, false, "3::")]
|
||||
[InlineData(ItemKey.SpamSum, false, true, "3::")]
|
||||
[InlineData(ItemKey.SpamSum, true, false, "3::")]
|
||||
[InlineData(ItemKey.SpamSum, true, true, "3::")]
|
||||
public void GetKeyDBTest(ItemKey bucketedBy, bool lower, bool norename, string expected)
|
||||
{
|
||||
Source source = new Source(0);
|
||||
|
||||
Machine machine = new Machine();
|
||||
machine.SetFieldValue(Models.Metadata.Machine.NameKey, "Machine");
|
||||
|
||||
DatItem datItem = new Disk();
|
||||
datItem.SetFieldValue(DatItem.MachineKey, machine);
|
||||
datItem.SetFieldValue(Models.Metadata.Disk.MD5Key, "DEADBEEF");
|
||||
datItem.SetFieldValue(Models.Metadata.Disk.SHA1Key, "DEADBEEF");
|
||||
|
||||
string actual = datItem.GetKeyDB(bucketedBy, source, lower, norename);
|
||||
Assert.Equal(expected, actual);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -81,11 +81,24 @@ namespace SabreTools.DatItems.Formats
|
||||
public Rom ConvertToRom()
|
||||
{
|
||||
var rom = new Rom(_internal.ConvertToRom()!);
|
||||
rom.GetFieldValue<DataArea?>(Rom.DataAreaKey)?.SetName(GetFieldValue<DiskArea?>(Disk.DiskAreaKey)?.GetName());
|
||||
|
||||
// Create a DataArea if there was an existing DiskArea
|
||||
var diskArea = GetFieldValue<DiskArea?>(Disk.DiskAreaKey);
|
||||
if (diskArea != null)
|
||||
{
|
||||
var dataArea = new DataArea();
|
||||
|
||||
string? diskAreaName = diskArea.GetStringFieldValue(Models.Metadata.DiskArea.NameKey);
|
||||
dataArea.SetFieldValue(Models.Metadata.DataArea.NameKey, diskAreaName);
|
||||
|
||||
rom.SetFieldValue<DataArea?>(Rom.DataAreaKey, dataArea);
|
||||
}
|
||||
|
||||
rom.SetFieldValue<DupeType>(DatItem.DupeTypeKey, GetFieldValue<DupeType>(DatItem.DupeTypeKey));
|
||||
rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)!.Clone() as Machine ?? new Machine());
|
||||
rom.SetFieldValue<Machine>(DatItem.MachineKey, GetFieldValue<Machine>(DatItem.MachineKey)?.Clone() as Machine);
|
||||
rom.SetFieldValue<Part>(Rom.PartKey, GetFieldValue<Part>(Disk.PartKey)?.Clone() as Part);
|
||||
rom.SetFieldValue<bool?>(DatItem.RemoveKey, GetBoolFieldValue(DatItem.RemoveKey));
|
||||
rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey));
|
||||
rom.SetFieldValue<Source?>(DatItem.SourceKey, GetFieldValue<Source?>(DatItem.SourceKey)?.Clone() as Source);
|
||||
|
||||
return rom;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user