public void TypeImplementedOverrideInterfaces_OfMixinTypes()
        {
            var concreteType      = CreateMixedType(typeof(ClassOverridingMixinMembers), typeof(MixinWithAbstractMembers));
            var concreteMixinType = CodeGenerationTypeMother.GetGeneratedMixinTypeAndMetadata(
                typeof(ClassOverridingMixinMembers),
                typeof(MixinWithAbstractMembers));

            Assert.That(concreteType.GetInterfaces(), Has.Member(concreteMixinType.GeneratedOverrideInterface));
        }
        public void TypeImplementedOverrideInterfaces_OfMixinTypes_ProtectedOverriders()
        {
            var concreteType      = CreateMixedType(typeof(ClassOverridingMixinMembersProtected), typeof(MixinWithAbstractMembers));
            var concreteMixinType = CodeGenerationTypeMother.GetGeneratedMixinTypeAndMetadata(
                typeof(ClassOverridingMixinMembersProtected),
                typeof(MixinWithAbstractMembers));

            Assert.That(concreteType.GetInterfaces(), Has.Member(concreteMixinType.GeneratedOverrideInterface));

            var abstractMethodWrapperName =
                MethodOverrideUtility.GetNameForExplicitOverride(concreteMixinType.GeneratedOverrideInterface.GetMethod("AbstractMethod"));
            var explicitInterfaceMember = concreteType.GetMethod(abstractMethodWrapperName, BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.That(explicitInterfaceMember, Is.Not.Null);

            var abstractGetterWrapperName =
                MethodOverrideUtility.GetNameForExplicitOverride(concreteMixinType.GeneratedOverrideInterface.GetMethod("get_AbstractProperty"));
            var explicitInterfacePropertyGetter = concreteType.GetMethod(
                abstractGetterWrapperName,
                BindingFlags.NonPublic | BindingFlags.Instance);

            Assert.That(explicitInterfacePropertyGetter, Is.Not.Null);
        }