diff --git a/SabreTools.Filtering/Cleaner.cs b/SabreTools.Filtering/Cleaner.cs
index 5e383030..18120627 100644
--- a/SabreTools.Filtering/Cleaner.cs
+++ b/SabreTools.Filtering/Cleaner.cs
@@ -123,7 +123,7 @@ namespace SabreTools.Filtering
///
/// Logging object
///
- private Logger logger = new Logger();
+ private readonly Logger logger = new Logger();
#endregion
@@ -140,6 +140,10 @@ namespace SabreTools.Filtering
ExcludeMachineFields ??= new List();
ExcludeDatItemFields ??= new List();
+ // If the list is null or empty, just return
+ if (fields == null || fields.Count == 0)
+ return;
+
foreach (string field in fields)
{
// If we don't even have a possible field name
@@ -186,6 +190,10 @@ namespace SabreTools.Filtering
MachineFilter ??= new MachineFilter();
DatItemFilter ??= new DatItemFilter();
+ // If the list is null or empty, just return
+ if (filters == null || filters.Count == 0)
+ return;
+
foreach (string filterPair in filters)
{
(string field, string value, bool negate) = ProcessFilterPair(filterPair);
diff --git a/SabreTools.Test/Filtering/CleanerPopulationTests.cs b/SabreTools.Test/Filtering/CleanerPopulationTests.cs
new file mode 100644
index 00000000..fee5cad9
--- /dev/null
+++ b/SabreTools.Test/Filtering/CleanerPopulationTests.cs
@@ -0,0 +1,169 @@
+using System.Collections.Generic;
+
+using SabreTools.Filtering;
+using Xunit;
+
+namespace SabreTools.Test.Filtering
+{
+ public class CleanerPopulationTests
+ {
+ [Fact]
+ public void PopulateExclusionNullListTest()
+ {
+ // Setup the list
+ List exclusions = null;
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateExclusionsFromList(exclusions);
+
+ // Check the exclusion lists
+ Assert.Empty(cleaner.ExcludeDatHeaderFields);
+ Assert.Empty(cleaner.ExcludeMachineFields);
+ Assert.Empty(cleaner.ExcludeDatItemFields);
+ }
+
+ [Fact]
+ public void PopulateExclusionEmptyListTest()
+ {
+ // Setup the list
+ List exclusions = new List();
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateExclusionsFromList(exclusions);
+
+ // Check the exclusion lists
+ Assert.Empty(cleaner.ExcludeDatHeaderFields);
+ Assert.Empty(cleaner.ExcludeMachineFields);
+ Assert.Empty(cleaner.ExcludeDatItemFields);
+ }
+
+ [Fact]
+ public void PopulateExclusionHeaderFieldTest()
+ {
+ // Setup the list
+ List exclusions = new List
+ {
+ "header.datname",
+ };
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateExclusionsFromList(exclusions);
+
+ // Check the exclusion lists
+ Assert.Single(cleaner.ExcludeDatHeaderFields);
+ Assert.Empty(cleaner.ExcludeMachineFields);
+ Assert.Empty(cleaner.ExcludeDatItemFields);
+ }
+
+ [Fact]
+ public void PopulateExclusionMachineFieldTest()
+ {
+ // Setup the list
+ List exclusions = new List
+ {
+ "machine.name",
+ };
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateExclusionsFromList(exclusions);
+
+ // Check the exclusion lists
+ Assert.Empty(cleaner.ExcludeDatHeaderFields);
+ Assert.Single(cleaner.ExcludeMachineFields);
+ Assert.Empty(cleaner.ExcludeDatItemFields);
+ }
+
+ [Fact]
+ public void PopulateExclusionDatItemFieldTest()
+ {
+ // Setup the list
+ List exclusions = new List
+ {
+ "item.name",
+ };
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateExclusionsFromList(exclusions);
+
+ // Check the exclusion lists
+ Assert.Empty(cleaner.ExcludeDatHeaderFields);
+ Assert.Empty(cleaner.ExcludeMachineFields);
+ Assert.Single(cleaner.ExcludeDatItemFields);
+ }
+
+ [Fact]
+ public void PopulateFilterNullListTest()
+ {
+ // Setup the list
+ List filters = null;
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateFiltersFromList(filters);
+
+ // Check the filters
+ Assert.NotNull(cleaner.MachineFilter);
+ Assert.NotNull(cleaner.DatItemFilter);
+ }
+
+ [Fact]
+ public void PopulateFilterEmptyListTest()
+ {
+ // Setup the list
+ List filters = new List();
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateFiltersFromList(filters);
+
+ // Check the filters
+ Assert.NotNull(cleaner.MachineFilter);
+ Assert.NotNull(cleaner.DatItemFilter);
+ }
+
+ [Fact]
+ public void PopulateFilterMachineFieldTest()
+ {
+ // Setup the list
+ List filters = new List
+ {
+ "machine.name:foo",
+ "!machine.name:bar",
+ };
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateFiltersFromList(filters);
+
+ // Check the filters
+ Assert.Contains("foo", cleaner.MachineFilter.Name.PositiveSet);
+ Assert.Contains("bar", cleaner.MachineFilter.Name.NegativeSet);
+ Assert.NotNull(cleaner.DatItemFilter);
+ }
+
+ [Fact]
+ public void PopulateFilterDatItemFieldTest()
+ {
+ // Setup the list
+ List filters = new List
+ {
+ "item.name:foo",
+ "!item.name:bar"
+ };
+
+ // Setup the cleaner
+ var cleaner = new Cleaner();
+ cleaner.PopulateFiltersFromList(filters);
+
+ // Check the filters
+ Assert.NotNull(cleaner.MachineFilter);
+ Assert.Contains("foo", cleaner.DatItemFilter.Name.PositiveSet);
+ Assert.Contains("bar", cleaner.DatItemFilter.Name.NegativeSet);
+ }
+ }
+}
\ No newline at end of file
diff --git a/SabreTools.Test/SabreTools.Test.csproj b/SabreTools.Test/SabreTools.Test.csproj
index b1017c22..6afdd39e 100644
--- a/SabreTools.Test/SabreTools.Test.csproj
+++ b/SabreTools.Test/SabreTools.Test.csproj
@@ -7,6 +7,7 @@
+