public void Should_not_throw_from_ctor_when_wrapped_result_contains_errors() { var result = SettingsBindingResult.Error <Implementation>("error"); var wrappedResult = new SettingsBindingResultWrapper <IAbstraction, Implementation>(result); wrappedResult.Errors.Should().Equal(result.Errors); }
public void TestSetup() { innerBinder = Substitute.For <ISafeSettingsBinder <int> >(); innerBinder.Bind(Arg.Any <ISettingsNode>()).Returns( callInfo => callInfo.Arg <ISettingsNode>()?.Value == "42" ? SettingsBindingResult.Success(42) : SettingsBindingResult.Error <int>(":(")); binder = new NullableBinder <int>(innerBinder); }
public void TestSetup() { var boolBinder = Substitute.For <ISafeSettingsBinder <bool> >(); boolBinder.Bind(Arg.Any <ISettingsNode>()) .Returns(callInfo => (callInfo.Arg <ISettingsNode>() as ValueNode)?.Value == "true" ? SettingsBindingResult.Success(true) : SettingsBindingResult.Error <bool>(":(")); binder = new ListBinder <bool>(boolBinder); }
public void TestSetup() { var boolBinder = Substitute.For <ISafeSettingsBinder <object> >(); boolBinder.Bind(Arg.Is <ISettingsNode>(n => n is ValueNode && ((ValueNode)n).Value == "true")) .Returns(SettingsBindingResult.Success <object>(true)); boolBinder.ReturnsForAll(_ => SettingsBindingResult.Error <object>(":(")); provider = Substitute.For <ISettingsBinderProvider>(); provider.CreateFor(typeof(bool)).Returns(boolBinder); }
public void Should_correctly_handle_null_value_values() { var valueBinder = Substitute.For <ISafeSettingsBinder <string> >(); valueBinder.Bind(Arg.Any <ISettingsNode>()).Returns(SettingsBindingResult.Success("default")); var settings = Array(Value(null)); new ListBinder <string>(valueBinder) .Bind(settings).Value.Single().Should().BeNull(); }
private SettingsBindingResult <TKey> BindKey(string key) { var node = new ValueNode(key); if (node.IsNullValue(keyBinder)) { return(SettingsBindingResult.DictionaryKeyIsNull <TKey>()); } return(keyBinder.Bind(node)); }
public void TestSetup() { stringBinder = Substitute.For <ISafeSettingsBinder <string> >(); stringBinder.Bind(Arg.Any <ISettingsNode>()) .Returns(callInfo => callInfo.Arg <ISettingsNode>()?.Value != "BAD" ? SettingsBindingResult.Success(callInfo.Arg <ISettingsNode>()?.Value) : SettingsBindingResult.Error <string>(":(")); binder = new SetBinder <string>(stringBinder); }
public void Should_correctly_handle_null_value_values() { var valueBinder = Substitute.For <ISafeSettingsBinder <string> >(); valueBinder.Bind(Arg.Any <ISettingsNode>()).Returns(SettingsBindingResult.Success("default")); var settings = Object(Value("xx", null)); new DictionaryBinder <string, string>(stringBinder, valueBinder) .Bind(settings).Value["xx"].Should().BeNull(); }
public SettingsBindingResult <T> Bind(ISettingsNode settings) { if (settings.IsNullOrMissing()) { return(SettingsBindingResult.Success(default(T))); } if (Enum.TryParse <T>(settings.Value, true, out var result)) { return(SettingsBindingResult.Success(result)); } return(SettingsBindingResult.ParsingError <T>(settings.Value)); }
public void TestSetup() { stringBinder = Substitute.For <ISafeSettingsBinder <string> >(); stringBinder.Bind(Arg.Any <ISettingsNode>()) .Returns(callInfo => SettingsBindingResult.Success(callInfo.Arg <ISettingsNode>().Value)); var boolBinder = Substitute.For <ISafeSettingsBinder <bool> >(); boolBinder.Bind(Arg.Any <ISettingsNode>()) .Returns(callInfo => (callInfo.Arg <ISettingsNode>() as ValueNode)?.Value == "true" ? SettingsBindingResult.Success(true) : SettingsBindingResult.Error <bool>(":(")); binder = new DictionaryBinder <string, bool>(stringBinder, boolBinder); }
public SettingsBindingResult <Dictionary <TKey, TValue> > Bind(ISettingsNode settings) { if (settings.IsNullOrMissing()) { return(SettingsBindingResult.Success(new Dictionary <TKey, TValue>())); } settings = settings.WrapIfNeeded(); if (!(settings is ArrayNode) && !(settings is ObjectNode)) { return(SettingsBindingResult.NodeTypeMismatch <Dictionary <TKey, TValue> >(settings)); } return(SettingsBindingResult.Catch(() => BindInternal(settings))); }
private SettingsBindingResult <Dictionary <TKey, TValue> > BindInternal(ISettingsNode settings) { var results = settings.Children.Select( n => (index: n.Name, key: BindKey(n.Name), value: valueBinder.BindOrDefault(n))) .ToList(); var errors = results.SelectMany( p => p.key.Errors.ForIndex(p.index).Concat(p.value.Errors.ForIndex(p.index))) .ToList(); if (errors.Any()) { return(SettingsBindingResult.Errors <Dictionary <TKey, TValue> >(errors)); } return(SettingsBindingResult.Success(results.ToDictionary(p => p.key.Value, p => p.value.Value))); }
public SettingsBindingResult <T> Bind(ISettingsNode rawSettings) { var tryParseMethod = ParseMethodFinder.FindTryParseMethod(typeof(T)); if (tryParseMethod != null) { return(new PrimitiveBinder <T>(new TryParseMethodParser(tryParseMethod)).Bind(rawSettings)); } var parseMethod = ParseMethodFinder.FindParseMethod(typeof(T)); if (parseMethod != null) { return(new PrimitiveBinder <T>(new ParseMethodParser(parseMethod)).Bind(rawSettings)); } return(SettingsBindingResult.Error <T>($"Failed to find a '{nameof(int.TryParse)}' or '{nameof(int.Parse)}' method on '{typeof(T)}' type.")); }
public SettingsBindingResultWrapper(SettingsBindingResult <TImplementation> implResult) : base(implResult.Errors.Count == 0 ? implResult.Value : default, implResult.Errors) { }
public SettingsBindingResult <ISettingsNode> Bind(ISettingsNode rawSettings) => SettingsBindingResult.Success(rawSettings);