コード例 #1
0
        /// <summary>
        /// Verify the passed query tree.
        /// </summary>
        /// <param name="expression">The query tree which will be verified</param>
        public virtual void Verify(QueryExpression expression)
        {
            ExceptionUtilities.CheckAllRequiredDependencies(this);
            ExceptionUtilities.Assert(this.IsAsync, "this verifier can only run async");

            this.ThrowSkippedExceptionIfQueryExpressionNotSupported(expression);

            var resolvedQuery      = this.LinqQueryResolver.Resolve(expression);
            var dataServiceContext = this.DataServiceContextCreator.CreateContext(this.DataServiceContextScope, this.workspace.ContextType, this.workspace.ServiceUri);

            if (this.IsExecuteURI)
            {
                // TODO: update this verifier to call ExecuteUriAndCompare if ExecuteURI test parameter is set to true
            }
            else
            {
                ClientQueryGenerator queryGenerator      = new ClientQueryGenerator(new CSharpGenericTypeBuilder());
                DataServiceContext   clientContext       = dataServiceContext.Product as DataServiceContext;
                CoreLinq.Expression  queryLinqExpression = queryGenerator.Generate(resolvedQuery, clientContext);
                IQueryProvider       queryProvider       = clientContext.CreateQuery <int>("Set").Provider as IQueryProvider;
                DataServiceQuery     dataServiceQuery    = queryProvider.CreateQuery(queryLinqExpression) as DataServiceQuery;

                this.ResultComparer.EnqueueNextQuery(resolvedQuery);
                AsyncExecutionContext.EnqueueAsynchronousAction((queryContinuation) =>
                {
                    this.Log.WriteLine(LogLevel.Info, dataServiceQuery.ToString());
                    QueryValue baselineValue = this.GetBaselineValue(resolvedQuery);
                    DataServiceProtocolVersion maxProtocolVersion = this.workspace.ConceptualModel.GetMaxProtocolVersion();
#if  WINDOWS_PHONE
                    DataServiceProtocolVersion maxClientProtocolVersion = DataServiceProtocolVersion.V4;
#else
                    DataServiceProtocolVersion maxClientProtocolVersion = ((DSC.DataServiceProtocolVersion)dataServiceContext.MaxProtocolVersion.Product).ToTestEnum();
#endif
                    // Calculate version errors
                    ExpectedClientErrorBaseline clientError = this.LinqToAstoriaErrorCalculator.CalculateExpectedClientVersionError(resolvedQuery, true, maxClientProtocolVersion, maxProtocolVersion);
                    if (clientError != null)
                    {
                        this.Log.WriteLine(LogLevel.Info, "Expected client exception: " + clientError.ExpectedExceptionType.ToString());
                    }

                    Type queryType = dataServiceQuery.ElementType;
                    MethodInfo genericExecuteMethod = this.ResultComparer.GetType().GetMethod("ExecuteAndCompare").MakeGenericMethod(queryType);
                    genericExecuteMethod.Invoke(this.ResultComparer, new object[] { queryContinuation, this.IsAsync, dataServiceQuery, baselineValue, clientContext, clientError });
                });
            }
        }
コード例 #2
0
        /// <summary>
        /// Verify the passed query tree.
        /// </summary>
        /// <param name="expression">The query tree which will be verified</param>
        public virtual void Verify(QueryExpression expression)
        {
            ExceptionUtilities.CheckAllRequiredDependencies(this);
            ExceptionUtilities.Assert(this.IsAsync, "this verifier can only run async");

            this.ThrowSkippedExceptionIfQueryExpressionNotSupported(expression);

            var resolvedQuery = this.LinqQueryResolver.Resolve(expression);
            var dataServiceContext = this.DataServiceContextCreator.CreateContext(this.DataServiceContextScope, this.workspace.ContextType, this.workspace.ServiceUri);

            if (this.IsExecuteURI)
            {
                // TODO: update this verifier to call ExecuteUriAndCompare if ExecuteURI test parameter is set to true
            }
            else
            {
                ClientQueryGenerator queryGenerator = new ClientQueryGenerator(new CSharpGenericTypeBuilder());
                DataServiceContext clientContext = dataServiceContext.Product as DataServiceContext;
                CoreLinq.Expression queryLinqExpression = queryGenerator.Generate(resolvedQuery, clientContext);
                IQueryProvider queryProvider = clientContext.CreateQuery<int>("Set").Provider as IQueryProvider;
                DataServiceQuery dataServiceQuery = queryProvider.CreateQuery(queryLinqExpression) as DataServiceQuery;

                this.ResultComparer.EnqueueNextQuery(resolvedQuery);
                AsyncExecutionContext.EnqueueAsynchronousAction((queryContinuation) =>
                {
                    this.Log.WriteLine(LogLevel.Info, dataServiceQuery.ToString());
                    QueryValue baselineValue = this.GetBaselineValue(resolvedQuery);
                    DataServiceProtocolVersion maxProtocolVersion = this.workspace.ConceptualModel.GetMaxProtocolVersion();
#if  WINDOWS_PHONE
                DataServiceProtocolVersion maxClientProtocolVersion = DataServiceProtocolVersion.V4;
#else
                    DataServiceProtocolVersion maxClientProtocolVersion = ((DSC.DataServiceProtocolVersion)dataServiceContext.MaxProtocolVersion.Product).ToTestEnum();
#endif
                    // Calculate version errors
                    ExpectedClientErrorBaseline clientError = this.LinqToAstoriaErrorCalculator.CalculateExpectedClientVersionError(resolvedQuery, true, maxClientProtocolVersion, maxProtocolVersion);
                    if (clientError != null)
                    {
                        this.Log.WriteLine(LogLevel.Info, "Expected client exception: " + clientError.ExpectedExceptionType.ToString());
                    }

                    Type queryType = dataServiceQuery.ElementType;
                    MethodInfo genericExecuteMethod = this.ResultComparer.GetType().GetMethod("ExecuteAndCompare").MakeGenericMethod(queryType);
                    genericExecuteMethod.Invoke(this.ResultComparer, new object[] { queryContinuation, this.IsAsync, dataServiceQuery, baselineValue, clientContext, clientError });
                });
            }
        }