public void ShimmedMethod_Generates_From_Static_Call_With_Params_And_Returns_Reference_Type() { var shimmedMethod = new ShimmedMethod <List <int> >(typeof(StaticMethodsTestClass).GetMethod("MethodWithParamsAndReferenceTypeReturn")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; List <int> value = null; PoseContext.Isolate(() => { value = StaticMethodsTestClass.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); Assert.AreEqual(2, (int)callResult.Parameters[0]); Assert.AreEqual(4, (int)callResult.Parameters[1]); }
public void ShimmedMethod_Generates_From_Empty_Static_Method_Call() { var shimmedMethod = new ShimmedMethod(typeof(StaticMethodsTestClass).GetMethod("EmptyMethod")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); try { var beforeDateTime = DateTime.Now; PoseContext.Isolate(() => { StaticMethodsTestClass.EmptyMethod(); }, 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); } catch (Exception e) { Assert.Fail(e.Message); } }
public void ShimmedMethod_Generates_From_Static_Call_With_Multi_Params_And_Returns_Value() { var shimmedMethod = new ShimmedMethod <int>(typeof(StaticMethodsTestClass).GetMethod("MethodWithParamsAndReturn")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; int value = -1; PoseContext.Isolate(() => { value = StaticMethodsTestClass.MethodWithParamsAndReturn(2, 4); }, 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); Assert.AreEqual(2, (int)callResult.Parameters[0]); Assert.AreEqual(4, (int)callResult.Parameters[1]); }
public void ShimmedMethod_Generates_From_Static_Call_Records_Multi_Parameters() { var shimmedMethod = new ShimmedMethod(typeof(StaticMethodsTestClass).GetMethod("MethodWithMultiParams")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; PoseContext.Isolate(() => { StaticMethodsTestClass.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); Assert.AreEqual(5, (int)callResult.Parameters[0]); Assert.AreEqual(6, (int)callResult.Parameters[1]); Assert.AreEqual("bird", (string)callResult.Parameters[2]); Assert.IsTrue(new List <bool> { true, false, true }.SequenceEqual((List <bool>)callResult.Parameters[3])); }
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); }
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_Static_Call_With_Multi_Params_And_Returns_Reference_Type() { var shimmedMethod = new ShimmedMethod <List <int> >(typeof(StaticMethodsTestClass).GetMethod("MethodWithMultiReferenceTypeParamsAndReturn")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; List <int> value = null; PoseContext.Isolate(() => { value = StaticMethodsTestClass.MethodWithMultiReferenceTypeParamsAndReturn(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); Assert.IsTrue(((List <int>)callResult.Parameters[0]).SequenceEqual(new List <int> { 3, 2, 1 })); Assert.AreEqual("bird", (string)callResult.Parameters[1]); Assert.AreEqual(DateTime.Today, (DateTime)callResult.Parameters[2]); }
public void ShimmedMethod_Generates_From_Static_Call_Records_String_Parameters() { var shimmedMethod = new ShimmedMethod(typeof(StaticMethodsTestClass).GetMethod("MethodWithStringParam")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; PoseContext.Isolate(() => { StaticMethodsTestClass.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); var expectedParam = callResult.Parameters[0]; Assert.AreEqual("bird", (string)expectedParam); }
public void ShimmedMethod_Call_Returns_Custom_Return_Value_For_Instance_Method_Value_Type() { var a = new TestClass(); var shimmedMethod = new ShimmedMethod <int>(typeof(TestClass).GetMethod("MethodWithValueReturnType"), 5); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; var value = 0; PoseContext.Isolate(() => { value = a.MethodWithValueReturnType(); }, 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); Assert.AreEqual(5, value); }
public void ShimmedMethod_Call_Returns_New_Return_Value_When_Return_Value_Changed() { var a = new TestClass(); var shimmedMethod = new ShimmedMethod <int>(typeof(TestClass).GetMethod("MethodWithValueReturnType"), 5); var value = 0; PoseContext.Isolate(() => { value = a.MethodWithValueReturnType(); }, new[] { shimmedMethod.Shim }); Assert.AreEqual(5, value); shimmedMethod.ReturnValue = 6; var value2 = 0; PoseContext.Isolate(() => { value2 = a.MethodWithValueReturnType(); }, new[] { shimmedMethod.Shim }); Assert.AreEqual(6, value2); shimmedMethod.ReturnValue = 7; var value3 = 0; PoseContext.Isolate(() => { value3 = a.MethodWithValueReturnType(); }, new[] { shimmedMethod.Shim }); Assert.AreEqual(7, value3); }
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_Call_Returns_Custom_Return_Value_For_Static_Method_Reference_Type() { var shimmedMethod = new ShimmedMethod <List <int> >(typeof(TestClass).GetMethod("StaticMethodWithReferenceReturnType"), new List <int> { 1, 2, 3 }); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; var value = new List <int>(); PoseContext.Isolate(() => { value = TestClass.StaticMethodWithReferenceReturnType(); }, 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); Assert.IsTrue(value.SequenceEqual(new List <int> { 1, 2, 3 })); }
public void ShimmedMethod_SetReturnValue_Excepts_When_Called_On_ShimmedMethod_With_Void_Return_Type() { var shimmedMethod = new ShimmedMethod(typeof(TestClass).GetMethod("VoidMethod")); try { shimmedMethod.ReturnValue = 5; } catch (InvalidOperationException e) { Assert.AreEqual(ShimReplacement.CannotSetReturnTypeOnVoidMemberError, e.Message); } }
public void ShimmedMethod_SetReturnValue_Excepts_When_Called_On_ShimmedMethod_With_Wrong_Param_Type() { var shimmedMethod = new ShimmedMethod <int>(typeof(TestClass).GetMethod("StaticMethodWithValueReturnType")); try { shimmedMethod.ReturnValue = "bird"; } catch (InvalidOperationException e) { var expectedString = string.Format(ShimReplacement.InvalidReturnTypeError, typeof(string), typeof(int)); Assert.AreEqual(expectedString, e.Message); } }
public void ShimmedMethod_Generates_From_Instance_Call_With_Reference_Type_Param_And_Returns_Reference_Type() { var a = new InstanceMethodsTestClass(); var shimmedMethod = new ShimmedMethod <List <int> >(typeof(InstanceMethodsTestClass).GetMethod("MethodWithReferenceTypeParamsAndReturn")); Assert.IsNotNull(shimmedMethod); Assert.IsNotNull(shimmedMethod.Method); Assert.IsNotNull(shimmedMethod.Shim); var beforeDateTime = DateTime.Now; List <int> value = null; PoseContext.Isolate(() => { value = a.MethodWithReferenceTypeParamsAndReturn(new List <int> { 3, 2, 1 }); }, 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 })); }
public void ShimmedMethod_Uses_Empty_Object_For_Reference_Types_With_Parameterless_Constructor_When_No_Return_Value_Specified() { var shimmedMethod = new ShimmedMethod <TestClass>(typeof(TestClass).GetMethod("GetTestClass")); Assert.IsNotNull(shimmedMethod.ReturnValue); }
public void ShimmedMethod_Uses_Default_For_Reference_Types_With_No_Parameterless_Constructor_When_No_Return_Value_Specified() { var shimmedMethod = new ShimmedMethod <TestClassNoParameterlessConstructor>(typeof(TestClass).GetMethod("GetTestClassNoParameterlessConstructor")); Assert.AreEqual(default(TestClassNoParameterlessConstructor), shimmedMethod.ReturnValue); }
public void ShimmedMethod_Uses_Default_Return_Type_For_Value_Types_When_No_Return_Value_Specified() { var shimmedMethod = new ShimmedMethod <int>(typeof(TestClass).GetMethod("StaticMethodWithValueReturnType")); Assert.AreEqual(default(int), shimmedMethod.ReturnValue); }