From 6a48dba616398cdf24532b1bcb5d81c9b8cf31a1 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 19 Feb 2025 14:02:20 -0500 Subject: [PATCH] Simplify CleanDatItem --- SabreTools.DatTools/Cleaner.cs | 79 +++++------------------ SabreTools.Test/CleaningTests.cs | 105 +++++++++++++------------------ 2 files changed, 59 insertions(+), 125 deletions(-) diff --git a/SabreTools.DatTools/Cleaner.cs b/SabreTools.DatTools/Cleaner.cs index 46b94997..67e05f52 100644 --- a/SabreTools.DatTools/Cleaner.cs +++ b/SabreTools.DatTools/Cleaner.cs @@ -171,8 +171,13 @@ namespace SabreTools.DatTools if (item == null) continue; + // Get the machine associated with the item, if possible + var machine = item.GetFieldValue(DatItem.MachineKey); + if (machine == null) + continue; + // Run cleaning per item - CleanDatItem(item); + CleanDatItem(item, machine); } } } @@ -196,8 +201,13 @@ namespace SabreTools.DatTools if (item.Value == null) continue; + // Get the machine associated with the item, if possible + var machine = datFile.ItemsDB.GetMachineForItem(item.Key); + if (machine.Value == null) + continue; + // Run cleaning per item - CleanDatItemDB(datFile.ItemsDB, item); + CleanDatItem(item.Value, machine.Value); } } } @@ -206,13 +216,9 @@ namespace SabreTools.DatTools /// Clean a DatItem according to the cleaner /// /// DatItem to clean - internal void CleanDatItem(DatItem datItem) + /// Machine related to the DatItem to clean + internal void CleanDatItem(DatItem datItem, Machine machine) { - // Get the machine associated with the item, if possible - var machine = datItem.GetFieldValue(DatItem.MachineKey); - if (machine == null) - return; - // Get the fields for processing string? machineName = machine.GetStringFieldValue(Models.Metadata.Machine.NameKey); string? machineDesc = machine.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey); @@ -258,63 +264,6 @@ namespace SabreTools.DatTools datItem.SetName(datItemName); } - /// - /// Clean a DatItem according to the cleaner - /// - /// ItemDictionaryDB to get machine information from - /// DatItem to clean - internal void CleanDatItemDB(ItemDictionaryDB db, KeyValuePair datItem) - { - // Get the machine associated with the item, if possible - var machine = db.GetMachineForItem(datItem.Key); - if (machine.Value == null) - return; - - // Get the fields for processing - string? machineName = machine.Value.GetStringFieldValue(Models.Metadata.Machine.NameKey); - string? machineDesc = machine.Value.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey); - string? datItemName = datItem.Value.GetName(); - - // If we're stripping unicode characters, strip machine name and description - if (RemoveUnicode) - { - machineName = TextHelper.RemoveUnicodeCharacters(machineName); - machineDesc = TextHelper.RemoveUnicodeCharacters(machineDesc); - datItemName = TextHelper.RemoveUnicodeCharacters(datItemName); - } - - // If we're in normalization mode, sanitize machine name and description - if (Normalize) - { - machineName = TextHelper.NormalizeCharacters(machineName); - machineDesc = TextHelper.NormalizeCharacters(machineDesc); - } - - // If we are in single game mode, rename the machine - if (Single) - { - machineName = "!"; - machineDesc = "!"; - } - - // If we are in NTFS trim mode, trim the item name - if (Trim && datItemName != null) - { - // Windows max name length is 260 - int usableLength = 260 - (machineName?.Length ?? 0) - (Root?.Length ?? 0); - if (datItemName.Length > usableLength) - { - string ext = Path.GetExtension(datItemName); - datItemName = datItemName.Substring(0, usableLength - ext.Length) + ext; - } - } - - // Set the fields back, if necessary - machine.Value.SetFieldValue(Models.Metadata.Machine.NameKey, machineName); - machine.Value.SetFieldValue(Models.Metadata.Machine.DescriptionKey, machineDesc); - datItem.Value.SetName(datItemName); - } - #endregion } } diff --git a/SabreTools.Test/CleaningTests.cs b/SabreTools.Test/CleaningTests.cs index 341e11fa..9eafc114 100644 --- a/SabreTools.Test/CleaningTests.cs +++ b/SabreTools.Test/CleaningTests.cs @@ -8,63 +8,43 @@ namespace SabreTools.Test public class CleaningTests { [Fact] - public void CleanDatItemRemoveUnicodeTest() + public void CleanDatItem_Normalize() { - // Setup cleaner - var cleaner = new Cleaner - { - RemoveUnicode = true, - }; + var datItem = CreateDatItem("name"); + var machine = CreateMachine("\"ÁБ\"", "ä|/Ж"); - // Setup DatItem - var datItem = CreateDatItem("nam诶", "nam诶-2", "nam诶-3"); + var cleaner = new Cleaner { Normalize = true }; + cleaner.CleanDatItem(datItem, machine); - // Run cleaning - cleaner.CleanDatItem(datItem); - - // Check the fields - Assert.Equal("nam", datItem.GetName()); - Assert.Equal("nam-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); - Assert.Equal("nam-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); - } - - [Fact] - public void CleanDatItemCleanTest() - { - // Setup cleaner - var cleaner = new Cleaner - { - Normalize = true, - }; - - // Setup DatItem - var datItem = CreateDatItem("name", "\"ÁБ\"", "ä|/Ж"); - - // Run cleaning - cleaner.CleanDatItem(datItem); - - // Check the fields Assert.Equal("name", datItem.GetName()); Assert.Equal("'AB'", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); Assert.Equal("ae-Zh", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); } - + [Fact] - public void CleanDatItemSingleTest() + public void CleanDatItem_RemoveUnicode() { - // Setup cleaner - var cleaner = new Cleaner - { - Single = true, - }; + var datItem = CreateDatItem("nam诶"); + var machine = CreateMachine("nam诶-2", "nam诶-3"); - // Setup DatItem - var datItem = CreateDatItem("name", "name-2", "name-3"); - // Run cleaning - cleaner.CleanDatItem(datItem); + var cleaner = new Cleaner { RemoveUnicode = true }; + cleaner.CleanDatItem(datItem, machine); + + Assert.Equal("nam", datItem.GetName()); + Assert.Equal("nam-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); + Assert.Equal("nam-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); + } + + [Fact] + public void CleanDatItem_Single() + { + var datItem = CreateDatItem("name"); + var machine = CreateMachine("name-2", "name-3"); + + var cleaner = new Cleaner { Single = true }; + cleaner.CleanDatItem(datItem, machine); - // Check the fields Assert.Equal("name", datItem.GetName()); Assert.Equal("!", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); Assert.Equal("!", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); @@ -75,22 +55,18 @@ namespace SabreTools.Test [InlineData("", "name")] [InlineData("C:\\Normal\\Depth\\Path", "name")] [InlineData("C:\\AbnormalFolderLengthPath\\ThatReallyPushesTheLimit\\OfHowLongYou\\ReallyShouldNameThings\\AndItGetsEvenWorse\\TheMoreSubfoldersThatYouTraverse\\BecauseWhyWouldYouStop\\AtSomethingReasonable\\LikeReallyThisIsGettingDumb\\AndIKnowItsJustATest\\ButNotAsMuchAsMe", "nam")] - public void CleanDatItemTrimTest(string? root, string expected) + public void CleanDatItem_TrimRoot(string? root, string expected) { - // Setup cleaner + var datItem = CreateDatItem("name"); + var machine = CreateMachine("name-2", "name-3"); + var cleaner = new Cleaner { Trim = true, Root = root, }; + cleaner.CleanDatItem(datItem, machine); - // Setup DatItem - var datItem = CreateDatItem("name", "name-2", "name-3"); - - // Run cleaning - cleaner.CleanDatItem(datItem); - - // Check the fields Assert.Equal(expected, datItem.GetName()); Assert.Equal("name-2", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.NameKey)); Assert.Equal("name-3", datItem.GetFieldValue(DatItem.MachineKey)!.GetStringFieldValue(Models.Metadata.Machine.DescriptionKey)); @@ -99,17 +75,26 @@ namespace SabreTools.Test /// /// Generate a consistent DatItem for testing /// - private static DatItem CreateDatItem(string name, string machName, string desc) + private static DatItem CreateDatItem(string name) { - var machine = new Machine(); - machine.SetFieldValue(Models.Metadata.Machine.NameKey, machName); - machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, desc); - var rom = new Rom(); + rom.SetName(name); - rom.SetFieldValue(DatItem.MachineKey, machine); return rom; } + + /// + /// Generate a consistent Machine for testing + /// + private static Machine CreateMachine(string machName, string desc) + { + var machine = new Machine(); + + machine.SetFieldValue(Models.Metadata.Machine.NameKey, machName); + machine.SetFieldValue(Models.Metadata.Machine.DescriptionKey, desc); + + return machine; + } } } \ No newline at end of file