diff --git a/SabreTools.DatFiles.Test/DatStatisticsTests.cs b/SabreTools.DatFiles.Test/DatStatisticsTests.cs index 0c8b8106..4a4ce218 100644 --- a/SabreTools.DatFiles.Test/DatStatisticsTests.cs +++ b/SabreTools.DatFiles.Test/DatStatisticsTests.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; -using System.IO; -using SabreTools.DatFiles.Formats; +using SabreTools.Core.Tools; using SabreTools.DatItems; using SabreTools.DatItems.Formats; using SabreTools.Hashing; @@ -16,9 +14,161 @@ namespace SabreTools.DatFiles.Test #endregion - #region AddItemStatistics + #region End to End - // TODO: Write AddItemStatistics tests + [Fact] + public void AddRemoveStatisticsTest() + { + // Get items for testing + var disk = CreateDisk(); + var file = CreateFile(); + var media = CreateMedia(); + var rom = CreateRom(); + var sample = CreateSample(); + + // Create an empty stats object + var stats = new DatStatistics(); + + // Validate pre-add values + Assert.Equal(0, stats.TotalCount); + Assert.Equal(0, stats.TotalSize); + Assert.Equal(0, stats.GetHashCount(HashType.CRC32)); + Assert.Equal(0, stats.GetHashCount(HashType.MD5)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA1)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA256)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA384)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA512)); + Assert.Equal(0, stats.GetHashCount(HashType.SpamSum)); + Assert.Equal(0, stats.GetItemCount(ItemType.Disk)); + Assert.Equal(0, stats.GetItemCount(ItemType.File)); + Assert.Equal(0, stats.GetItemCount(ItemType.Media)); + Assert.Equal(0, stats.GetItemCount(ItemType.Rom)); + Assert.Equal(0, stats.GetItemCount(ItemType.Sample)); + Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good)); + + // AddItemStatistics + stats.AddItemStatistics(disk); + stats.AddItemStatistics(file); + stats.AddItemStatistics(media); + stats.AddItemStatistics(rom); + stats.AddItemStatistics(sample); + + // Validate post-add values + Assert.Equal(5, stats.TotalCount); + Assert.Equal(2, stats.TotalSize); + Assert.Equal(2, stats.GetHashCount(HashType.CRC32)); + Assert.Equal(4, stats.GetHashCount(HashType.MD5)); + Assert.Equal(4, stats.GetHashCount(HashType.SHA1)); + Assert.Equal(3, stats.GetHashCount(HashType.SHA256)); + Assert.Equal(1, stats.GetHashCount(HashType.SHA384)); + Assert.Equal(1, stats.GetHashCount(HashType.SHA512)); + Assert.Equal(2, stats.GetHashCount(HashType.SpamSum)); + Assert.Equal(1, stats.GetItemCount(ItemType.Disk)); + Assert.Equal(1, stats.GetItemCount(ItemType.File)); + Assert.Equal(1, stats.GetItemCount(ItemType.Media)); + Assert.Equal(1, stats.GetItemCount(ItemType.Rom)); + Assert.Equal(1, stats.GetItemCount(ItemType.Sample)); + Assert.Equal(2, stats.GetStatusCount(ItemStatus.Good)); + + // RemoveItemStatistics + stats.RemoveItemStatistics(disk); + stats.RemoveItemStatistics(file); + stats.RemoveItemStatistics(media); + stats.RemoveItemStatistics(rom); + stats.RemoveItemStatistics(sample); + + // Validate post-remove values + Assert.Equal(0, stats.TotalCount); + Assert.Equal(0, stats.TotalSize); + Assert.Equal(0, stats.GetHashCount(HashType.CRC32)); + Assert.Equal(0, stats.GetHashCount(HashType.MD5)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA1)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA256)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA384)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA512)); + Assert.Equal(0, stats.GetHashCount(HashType.SpamSum)); + Assert.Equal(0, stats.GetItemCount(ItemType.Disk)); + Assert.Equal(0, stats.GetItemCount(ItemType.File)); + Assert.Equal(0, stats.GetItemCount(ItemType.Media)); + Assert.Equal(0, stats.GetItemCount(ItemType.Rom)); + Assert.Equal(0, stats.GetItemCount(ItemType.Sample)); + Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good)); + } + + [Fact] + public void ResetStatisticsTest() + { + // Get items for testing + var disk = CreateDisk(); + var file = CreateFile(); + var media = CreateMedia(); + var rom = CreateRom(); + var sample = CreateSample(); + + // Create an empty stats object + var stats = new DatStatistics(); + + // Validate pre-add values + Assert.Equal(0, stats.TotalCount); + Assert.Equal(0, stats.TotalSize); + Assert.Equal(0, stats.GetHashCount(HashType.CRC32)); + Assert.Equal(0, stats.GetHashCount(HashType.MD5)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA1)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA256)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA384)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA512)); + Assert.Equal(0, stats.GetHashCount(HashType.SpamSum)); + Assert.Equal(0, stats.GetItemCount(ItemType.Disk)); + Assert.Equal(0, stats.GetItemCount(ItemType.File)); + Assert.Equal(0, stats.GetItemCount(ItemType.Media)); + Assert.Equal(0, stats.GetItemCount(ItemType.Rom)); + Assert.Equal(0, stats.GetItemCount(ItemType.Sample)); + Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good)); + + // AddItemStatistics + stats.AddItemStatistics(disk); + stats.AddItemStatistics(file); + stats.AddItemStatistics(media); + stats.AddItemStatistics(rom); + stats.AddItemStatistics(sample); + + // Validate post-add values + Assert.Equal(5, stats.TotalCount); + Assert.Equal(2, stats.TotalSize); + Assert.Equal(2, stats.GetHashCount(HashType.CRC32)); + Assert.Equal(4, stats.GetHashCount(HashType.MD5)); + Assert.Equal(4, stats.GetHashCount(HashType.SHA1)); + Assert.Equal(3, stats.GetHashCount(HashType.SHA256)); + Assert.Equal(1, stats.GetHashCount(HashType.SHA384)); + Assert.Equal(1, stats.GetHashCount(HashType.SHA512)); + Assert.Equal(2, stats.GetHashCount(HashType.SpamSum)); + Assert.Equal(1, stats.GetItemCount(ItemType.Disk)); + Assert.Equal(1, stats.GetItemCount(ItemType.File)); + Assert.Equal(1, stats.GetItemCount(ItemType.Media)); + Assert.Equal(1, stats.GetItemCount(ItemType.Rom)); + Assert.Equal(1, stats.GetItemCount(ItemType.Sample)); + Assert.Equal(2, stats.GetStatusCount(ItemStatus.Good)); + + // ResetStatistics + stats.ResetStatistics(); + + // Validate post-reset values + Assert.Equal(0, stats.TotalCount); + Assert.Equal(0, stats.TotalSize); + Assert.Equal(0, stats.GetHashCount(HashType.CRC32)); + Assert.Equal(0, stats.GetHashCount(HashType.MD5)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA1)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA256)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA384)); + Assert.Equal(0, stats.GetHashCount(HashType.SHA512)); + Assert.Equal(0, stats.GetHashCount(HashType.SpamSum)); + Assert.Equal(0, stats.GetItemCount(ItemType.Disk)); + Assert.Equal(0, stats.GetItemCount(ItemType.File)); + Assert.Equal(0, stats.GetItemCount(ItemType.Media)); + Assert.Equal(0, stats.GetItemCount(ItemType.Rom)); + Assert.Equal(0, stats.GetItemCount(ItemType.Sample)); + Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good)); + } #endregion @@ -28,33 +178,77 @@ namespace SabreTools.DatFiles.Test #endregion - #region GetHashCount + #region Helpers - // TODO: Write GetHashCount tests + /// + /// Create a Disk for testing + /// + private static Disk CreateDisk() + { + var disk = new Disk(); - #endregion + disk.SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.Good.AsStringValue()); + disk.SetFieldValue(Models.Metadata.Disk.MD5Key, ZeroHash.MD5Str); + disk.SetFieldValue(Models.Metadata.Disk.SHA1Key, ZeroHash.SHA1Str); - #region GetItemCount + return disk; + } - // TODO: Write GetItemCount tests + /// + /// Create a File for testing + /// + private static DatItems.Formats.File CreateFile() + { + var file = new DatItems.Formats.File(); - #endregion + file.Size = 1; + file.CRC = ZeroHash.CRC32Str; + file.MD5 = ZeroHash.MD5Str; + file.SHA1 = ZeroHash.SHA1Str; + file.SHA256 = ZeroHash.SHA256Str; - #region GetStatusCount + return file; + } - // TODO: Write GetStatusCount tests + /// + /// Create a Media for testing + /// + private static Media CreateMedia() + { + var media = new Media(); - #endregion + media.SetFieldValue(Models.Metadata.Media.MD5Key, ZeroHash.MD5Str); + media.SetFieldValue(Models.Metadata.Media.SHA1Key, ZeroHash.SHA1Str); + media.SetFieldValue(Models.Metadata.Media.SHA256Key, ZeroHash.SHA256Str); + media.SetFieldValue(Models.Metadata.Media.SpamSumKey, ZeroHash.SpamSumStr); - #region RemoveItemStatistics + return media; + } - // TODO: Write RemoveItemStatistics tests + /// + /// Create a Rom for testing + /// + private static Rom CreateRom() + { + var rom = new Rom(); - #endregion + rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Good.AsStringValue()); + rom.SetFieldValue(Models.Metadata.Rom.SizeKey, 1); + rom.SetFieldValue(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str); + rom.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str); + rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str); + rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str); + rom.SetFieldValue(Models.Metadata.Rom.SHA384Key, ZeroHash.SHA384Str); + rom.SetFieldValue(Models.Metadata.Rom.SHA512Key, ZeroHash.SHA512Str); + rom.SetFieldValue(Models.Metadata.Rom.SpamSumKey, ZeroHash.SpamSumStr); - #region ResetStatistics + return rom; + } - // TODO: Write ResetStatistics tests + /// + /// Create a Sample for testing + /// + private static Sample CreateSample() => new(); #endregion } diff --git a/SabreTools.DatFiles/DatStatistics.cs b/SabreTools.DatFiles/DatStatistics.cs index d84c9b48..593821ac 100644 --- a/SabreTools.DatFiles/DatStatistics.cs +++ b/SabreTools.DatFiles/DatStatistics.cs @@ -335,6 +335,7 @@ namespace SabreTools.DatFiles /// Item to add info from private void AddItemStatistics(DatItems.Formats.File file) { + TotalSize += file.Size ?? 0; AddHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); AddHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); AddHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1); @@ -457,6 +458,7 @@ namespace SabreTools.DatFiles /// Item to remove info for private void RemoveItemStatistics(DatItems.Formats.File file) { + TotalSize -= file.Size ?? 0; RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1); RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1); RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1);