public Behavior CreateBehaviorFrom(FieldInfo behaviorField, Context context) { Type behaviorType = behaviorField.FieldType.GetGenericArguments().First(); if(!behaviorType.HasAttribute<BehaviorsAttribute>()) { throw new SpecificationUsageException("Behaviors require the BehaviorsAttribute on the type containing the Specifications. Attribute is missing from " + behaviorType.FullName); } object behaviorInstance = Activator.CreateInstance(behaviorType); if (behaviorType.GetPrivateFieldsOfType<Establish>().Any()) { throw new SpecificationUsageException("You cannot have Establishs on Behaviors. Establish found in " + behaviorType.FullName); } if (behaviorType.GetPrivateFieldsOfType<Because>().Any()) { throw new SpecificationUsageException("You cannot have Becauses on Behaviors. Because found in " + behaviorType.FullName); } if (behaviorType.GetPrivateFieldsWith(typeof(Behaves_like<>)).Any()) { throw new SpecificationUsageException("You cannot nest Behaviors. Nested Behaviors found in " + behaviorType.FullName); } var isIgnored = behaviorField.HasAttribute<IgnoreAttribute>() || behaviorInstance.GetType().HasAttribute<IgnoreAttribute>(); var behavior = new Behavior(behaviorInstance, context, isIgnored); IEnumerable<FieldInfo> itFieldInfos = behaviorType.GetPrivateFieldsOfType<It>(); CreateBehaviorSpecifications(itFieldInfos, behavior); return behavior; }
public Specification CreateSpecificationFromBehavior(Behavior behavior, FieldInfo specificationField) { bool isIgnored = behavior.IsIgnored || specificationField.HasAttribute<IgnoreAttribute>(); Then then = (Then) specificationField.GetValue(behavior.Instance); string name = specificationField.Name.ToFormat(); return new BehaviorSpecification(name, then, isIgnored, specificationField, behavior.Context, behavior); }
public Specification CreateSpecificationFromBehavior(Behavior behavior, FieldInfo specificationField) { bool isIgnored = behavior.IsIgnored || specificationField.HasAttribute(new IgnoreAttributeFullName()); var it = (Delegate) specificationField.GetValue(behavior.Instance); string name = specificationField.Name.ToFormat(); return new BehaviorSpecification(name, specificationField.FieldType, it, isIgnored, specificationField, behavior.Context, behavior); }
public Specification CreateSpecificationFromBehavior(Behavior behavior, FieldInfo specificationField) { bool isIgnored = behavior.IsIgnored || specificationField.HasAttribute<IgnoreAttribute>(); It it = (It) specificationField.GetValue(behavior.Instance); string name = specificationField.Name.ReplaceUnderscores(); return new BehaviorSpecification(name, it, isIgnored, specificationField, behavior.Context, behavior); }
void CreateBehaviorSpecifications(IEnumerable<FieldInfo> itFieldInfos, Behavior behavior) { foreach (var itFieldInfo in itFieldInfos) { Specification specification = _specificationFactory.CreateSpecificationFromBehavior(behavior, itFieldInfo); behavior.AddSpecification(specification); } }
public BehaviorSpecification(string name, It it, bool isIgnored, FieldInfo fieldInfo, Context context, Behavior behavior) : base(name, it, isIgnored, fieldInfo) { _contextInstance = context.Instance; _behaviorInstance = behavior.Instance; _mapper = new ConventionMapper(); }
public Behavior CreateBehaviorFrom(FieldInfo behaviorField, Context context) { var behaviorType = behaviorField.FieldType.GetGenericArguments().First(); EnsureBehaviorHasBehaviorsAttribute(behaviorType); EnsureBehaviorDoesNotHaveFrameworkFieldsExceptIt(behaviorType); var behaviorInstance = Activator.CreateInstance(behaviorType); EnsureAllBehaviorFieldsAreInContext(behaviorType, context); var isIgnored = behaviorField.HasAttribute<IgnoreAttribute>() || behaviorInstance.GetType().HasAttribute<IgnoreAttribute>(); var behavior = new Behavior(behaviorInstance, context, isIgnored); var itFieldInfos = behaviorType.GetInstanceFieldsOfType<Then>(); CreateBehaviorSpecifications(itFieldInfos, behavior); return behavior; }