Add ExecuteFilters tests

This commit is contained in:
Matt Nadareski
2025-01-14 10:11:39 -05:00
parent bbfe18e61a
commit b165422552
2 changed files with 64 additions and 3 deletions

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using SabreTools.Core.Filter;
using SabreTools.DatFiles.Formats;
using SabreTools.DatItems;
using SabreTools.DatItems.Formats;
@@ -10,7 +11,63 @@ namespace SabreTools.DatFiles.Test
{
#region ExecuteFilters
// TODO: Add ExecuteFilters tests
[Fact]
public void ExecuteFilters_Items()
{
FilterObject filterObject = new FilterObject("rom.crc", "deadbeef", Operation.NotEquals);
FilterRunner filterRunner = new FilterRunner([filterObject]);
Source source = new Source(0, source: null);
Machine machine = new Machine();
machine.SetFieldValue(Models.Metadata.Machine.NameKey, "machine");
DatItem datItem = new Rom();
datItem.SetName("rom.bin");
datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "deadbeef");
datItem.SetFieldValue(DatItem.MachineKey, machine);
datItem.SetFieldValue(DatItem.SourceKey, source);
DatFile datFile = new Logiqx(datFile: null, deprecated: false);
datFile.AddItem(datItem, statsOnly: false);
datFile.BucketBy(ItemKey.Machine, DedupeType.None);
datFile.ExecuteFilters(filterRunner);
var actualDatItems = datFile.GetItemsForBucket("machine");
DatItem actualRom = Assert.Single(actualDatItems);
Assert.Equal(true, actualRom.GetBoolFieldValue(DatItem.RemoveKey));
}
[Fact]
public void ExecuteFilters_ItemsDB()
{
FilterObject filterObject = new FilterObject("rom.crc", "deadbeef", Operation.NotEquals);
FilterRunner filterRunner = new FilterRunner([filterObject]);
Source source = new Source(0, source: null);
Machine machine = new Machine();
machine.SetFieldValue(Models.Metadata.Machine.NameKey, "machine");
DatItem datItem = new Rom();
datItem.SetName("rom.bin");
datItem.SetFieldValue(Models.Metadata.Rom.CRCKey, "deadbeef");
datItem.SetFieldValue(DatItem.MachineKey, machine);
datItem.SetFieldValue(DatItem.SourceKey, source);
DatFile datFile = new Logiqx(datFile: null, deprecated: false);
long sourceIndex = datFile.AddSourceDB(source);
long machineIndex = datFile.AddMachineDB(machine);
_ = datFile.AddItemDB(datItem, machineIndex, sourceIndex, statsOnly: false);
datFile.BucketBy(ItemKey.Machine, DedupeType.None);
datFile.ExecuteFilters(filterRunner);
var actualDatItems = datFile.GetItemsForBucketDB("machine");
DatItem actualRom = Assert.Single(actualDatItems).Value;
Assert.Equal(true, actualRom.GetBoolFieldValue(DatItem.RemoveKey));
}
#endregion

View File

@@ -188,6 +188,7 @@ namespace SabreTools.DatFiles
/// Execute all filters in a filter runner on the items in the dictionary
/// </summary>
/// <param name="filterRunner">Preconfigured filter runner to use</param>
/// <remarks>Applies to <see cref="Items"/></remarks>
private void ExecuteFiltersImpl(FilterRunner filterRunner)
{
List<string> keys = [.. Items.Keys];
@@ -211,6 +212,7 @@ namespace SabreTools.DatFiles
/// Execute all filters in a filter runner on the items in the dictionary
/// </summary>
/// <param name="filterRunner">Preconfigured filter runner to use</param>
/// <remarks>Applies to <see cref="ItemsDB"/></remarks>
private void ExecuteFiltersImplDB(FilterRunner filterRunner)
{
List<string> keys = [.. ItemsDB.SortedKeys];
@@ -235,6 +237,7 @@ namespace SabreTools.DatFiles
/// </summary>
/// <param name="filterRunner">Preconfigured filter runner to use</param>
/// <param name="bucketName">Name of the bucket to filter on</param>
/// <remarks>Applies to <see cref="Items"/></remarks>
private void ExecuteFilterOnBucket(FilterRunner filterRunner, string bucketName)
{
List<DatItem>? items = GetItemsForBucket(bucketName);
@@ -244,7 +247,7 @@ namespace SabreTools.DatFiles
// Filter all items in the current key
foreach (var item in items)
{
if (item.PassesFilter(filterRunner))
if (!item.PassesFilter(filterRunner))
item.SetFieldValue<bool?>(DatItem.RemoveKey, true);
}
}
@@ -254,6 +257,7 @@ namespace SabreTools.DatFiles
/// </summary>
/// <param name="filterRunner">Preconfigured filter runner to use</param>
/// <param name="bucketName">Name of the bucket to filter on</param>
/// <remarks>Applies to <see cref="ItemsDB"/></remarks>
private void ExecuteFilterOnBucketDB(FilterRunner filterRunner, string bucketName)
{
var items = GetItemsForBucketDB(bucketName);
@@ -264,7 +268,7 @@ namespace SabreTools.DatFiles
List<long> newItems = [];
foreach (var item in items)
{
if (item.Value.PassesFilterDB(filterRunner))
if (!item.Value.PassesFilterDB(filterRunner))
item.Value.SetFieldValue<bool?>(DatItem.RemoveKey, true);
}
}