public void can_get_invocation_name_from_class()
        {
            var result = ExpressionTools.GetInvocation <SampleClass>(i => i.PlainMethod());

            Assert.AreEqual("PlainMethod", result.MethodName);
            Assert.AreEqual(0, result.ParameterValues.Length);
        }
        public void can_get_invocation_name_and_parameters_from_returning_functions_on_interfaces()
        {
            var result = ExpressionTools.GetInvocation <ISampleInterface>(i => i.Returns(1));

            Assert.AreEqual("Returns", result.MethodName);
            Assert.AreEqual(1, result.ParameterValues[0]);
        }
        public void can_get_invocation_name_and_parameters_from_class()
        {
            var result = ExpressionTools.GetInvocation <SampleClass>(
                i => i.ComplexMethod(1, "two", _three)
                );

            Assert.AreEqual("ComplexMethod", result.MethodName);
            Assert.AreEqual(1, result.ParameterValues[0]);
            Assert.AreEqual("two", result.ParameterValues[1]);
            Assert.AreEqual(_three, result.ParameterValues[2]);
        }
        public void variable_values_are_returned_as_at_call_time()
        {
            // ReSharper disable AccessToModifiedClosure
            var v      = 1;
            var result = ExpressionTools.GetInvocation <ISampleInterface>(i => i.Returns(v));

            v = 2;
            // ReSharper restore AccessToModifiedClosure

            Assert.AreEqual("Returns", result.MethodName);
            Assert.AreEqual(1, result.ParameterValues[0]);
            Assert.AreNotEqual(v, result.ParameterValues[0]);
        }