using System; using System.Collections.Generic; using System.IO; using SabreTools.IO.Matching; using Xunit; namespace SabreTools.IO.Test.Matching { public class PathMatchSetTests { [Fact] public void InvalidNeedle_ThrowsException() { Assert.Throws(() => new PathMatchSet(string.Empty, "name")); Assert.Throws(() => new PathMatchSet(string.Empty, PathVersionMock, "name")); } [Fact] public void InvalidNeedles_ThrowsException() { Assert.Throws(() => new PathMatchSet([], "name")); Assert.Throws(() => new PathMatchSet([], PathVersionMock, "name")); } [Fact] public void GenericConstructor_NoDelegates() { var needles = new List { "test" }; var cms = new PathMatchSet(needles, "name"); Assert.Null(cms.GetVersion); } [Fact] public void VersionConstructor_SingleDelegate() { var needles = new List { "test" }; var cms = new PathMatchSet(needles, PathVersionMock, "name"); Assert.NotNull(cms.GetVersion); } #region Array [Fact] public void MatchesAll_NullArray_NoMatches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll((string[]?)null); Assert.Empty(actual); } [Fact] public void MatchesAll_EmptyArray_NoMatches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll(Array.Empty()); Assert.Empty(actual); } [Fact] public void MatchesAll_MatchingArray_Matches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll(new string[] { "test" }); string path = Assert.Single(actual); Assert.Equal("test", path); } [Fact] public void MatchesAll_MismatchedArray_NoMatches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll(new string[] { "not" }); Assert.Empty(actual); } [Fact] public void MatchesAny_NullArray_NoMatches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny((string[]?)null); Assert.Null(actual); } [Fact] public void MatchesAny_EmptyArray_NoMatches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny(Array.Empty()); Assert.Null(actual); } [Fact] public void MatchesAny_MatchingArray_Matches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny(new string[] { "test" }); Assert.Equal("test", actual); } [Fact] public void MatchesAny_MismatchedArray_NoMatches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny(new string[] { "not" }); Assert.Null(actual); } #endregion #region List [Fact] public void MatchesAll_NullList_NoMatches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll((List?)null); Assert.Empty(actual); } [Fact] public void MatchesAll_EmptyList_NoMatches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll(new List()); Assert.Empty(actual); } [Fact] public void MatchesAll_MatchingList_Matches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll(new List { "test" }); string path = Assert.Single(actual); Assert.Equal("test", path); } [Fact] public void MatchesAll_MismatchedList_NoMatches() { var cms = new PathMatchSet("test", "name"); var actual = cms.MatchesAll(new List { "not" }); Assert.Empty(actual); } [Fact] public void MatchesAny_NullList_NoMatches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny((List?)null); Assert.Null(actual); } [Fact] public void MatchesAny_EmptyList_NoMatches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny(new List()); Assert.Null(actual); } [Fact] public void MatchesAny_MatchingList_Matches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny(new List { "test" }); Assert.Equal("test", actual); } [Fact] public void MatchesAny_MismatchedList_NoMatches() { var cms = new PathMatchSet("test", "name"); string? actual = cms.MatchesAny(new List { "not" }); Assert.Null(actual); } #endregion #region Mock Delegates /// private static string? PathVersionMock(string path, List? files) => null; #endregion } }