/// <summary> /// Builds a mapping of constraints. /// </summary> /// <returns>An <see cref="IDictionary{String, IDispatcherValueConstraint}"/> of the constraints.</returns> public IDictionary <string, IDispatcherValueConstraint> Build() { var constraints = new Dictionary <string, IDispatcherValueConstraint>(StringComparer.OrdinalIgnoreCase); foreach (var kvp in _constraints) { IDispatcherValueConstraint constraint; if (kvp.Value.Count == 1) { constraint = kvp.Value[0]; } else { constraint = new CompositeDispatcherValueConstraint(kvp.Value.ToArray()); } if (_optionalParameters.Contains(kvp.Key)) { var optionalConstraint = new OptionalDispatcherValueConstraint(constraint); constraints.Add(kvp.Key, optionalConstraint); } else { constraints.Add(kvp.Key, constraint); } } return(constraints); }
public void CompositeRouteConstraint_Match_CallsMatchOnInnerConstraints( bool inner1Result, bool inner2Result, bool expected) { // Arrange var inner1 = MockConstraintWithResult(inner1Result); var inner2 = MockConstraintWithResult(inner2Result); // Act var constraint = new CompositeDispatcherValueConstraint(new[] { inner1.Object, inner2.Object }); var actual = TestConstraint(constraint, null); // Assert Assert.Equal(expected, actual); }