public static PropertyGenerator <T, TV> Property <T, TV>(this InstanceGenerator <T> instance, Expression <Func <T, TV> > expression) { var propertyValueGenerator = new PropertyGenerator <T, TV>(instance, expression); instance.AddPropertyValueGenerator(propertyValueGenerator); return(propertyValueGenerator); }
public static InstanceGenerator <T> WithNewArray <T, TV, TW>(this PropertyGenerator <T, TV[]> property, Func <GeneratorContext <TW>, TW> factory, Action <InstanceGenerator <TW> > initializer) where TW : TV { var instanceGenerator = new InstanceGenerator <TW>(factory); initializer(instanceGenerator); property.SetValueGenerator( parentContext => { var context = new GeneratorContext <TW>(parentContext); var objs = new List <TV>(); bool anyPropertyGeneratorIterable = instanceGenerator.AnyPropertyGeneratorIterable; Option <TW> generatedItem; while ((generatedItem = instanceGenerator.Generate(context)).HasValue) { objs.Add(generatedItem.Value); if (!anyPropertyGeneratorIterable) { break; } } return(Option.Any(objs.ToArray())); }, false); return(property.InstanceGenerator); }
public PropertyGenerator(InstanceGenerator <TInstance> instanceGenerator, Expression <Func <TInstance, TProp> > expression) { instanceGenerator_ = instanceGenerator; setterFunc_ = GetSetter(expression); }