Summary

Class:WireMock.Matchers.LinqMatcher
Assembly:WireMock.Net
File(s):C:\Users\StefHeyenrath\Documents\GitHub\WireMock.Net\src\WireMock.Net\Matchers\LinqMatcher.cs
Covered lines:36
Uncovered lines:0
Coverable lines:36
Total lines:107
Line coverage:100%
Branch coverage:100%

Metrics

MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
IsMatch(...)0010
IsMatch(...)0011
GetPatterns()0010
.ctor(...)0010
.ctor(...)0010
.ctor(...)0010
.ctor(...)0010

File(s)

C:\Users\StefHeyenrath\Documents\GitHub\WireMock.Net\src\WireMock.Net\Matchers\LinqMatcher.cs

#LineLine coverage
 1using System.Linq;
 2using System.Linq.Dynamic.Core;
 3using JetBrains.Annotations;
 4using Newtonsoft.Json.Linq;
 5using WireMock.Util;
 6
 7namespace WireMock.Matchers
 8{
 9    /// <summary>
 10    /// System.Linq.Dynamic.Core Expression Matcher
 11    /// </summary>
 12    /// <inheritdoc cref="IStringMatcher"/>
 13    public class LinqMatcher : IStringMatcher
 14    {
 15        private readonly string[] _patterns;
 16
 17        /// <inheritdoc cref="IMatcher.MatchBehaviour"/>
 818        public MatchBehaviour MatchBehaviour { get; }
 19
 20        /// <summary>
 21        /// Initializes a new instance of the <see cref="LinqMatcher"/> class.
 22        /// </summary>
 23        /// <param name="pattern">The pattern.</param>
 624        public LinqMatcher([NotNull] string pattern) : this(new[] { pattern })
 625        {
 626        }
 27
 28        /// <summary>
 29        /// Initializes a new instance of the <see cref="LinqMatcher"/> class.
 30        /// </summary>
 31        /// <param name="patterns">The patterns.</param>
 632        public LinqMatcher([NotNull] string[] patterns) : this(MatchBehaviour.AcceptOnMatch, patterns)
 633        {
 634        }
 35
 36        /// <summary>
 37        /// Initializes a new instance of the <see cref="LinqMatcher"/> class.
 38        /// </summary>
 39        /// <param name="matchBehaviour">The match behaviour.</param>
 40        /// <param name="pattern">The pattern.</param>
 241        public LinqMatcher(MatchBehaviour matchBehaviour, [NotNull] string pattern) : this(matchBehaviour, new[] { patte
 242        {
 243        }
 44
 45        /// <summary>
 46        /// Initializes a new instance of the <see cref="LinqMatcher"/> class.
 47        /// </summary>
 48        /// <param name="matchBehaviour">The match behaviour.</param>
 49        /// <param name="patterns">The patterns.</param>
 1050        public LinqMatcher(MatchBehaviour matchBehaviour, [NotNull] string[] patterns)
 1051        {
 1052            MatchBehaviour = matchBehaviour;
 1053            _patterns = patterns;
 1054        }
 55
 56        /// <inheritdoc cref="IStringMatcher.IsMatch"/>
 57        public double IsMatch(string input)
 358        {
 59            // Convert a single input string to a Queryable string-list with 1 entry.
 360            IQueryable queryable = new[] { input }.AsQueryable();
 61
 62            // Use the Any(...) method to check if the result matches
 963            double match = MatchScores.ToScore(_patterns.Select(pattern => queryable.Any(pattern)));
 64
 365            return MatchBehaviourHelper.Convert(MatchBehaviour, match);
 366        }
 67
 68        /// <inheritdoc cref="IObjectMatcher.IsMatch"/>
 69        public double IsMatch(object input)
 270        {
 71            JObject value;
 272            switch (input)
 73            {
 74                case JObject valueAsJObject:
 175                    value = valueAsJObject;
 176                    break;
 77
 78                default:
 179                    value = JObject.FromObject(input);
 180                    break;
 81            }
 82
 83            // Convert a single object to a Queryable JObject-list with 1 entry.
 284            var queryable1 = new[] { value }.AsQueryable();
 85
 86            // Generate the DynamicLinq select statement.
 287            string dynamicSelect = JsonUtils.GenerateDynamicLinqStatement(value);
 88
 89            // Execute DynamicLinq Select statement.
 290            var queryable2 = queryable1.Select(dynamicSelect);
 91
 92            // Use the Any(...) method to check if the result matches.
 693            double match = MatchScores.ToScore(_patterns.Select(pattern => queryable2.Any(pattern)));
 94
 295            return MatchBehaviourHelper.Convert(MatchBehaviour, match);
 296        }
 97
 98        /// <inheritdoc cref="IStringMatcher.GetPatterns"/>
 99        public string[] GetPatterns()
 4100        {
 4101            return _patterns;
 4102        }
 103
 104        /// <inheritdoc cref="IMatcher.Name"/>
 2105        public string Name => "LinqMatcher";
 106    }
 107}