mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Add filter tests, fix issues found
This commit is contained in:
@@ -48,7 +48,7 @@ namespace SabreTools.Filter
|
||||
if (itemName == null || fieldName == null)
|
||||
throw new ArgumentOutOfRangeException(nameof(filterString));
|
||||
|
||||
this.Key = new string[] { itemName, fieldName };
|
||||
this.Key = [itemName, fieldName];
|
||||
this.Value = value;
|
||||
this.Operation = operation;
|
||||
}
|
||||
@@ -59,7 +59,7 @@ namespace SabreTools.Filter
|
||||
if (itemName == null || fieldName == null)
|
||||
throw new ArgumentOutOfRangeException(nameof(value));
|
||||
|
||||
this.Key = new string[] { itemName, fieldName };
|
||||
this.Key = [itemName, fieldName];
|
||||
this.Value = value;
|
||||
this.Operation = GetOperation(operation);
|
||||
}
|
||||
@@ -70,7 +70,7 @@ namespace SabreTools.Filter
|
||||
if (itemName == null || fieldName == null)
|
||||
throw new ArgumentOutOfRangeException(nameof(value));
|
||||
|
||||
this.Key = new string[] { itemName, fieldName };
|
||||
this.Key = [itemName, fieldName];
|
||||
this.Value = value;
|
||||
this.Operation = operation;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace SabreTools.Filter
|
||||
#else
|
||||
return fields
|
||||
.Where(f => f.IsLiteral && !f.IsInitOnly)
|
||||
.Where(f => f.CustomAttributes.Any(a => a.AttributeType == typeof(NoFilterAttribute)))
|
||||
.Where(f => !f.CustomAttributes.Any(a => a.AttributeType == typeof(NoFilterAttribute)))
|
||||
.Select(f => f.GetRawConstantValue() as string)
|
||||
.Where(v => v != null)
|
||||
.ToArray()!;
|
||||
@@ -47,8 +47,8 @@ namespace SabreTools.Filter
|
||||
|
||||
return AppDomain.CurrentDomain.GetAssemblies()
|
||||
.SelectMany(a => a.GetTypes())
|
||||
.Where(t => t.IsAssignableFrom(typeof(DatItem)) && t.IsClass)
|
||||
.FirstOrDefault(t => GetXmlRootAttributeElementName(t) == itemType);
|
||||
.Where(t => typeof(DatItem).IsAssignableFrom(t) && t.IsClass)
|
||||
.FirstOrDefault(t => string.Equals(GetXmlRootAttributeElementName(t), itemType, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
82
SabreTools.Test/Filter/FilteringTests.cs
Normal file
82
SabreTools.Test/Filter/FilteringTests.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using SabreTools.DatItems;
|
||||
using SabreTools.DatItems.Formats;
|
||||
using SabreTools.Filter;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Test.Filter
|
||||
{
|
||||
public class FilteringTests
|
||||
{
|
||||
[Fact]
|
||||
public void PassesFiltersDatItemFilterPass()
|
||||
{
|
||||
// Setup filter
|
||||
var filter = new FilterRunner(["rom.name:foo"]);
|
||||
|
||||
// Setup DatItem
|
||||
var datItem = CreateDatItem();
|
||||
|
||||
// Run filters
|
||||
bool actual = datItem.PassesFilter(filter);
|
||||
Assert.True(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PassesFiltersDatItemFilterFail()
|
||||
{
|
||||
// Setup filter
|
||||
var filter = new FilterRunner(["rom.name:bar"]);
|
||||
|
||||
// Setup DatItem
|
||||
var datItem = CreateDatItem();
|
||||
|
||||
// Run filters
|
||||
bool actual = datItem.PassesFilter(filter);
|
||||
Assert.False(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PassesFiltersMachineFilterPass()
|
||||
{
|
||||
// Setup filter
|
||||
var filter = new FilterRunner(["machine.name:bar"]);
|
||||
|
||||
// Setup DatItem
|
||||
var datItem = CreateDatItem();
|
||||
|
||||
// Run filters
|
||||
bool actual = datItem.PassesFilter(filter);
|
||||
Assert.True(actual);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PassesFiltersMachineFilterFail()
|
||||
{
|
||||
// Setup filter
|
||||
var filter = new FilterRunner(["machine.name:foo"]);
|
||||
|
||||
// Setup DatItem
|
||||
var datItem = CreateDatItem();
|
||||
|
||||
// Run filters
|
||||
bool actual = datItem.PassesFilter(filter);
|
||||
Assert.False(actual);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generate a consistent DatItem for testing
|
||||
/// </summary>
|
||||
private static DatItem CreateDatItem()
|
||||
{
|
||||
return new Rom
|
||||
{
|
||||
Name = "foo",
|
||||
Machine = new Machine
|
||||
{
|
||||
Name = "bar",
|
||||
Description = "bar",
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
78
SabreTools.Test/Filter/PopulationTests.cs
Normal file
78
SabreTools.Test/Filter/PopulationTests.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using System;
|
||||
using SabreTools.Filter;
|
||||
using Xunit;
|
||||
|
||||
namespace SabreTools.Test.Filter
|
||||
{
|
||||
public class PopulationTests
|
||||
{
|
||||
[Fact]
|
||||
public void PopulateFilterRunnerNullListTest()
|
||||
{
|
||||
// Setup the list
|
||||
string[]? filters = null;
|
||||
|
||||
// Setup the filter
|
||||
Assert.Throws<ArgumentNullException>(() => new FilterRunner(filters));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PopulateFilterRunnerEmptyListTest()
|
||||
{
|
||||
// Setup the list
|
||||
string[]? filters = [];
|
||||
|
||||
// Setup the filter runner
|
||||
var filterRunner = new FilterRunner(filters);
|
||||
|
||||
// Check the filters
|
||||
Assert.NotNull(filterRunner.Filters);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PopulateFilterMachineFieldTest()
|
||||
{
|
||||
// Setup the list
|
||||
string[] filters =
|
||||
[
|
||||
"machine.name:foo",
|
||||
"machine.name!:bar",
|
||||
];
|
||||
|
||||
// Setup the filter
|
||||
var filter = new FilterRunner(filters);
|
||||
|
||||
// Check the filters
|
||||
Assert.Equal(new string[] {"machine", "name"}, filter.Filters[0].Key);
|
||||
Assert.Equal("foo", filter.Filters[0].Value);
|
||||
Assert.Equal(Operation.Equals, filter.Filters[0].Operation);
|
||||
|
||||
Assert.Equal(new string[] {"machine", "name"}, filter.Filters[1].Key);
|
||||
Assert.Equal("bar", filter.Filters[1].Value);
|
||||
Assert.Equal(Operation.NotEquals, filter.Filters[1].Operation);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PopulateFilterDatItemFieldTest()
|
||||
{
|
||||
// Setup the list
|
||||
string[] filters =
|
||||
[
|
||||
"rom.name:foo",
|
||||
"rom.name!:bar"
|
||||
];
|
||||
|
||||
// Setup the filter
|
||||
var filter = new FilterRunner(filters);
|
||||
|
||||
// Check the filters
|
||||
Assert.Equal(new string[] { "rom", "name"}, filter.Filters[0].Key);
|
||||
Assert.Equal("foo", filter.Filters[0].Value);
|
||||
Assert.Equal(Operation.Equals, filter.Filters[0].Operation);
|
||||
|
||||
Assert.Equal(new string[] { "rom", "name"}, filter.Filters[1].Key);
|
||||
Assert.Equal("bar", filter.Filters[1].Value);
|
||||
Assert.Equal(Operation.NotEquals, filter.Filters[1].Operation);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
|
||||
<IsPackable>false</IsPackable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
Reference in New Issue
Block a user