public void GenerateXml_ForGenericTypeDefinition()
        {
            var targetType = new InvolvedType(typeof(GenericTarget <,>));

            var mixinConfiguration = MixinConfiguration.BuildNew()
                                     .ForClass(typeof(GenericTarget <,>)).AddMixin <ClassWithBookAttribute> ().AddMixin <Mixin3> ()
                                     .BuildConfiguration();

            targetType.ClassContext = new ReflectedObject(mixinConfiguration.ClassContexts.First());

            var interfaceIdentifierGenerator = new IdentifierGenerator <Type> ();
            var attributeIdentifierGenerator = new IdentifierGenerator <Type> ();
            var assemblyIdentifierGenerator  = new IdentifierGenerator <Assembly> ();

            var reportGenerator = new MixinReferenceReportGenerator(
                targetType, assemblyIdentifierGenerator,
                // generic target class
                new IdentifierGenerator <Type> (),
                interfaceIdentifierGenerator,
                attributeIdentifierGenerator,
                _remotionReflector,
                _outputFormatter);

            var output         = reportGenerator.GenerateXml();
            var expectedOutput = new XElement(
                "Mixins",
                new XElement(
                    "Mixin",
                    new XAttribute("ref", "0"),
                    new XAttribute("index", "n/a"),
                    new XAttribute("relation", "Extends"),
                    new XAttribute("instance-name", "ClassWithBookAttribute"),
                    new XAttribute("introduced-member-visibility", "private"),
                    // has no dependencies
                    new XElement("AdditionalDependencies")
                    ),
                new XElement(
                    "Mixin",
                    new XAttribute("ref", "1"),
                    new XAttribute("index", "n/a"),
                    new XAttribute("relation", "Extends"),
                    new XAttribute("instance-name", "Mixin3"),
                    new XAttribute("introduced-member-visibility", "private"),
                    // has no dependencies
                    new XElement("AdditionalDependencies")
                    )
                );

            Assert.That(output.ToString(), Is.EqualTo(expectedOutput.ToString()));
        }
        public void GenerateXml_WithMixins()
        {
            var targetType = new InvolvedType(typeof(TargetClass1));

            var mixinConfiguration = MixinConfiguration.BuildNew().ForClass <TargetClass1> ().AddMixin <Mixin1> ().BuildConfiguration();

            targetType.ClassContext          = new ReflectedObject(mixinConfiguration.ClassContexts.First());
            targetType.TargetClassDefinition = new ReflectedObject(TargetClassDefinitionUtility.GetConfiguration(targetType.Type, mixinConfiguration));

            var interfaceIdentifierGenerator = new IdentifierGenerator <Type> ();
            var attributeIdentifierGenerator = new IdentifierGenerator <Type> ();
            var assemblyIdentifierGenerator  = new IdentifierGenerator <Assembly> ();

            var reportGenerator = new MixinReferenceReportGenerator(
                targetType, assemblyIdentifierGenerator,
                new IdentifierGenerator <Type> (),
                interfaceIdentifierGenerator,
                attributeIdentifierGenerator,
                _remotionReflector,
                _outputFormatter
                );

            var output = reportGenerator.GenerateXml();

            var targetClassDefinition = TargetClassDefinitionUtility.GetConfiguration(targetType.Type, mixinConfiguration);
            var mixinDefinition       = targetClassDefinition.GetMixinByConfiguredType(typeof(Mixin1));

            var expectedOutput = new XElement(
                "Mixins",
                new XElement(
                    "Mixin",
                    new XAttribute("ref", "0"),
                    new XAttribute("index", "0"),
                    new XAttribute("relation", "Extends"),
                    new XAttribute("instance-name", "Mixin1"),
                    new XAttribute("introduced-member-visibility", "private"),
                    // has no dependencies
                    new XElement("AdditionalDependencies"),
                    new InterfaceIntroductionReportGenerator(new ReflectedObject(mixinDefinition.InterfaceIntroductions), interfaceIdentifierGenerator).
                    GenerateXml(),
                    new AttributeIntroductionReportGenerator(
                        new ReflectedObject(mixinDefinition.AttributeIntroductions), attributeIdentifierGenerator, Helpers.RemotionReflectorFactory.GetRemotionReflection()).
                    GenerateXml(),
                    new MemberOverrideReportGenerator(new ReflectedObject(mixinDefinition.GetAllOverrides())).GenerateXml(),
                    new TargetCallDependenciesReportGenerator(new ReflectedObject(mixinDefinition), assemblyIdentifierGenerator, _remotionReflector, _outputFormatter).GenerateXml()
                    ));

            Assert.That(output.ToString(), Is.EqualTo(expectedOutput.ToString()));
        }
        public void GenerateXml_NoMixins()
        {
            var involvedTypeDummy = new InvolvedType(typeof(object));

            var reportGenerator = new MixinReferenceReportGenerator(
                involvedTypeDummy, new IdentifierGenerator <Assembly> (),
                new IdentifierGenerator <Type> (),
                new IdentifierGenerator <Type> (),
                new IdentifierGenerator <Type> (),
                _remotionReflector,
                _outputFormatter
                );

            var output = reportGenerator.GenerateXml();

            Assert.That(output, Is.Null);
        }