// Copyright © WireMock.Net using System.Linq; using System.Text.RegularExpressions; using AnyOfTypes; using Stef.Validation; using WireMock.Extensions; using WireMock.Models; using WireMock.Util; namespace WireMock.Matchers; /// /// WildcardMatcher /// /// public class WildcardMatcher : RegexMatcher { private readonly AnyOf[] _patterns; /// /// Initializes a new instance of the class. /// /// The pattern. /// IgnoreCase public WildcardMatcher(AnyOf pattern, bool ignoreCase = false) : this(new[] { pattern }, ignoreCase) { } /// /// Initializes a new instance of the class. /// /// The match behaviour. /// The pattern. /// IgnoreCase public WildcardMatcher(MatchBehaviour matchBehaviour, AnyOf pattern, bool ignoreCase = false) : this(matchBehaviour, new[] { pattern }, ignoreCase) { } /// /// Initializes a new instance of the class. /// /// The patterns. /// IgnoreCase public WildcardMatcher(AnyOf[] patterns, bool ignoreCase = false) : this(MatchBehaviour.AcceptOnMatch, patterns, ignoreCase) { } /// /// Initializes a new instance of the class. /// /// The match behaviour. /// The patterns. /// IgnoreCase /// The to use. (default = "Or") public WildcardMatcher( MatchBehaviour matchBehaviour, AnyOf[] patterns, bool ignoreCase = false, MatchOperator matchOperator = MatchOperator.Or) : base(matchBehaviour, CreateArray(patterns), ignoreCase, true, matchOperator) { _patterns = Guard.NotNull(patterns); } /// public override AnyOf[] GetPatterns() { return _patterns; } /// public override string Name => nameof(WildcardMatcher); /// public override string GetCSharpCodeArguments() { return $"new {Name}" + $"(" + $"{MatchBehaviour.GetFullyQualifiedEnumValue()}, " + $"{MappingConverterUtils.ToCSharpCodeArguments(_patterns)}, " + $"{CSharpFormatter.ToCSharpBooleanLiteral(IgnoreCase)}, " + $"{MatchOperator.GetFullyQualifiedEnumValue()}" + $")"; } private static AnyOf[] CreateArray(AnyOf[] patterns) { return patterns .Select(pattern => new AnyOf( new StringPattern { Pattern = "^" + Regex.Escape(pattern.GetPattern()).Replace(@"\*", ".*").Replace(@"\?", ".") + "$", PatternAsFile = pattern.IsSecond ? pattern.Second.PatternAsFile : null })) .ToArray(); } }