public void ShouldInvokeClassMethodReplacementProviderIfInterceptionIsEnabled()
        {
            Func <MethodReference, bool> methodFilter = m => m.Name == "DoSomething";
            var replacement = new SampleMethodReplacement();
            var provider    = new SampleMethodReplacementProvider(replacement);

            MethodBodyReplacementProviderRegistry.SetProvider(provider);
            Action <Type> doTest = type =>
            {
                var doSomethingMethod = type.GetMethod("DoSomething");
                Assert.IsNotNull(doSomethingMethod);

                doSomethingMethod.Invoke(null, new object[0]);
            };

            Test("SampleLibrary.dll", "SampleStaticClassWithStaticMethod", methodFilter, doTest);
            Assert.IsTrue(replacement.HasBeenCalled);
        }
        public void ShouldNotInvokeMethodBodyReplacementIfInterceptionIsDisabled()
        {
            var sampleInterceptor = new SampleInterceptor();
            var sampleProvider    = new SampleMethodReplacementProvider(sampleInterceptor);

            Action <object> condition = (instance) =>
            {
                Assert.IsNotNull(instance);
                Assert.IsTrue(instance is IModifiableType);

                var modifiableType = (IModifiableType)instance;
                modifiableType.MethodBodyReplacementProvider = sampleProvider;
                modifiableType.IsInterceptionDisabled        = true;

                instance.Invoke("DoSomething");
            };

            Test(condition);
            Assert.IsFalse(sampleInterceptor.HasBeenInvoked);
        }
        public void ShouldNotInvokeClassMethodReplacementProviderIfInterceptionIsDisabled()
        {
            var sampleInterceptor = new SampleInterceptor();
            var sampleProvider    = new SampleMethodReplacementProvider(sampleInterceptor);

            MethodBodyReplacementProviderRegistry.SetProvider(sampleProvider);

            Action <object> condition = instance =>
            {
                Assert.NotNull(instance);

                var modified = (IModifiableType)instance;
                modified.IsInterceptionDisabled = true;


                instance.Invoke("DoSomething");
                Assert.False(sampleInterceptor.HasBeenInvoked);
            };

            Test(condition);
        }