public void TryResolve_WithNoBindings_ReturnsNoValue() { var symbol = new Symbol(); var source = new ExodataBindingModule(); var resolver = new ExodataResolver(new[] { source }); Maybe<int> value = resolver.TryResolve(ExodataRequest.Create<int, object, object>(symbol, Maybe<object>.NoValue, Maybe<object>.NoValue, null)); Assert.AreEqual(Maybe<int>.NoValue, value); }
public void TryResolve_WithNonAmbiguousBindingSelection_YieldsValue() { var symbol = new Symbol(); var source = new ExodataBindingModule(); source.Bind(symbol, 42); var resolver = new ExodataResolver(new[] { source }); Maybe<int> result = resolver.TryResolve(ExodataRequest.Create<int, object, object>(symbol, Maybe<object>.NoValue, Maybe<object>.NoValue, null)); Assert.AreEqual(42, result.Value); }
public void TryResolve_WithAmbiguousBindingSelection_ThrowsAmbiguousExodataBindingsException() { var symbol = new Symbol(); var source = new ExodataBindingModule(); source.Bind(symbol, 42); source.Bind(symbol, 42); var resolver = new ExodataResolver(new[] { source }); Maybe<int> result = resolver.TryResolve(ExodataRequest.Create<int, object, object>(symbol, Maybe<object>.NoValue, Maybe<object>.NoValue, null)); var exception = Assert.Throws<AmbiguousExodataBindingsException>(() => { var x = result.HasValue; }); Assert.IsNotNull(exception); Assert.AreEqual(2, exception.Bindings.Count()); }