public void GivenNoRegistrationThenTheTransformationShouldReturnOriginalExpression()
        {
            var query    = new TestQueryableWrapper();
            var provider = new QueryInterceptingProvider <IdType>(query);
            var target   = provider.Execute(Expression.Constant(2));

            Assert.IsType <ConstantExpression>(target);
            Assert.Equal(2, (target as ConstantExpression).Value);
        }
        public void GivenExpressionWhenExecuteCalledThenShouldTransformExpressionAndCallSourceProvider()
        {
            var query    = new TestQueryableWrapper();
            var provider = new QueryInterceptingProvider <IdType>(query);

            provider.RegisterInterceptor(e => Expression.Constant(1));
            var target = provider.Execute(Expression.Constant(2));

            Assert.IsType <ConstantExpression>(target);
            Assert.Equal(1, (target as ConstantExpression).Value);
        }
        public void GivenRegisteredGenericTypeWhenSameGenericTypeRegisteredWithThenShouldReplaceImplementation()
        {
            var source = new Services();

            source.RegisterServices(register =>
                                    register.RegisterGeneric(typeof(IQueryHost <,>), typeof(QueryHost <,>))
                                    .RegisterGeneric(typeof(IQueryHost <,>), typeof(DerivedQueryHost <,>)));
            var sourceQuery = new List <string>().AsQueryable();
            var provider    = new QueryInterceptingProvider <string>(sourceQuery);

            Assert.NotNull(source.GetService <IQueryHost <string, ICustomQueryProvider <string> > >(
                               sourceQuery.Expression, provider) as DerivedQueryHost <string, ICustomQueryProvider <string> >);
        }
Ejemplo n.º 4
0
        public void DefaultQueryHostIsQueryHost()
        {
            ServiceHost.Reset();
            var query    = new List <string>().AsQueryable();
            var provider = new QueryInterceptingProvider <string>(query);
            var target   = ServiceHost.GetService <IQueryHost <string, ICustomQueryProvider <string> > >(
                query.Expression, provider);

            Assert.NotNull(target);
            Assert.IsType <QueryHost <string, ICustomQueryProvider <string> > >(target);
            Assert.Same(query.Expression, target.Expression);
            Assert.Same(provider, target.CustomProvider);
            ServiceHost.Reset();
        }
        public void GivenGenericRegistrationWhenGetServiceCalledThenShouldImplementType()
        {
            var source = new Services();

            source.RegisterServices(registration =>
                                    registration.RegisterGeneric(typeof(IQueryHost <,>), typeof(QueryHost <,>)));
            var query    = new List <IdType>().AsQueryable();
            var provider = new QueryInterceptingProvider <IdType>(query);
            var target   = source.GetService <IQueryHost <IdType, ICustomQueryProvider <IdType> > >(
                query.Expression, provider);

            Assert.NotNull(target);
            Assert.Same(query.Expression, target.Expression);
            Assert.Same(target.CustomProvider, provider);
        }
        public void GivenRegistrationWhenChildProvidersExistThenRegistrationShouldBePassedToChildren()
        {
            var list = new List <IdType> {
                new IdType(), new IdType(), new IdType()
            };
            var query     = list.AsQueryable().Take(1);
            var swapQuery = list.AsQueryable().Skip(1).Take(1).Select(i => Tuple.Create(i.Id, i.IdVal));
            var provider  = new QueryInterceptingProvider <IdType>(query);
            var host      = new QueryHost <IdType, QueryInterceptingProvider <IdType> >(query.Expression, provider);
            // force resolution of a different type
            var notIntercepted = host.Select(i => Tuple.Create(i.Id, i.IdVal)).ToList();

            // now register
            provider.RegisterInterceptor(e => swapQuery.Expression);
            var intercepted = host.Select(i => Tuple.Create(i.Id, i.IdVal)).ToList();

            Assert.Single(intercepted);
            Assert.Equal(list[1].Id, intercepted[0].Item1);
        }