public void SetUp() { _transformableMocks = new[] { new Mock <IValueTransformable>(), new Mock <IValueTransformable>(), new Mock <IValueTransformable>() }; _stat = new StatStub(); _nodeType = NodeType.Base; _selectors = new[] { new NodeSelector(_nodeType, PathDefinition.MainPath), new NodeSelector(_nodeType, new PathDefinition(new ModifierSource.Local.Given(), new StatStub())), new NodeSelector(_nodeType, new PathDefinition(new ModifierSource.Local.Given())), }; _transformations = Helper.MockMany <IValueTransformation>(4); _behaviors = new[] { // _behaviors[0]/_transformations[0] affects all _selectors/_transformableMocks new Behavior(new[] { _stat }, new[] { _nodeType }, BehaviorPathInteraction.All, _transformations[0]), // _behaviors[1]/_transformations[1] affects _selectors/_transformableMocks 0 and 1 new Behavior(new[] { _stat }, new[] { _nodeType }, BehaviorPathInteraction.Main | BehaviorPathInteraction.Conversion, _transformations[1]), // _behaviors[2]/_transformations[2] only affects _selectors[1]/_transformableMocks[1] new Behavior(new[] { _stat }, new[] { _nodeType }, BehaviorPathInteraction.Conversion, _transformations[2]), // _behaviors[3]/_transformations[3] affects _selectors/_transformableMocks 0 and 2 new Behavior(new[] { _stat }, new[] { _nodeType }, BehaviorPathInteraction.NonConversion, _transformations[3]), }; _sut = new ValueTransformer(); }
public void SetUp() { _transformableMocks = new[] { new Mock <IValueTransformable>(), new Mock <IValueTransformable>(), new Mock <IValueTransformable>() }; _stat = new StatStub(); _nodeType = NodeType.Base; _selectors = new[] { new NodeSelector(_nodeType, PathDefinition.MainPath), new NodeSelector(_nodeType, new PathDefinition(new ModifierSource.Local.Given(), new StatStub())), new NodeSelector(_nodeType, new PathDefinition(new ModifierSource.Local.Given())), }; _transformations = Helper.MockMany <IValueTransformation>(4); _behaviors = new[] { // _behaviors[0]/_transformations[0] affects all _selectors/_transformableMocks new Behavior(new[] { _stat }, new[] { _nodeType }, new FunctionalPathRule(_ => true), _transformations[0]), // _behaviors[1]/_transformations[1] affects _selectors/_transformableMocks 0 and 1 new Behavior(new[] { _stat }, new[] { _nodeType }, new FunctionalPathRule(p => p.IsMainPath || p.ConversionStats.Any()), _transformations[1]), // _behaviors[2]/_transformations[2] only affects _selectors[1]/_transformableMocks[1] new Behavior(new[] { _stat }, new[] { _nodeType }, new FunctionalPathRule(p => p.ConversionStats.Any()), _transformations[2]), // _behaviors[3]/_transformations[3] affects _selectors/_transformableMocks 0 and 2 new Behavior(new[] { _stat }, new[] { _nodeType }, new FunctionalPathRule(p => p.ConversionStats.IsEmpty()), _transformations[3]), }; _sut = new ValueTransformer(); }
public void Transform_BadData(string input, Type expected) { // Arrange IValueTransformer valueTransformer = new ValueTransformer(); // Act Action result = () => valueTransformer.Transform(input); // Assert Assert.Throws(expected, result); }
public void Transform_RegularData(string input, string expected) { // Arrange IValueTransformer valueTransformer = new ValueTransformer(); // Act var result = valueTransformer.Transform(input); // Assert Assert.Equal(expected, result); }
private static (ICalculationGraph, ICalculationGraphPruner) CreateCalculationGraph( TransformableNodeFactory nodeFactory, StatRegistry statRegistry, ValueTransformer valueTransformer, IEventBuffer eventBuffer) { var coreGraph = new CoreCalculationGraph( s => CreateStatGraph(nodeFactory, valueTransformer, eventBuffer, s), nodeFactory); var eventGraph = new CalculationGraphWithEvents(coreGraph); var defaultPruningRuleSet = new DefaultPruningRuleSet(statRegistry); var defaultPruner = new CalculationGraphPruner(eventGraph, defaultPruningRuleSet); var userSpecifiedValuePruningRuleSet = new UserSpecifiedValuePruningRuleSet(defaultPruningRuleSet, statRegistry); var userSpecifiedValuePruner = new CalculationGraphPruner(eventGraph, userSpecifiedValuePruningRuleSet); var pruner = new CompositeCalculationGraphPruner(defaultPruner, userSpecifiedValuePruner); eventGraph.StatAdded += StatAdded; eventGraph.StatRemoved += StatRemoved; eventGraph.ModifierAdded += ModifierAdded; eventGraph.ModifierRemoved += ModifierRemoved; return(eventGraph, pruner); void StatAdded(IStat stat) { statRegistry.Add(stat); valueTransformer.AddBehaviors(stat.Behaviors); defaultPruner.StatAdded(stat); userSpecifiedValuePruner.StatAdded(stat); } void StatRemoved(IStat stat) { statRegistry.Remove(stat); valueTransformer.RemoveBehaviors(stat.Behaviors); defaultPruner.StatRemoved(stat); userSpecifiedValuePruner.StatRemoved(stat); } void ModifierAdded(Modifier modifier) { defaultPruner.ModifierAdded(modifier); userSpecifiedValuePruner.ModifierAdded(modifier); } void ModifierRemoved(Modifier modifier) { defaultPruner.ModifierRemoved(modifier); userSpecifiedValuePruner.ModifierRemoved(modifier); } }
private LinkedList <NetMeterProperty> ReplaceValues(PropertyIterator iter, ValueTransformer transform) { LinkedList <NetMeterProperty> props = new LinkedList <NetMeterProperty>(); while (iter.hasNext()) { NetMeterProperty val = iter.next(); if (log.IsDebugEnabled) { log.Debug("About to replace in property of type: " + val.GetType() + ": " + val); } if (typeof(StringProperty).IsAssignableFrom(val.GetType())) { // Must not convert TestElement.gui_class etc if (!val.getName().Equals(TestElement.GUI_CLASS) && !val.getName().Equals(TestElement.TEST_CLASS)) { val = transform.transformValue(val); if (log.IsDebugEnabled) { log.Debug("Replacement result: " + val); } } } else if (typeof(MultiProperty).IsAssignableFrom(val.GetType())) { MultiProperty multiVal = (MultiProperty)val; LinkedList <NetMeterProperty> newValues = ReplaceValues(multiVal.iterator(), transform); multiVal.Clear(); foreach (NetMeterProperty jmp in newValues) { multiVal.addProperty(jmp); } if (log.IsDebugEnabled) { log.Debug("Replacement result: " + multiVal); } } else { if (log.IsDebugEnabled) { log.Debug("Won't replace " + val); } } props.AddLast(val); } return(props); }
/// <summary> /// Creates an <see cref="ICalculator"/>. /// </summary> public static ICalculator Create() { var eventBuffer = new EventBuffer(); var innerNodeFactory = new NodeFactory(eventBuffer); var nodeFactory = new TransformableNodeFactory(innerNodeFactory, v => new TransformableValue(v)); var statRegistryCollection = new NodeCollection <IStat>(eventBuffer); var statRegistry = new StatRegistry(statRegistryCollection); var valueTransformer = new ValueTransformer(); var(graph, pruner) = CreateCalculationGraph(nodeFactory, statRegistry, valueTransformer, eventBuffer); var defaultView = new DefaultViewNodeRepository(graph); var bufferingView = new BufferingViewNodeRepository(graph); innerNodeFactory.NodeRepository = defaultView; statRegistry.NodeRepository = bufferingView; return(new Calculator(eventBuffer, graph, pruner, bufferingView, statRegistryCollection)); }
private static IStatGraph CreateStatGraph( TransformableNodeFactory nodeFactory, ValueTransformer valueTransformer, IStat stat) { var paths = new PathDefinitionCollection(SuspendableEventViewProvider.Create( new ObservableCollection <PathDefinition>(), new SuspendableObservableCollection <PathDefinition>())); var coreGraph = new CoreStatGraph(new StatNodeFactory(nodeFactory, stat), paths); return(new StatGraphWithEvents(coreGraph, NodeAdded, NodeRemoved)); void NodeAdded(NodeSelector selector) { var node = coreGraph.Nodes[selector]; var transformable = nodeFactory.TransformableDictionary[node]; valueTransformer.AddTransformable(stat, selector, transformable); } void NodeRemoved(NodeSelector selector) => valueTransformer.RemoveTransformable(stat, selector); }
private static PrunableCalculationGraph CreateCalculationGraph( TransformableNodeFactory nodeFactory, StatRegistry statRegistry, ValueTransformer valueTransformer) { var coreGraph = new CoreCalculationGraph(s => CreateStatGraph(nodeFactory, valueTransformer, s), nodeFactory); var eventGraph = new CalculationGraphWithEvents(coreGraph, StatAdded, StatRemoved); return(new PrunableCalculationGraph(eventGraph, statRegistry)); void StatAdded(IStat stat) { statRegistry.Add(stat); valueTransformer.AddBehaviors(stat.Behaviors); } void StatRemoved(IStat stat) { statRegistry.Remove(stat); valueTransformer.RemoveBehaviors(stat.Behaviors); } }
/// <summary> /// Creates an <see cref="ICalculator"/>. /// </summary> public static ICalculator CreateCalculator() { var innerNodeFactory = new NodeFactory(); var nodeFactory = new TransformableNodeFactory(innerNodeFactory, v => new TransformableValue(v)); var statRegistryCollection = new NodeCollection <IStat>(); var statRegistry = new StatRegistry(statRegistryCollection); var valueTransformer = new ValueTransformer(); var prunableGraph = CreateCalculationGraph(nodeFactory, statRegistry, valueTransformer); var defaultView = new DefaultViewNodeRepository(prunableGraph); var suspendableView = new SuspendableViewNodeRepository(prunableGraph); innerNodeFactory.NodeRepository = defaultView; statRegistry.NodeRepository = suspendableView; var suspender = new SuspendableEventsComposite(); suspender.Add(new StatGraphCollectionSuspender(prunableGraph)); suspender.Add(statRegistryCollection); return(new Calculator(suspender, prunableGraph, prunableGraph, suspendableView, statRegistryCollection)); }
private LinkedList<NetMeterProperty> ReplaceValues(PropertyIterator iter, ValueTransformer transform) { LinkedList<NetMeterProperty> props = new LinkedList<NetMeterProperty>(); while (iter.hasNext()) { NetMeterProperty val = iter.next(); if (log.IsDebugEnabled) { log.Debug("About to replace in property of type: " + val.GetType() + ": " + val); } if (typeof(StringProperty).IsAssignableFrom(val.GetType())) { // Must not convert TestElement.gui_class etc if (!val.getName().Equals(TestElement.GUI_CLASS) && !val.getName().Equals(TestElement.TEST_CLASS)) { val = transform.transformValue(val); if (log.IsDebugEnabled) { log.Debug("Replacement result: " + val); } } } else if (typeof(MultiProperty).IsAssignableFrom(val.GetType())) { MultiProperty multiVal = (MultiProperty) val; LinkedList<NetMeterProperty> newValues = ReplaceValues(multiVal.iterator(), transform); multiVal.Clear(); foreach (NetMeterProperty jmp in newValues) { multiVal.addProperty(jmp); } if (log.IsDebugEnabled) { log.Debug("Replacement result: " + multiVal); } } else { if (log.IsDebugEnabled) { log.Debug("Won't replace " + val); } } props.AddLast(val); } return props; }