public void Get_WithValidArguments_ReturnsExodataResolverResults()
        {
            var maxLength = new ExodataDeclaration<int>(7);

            var resolver = new StandardExodataResolver();
            resolver.Bind(maxLength)
                .For<string>()
                .To(42);

            ExodataDeclaration.SetResolver(resolver);

            var value = maxLength.For<string>();
            Assert.AreEqual(42, value);
        }
        public void Get_WithNoExodataResolver_ReturnsDefault()
        {
            var maxLength = new ExodataDeclaration<int>(7);

            var value = maxLength.For<string>();
            Assert.AreEqual(7, value);
        }
 public void Get_WhenWithNoDefault_ThrowsException()
 {
     var maxLength = new ExodataDeclaration<int>();
     Assert.Throws<InvalidOperationException>(() => maxLength.Get());
 }
        public void Get_OnGenericExodataWithDeclarationSubjectAndMember_ProvidesAllArgumentsToResolver()
        {
            var maxLength = new ExodataDeclaration<int>(7);
            string subject = "Hello, World!";

            Expression<Func<string, object>> expression = x => x.Length;
            var member = expression.ExtractMemberInfoForExodata<string>();

            var resolver = MockRepository.GenerateMock<IExodataResolver>();
            resolver.Expect(x => x.TryResolve<int, object, string>(null))
                .Callback<IExodataRequest<int, object, string>>(r => r.Symbol == maxLength &&
                                                        r.Context == Maybe<object>.NoValue &&
                                                        r.Subject == subject &&
                                                        r.Member == member)
                .Return(42.ToMaybe());

            ExodataDeclaration.SetResolver(resolver);

            maxLength.For(subject, expression);
            resolver.VerifyAllExpectations();
        }
        public void Get_OnGenericExodataWithDeclaration_ProvidesAllArgumentsToResolver()
        {
            var maxLength = new ExodataDeclaration<int>(7);

            var resolver = MockRepository.GenerateMock<IExodataResolver>();
            resolver.Expect(x => x.TryResolve<int, object, string>(null))
                .Callback<IExodataRequest<int, object, string>>(r => r.Symbol == maxLength &&
                                                                     r.Context == Maybe<object>.NoValue &&
                                                                     r.Subject == Maybe<string>.NoValue &&
                                                                     r.Member == null)
                .Return(42.ToMaybe());

            ExodataDeclaration.SetResolver(resolver);

            maxLength.For<string>();
            resolver.VerifyAllExpectations();
        }
        public void Get_WithNoExodataResolver_UsesResolverFromIoc()
        {
            var maxLength = new ExodataDeclaration<int>(7);

            var exodataResolver = new StandardExodataResolver();
            exodataResolver.Bind(maxLength)
                .For<string>()
                .To(42);

            Ioc.SetDependencyResolver(new DependencyResolver(symbol => symbol.ToMaybe().OfType<IDependencySymbol>().Where(x => x.DependencyType == typeof(IExodataResolver)).Select(x => (object)exodataResolver)));

            var value = maxLength.For<string>();
            Assert.AreEqual(42, value);
        }