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 @@ +