public void GetTypeFactory_CtorNoArgsAlt_ReturnsCorrectlyInstantiatedObject()
        {
            var expected = new Example();

            FactoryDelegate factory = DynamicMethodGenerator.GetTypeFactory(typeof(Example), Type.EmptyTypes);

            Assert.NotNull(factory);
            var actual = (Example)factory();

            var getters =
                from m in typeof(Example).GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)
                let g = DynamicMethodGenerator.GetGetter(m)
                        where (g != null)
                        select g;

            foreach (GetterDelegate getter in getters)
            {
                // assert all of the fields and properties are equal
                Assert.Equal(getter(expected), getter(actual));
            }
        }
        public void GetMethodProxy_MethodExtraArgs_IgnoresExtraBuildsProxyAndInvokes()
        {
            var input    = new Example();
            var expected = new Example("alpha", "bravo", "charlie", -1, -2, -3, "deer", "sun", "myself");

            ProxyDelegate proxy = DynamicMethodGenerator.GetMethodProxy(typeof(Example).GetMethod("Reset"));

            Assert.NotNull(proxy);
            proxy(input, "alpha", "bravo", "charlie", -1, -2, -3, "deer", "sun", "myself", 4, 5, 6, "extra", false);

            var getters =
                from m in typeof(Example).GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)
                let g = DynamicMethodGenerator.GetGetter(m)
                        where (g != null)
                        select g;

            foreach (GetterDelegate getter in getters)
            {
                // assert all of the fields and properties are equal
                Assert.Equal(getter(expected), getter(input));
            }
        }
        public void GetTypeFactory_CtorExtraArgs_IgnoresAndReturnsCorrectlyInstantiatedObject()
        {
            var expected = new Example("alpha", "bravo", "charlie", -1, -2, -3, "deer", "sun", "myself");

            FactoryDelegate factory = DynamicMethodGenerator.GetTypeFactory(
                typeof(Example),
                typeof(string), typeof(string), typeof(string), typeof(int), typeof(int), typeof(int), typeof(string), typeof(string), typeof(string));

            Assert.NotNull(factory);
            var actual = (Example)factory("alpha", "bravo", "charlie", -1, -2, -3, "deer", "sun", "myself", 4, 5, 6, "extra", false);

            var getters =
                from m in typeof(Example).GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy)
                let g = DynamicMethodGenerator.GetGetter(m)
                        where (g != null)
                        select g;

            foreach (GetterDelegate getter in getters)
            {
                // assert all of the fields and properties are equal
                Assert.Equal(getter(expected), getter(actual));
            }
        }