public void ShimmedMethod_Generates_From_Instance_Call_With_Params_And_Returns_Reference_Type()
        {
            var a             = new InstanceMethodsTestClass();
            var shimmedMethod = new ShimmedMethod <List <int> >(typeof(InstanceMethodsTestClass).GetMethod("MethodWithParamsAndReferenceTypeReturn"));

            Assert.IsNotNull(shimmedMethod);
            Assert.IsNotNull(shimmedMethod.Method);
            Assert.IsNotNull(shimmedMethod.Shim);

            var        beforeDateTime = DateTime.Now;
            List <int> value          = null;

            PoseContext.Isolate(() => {
                value = a.MethodWithParamsAndReferenceTypeReturn(2, 4);
            }, new[] { shimmedMethod.Shim });
            Assert.IsNotNull(value);
            Assert.AreEqual(1, shimmedMethod.CallResults.Count);
            var callResult = shimmedMethod.CallResults.First();

            Assert.IsNotNull(callResult.Parameters);
            var afterDateTime = DateTime.Now;

            Assert.IsNotNull(callResult.CalledAt);
            Assert.IsTrue(beforeDateTime < callResult.CalledAt && callResult.CalledAt < afterDateTime);

            // first parameter should be instance
            var instanceParam = callResult.Parameters[0] as InstanceMethodsTestClass;

            Assert.IsNotNull(instanceParam);
            Assert.AreEqual(a.InstanceGuid, instanceParam.InstanceGuid);

            Assert.AreEqual(2, (int)callResult.Parameters[1]);
            Assert.AreEqual(4, (int)callResult.Parameters[2]);
        }
        public void ShimmedMethod_Generates_From_Empty_Instance_Virtual_Method_Call()
        {
            var a             = new InstanceMethodsTestClass();
            var shimmedMethod = new ShimmedMethod(typeof(InstanceMethodsTestClass).GetMethod("EmptyVirtualMethod"));

            Assert.IsNotNull(shimmedMethod);
            Assert.IsNotNull(shimmedMethod.Method);
            Assert.IsNotNull(shimmedMethod.Shim);

            var beforeDateTime = DateTime.Now;

            PoseContext.Isolate(() => {
                a.EmptyVirtualMethod();
            }, new[] { shimmedMethod.Shim });
            Assert.AreEqual(1, shimmedMethod.CallResults.Count);
            var callResult = shimmedMethod.CallResults.First();

            Assert.IsNotNull(callResult.Parameters);
            var afterDateTime = DateTime.Now;

            Assert.IsNotNull(callResult.CalledAt);
            Assert.IsTrue(beforeDateTime < callResult.CalledAt && callResult.CalledAt < afterDateTime);

            // first parameter should be instance
            var instanceParam = callResult.Parameters[0] as InstanceMethodsTestClass;

            Assert.IsNotNull(instanceParam);
            Assert.AreEqual(a.InstanceGuid, instanceParam.InstanceGuid);
        }
        public void ShimmedMethod_Generates_From_Instance_Call_Records_String_Parameters()
        {
            var a             = new InstanceMethodsTestClass();
            var shimmedMethod = new ShimmedMethod(typeof(InstanceMethodsTestClass).GetMethod("MethodWithStringParam"));

            Assert.IsNotNull(shimmedMethod);
            Assert.IsNotNull(shimmedMethod.Method);
            Assert.IsNotNull(shimmedMethod.Shim);

            var beforeDateTime = DateTime.Now;

            PoseContext.Isolate(() => {
                a.MethodWithStringParam("bird");
            }, new[] { shimmedMethod.Shim });
            Assert.AreEqual(1, shimmedMethod.CallResults.Count);

            var callResult = shimmedMethod.CallResults.First();

            Assert.IsNotNull(callResult.Parameters);
            var afterDateTime = DateTime.Now;

            Assert.IsNotNull(callResult.CalledAt);
            Assert.IsTrue(beforeDateTime < callResult.CalledAt && callResult.CalledAt < afterDateTime);

            // first parameter should be instance
            var instanceParam = callResult.Parameters[0] as InstanceMethodsTestClass;

            Assert.IsNotNull(instanceParam);
            Assert.AreEqual(a.InstanceGuid, instanceParam.InstanceGuid);

            var expectedParam = callResult.Parameters[1];

            Assert.AreEqual("bird", (string)expectedParam);
        }
        public void ShimmedMethod_Generates_From_Instance_Call_And_Returns_Value()
        {
            var a             = new InstanceMethodsTestClass();
            var shimmedMethod = new ShimmedMethod <int>(typeof(InstanceMethodsTestClass).GetMethod("MethodWithReturn"));

            Assert.IsNotNull(shimmedMethod);
            Assert.IsNotNull(shimmedMethod.Method);
            Assert.IsNotNull(shimmedMethod.Shim);

            var beforeDateTime = DateTime.Now;
            int value          = -1;

            PoseContext.Isolate(() => {
                value = a.MethodWithReturn();
            }, new[] { shimmedMethod.Shim });
            Assert.AreEqual(0, value); // Shimmy will set to default for that value type
            Assert.AreEqual(1, shimmedMethod.CallResults.Count);
            var callResult = shimmedMethod.CallResults.First();

            Assert.IsNotNull(callResult.Parameters);
            var afterDateTime = DateTime.Now;

            Assert.IsNotNull(callResult.CalledAt);
            Assert.IsTrue(beforeDateTime < callResult.CalledAt && callResult.CalledAt < afterDateTime);

            // first parameter should be instance
            var instanceParam = callResult.Parameters[0] as InstanceMethodsTestClass;

            Assert.IsNotNull(instanceParam);
            Assert.AreEqual(a.InstanceGuid, instanceParam.InstanceGuid);
        }
Exemplo n.º 5
0
        public void PoseWrapper_Excepts_On_Custom_Value_For_Constructors_When_Flag_Not_Set()
        {
            var a               = new InstanceMethodsTestClass();
            var wrapper         = new PoseWrapper <InstanceMethodsTestClass>((Func <InstanceMethodsTestClass>)TestClass.ConstructTestClass, null, WrapperOptions.None);
            var constructorInfo = typeof(InstanceMethodsTestClass).GetConstructor(Type.EmptyTypes);

            try
            {
                wrapper.SetReturn(constructorInfo, a);
                Assert.Fail("Expected an InvalidOperationException.");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual(string.Format(PoseWrapper.CouldNotFindMatchingShimError, constructorInfo), e.Message);
            }
        }
Exemplo n.º 6
0
        public void GetReturnValueAndClearRunningMethod_Returns_Correct_Custom_Value_for_Constructor()
        {
            var a = new InstanceMethodsTestClass();

            ShimLibrary.ClearRunningMethod();
            var constructorInfo = typeof(InstanceMethodsTestClass).GetConstructor(Type.EmptyTypes);

            _currentShimmedMethod = new ShimmedConstructor <InstanceMethodsTestClass>(constructorInfo);
            _currentReferenceGuid = ShimLibrary.Add(_currentShimmedMethod);
            ShimLibrary.SetRunningMethod(_currentReferenceGuid.ToString());
            _currentShimmedMethod.ReturnValue = a;

            var result = ShimLibrary.GetReturnValueAndClearRunningMethod <InstanceMethodsTestClass>();

            Assert.AreEqual(a.InstanceGuid, result.InstanceGuid);
            Assert.AreEqual(a, result);
        }
Exemplo n.º 7
0
        public void PoseWrapper_Sets_Custom_Value_On_Constructors_When_Flag_Is_Set()
        {
            var a               = new InstanceMethodsTestClass();
            var wrapper         = new PoseWrapper <InstanceMethodsTestClass>((Func <InstanceMethodsTestClass>)TestClass.ConstructTestClass, null, WrapperOptions.ShimConstructors);
            var constructorInfo = typeof(InstanceMethodsTestClass).GetConstructor(Type.EmptyTypes);

            wrapper.SetReturn(constructorInfo, a);

            var result = wrapper.Execute();

            var callResults = wrapper.ResultsFor(constructorInfo);

            Assert.IsNotNull(callResults);
            Assert.AreEqual(1, callResults.Count);
            Assert.IsTrue(callResults.SequenceEqual(wrapper.LastExecutionResults.FirstOrDefault(m => m.Key == constructorInfo).Value));

            Assert.AreEqual(a, result);
            Assert.AreEqual(a.InstanceGuid, result.InstanceGuid);
        }
Exemplo n.º 8
0
        public void ShimmedConstructor_Returns_New_Instance_If_Parameterless_Constructor_Available()
        {
            var constructorInfo    = typeof(InstanceMethodsTestClass).GetConstructor(Type.EmptyTypes);
            var shimmedConstructor = new ShimmedConstructor <InstanceMethodsTestClass>(constructorInfo);

            Assert.IsNotNull(shimmedConstructor);
            Assert.IsNotNull(shimmedConstructor.Constructor);
            Assert.IsNotNull(shimmedConstructor.Member);
            Assert.IsNotNull(shimmedConstructor.Shim);

            InstanceMethodsTestClass a = null;

            PoseContext.Isolate(() =>
            {
                a = new InstanceMethodsTestClass();
            }, shimmedConstructor.Shim);

            Assert.AreEqual(1, shimmedConstructor.CallResults.Count);
            Assert.IsNotNull(shimmedConstructor.CallResults.FirstOrDefault());
            Assert.IsNotNull(a);
        }
        public void ShimmedMethod_Generates_From_Instance_Call_Records_Multi_Parameters()
        {
            var a             = new InstanceMethodsTestClass();
            var shimmedMethod = new ShimmedMethod(typeof(InstanceMethodsTestClass).GetMethod("MethodWithMultiParams"));

            Assert.IsNotNull(shimmedMethod);
            Assert.IsNotNull(shimmedMethod.Method);
            Assert.IsNotNull(shimmedMethod.Shim);

            var beforeDateTime = DateTime.Now;

            PoseContext.Isolate(() => {
                a.MethodWithMultiParams(5, 6, "bird", new List <bool> {
                    true, false, true
                });
            }, new[] { shimmedMethod.Shim });
            Assert.AreEqual(1, shimmedMethod.CallResults.Count);

            var callResult = shimmedMethod.CallResults.First();

            Assert.IsNotNull(callResult.Parameters);
            var afterDateTime = DateTime.Now;

            Assert.IsNotNull(callResult.CalledAt);
            Assert.IsTrue(beforeDateTime < callResult.CalledAt && callResult.CalledAt < afterDateTime);

            // first parameter should be instance
            var instanceParam = callResult.Parameters[0] as InstanceMethodsTestClass;

            Assert.IsNotNull(instanceParam);
            Assert.AreEqual(a.InstanceGuid, instanceParam.InstanceGuid);

            Assert.AreEqual(5, (int)callResult.Parameters[1]);
            Assert.AreEqual(6, (int)callResult.Parameters[2]);
            Assert.AreEqual("bird", (string)callResult.Parameters[3]);
            Assert.IsTrue(new List <bool> {
                true, false, true
            }.SequenceEqual((List <bool>)callResult.Parameters[4]));
        }
        public void ShimmedMethod_Generates_From_Virtual_Instance_Call_With_Multi_Params_And_Returns_Reference_Type()
        {
            var a             = new InstanceMethodsTestClass();
            var shimmedMethod = new ShimmedMethod <List <int> >(typeof(InstanceMethodsTestClass).GetMethod("VirtualMethodWithMultiReferenceTypeParamsAndReturn"));

            Assert.IsNotNull(shimmedMethod);
            Assert.IsNotNull(shimmedMethod.Method);
            Assert.IsNotNull(shimmedMethod.Shim);

            var        beforeDateTime = DateTime.Now;
            List <int> value          = null;

            PoseContext.Isolate(() => {
                value = a.VirtualMethodWithMultiReferenceTypeParamsAndReturn(new List <int> {
                    3, 2, 1
                }, "bird", DateTime.Today);
            }, new[] { shimmedMethod.Shim });
            Assert.IsNotNull(value);
            Assert.AreEqual(1, shimmedMethod.CallResults.Count);
            var callResult = shimmedMethod.CallResults.First();

            Assert.IsNotNull(callResult.Parameters);
            var afterDateTime = DateTime.Now;

            Assert.IsNotNull(callResult.CalledAt);
            Assert.IsTrue(beforeDateTime < callResult.CalledAt && callResult.CalledAt < afterDateTime);

            // first parameter should be instance
            var instanceParam = callResult.Parameters[0] as InstanceMethodsTestClass;

            Assert.IsNotNull(instanceParam);
            Assert.AreEqual(a.InstanceGuid, instanceParam.InstanceGuid);

            Assert.IsTrue(((List <int>)callResult.Parameters[1]).SequenceEqual(new List <int> {
                3, 2, 1
            }));
            Assert.AreEqual("bird", (string)callResult.Parameters[2]);
            Assert.AreEqual(DateTime.Today, (DateTime)callResult.Parameters[3]);
        }
Exemplo n.º 11
0
            public void MethodWithValueTypeParam(int a)
            {
                var inst = new InstanceMethodsTestClass();

                inst.MethodWithValueTypeParam(a);
            }
Exemplo n.º 12
0
            public List <int> MethodWithMultiReferenceTypeParamsAndReturn(List <int> a, string b, DateTime c)
            {
                var inst = new InstanceMethodsTestClass();

                return(inst.MethodWithMultiReferenceTypeParamsAndReturn(a, b, c));
            }
Exemplo n.º 13
0
            public List <int> MethodWithReferenceTypeParamsAndReturn(List <int> args)
            {
                var inst = new InstanceMethodsTestClass();

                return(inst.MethodWithReferenceTypeParamsAndReturn(args));
            }
Exemplo n.º 14
0
            public List <int> MethodWithParamsAndReferenceTypeReturn(int param1, int param2)
            {
                var inst = new InstanceMethodsTestClass();

                return(inst.MethodWithParamsAndReferenceTypeReturn(param1, param2));
            }
Exemplo n.º 15
0
            public int MethodWithParamsAndReturn(int param1, int param2)
            {
                var inst = new InstanceMethodsTestClass();

                return(inst.MethodWithParamsAndReturn(param1, param2));
            }
Exemplo n.º 16
0
            public int MethodWithReturn()
            {
                var inst = new InstanceMethodsTestClass();

                return(inst.MethodWithReturn());
            }
Exemplo n.º 17
0
            public void MethodWithMultiParams(int a, int b, string c, List <bool> d)
            {
                var inst = new InstanceMethodsTestClass();

                inst.MethodWithMultiParams(a, b, c, d);
            }
Exemplo n.º 18
0
            public void MethodWithObjectParam(List <bool> l)
            {
                var inst = new InstanceMethodsTestClass();

                inst.MethodWithObjectParam(l);
            }
Exemplo n.º 19
0
            public void EmptyMethod()
            {
                var inst = new InstanceMethodsTestClass();

                inst.EmptyMethod();
            }
Exemplo n.º 20
0
            public void MethodWithStringParam(string b)
            {
                var inst = new InstanceMethodsTestClass();

                inst.MethodWithStringParam(b);
            }
 public static int MethodWithParamAndReturn(int param1)
 {
     var inst = new InstanceMethodsTestClass();
     return inst.MethodWithParamAndReturn(param1);
 }