public void Equals_GenericClass_GenericMethodFromBaseType()
        {
            var methodFromBaseType = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(ProxiedChildGeneric <int, string>), "ProxiedChildGenericToString", 1);
            var method             = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(ProxiedChildChildGeneric <int, string>), "ProxiedChildGenericToString", 1);

            Assert.That(MethodInfoEqualityComparer.Get.Equals(methodFromBaseType, method), Is.True);
        }
        public void Equals_GenericMethodFromBaseType_NonGenericOverloadInType()
        {
            var methodFromBaseType = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(Proxied), "OverloadedGenericToString", 2);
            var method             = ScriptingHelper.GetInstanceMethod(typeof(ProxiedChildChild), "OverloadedGenericToString", new[] { typeof(int), typeof(int) });

            Assert.That(MethodInfoEqualityComparer.Get.Equals(methodFromBaseType, method), Is.False);
        }
        public void Equals_MixedArgumentGenericMethodFromNonRelatedTypes()
        {
            var method = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(Test1), "MixedArgumentsTest", 2);
            var methodWithSameSignature           = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(Test2), "MixedArgumentsTest", 2);
            var methodWithSwappedGenericArguments = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(Test3), "MixedArgumentsTest", 2);

            Assert.That(MethodInfoEqualityComparer.Get.Equals(method, methodWithSameSignature), Is.True);
            Assert.That(MethodInfoEqualityComparer.Get.Equals(method, methodWithSwappedGenericArguments), Is.False);
        }
        public void Equals_OverloadedGenericMethodFromBaseType()
        {
            var methodFromBaseType = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(Proxied), "OverloadedGenericToString", 2);
            var method             = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(ProxiedChildChild), "OverloadedGenericToString", 2);

            Assert.That(methodFromBaseType, Is.Not.EqualTo(method));
            Assert.That(methodFromBaseType.GetBaseDefinition(), Is.Not.EqualTo(method.GetBaseDefinition()));
            Assert.That(MethodInfoEqualityComparer.Get.Equals(methodFromBaseType, method), Is.True);
        }
        public void Equals_GenericClass_GenericMethodFromBaseType2()
        {
            var methodFromBaseType = ScriptingHelper.GetAnyGenericInstanceMethod(typeof(ProxiedChildGeneric <int, string>), "ProxiedChildGenericToString", 2);
            var methods            = ScriptingHelper.GetAnyGenericInstanceMethodArray(typeof(ProxiedChildChildGeneric <int, string>), "ProxiedChildGenericToString", 2);

            Assert.That(methods.Length, Is.EqualTo(2));

            Console.WriteLine(methods[0].Name);
            Console.WriteLine(methods[1].Name);
            Console.WriteLine(methodFromBaseType.Name);

            Console.WriteLine(methods[0].ReturnType);
            Console.WriteLine(methods[1].ReturnType);
            Console.WriteLine(methodFromBaseType.ReturnType);

            Console.WriteLine(methods[0].Attributes);
            Console.WriteLine(methods[1].Attributes);
            Console.WriteLine(methodFromBaseType.Attributes);

            Console.WriteLine("{" + string.Join(",", methods[0].GetParameters().Select(pi => pi.Attributes)) + "}");
            Console.WriteLine("{" + string.Join(",", methods[1].GetParameters().Select(pi => pi.Attributes)) + "}");
            Console.WriteLine("{" + string.Join(",", methodFromBaseType.GetParameters().Select(pi => pi.Attributes)) + "}");

            Console.WriteLine("{" + string.Join(",", methods[0].GetParameters().Select(pi => pi.ParameterType)) + "}");
            Console.WriteLine("{" + string.Join(",", methods[1].GetParameters().Select(pi => pi.ParameterType)) + "}");
            Console.WriteLine("{" + string.Join(",", methodFromBaseType.GetParameters().Select(pi => pi.ParameterType)) + "}");

            var a0 = methods[0].GetParameters()[2];
            var a1 = methods[1].GetParameters()[2];
            var ax = methodFromBaseType.GetParameters()[2];

            var x = methods[0].GetParameters()[2];

            Assert.That(methodFromBaseType, Is.Not.EqualTo(methods[0]));
            Assert.That(methodFromBaseType, Is.Not.EqualTo(methods[1]));
            Assert.That(MethodInfoEqualityComparer.Get.Equals(methodFromBaseType, methods[1]), Is.True);
            Assert.That(MethodInfoEqualityComparer.Get.Equals(methodFromBaseType, methods[0]), Is.True);
        }