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());
        }