public void InternalAttributesAreIgnored()
        {
            var context    = ClassContextObjectMother.Create(typeof(ClassWithInternalAttribute));
            var definition = TargetClassDefinitionFactory.CreateAndValidate(context);

            Assert.That(definition.CustomAttributes.ContainsKey(typeof(InternalStuffAttribute)), Is.False);
        }
        /// <summary>
        /// Validates the whole configuration.
        /// </summary>
        /// <returns>An <see cref="ValidationLogData"/> object, which contains information about whether the configuration reresented by this context is valid.</returns>
        /// <remarks>This method retrieves definition items for all the <see cref="ClassContexts"/> known by this configuration and uses the
        /// <see cref="Validator"/> class to validate them. The validation results can be inspected, passed to a <see cref="ValidationException"/>, or
        /// be dumped using the <see cref="T:Remotion.Development.Mixins.Validation.ConsoleDumper"/>.</remarks>
        /// <exception cref="NotSupportedException">The <see cref="MixinConfiguration"/> contains a <see cref="ClassContext"/> for a generic type, of
        /// which it cannot make a closed generic type. Because closed types are needed for validation, this <see cref="MixinConfiguration"/>
        /// cannot be validated as a whole. Even in this case, the configuration might still be correct, but validation is deferred to
        /// <see cref="TargetClassDefinitionFactory.CreateAndValidate"/>.</exception>
        public ValidationLogData Validate()
        {
            var definitions = from classContext in ClassContexts
                              where !classContext.Type.IsGenericTypeDefinition && !classContext.Type.IsInterface
                              select(IVisitableDefinition) TargetClassDefinitionFactory.CreateWithoutValidation(classContext);

            return(Validator.Validate(definitions));
        }
        public void CreateTargetClassDefinition_ReturnsValidClassDefinition()
        {
            var context = ClassContextObjectMother.Create(typeof(BaseType1));
            var def     = TargetClassDefinitionFactory.CreateAndValidate(context);

            Assert.That(def, Is.Not.Null);
            Assert.That(def.ConfigurationContext, Is.SameAs(context));
        }
        public TargetClassDefinition GetTargetClassDefinition(ClassContext classContext)
        {
            if (classContext == null)
            {
                return(null);
            }

            return(TargetClassDefinitionFactory.CreateAndValidate(classContext));
        }
示例#5
0
        public void FailsIfInterfaceMixinDependencyNotFulfilled()
        {
            ClassContext context = new ClassContextBuilder(typeof(TargetClassWithAdditionalDependencies)).AddMixin <MixinWithAdditionalInterfaceDependency> ().WithDependency <IMixinWithAdditionalClassDependency> ().BuildClassContext();

            TargetClassDefinition definition = TargetClassDefinitionFactory.CreateWithoutValidation(context);
            var log = Validator.Validate(definition.Mixins[typeof(MixinWithAdditionalInterfaceDependency)]);

            Assert.That(HasFailure("Remotion.Mixins.Validation.Rules.DefaultMixinDependencyRules.DependencyMustBeSatisfiedByAnotherMixin", log), Is.True);
        }
示例#6
0
        public static TargetClassDefinition BuildUnvalidatedDefinition(Type baseType, params Type[] mixinTypes)
        {
            ArgumentUtility.CheckNotNull("baseType", baseType);
            ArgumentUtility.CheckNotNull("mixinTypes", mixinTypes);

            var context = ClassContextObjectMother.Create(baseType, mixinTypes);

            return(TargetClassDefinitionFactory.CreateWithoutValidation(context));
        }
示例#7
0
        public static TargetClassDefinition GetActiveTargetClassDefinition(Type type)
        {
            ArgumentUtility.CheckNotNull("type", type);

            var classContext = MixinConfiguration.ActiveConfiguration.GetContext(type);

            Assert.That(classContext, Is.Not.Null, "The given type '" + type.Name + "' must be configured as a mixin target.");
            return(TargetClassDefinitionFactory.CreateAndValidate(classContext));
        }
示例#8
0
        public void SetUp()
        {
            _remotionReflector = new Reflectors.Net4_5SupportReflector().Initialize(".");

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

            _targetClassDefinition = TargetClassDefinitionFactory.CreateAndValidate(mixinConfiguration.ClassContexts.First());
            _mixinDefinition       = _targetClassDefinition.GetMixinByConfiguredType(typeof(Mixin1));
        }
示例#9
0
        public void SetUp()
        {
            _remotionReflector = new Reflectors.NewMixinDependenciesReflector();

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

            _targetClassDefinition = TargetClassDefinitionFactory.CreateTargetClassDefinition(mixinConfiguration.ClassContexts.First());
            _mixinDefinition       = _targetClassDefinition.GetMixinByConfiguredType(typeof(Mixin1));
        }
        public void GetTargetClassDefinition()
        {
            var mixinConfiguration = MixinConfiguration.BuildNew()
                                     .ForClass <TargetClass1> ().AddMixin <Mixin1> ()
                                     .BuildConfiguration();

            var reflectedOutput = _remotionReflector.GetTargetClassDefinition(typeof(TargetClass1), new ReflectedObject(mixinConfiguration), new ReflectedObject(mixinConfiguration.ClassContexts.GetWithInheritance(typeof(TargetClass1))));
            var expectedOutput  = TargetClassDefinitionFactory.CreateTargetClassDefinition(mixinConfiguration.ClassContexts.First());

            Assert.That(reflectedOutput.To <TargetClassDefinition> (), Is.InstanceOf(typeof(TargetClassDefinition)));
            Assert.That(reflectedOutput.To <TargetClassDefinition> ().FullName, Is.EqualTo(expectedOutput.FullName));
        }
        private static ConcreteMixinType GetGeneratedMixinTypeAndMetadata(ClassContext requestingClass, Type mixinType)
        {
            MixinDefinition mixinDefinition = TargetClassDefinitionFactory
                                              .CreateAndValidate(requestingClass)
                                              .GetMixinByConfiguredType(mixinType);

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

            var mixinTypeIdentifier = mixinDefinition.GetConcreteMixinTypeIdentifier();

            var pipeline           = SafeServiceLocator.Current.GetInstance <IPipelineRegistry>().DefaultPipeline;
            var generatedMixinType = pipeline.ReflectionService.GetAdditionalType(mixinTypeIdentifier);

            return(new AttributeBasedMetadataImporter().GetMetadataForMixinType(generatedMixinType));
        }
示例#12
0
        public void ReMotionApiUsages()
        {
            DeclarativeConfigurationBuilder.BuildConfigurationFromAssemblies(new Assembly[0]);
            TargetClassDefinitionFactory.CreateAndValidate(null);
            LogManager.GetLogger("");
            Use(new NonApplicationAssemblyAttribute());
            Use(new ConfigurationException(""));
            Use(new ValidationException(new ValidationLogData()));
            Use(typeof(IInitializableMixin));
            Use <TargetClassDefinition> (_ => _.GetMixinByConfiguredType(typeof(object)));
            Use <TargetClassDefinition> (_ => _.GetAllMembers());
            Use <TargetClassDefinition> (_ => _.ImplementedInterfaces);
            Use <TargetClassDefinition> (_ => _.ReceivedInterfaces);
            Use <ClassContext> (_ => _.ComposedInterfaces);
            Use <ClassContext> (_ => _.Mixins);
            Use <MixinDefinition> (_ => _.NextCallDependencies);
            Use <MixinDefinition> (_ => _.TargetCallDependencies);
            Use <MixinDefinition> (_ => _.GetAllOverrides());
            Use <MixinDefinition> (_ => _.AcceptsAlphabeticOrdering);
            Use <MixinDefinition> (_ => _.MixinIndex);
            Use <MixinDefinition> (_ => _.InterfaceIntroductions);
            Use <MixinDefinition> (_ => _.AttributeIntroductions);
            Use <MixinDefinition> (_ => _.TargetClass);
            Use <MixinContext> (_ => _.MixinType);
            Use <MixinContext> (_ => _.ExplicitDependencies);
            Use <MixinContext> (_ => _.MixinKind);
            Use <MixinConfiguration> (_ => _.ClassContexts);
            Use <ClassContextCollection> (_ => _.GetWithInheritance(typeof(object)));
            Use <ValidationException> (_ => _.Data); //TODO: add validationLogData from re-motion 1.15.6
            Use <AttributeIntroductionDefinition> (_ => _.AttributeType);
            Use <InterfaceIntroductionDefinition> (_ => _.InterfaceType);
            Use <MemberDefinitionBase> (_ => _.MemberType);
            Use <MemberDefinitionBase> (_ => _.Name);
            Use <MemberDefinitionBase> (_ => _.MemberInfo);
            Use <MemberDefinitionBase> (_ => _.BaseAsMember);
            Use <MemberDefinitionBase> (_ => _.Overrides);
            Use <MemberDefinitionBase> (_ => _.DeclaringClass);
            Use <ClassDefinitionBase> (_ => _.Type);
            Use <TargetCallDependencyDefinition> (_ => _.RequiredType);
            Use <RequiredTargetCallTypeDefinition> (_ => _.Type);

            //TODO: add SerializableValidationLogData members
        }
        public void CreateTargetClassDefinition_ValidatesWhenGeneratingDefinition()
        {
            var cc = ClassContextObjectMother.Create(typeof(DateTime));

            TargetClassDefinitionFactory.CreateAndValidate(cc);
        }
示例#14
0
        public static TargetClassDefinition GetTargetClassDefinition(ClassContext classContext)
        {
            ArgumentUtility.CheckNotNull("classContext", classContext);

            return(TargetClassDefinitionFactory.CreateAndValidate(classContext));
        }