public void Chaining()
        {
            var f = VanceStubbs.Proxies.Factory
                    .For <ISimpleInterface>()
                    .WithState <List <string> >()
                    .WithPostEntryHandler((target, state, parameters) => state.Add("Out1"))
                    .WithPostEntryHandler((target, state, parameters) => state.Add("Out2"))
                    .WithPreExitHandler((target, state, ret) =>
            {
                state.Add("In1");
                return(ret);
            })
                    .WithPreExitHandler((target, state, ret) =>
            {
                state.Add("In2");
                return(ret);
            })
                    .Create();
            var v     = new SimpleInterfaceImplementation();
            var s     = new List <string>();
            var proxy = f(v, s);

            Assert.AreEqual(-1, proxy.ReturnInt());
            CollectionAssert.AreEqual(new[] { "Out2", "Out1", "In1", "In2" }, s);
        }
        public void Noop()
        {
            var f = VanceStubbs.Proxies.Factory
                    .For <ISimpleInterface>()
                    .Stateless()
                    .Create();
            var v     = new SimpleInterfaceImplementation();
            var proxy = f(v);

            Assert.AreEqual(-1, proxy.ReturnInt());
        }
        public void BasicStatelessProxy()
        {
            var f = VanceStubbs.Proxies.Factory
                    .For <ISimpleInterface>()
                    .Stateless()
                    .WithPreExitHandler((target, o) => o is int x ? x + 42 : o)
                    .WithPostEntryHandler((target, parameters) => { })
                    .Create();
            var v     = new SimpleInterfaceImplementation();
            var proxy = f(v);

            Assert.AreEqual(41, proxy.ReturnInt());
        }
        public void ParameterModification()
        {
            var f = VanceStubbs.Proxies.Factory
                    .For <ISimpleInterface>()
                    .WithState <int>()
                    .WithPostEntryHandler((target, state, parameters) =>
            {
                if (parameters.Length >= 1 && parameters[0] is int x)
                {
                    parameters[0] = x + 1;
                }
            })
                    .Create();
            var v     = new SimpleInterfaceImplementation();
            var proxy = f(v, 0);

            Assert.AreEqual(51, proxy.PassThrough(50));
        }
예제 #5
0
        public static void Main()
        {
            var peverifyPath = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\PEVerify.exe";

            if (!File.Exists(peverifyPath))
            {
                Console.WriteLine("PEVerify.exe not found at the given path, verification skipped");
                peverifyPath = null;
            }

            try
            {
                Func <ISimpleInterface, int, ISimpleInterface> f = VanceStubbs.Proxies.Factory
                                                                   .For <ISimpleInterface>()
                                                                   .WithState <int>()
                                                                   .WithPostEntryHandler((ISimpleInterface @this, int state, object[] parameters) =>
                {
                    if (parameters.Length >= 1 && parameters[0] is int x)
                    {
                        parameters[0] = x + 1;
                    }
                })
                                                                   .Create();
                var v     = new SimpleInterfaceImplementation();
                var proxy = f(v, 0);
                Assert.AreEqual(51, proxy.PassThrough(50));
            }
            finally
            {
                DynamicAssembly.Default.Save();
                if (peverifyPath != null)
                {
                    var process = Process.Start(new ProcessStartInfo(peverifyPath)
                    {
                        Arguments       = "stubsautogenerated.dll",
                        CreateNoWindow  = false,
                        UseShellExecute = false
                    });
                }
            }
        }