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);
        }
Exemple #2
0
        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);
        }
Exemple #8
0
        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();
        }
Exemple #9
0
        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));
        }
Exemple #10
0
        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);