public void BuildProxyType_ComplexGenericArguments_Virtual()
        {
            var knownBaseType             = typeof(ProxiedChildGeneric <Proxied, Document>);
            var typeFilter                = new TypeLevelTypeFilter(new[] { knownBaseType });
            var proxiedType               = typeof(ProxiedChildChildGeneric <Proxied, Document>);
            var stableBindingProxyBuilder = new StableBindingProxyBuilder(proxiedType, typeFilter, CreateModuleScope("BuildProxyType_CheckInterfaceMembers"));
            var proxyType = stableBindingProxyBuilder.BuildProxyType();

            const string methodName = "ProxiedChildGeneric_ComplexGenericArguments_Virtual";

            AssertHasSameGenericMethod(knownBaseType, proxyType, methodName, 2);

            var proxied = new ProxiedChildChildGeneric <Proxied, Document> ();

            var proxyMethodGeneric = GetGenericMethod(proxyType, methodName, 2);

            Assert.That(proxyMethodGeneric.IsGenericMethod, Is.True);

            var proxyMethod = proxyMethodGeneric.MakeGenericMethod(typeof(string), typeof(int));

            var proxy = Activator.CreateInstance(proxyType, proxied);

            var          p0 = new Proxied("Hello");
            var          p1 = new Document("Doc");
            const string p2 = "xyz";
            const int    p3 = 1234567;

            var methodArguments = Create_ProxiedChildGeneric_ComplexGenericArguments_Parameters(p0, p1, p2, p3);

            var proxyResult = (string)proxyMethod.Invoke(proxy, methodArguments);

            StringAssert.StartsWith("ProxiedChildGeneric::ProxiedChildGeneric_ComplexGenericArguments_Virtual", proxyResult);
        }
Exemple #2
0
        public void AddForwardingMethod_MethodWithVariableNumberOfParameters()
        {
            var proxyBuilder = new ForwardingProxyBuilder("AddForwardingProperty_MethodWithVariableNumberOfParameters", ModuleScope, typeof(Proxied), new Type[0]);
            var methodInfo   = typeof(Proxied).GetMethod("Sum");

            var methodEmitter = proxyBuilder.AddForwardingMethod(methodInfo);

            Type proxyType = proxyBuilder.BuildProxyType();

            // Added by FS
            AssertMethodInfoEqual(methodEmitter.MethodBuilder, methodInfo);

            // Create proxy instance, initializing it with class to be proxied
            var    proxied = new Proxied("ProxiedProxySumTest");
            object proxy   = Activator.CreateInstance(proxyType, proxied);

            // Check calling proxied method through reflection
            const string resultExpected = "ProxiedProxySumTest: 12";

            Assert.That(proxied.Sum(3, 4, 5), Is.EqualTo(resultExpected));
            Assert.That(methodInfo.Invoke(proxied, new object[] { new int[] { 3, 4, 5 } }), Is.EqualTo(resultExpected));

            var proxyMethodInfo = proxy.GetType().GetMethod("Sum");

            AssertMethodInfoEqual(proxyMethodInfo, methodInfo);
            Assert.That(proxyMethodInfo.Invoke(proxy, new object[] { new int[] { 3, 4, 5 } }), Is.EqualTo(resultExpected));

            Assert.That(proxyMethodInfo.Invoke(proxy, new object[] { new int[] { } }), Is.EqualTo("ProxiedProxySumTest: 0"));
            Assert.That(proxyMethodInfo.Invoke(proxy, new object[] { new int[] { 1 } }), Is.EqualTo("ProxiedProxySumTest: 1"));
            Assert.That(proxyMethodInfo.Invoke(proxy, new object[] { new int[] { 1000, 100, 10, 1 } }), Is.EqualTo("ProxiedProxySumTest: 1111"));
        }
Exemple #3
0
 /*
  * Method uses the object passed in the constructor
  */
 public T Calculate(dynamic x)
 {
     if (!Cache.Keys.Contains(x))
     {
         Cache[x] = Proxied.Calculate(x);;
     }
     return(Cache[x]);
 }
Exemple #4
0
        public void BuildProxyType()
        {
            var  proxyBuilder = new ForwardingProxyBuilder("ForwardingProxyBuilder_BuildProxyTypeTest", ModuleScope, typeof(Proxied), new Type[0]);
            Type proxyType    = proxyBuilder.BuildProxyType();

            // Create proxy instance, initializing it with class to be proxied
            var    proxied = new Proxied();
            object proxy   = Activator.CreateInstance(proxyType, proxied);

            FieldInfo proxiedFieldInfo = proxy.GetType().GetField("_proxied", _nonPublicInstanceFlags);

            Assert.That(proxiedFieldInfo.GetValue(proxy), Is.EqualTo(proxied));
            Assert.That(proxiedFieldInfo.IsInitOnly, Is.False);
            Assert.That(proxiedFieldInfo.IsPrivate, Is.True);
        }
Exemple #5
0
        public void IProxy()
        {
            var  proxyBuilder = new ForwardingProxyBuilder("IProxy", ModuleScope, typeof(Proxied), new Type[0]);
            Type proxyType    = proxyBuilder.BuildProxyType();

            var    proxied = new Proxied("AAA");
            object proxy   = Activator.CreateInstance(proxyType, proxied);

            Assert.That(ScriptingHelper.GetProxiedFieldValue(proxy), Is.SameAs(proxied));

            var proxied2 = new Proxied("BBB");

            ((IProxy)proxy).SetProxied(proxied2);

            Assert.That(ScriptingHelper.GetProxiedFieldValue(proxy), Is.SameAs(proxied2));
        }
Exemple #6
0
        public void AddForwardingMethodFromMethodInfoCopy_ImplicitInterfaceMethod()
        {
            var proxyBuilder = new ForwardingProxyBuilder("AddForwardingMethodFromMethodInfoCopy_ImplicitInterfaceMethod",
                                                          ModuleScope, typeof(Proxied), new[] { typeof(IProxiedGetName) });

            proxyBuilder.AddForwardingMethodFromClassOrInterfaceMethodInfoCopy(typeof(IProxiedGetName).GetMethod("GetName"));
            Type proxyType = proxyBuilder.BuildProxyType();

            // Create proxy instance, initializing it with class to be proxied
            var    proxied = new Proxied();
            object proxy   = Activator.CreateInstance(proxyType, proxied);

            Assert.That(proxy.GetType().GetInterfaces(), Is.EquivalentTo((new[] { typeof(IProxiedGetName), typeof(IProxy) })));
            Assert.That(((IProxiedGetName)proxy).GetName(), Is.EqualTo("Implementer.IProxiedGetName"));
            Assert.That(proxy.GetType().GetMethod("GetName").Invoke(proxy, new object[0]), Is.EqualTo("Implementer.IProxiedGetName"));
        }
Exemple #7
0
        public void AddForwardingMethodFromMethodInfoCopy_Method()
        {
            var proxyBuilder = new ForwardingProxyBuilder("AddForwardingMethodFromMethodInfoCopy_Method", ModuleScope, typeof(Proxied), new Type[0]);
            var methodInfo   = typeof(Proxied).GetMethod("PrependName");

            proxyBuilder.AddForwardingMethodFromClassOrInterfaceMethodInfoCopy(methodInfo);
            Type proxyType = proxyBuilder.BuildProxyType();

            var    proxied = new Proxied("The name");
            object proxy   = Activator.CreateInstance(proxyType, proxied);

            // Check calling proxied method through reflection
            Assert.That(methodInfo.Invoke(proxied, new object[] { "is Smith" }), Is.EqualTo("The name is Smith"));

            var proxyMethodInfo = proxy.GetType().GetMethod("PrependName");

            AssertMethodInfoEqual(proxyMethodInfo, methodInfo);
            Assert.That(proxyMethodInfo.Invoke(proxy, new object[] { "is Smith" }), Is.EqualTo("The name is Smith"));
        }
 public override int GetHashCode()
 {
     return(Proxied.GetHashCode());
 }
 public override string ToString()
 {
     return(Proxied.ToString());
 }