public void GetBestMatchingSetup_InstanceMethodWithArguments_ReturnsOnlyOnTargetAndArgumentsMatch(
            bool targetsMatch, bool argumentsMatch)
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                                           _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method    = ReflectionUtility.GetMethod(() => "Test".IndexOf("c"));
            var arguments = new object[] { "Test", "c" }; // First argument is the target

            var setups = TestDataFactory.CreateSetups(() => "Test".IndexOf("c"));

            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
            .Returns(setups);

            _targetMatcherMock
            .Setup(matcher => matcher.IsMatch(typeof(string), setups[0].MethodCall.Arguments[0], "Test"))
            .Returns(targetsMatch);

            _argumentMatcherMock
            .Setup(matcher => matcher.IsMatch(
                       It.Is <IEnumerable <Expression> >(enumerable => enumerable.SequenceEqual(setups[0].MethodCall.Arguments.Skip(1))),
                       It.Is <IEnumerable <object> >(enumerable => enumerable.SequenceEqual(arguments.Skip(1)))))
            .Returns(argumentsMatch);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            if (targetsMatch && argumentsMatch)
            {
                Assert.AreSame(setups[0], result);
            }
            else
            {
                Assert.IsNull(result);
            }
        }
        public void GetBestMatchingSetup_StaticMethodWithArguments_InvokesArgumentCheckerAndReturnsOnlyOnMatch(
            bool argumentsMatch)
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                                           _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method    = ReflectionUtility.GetMethod(() => Console.WriteLine("Test"));
            var arguments = new object[] { "Test" };

            var setups = TestDataFactory.CreateSetups(() => Console.WriteLine("Test"));

            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
            .Returns(setups);

            _argumentMatcherMock
            .Setup(matcher => matcher.IsMatch(setups[0].MethodCall.Arguments, arguments))
            .Returns(argumentsMatch);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            if (argumentsMatch)
            {
                Assert.AreSame(setups[0], result);
            }
            else
            {
                Assert.IsNull(result);
            }
        }
        public void GetBestMatchingSetup_InstanceMethodWithoutArguments_InvokesTargetCheckerAndReturnsOnlyOnMatch(
            bool targetsMatch)
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                                           _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method    = ReflectionUtility.GetMethod(() => "Test".Trim());
            var arguments = new object[] { "Test" }; // First argument is the target

            var setups = TestDataFactory.CreateSetups(() => "Test".Trim());

            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
            .Returns(setups);

            _targetMatcherMock
            .Setup(matcher => matcher.IsMatch(typeof(string), setups[0].MethodCall.Arguments[0], "Test"))
            .Returns(targetsMatch);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            if (targetsMatch)
            {
                Assert.AreSame(setups[0], result);
            }
            else
            {
                Assert.IsNull(result);
            }
        }
        public void GetBestMatchingSetup_GetsSetupsFromSetupManager()
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                                           _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method    = ReflectionUtility.GetMethod(() => Console.WriteLine());
            var arguments = new object[0];

            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
            .Returns(new List <IInternalSetup>().AsReadOnly())
            .Verifiable();

            subject.GetBestMatchingSetup(method, arguments);

            // Assert
            _setupManagerMock.Verify();
        }
Example #5
0
        public void GetBestMatchingSetup_GetsSetupsFromSetupManager()
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method = ReflectionUtility.GetMethod(() => Console.WriteLine());
            var arguments = new object[0];

            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
                .Returns(new List<IInternalSetup>().AsReadOnly())
                .Verifiable();

            subject.GetBestMatchingSetup(method, arguments);

            // Assert
            _setupManagerMock.Verify();
        }
        public void GetBestMatchingSetup_MultipleMatchingSetups_ReturnsLastSetup()
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                                           _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method    = ReflectionUtility.GetMethod(() => Console.WriteLine(string.Empty));
            var arguments = new object[] { "Test" };

            var setups = TestDataFactory.CreateSetups(() => Console.WriteLine(string.Empty), () => Console.WriteLine(string.Empty));

            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
            .Returns(setups);

            _argumentMatcherMock
            .Setup(matcher => matcher.IsMatch(It.IsAny <IEnumerable <Expression> >(), arguments))
            .Returns(true);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            Assert.AreSame(setups[1], result);
        }
Example #7
0
        public void GetBestMatchingSetup_InstanceMethodWithArguments_ReturnsOnlyOnTargetAndArgumentsMatch(
            bool targetsMatch, bool argumentsMatch)
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method = ReflectionUtility.GetMethod(() => "Test".IndexOf("c"));
            var arguments = new object[] { "Test", "c" }; // First argument is the target

            var setups = TestDataFactory.CreateSetups(() => "Test".IndexOf("c"));
            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
                .Returns(setups);

            _targetMatcherMock
                .Setup(matcher => matcher.IsMatch(typeof(string), setups[0].MethodCall.Arguments[0], "Test"))
                .Returns(targetsMatch);

            _argumentMatcherMock
                .Setup(matcher => matcher.IsMatch(
                    It.Is<IEnumerable<Expression>>(enumerable => enumerable.SequenceEqual(setups[0].MethodCall.Arguments.Skip(1))),
                    It.Is<IEnumerable<object>>(enumerable => enumerable.SequenceEqual(arguments.Skip(1)))))
                .Returns(argumentsMatch);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            if (targetsMatch && argumentsMatch)
                Assert.AreSame(setups[0], result);
            else
                Assert.IsNull(result);
        }
Example #8
0
        public void GetBestMatchingSetup_StaticMethodWithArguments_InvokesArgumentCheckerAndReturnsOnlyOnMatch(
            bool argumentsMatch)
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method = ReflectionUtility.GetMethod(() => Console.WriteLine("Test"));
            var arguments = new object[] { "Test" };

            var setups = TestDataFactory.CreateSetups(() => Console.WriteLine("Test"));
            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
                .Returns(setups);

            _argumentMatcherMock
                .Setup(matcher => matcher.IsMatch(setups[0].MethodCall.Arguments, arguments))
                .Returns(argumentsMatch);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            if (argumentsMatch)
                Assert.AreSame(setups[0], result);
            else
                Assert.IsNull(result);
        }
Example #9
0
        public void GetBestMatchingSetup_MultipleMatchingSetups_ReturnsLastSetup()
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method = ReflectionUtility.GetMethod(() => Console.WriteLine(string.Empty));
            var arguments = new object[] { "Test" };

            var setups = TestDataFactory.CreateSetups(() => Console.WriteLine(string.Empty), () => Console.WriteLine(string.Empty));
            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
                .Returns(setups);

            _argumentMatcherMock
                .Setup(matcher => matcher.IsMatch(It.IsAny<IEnumerable<Expression>>(), arguments))
                .Returns(true);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            Assert.AreSame(setups[1], result);
        }
Example #10
0
        public void GetBestMatchingSetup_InstanceMethodWithoutArguments_InvokesTargetCheckerAndReturnsOnlyOnMatch(
            bool targetsMatch)
        {
            var subject = new SetupMatcher(_setupManagerMock.Object,
                _targetMatcherMock.Object, _argumentMatcherMock.Object);

            var method = ReflectionUtility.GetMethod(() => "Test".Trim());
            var arguments = new object[] { "Test" }; // First argument is the target

            var setups = TestDataFactory.CreateSetups(() => "Test".Trim());
            _setupManagerMock.Setup(manager => manager.GetSetupsForMethod(method))
                .Returns(setups);

            _targetMatcherMock
                .Setup(matcher => matcher.IsMatch(typeof(string), setups[0].MethodCall.Arguments[0], "Test"))
                .Returns(targetsMatch);

            IInternalSetup result = subject.GetBestMatchingSetup(method, arguments);

            if (targetsMatch)
                Assert.AreSame(setups[0], result);
            else
                Assert.IsNull(result);
        }