public void ThrowIfNoParameterRuleForMatchParameter(
            Type type,
            MethodBase method,
            Mock <ParameterInfo> parameterMock)
        {
            // Arrange
            var rule = new RegexRule("Throw rule");

            // Act/Assert
            string paramName = Assert.Throws <ArgumentException>(() => rule.MatchParameter(type, method, parameterMock.Object)).ParamName;

            Assert.Equal("rule", paramName);
        }
        public void NotMatchAParameter(
            Type type,
            Mock <MethodBase> methodMock,
            Mock <ParameterInfo> parameterMock)
        {
            // Arrange
            parameterMock.SetupGet(m => m.Name).Returns("Name" + Guid.NewGuid());
            var rule = new RegexRule("Miss rule", parameter: new Regex("Miss"));

            // Act
            bool actual = rule.MatchParameter(type, methodMock.Object, parameterMock.Object);

            // Assert
            Assert.False(actual);
        }
        public void IgnoreTypeAndMethodRegexIfNullWhenMatchParameter(
            Type type,
            Mock <MethodBase> methodMock,
            Mock <ParameterInfo> parameterMock)
        {
            // Arrange
            parameterMock.SetupGet(p => p.Name).Returns("Name" + Guid.NewGuid());
            var rule = new RegexRule(parameterMock.Object.Name + " hit rule", parameter: new Regex(parameterMock.Object.Name));

            // Act
            bool actual = rule.MatchParameter(type, methodMock.Object, parameterMock.Object);

            // Assert
            Assert.True(actual);
        }
        public void ApplyTypeRegexIfProvidedWhenMatchParameter(
            Type type,
            Mock <MethodBase> methodMock,
            Mock <ParameterInfo> parameterMock)
        {
            // Arrange
            parameterMock.SetupGet(p => p.Name).Returns("Name" + Guid.NewGuid());
            var rule = new RegexRule(
                methodMock.Object.Name + " hit rule",
                type: new Regex(Guid.NewGuid().ToString()),
                parameter: new Regex(parameterMock.Object.Name));

            // Act
            bool actual = rule.MatchParameter(type, methodMock.Object, parameterMock.Object);

            // Assert
            Assert.False(actual);
        }
// ReSharper disable UnusedParameter.Local
        private void AssertParameterRule(Func <string, Type, string, IRegexFilter> addMethod, ParameterInfo parameter, Type type, MethodBase method, bool expectedInclude)
        {
            IRegexFilter actualFilter = addMethod(parameter.Name, type, method == null ? null : method.Name);

            int expectedRules = 1;

            if (expectedInclude && method != null)
            {
                expectedRules++;
            }
            if (expectedInclude && type != null)
            {
                expectedRules++;
            }

            Assert.Same(addMethod.Target, actualFilter);
            Assert.Equal(expectedRules, actualFilter.Rules.Count);
            RegexRule addedRule = actualFilter.ParameterRules.Single();

            Assert.Equal(expectedInclude, addedRule.Include);
            Assert.NotNull(addedRule.Parameter);
            Assert.True(addedRule.MatchParameter(type ?? GetType(), method ?? new Mock <MethodBase>().Object, parameter));

            if (type == null)
            {
                Assert.Null(addedRule.Type);
            }
            else
            {
                Assert.NotNull(addedRule.Type);
                Assert.True(addedRule.MatchType(type));
            }

            if (method == null)
            {
                Assert.Null(addedRule.Method);
            }
            else
            {
                Assert.NotNull(addedRule.Method);
                Assert.True(addedRule.MatchMethod(type ?? GetType(), method));
            }
        }
        public void ThrowIfNoParameterRuleForMatchParameter(
            Type type,
            MethodBase method,
            Mock<ParameterInfo> parameterMock)
        {
            // Arrange
            var rule = new RegexRule("Throw rule");

            // Act/Assert
            string paramName = Assert.Throws<ArgumentException>(() => rule.MatchParameter(type, method, parameterMock.Object)).ParamName;
            Assert.Equal("rule", paramName);
        }
        public void NotMatchAParameter(
            Type type,
            Mock<MethodBase> methodMock,
            Mock<ParameterInfo> parameterMock)
        {
            // Arrange
            parameterMock.SetupGet(m => m.Name).Returns("Name" + Guid.NewGuid());
            var rule = new RegexRule("Miss rule", parameter: new Regex("Miss"));

            // Act
            bool actual = rule.MatchParameter(type, methodMock.Object, parameterMock.Object);

            // Assert
            Assert.False(actual);
        }
        public void ApplyMethodRegexIfProvidedWhenMatchParameter(
            Type type,
            Mock<MethodBase> methodMock,
            Mock<ParameterInfo> parameterMock)
        {
            // Arrange
            parameterMock.SetupGet(p => p.Name).Returns("Name" + Guid.NewGuid());
            methodMock.SetupGet(p => p.Name).Returns("Name" + Guid.NewGuid());
            var rule = new RegexRule(
                methodMock.Object.Name + " hit rule",
                method: new Regex(Guid.NewGuid().ToString()),
                parameter: new Regex(parameterMock.Object.Name));

            // Act
            bool actual = rule.MatchParameter(type, methodMock.Object, parameterMock.Object);

            // Assert
            Assert.False(actual);
        }
        public void IgnoreTypeAndMethodRegexIfNullWhenMatchParameter(
            Type type,
            Mock<MethodBase> methodMock,
            Mock<ParameterInfo> parameterMock)
        {
            // Arrange
            parameterMock.SetupGet(p => p.Name).Returns("Name" + Guid.NewGuid());
            var rule = new RegexRule(parameterMock.Object.Name + " hit rule", parameter: new Regex(parameterMock.Object.Name));

            // Act
            bool actual = rule.MatchParameter(type, methodMock.Object, parameterMock.Object);

            // Assert
            Assert.True(actual);
        }