Files
SabreTools/SabreTools.DatItems.Test/DatItemTests.cs

382 lines
13 KiB
C#
Raw Normal View History

2021-02-02 10:23:43 -08:00
using SabreTools.DatItems.Formats;
using Xunit;
2025-01-07 16:53:57 -05:00
namespace SabreTools.DatItems.Test
{
public class DatItemTests
{
2025-01-07 16:53:57 -05:00
#region CopyMachineInformation
2025-01-07 19:51:55 -05:00
[Fact]
public void CopyMachineInformation_NewItem_Overwrite()
{
Machine? machineA = new Machine();
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineA");
var romA = new Rom();
var romB = new Rom();
romB.RemoveField(DatItem.MachineKey);
romA.CopyMachineInformation(romB);
var actualMachineA = romA.GetFieldValue<Machine>(DatItem.MachineKey);
Assert.NotNull(actualMachineA);
Assert.Null(actualMachineA.GetStringFieldValue(Models.Metadata.Machine.NameKey));
}
[Fact]
public void CopyMachineInformation_EmptyItem_NoChange()
{
Machine? machineA = new Machine();
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineA");
var romA = new Rom();
romA.SetFieldValue(DatItem.MachineKey, machineA);
var romB = new Rom();
romB.RemoveField(DatItem.MachineKey);
romA.CopyMachineInformation(romB);
var actualMachineA = romA.GetFieldValue<Machine>(DatItem.MachineKey);
Assert.NotNull(actualMachineA);
Assert.Equal("machineA", actualMachineA.GetStringFieldValue(Models.Metadata.Machine.NameKey));
}
[Fact]
public void CopyMachineInformation_NullMachine_NoChange()
{
Machine? machineA = new Machine();
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineA");
Machine? machineB = null;
var romA = new Rom();
romA.SetFieldValue(DatItem.MachineKey, machineA);
var romB = new Rom();
romB.SetFieldValue(DatItem.MachineKey, machineB);
romA.CopyMachineInformation(romB);
var actualMachineA = romA.GetFieldValue<Machine>(DatItem.MachineKey);
Assert.NotNull(actualMachineA);
Assert.Equal("machineA", actualMachineA.GetStringFieldValue(Models.Metadata.Machine.NameKey));
}
[Fact]
public void CopyMachineInformation_EmptyMachine_Overwrite()
{
Machine? machineA = new Machine();
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineA");
Machine? machineB = new Machine();
var romA = new Rom();
romA.SetFieldValue(DatItem.MachineKey, machineA);
var romB = new Rom();
romB.SetFieldValue(DatItem.MachineKey, machineB);
romA.CopyMachineInformation(romB);
var actualMachineA = romA.GetFieldValue<Machine>(DatItem.MachineKey);
Assert.NotNull(actualMachineA);
Assert.Null(actualMachineA.GetStringFieldValue(Models.Metadata.Machine.NameKey));
}
[Fact]
public void CopyMachineInformation_FilledMachine_Overwrite()
{
Machine? machineA = new Machine();
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineA");
Machine? machineB = new Machine();
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineB");
var romA = new Rom();
romA.SetFieldValue(DatItem.MachineKey, machineA);
var romB = new Rom();
romB.SetFieldValue(DatItem.MachineKey, machineB);
romA.CopyMachineInformation(romB);
var actualMachineA = romA.GetFieldValue<Machine>(DatItem.MachineKey);
Assert.NotNull(actualMachineA);
Assert.Equal("machineB", actualMachineA.GetStringFieldValue(Models.Metadata.Machine.NameKey));
}
[Fact]
public void CopyMachineInformation_MismatchedType_Overwrite()
{
Machine? machineA = new Machine();
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineA");
Machine? machineB = new Machine();
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "machineB");
var romA = new Rom();
romA.SetFieldValue(DatItem.MachineKey, machineA);
var diskB = new Disk();
diskB.SetFieldValue(DatItem.MachineKey, machineB);
romA.CopyMachineInformation(diskB);
var actualMachineA = romA.GetFieldValue<Machine>(DatItem.MachineKey);
Assert.NotNull(actualMachineA);
Assert.Equal("machineB", actualMachineA.GetStringFieldValue(Models.Metadata.Machine.NameKey));
}
2025-01-07 16:53:57 -05:00
#endregion
#region CompareTo
2025-01-08 10:32:11 -05:00
[Fact]
public void CompareTo_NullOther_Returns1()
{
DatItem self = new Rom();
DatItem? other = null;
int actual = self.CompareTo(other);
Assert.Equal(1, actual);
}
[Fact]
public void CompareTo_DifferentOther_Returns1()
{
DatItem self = new Rom();
self.SetName("name");
DatItem? other = new Disk();
other.SetName("name");
int actual = self.CompareTo(other);
Assert.Equal(1, actual);
}
[Fact]
public void CompareTo_Empty_Returns1()
{
DatItem self = new Rom();
DatItem? other = new Rom();
int actual = self.CompareTo(other);
Assert.Equal(1, actual);
}
[Theory]
[InlineData(null, null, 0)]
[InlineData("name", null, 1)]
[InlineData("name", "other", -1)]
[InlineData(null, "name", -1)]
[InlineData("other", "name", 1)]
[InlineData("name", "name", 0)]
public void CompareTo_NamesOnly(string? selfName, string? otherName, int expected)
{
DatItem self = new Rom();
self.SetName(selfName);
self.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
DatItem? other = new Rom();
other.SetName(otherName);
other.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
int actual = self.CompareTo(other);
Assert.Equal(expected, actual);
}
2025-01-07 16:53:57 -05:00
#endregion
#region Equals
// TODO: Implement Equals tests
#endregion
#region GetDuplicateStatus
[Fact]
2025-01-07 16:53:57 -05:00
public void GetDuplicateStatus_NullOther_NoDupe()
{
DatItem item = new Rom();
DatItem? lastItem = null;
var actual = item.GetDuplicateStatus(lastItem);
Assert.Equal((DupeType)0x00, actual);
}
[Fact]
public void GetDuplicateStatus_DifferentTypes_NoDupe()
{
var rom = new Rom();
2025-01-07 16:53:57 -05:00
DatItem? lastItem = new Disk();
var actual = rom.GetDuplicateStatus(lastItem);
Assert.Equal((DupeType)0x00, actual);
}
2025-01-07 16:56:48 -05:00
[Fact]
public void GetDuplicateStatus_MismatchedHashes_NoDupe()
{
2025-01-07 19:51:55 -05:00
Machine? machineA = new Machine();
2025-01-07 16:56:48 -05:00
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2025-01-07 19:51:55 -05:00
Machine? machineB = new Machine();
2025-01-07 16:56:48 -05:00
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
var romA = new Rom();
romA.SetName("same-name");
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "BEEFDEAD");
romA.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
romA.CopyMachineInformation(machineA);
var romB = new Rom();
romB.SetName("same-name");
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
romB.SetFieldValue<Source?>(DatItem.SourceKey, new Source(1));
romB.CopyMachineInformation(machineB);
var actual = romA.GetDuplicateStatus(romB);
Assert.Equal((DupeType)0x00, actual);
}
[Fact]
2025-01-07 16:53:57 -05:00
public void GetDuplicateStatus_DifferentSource_NameMatch_ExternalAll()
{
2025-01-07 19:51:55 -05:00
Machine? machineA = new Machine();
2024-03-09 23:43:43 -05:00
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2025-01-07 19:51:55 -05:00
Machine? machineB = new Machine();
2024-03-09 23:43:43 -05:00
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2024-03-10 16:49:07 -04:00
var romA = new Rom();
2024-03-08 21:12:13 -05:00
romA.SetName("same-name");
2024-03-09 21:34:26 -05:00
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romA.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
2024-03-09 23:43:43 -05:00
romA.CopyMachineInformation(machineA);
2024-03-09 21:34:26 -05:00
2024-03-10 16:49:07 -04:00
var romB = new Rom();
2024-03-08 21:12:13 -05:00
romB.SetName("same-name");
2024-03-09 21:34:26 -05:00
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romB.SetFieldValue<Source?>(DatItem.SourceKey, new Source(1));
2024-03-09 23:43:43 -05:00
romB.CopyMachineInformation(machineB);
var actual = romA.GetDuplicateStatus(romB);
Assert.Equal(DupeType.External | DupeType.All, actual);
}
[Fact]
2025-01-07 16:53:57 -05:00
public void GetDuplicateStatus_DifferentSource_NoNameMatch_ExternalHash()
{
2025-01-07 19:51:55 -05:00
Machine? machineA = new Machine();
2024-03-09 23:43:43 -05:00
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2025-01-07 19:51:55 -05:00
Machine? machineB = new Machine();
2024-03-09 23:43:43 -05:00
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "not-name-same");
2024-03-10 16:49:07 -04:00
var romA = new Rom();
2024-03-08 21:12:13 -05:00
romA.SetName("same-name");
2024-03-09 21:34:26 -05:00
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romA.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
2024-03-09 23:43:43 -05:00
romA.CopyMachineInformation(machineA);
2024-03-09 21:34:26 -05:00
2024-03-10 16:49:07 -04:00
var romB = new Rom();
2024-03-08 21:12:13 -05:00
romB.SetName("same-name");
2024-03-09 21:34:26 -05:00
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romB.SetFieldValue<Source?>(DatItem.SourceKey, new Source(1));
2024-03-09 23:43:43 -05:00
romB.CopyMachineInformation(machineB);
var actual = romA.GetDuplicateStatus(romB);
Assert.Equal(DupeType.External | DupeType.Hash, actual);
}
[Fact]
2025-01-07 16:53:57 -05:00
public void GetDuplicateStatus_SameSource_NameMatch_InternalAll()
{
2025-01-07 19:51:55 -05:00
Machine? machineA = new Machine();
2024-03-09 23:43:43 -05:00
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2025-01-07 19:51:55 -05:00
Machine? machineB = new Machine();
2024-03-09 23:43:43 -05:00
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2024-03-10 16:49:07 -04:00
var romA = new Rom();
2024-03-08 21:12:13 -05:00
romA.SetName("same-name");
2024-03-09 21:34:26 -05:00
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romA.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
2024-03-09 23:43:43 -05:00
romA.CopyMachineInformation(machineA);
2024-03-09 21:34:26 -05:00
2024-03-10 16:49:07 -04:00
var romB = new Rom();
2024-03-08 21:12:13 -05:00
romB.SetName("same-name");
2024-03-09 21:34:26 -05:00
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romB.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
2024-03-09 23:43:43 -05:00
romB.CopyMachineInformation(machineB);
var actual = romA.GetDuplicateStatus(romB);
Assert.Equal(DupeType.Internal | DupeType.All, actual);
}
[Fact]
2025-01-07 16:53:57 -05:00
public void GetDuplicateStatus_SameSource_NoNameMatch_InternalHash()
{
2025-01-07 19:51:55 -05:00
Machine? machineA = new Machine();
2024-03-09 23:43:43 -05:00
machineA.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "name-same");
2025-01-07 19:51:55 -05:00
Machine? machineB = new Machine();
2024-03-09 23:43:43 -05:00
machineB.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, "not-name-same");
2024-03-10 16:49:07 -04:00
var romA = new Rom();
2024-03-08 21:12:13 -05:00
romA.SetName("same-name");
2024-03-09 21:34:26 -05:00
romA.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romA.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
2024-03-09 23:43:43 -05:00
romA.CopyMachineInformation(machineA);
2024-03-09 21:34:26 -05:00
2024-03-10 16:49:07 -04:00
var romB = new Rom();
2024-03-08 21:12:13 -05:00
romB.SetName("same-name");
2024-03-09 21:34:26 -05:00
romB.SetFieldValue(Models.Metadata.Rom.CRCKey, "DEADBEEF");
2024-10-19 23:17:37 -04:00
romB.SetFieldValue<Source?>(DatItem.SourceKey, new Source(0));
2024-03-09 23:43:43 -05:00
romB.CopyMachineInformation(machineB);
var actual = romA.GetDuplicateStatus(romB);
Assert.Equal(DupeType.Internal | DupeType.Hash, actual);
}
2025-01-07 16:53:57 -05:00
#endregion
#region GetDuplicateStatusDB
// TODO: Implement GetDuplicateStatusDB tests
#endregion
#region PassesFilter
// TODO: Implement PassesFilter tests
#endregion
#region GetKey
// TODO: Implement GetKey tests
#endregion
#region GetName
// TODO: Implement GetName tests
#endregion
#region SetName
// TODO: Implement SetName tests
#endregion
#region Clone
// TODO: Implement Clone tests
#endregion
#region GetInternalClone
// TODO: Implement GetInternalClone tests
#endregion
}
}