internal static string SwitchCaseToString(SwitchCase node)
        {
#pragma warning disable SA1405  // Debug.Assert should provide message text
            Debug.Assert(node != null);
#pragma warning restore SA1405  // Debug.Assert should provide message text
            ExpressionStringBuilder esb = new ExpressionStringBuilder();
#pragma warning disable IDE0058 // Expression value is never used
#pragma warning disable CS8604  // Possible null reference argument.
            esb.VisitSwitchCase(node);
#pragma warning restore CS8604  // Possible null reference argument.
#pragma warning restore IDE0058 // Expression value is never used
            return(esb.ToString());
        }
Exemple #2
0
        internal static string ToStringAwesomely(this object value)
        {
            if (value == null)
            {
                return("null");
            }

            if (value is string)
            {
                return("\"" + value + "\"");
            }

            if (value is IEnumerable)
            {
                var objects = value.As <IEnumerable>().Cast <object>();
                var inspect = "[" + objects.Select(o => o.ToStringAwesomely()).CommaDelimited() + "]";
                if (inspect == "[]" && value.ToString() != value.GetType().FullName)
                {
                    inspect += " (" + value + ")";
                }
                return(inspect);
            }

            if (value is Enum)
            {
                return(value.As <Enum>().ToStringAwesomely());
            }

            if (value is ConstantExpression)
            {
                return(value.As <ConstantExpression>().Value.ToStringAwesomely());
            }

            if (value is MemberExpression)
            {
                var member   = value.As <MemberExpression>();
                var constant = member.Expression.As <ConstantExpression>();
                var info     = member.Member.As <FieldInfo>();
                return(info.GetValue(constant.Value).ToStringAwesomely());
            }

            if (value is BinaryExpression)
            {
                return(ExpressionStringBuilder.ToString(value.As <BinaryExpression>()));
            }

            return(value == null ? "null" : value.ToString());
        }
Exemple #3
0
        /// <summary>
        /// Perform the actual generation
        /// </summary>
        public static string PruneToFailureLinqQueryAsStringToWorkableCode(
            LambdaExpression expr,
            DocumentConvention convention,
            string querySource, bool translateIdentityProperty)
        {
            if (expr == null)
            {
                return(null);
            }
            var expression = expr.Body;

            switch (expression.NodeType)
            {
            case ExpressionType.ConvertChecked:
            case ExpressionType.Convert:
                expression = ((UnaryExpression)expression).Operand;
                break;
            }

#if !NET_3_5
            var linqQuery = ExpressionStringBuilder.ExpressionToString(convention, translateIdentityProperty, expression);
#else
            var linqQuery = expression.ToString();
#endif

            var querySourceName = expr.Parameters.First(x => x.Type != typeof(IClientSideDatabase)).Name;

            if (linqQuery.StartsWith(querySourceName))
            {
                linqQuery = querySource + linqQuery.Substring(querySourceName.Length);
            }
            else if (linqQuery.StartsWith("(" + querySourceName + ")"))
            {
                linqQuery = querySource + linqQuery.Substring(querySourceName.Length + 2);
            }
            else
            {
                throw new InvalidOperationException("Canot understand how to parse the query");
            }

            linqQuery = ReplaceAnonymousTypeBraces(linqQuery);
            linqQuery = Regex.Replace(linqQuery, @"new ((VB\$)|(<>))[\w_]+`\d+", "new "); // remove anonymous types
            linqQuery = Regex.Replace(linqQuery, @"<>([a-z])_", "__$1_");                 // replace <>h_ in transperant identifiers
            const string pattern = @"(\.Where\(|\.Select\(|\.GroupBy\(|\.SelectMany)";
            linqQuery = Regex.Replace(linqQuery, pattern, "\r\n\t$1");                    // formatting
            return(linqQuery);
        }
Exemple #4
0
        public void BuildQuery_SetValueFlagToTrue_IfPathHasValueSegment(string path, string expectedQuery)
        {
            var                  model        = ODataPathQueryModel.GetModel();
            var                  pathHandler  = new DefaultODataPathHandler();
            var                  odataPath    = pathHandler.Parse(model, "http://any/", path);
            IQueryable           source       = Array.CreateInstance(typeof(ODataPathQuery_Customer), 0).AsQueryable();
            var                  queryBuilder = new ODataPathQueryBuilder(source, odataPath);
            ODataPathQueryResult result       = queryBuilder.BuildQuery();

            string queryExpression = ExpressionStringBuilder.ToString(result.Result.Expression);

            queryExpression = RemoveNameSpace(queryExpression);

            Assert.Equal(expectedQuery, queryExpression);
            Assert.True(result.HasValueSegment);
            Assert.False(result.HasCountSegment);
        }
        private List <SelectListItem> PopulateTaskSelector(int selectedValue)
        {
            var items = new List <SelectListItem>();

            for (var i = 0; i < TaskExpressions.Length; i++)
            {
                items.Add(
                    new SelectListItem {
                    Text     = ExpressionStringBuilder.ToString(TaskExpressions[i]),
                    Value    = i.ToString(),
                    Selected = (i == selectedValue)
                }
                    );
            }

            return(items);
        }
        public void ApplyTo_DoesnotPickDefaultOrder_IfOrderByIsPresent(string oDataQuery, string expectedExpression)
        {
            var model = new ODataModelBuilder().Add_Customer_EntityType().Add_Customers_EntitySet().GetEdmModel();

            var message = new HttpRequestMessage(
                HttpMethod.Get,
                new Uri("http://server/service/Customers?" + oDataQuery)
                );

            var        options    = new ODataQueryOptions(new ODataQueryContext(model, typeof(Customer)), message);
            IQueryable finalQuery = options.ApplyTo(Customers);

            string queryExpression = ExpressionStringBuilder.ToString(finalQuery.Expression);

            queryExpression = queryExpression.Substring(queryExpression.IndexOf("OrderBy"));

            Assert.Equal(queryExpression, expectedExpression);
        }
        /// <summary>
        /// Perform the actual generation
        /// </summary>
        public static string PruneToFailureLinqQueryAsStringToWorkableCode <TQueryRoot, TReduceResult>(
            LambdaExpression expr,
            DocumentConventions conventions,
            string querySource, bool translateIdentityProperty)
        {
            if (expr == null)
            {
                return(null);
            }
            var expression = expr.Body;

            string queryRootName = null;
            bool   isReduce      = false;

            switch (expression.NodeType)
            {
            case ExpressionType.ConvertChecked:
            case ExpressionType.Convert:
                expression = ((UnaryExpression)expression).Operand;
                break;

            case ExpressionType.Call:
                var methodCallExpression = GetFirstMethodCallExpression(expression);
                switch (methodCallExpression.Method.Name)
                {
                case "Select":
                    queryRootName = TryCaptureQueryRoot(methodCallExpression.Arguments.FirstOrDefault(x => x.NodeType == ExpressionType.Call || x.NodeType == ExpressionType.Lambda) ?? methodCallExpression.Arguments[0]);
                    break;

                case "SelectMany":
                    queryRootName = TryCaptureQueryRoot(methodCallExpression.Arguments[1]);
                    break;

                case "GroupBy":
                    isReduce = true;
                    break;
                }
                break;
            }

            var linqQuery = ExpressionStringBuilder.ExpressionToString(conventions, translateIdentityProperty, typeof(TQueryRoot), queryRootName, expression, isReduce);

            return(FormatLinqQuery(expr, querySource, linqQuery));
        }
Exemple #8
0
        public void CreateArgumentExpression_DictionaryInterfaceGiven_ShouldReturnDictionaryCreationExpression()
        {
            var decimalConstantExpression = Expression.Constant(5m);

            valueExpressionProvider.Stub(m => m.CreateValueExpression(typeof(decimal)))
            .IgnoreArguments()
            .Return(decimalConstantExpression);
            var stringConstantExpression = Expression.Constant("abc");

            valueExpressionProvider.Stub(m => m.CreateValueExpression(typeof(string)))
            .IgnoreArguments()
            .Return(stringConstantExpression);

            var resultExpression   = testee.CreateArgumentExpression(typeof(IDictionary <string, decimal>));
            var expressionAsString = ExpressionStringBuilder.ExpressionToString(resultExpression);

            expressionAsString.Should().Be(@"new Dictionary<string, decimal>()");
            //expressionAsString.Should().Be(@"new Dictionary<string, decimal>(new [] {{""abc"",5},{""abc"",5}})");
        }
        public ModelTest <TModel> WithModel <TModel>(Expression <Func <TModel, bool> > predicate) where TModel : class
        {
            var test = WithModel <TModel>();

            var model = _viewResult.Model as TModel;

            var modelLex          = Json.Encode(model);
            var predicateLex      = ExpressionStringBuilder.ToString(predicate);
            var compiledPredicate = predicate.Compile();

            if (!compiledPredicate(model))
            {
                throw new ViewResultModelAssertionException(string.Format(
                                                                "Expected view model {0} to pass the given condition ({1}), but it failed.",
                                                                modelLex,
                                                                predicateLex));
            }

            return(test);
        }
        public void ApplyTo_Picks_DefaultOrder(string oDataQuery, Type elementType, string expectedExpression)
        {
            IQueryable query        = Array.CreateInstance(elementType, 0).AsQueryable();
            var        modelBuilder = ODataModelBuilderMocks.GetModelBuilderMock <ODataConventionModelBuilder>();

            modelBuilder.AddEntitySet("entityset", modelBuilder.AddEntityType(elementType));
            var model = modelBuilder.GetEdmModel();

            var message = new HttpRequestMessage(
                HttpMethod.Get,
                new Uri("http://server/service/entityset?" + oDataQuery)
                );

            var        options    = new ODataQueryOptions(new ODataQueryContext(model, elementType), message);
            IQueryable finalQuery = options.ApplyTo(query);

            string queryExpression = ExpressionStringBuilder.ToString(finalQuery.Expression);

            queryExpression = queryExpression.Substring(queryExpression.IndexOf("OrderBy"));

            Assert.Equal(queryExpression, expectedExpression);
        }
        public void ApplyTo_Builds_Default_OrderBy_No_Keys(string oDataQuery, bool ensureStableOrdering, string expectedExpression)
        {
            var model = ODataModelBuilderMocks.GetModelBuilderMock <ODataModelBuilder>().Add_Customer_No_Keys_EntityType().Add_Customers_No_Keys_EntitySet().GetEdmModel();

            var message = new HttpRequestMessage(
                HttpMethod.Get,
                new Uri("http://server/service/Customers?" + oDataQuery)
                );

            var options = new ODataQueryOptions(new ODataQueryContext(model, typeof(Customer)), message);
            ODataQuerySettings querySettings = new ODataQuerySettings
            {
                EnsureStableOrdering = ensureStableOrdering
            };
            IQueryable finalQuery = options.ApplyTo(new Customer[0].AsQueryable(), querySettings);

            string queryExpression = ExpressionStringBuilder.ToString(finalQuery.Expression);

            queryExpression = queryExpression.Substring(queryExpression.IndexOf("]") + 2);

            Assert.Equal(queryExpression, expectedExpression);
        }
Exemple #12
0
        public IActionResult Processing()
        {
            var context = Hosting.GetHttpContext();
            int selectedValue;

            int.TryParse(context.Request["taskSelector"], out selectedValue);

            var model = new ProcessingViewModel
            {
                ExampleFileSelector = new ExampleFileSelector
                {
                    Id          = "exampleFileSelector",
                    InitialFile = "JPG Image.jpg",
                    FormWrapped = false
                },
                TaskSelectList = PopulateTaskSelector(selectedValue)
            };

            model.ImagePath = model.ExampleFileSelector.SelectedFile;

            var expression = TaskExpressions[selectedValue];
            var lambda     = expression.Compile();

            model.TaskAction = task =>
            {
                task.ResizeWidth(400);
                lambda(task);
            };

            model.CodeString = string.Format(
                "@this.ImageTag(\"{0}\", {1})",
                model.ExampleFileSelector.SelectedFile.FileName,
                ExpressionStringBuilder.ToString(expression)
                );

            return(View(model));
        }
Exemple #13
0
        protected void Page_Load(object sender, EventArgs e)
        {
            ImagePath = exampleFileSelector.SelectedFile;

            if (!IsPostBack)
            {
                PopulateTaskSelector();
            }

            var expression = TaskExpressions[int.Parse(TaskSelector.SelectedValue)];
            var lambda     = expression.Compile();

            TaskAction = task =>
            {
                task.ResizeWidth(400);
                lambda(task);
            };

            CodeString = string.Format(
                "<%=this.ImageTag(\"{0}\", {1})%>",
                exampleFileSelector.SelectedFile.FileName,
                ExpressionStringBuilder.ToString(expression)
                );
        }
Exemple #14
0
 public static string GetExpressionString(Expression expression)
 {
     var builder = new ExpressionStringBuilder();
     builder.Visit(expression);
     return builder.stringBuilder.ToString();
 }
Exemple #15
0
 /// <summary>
 /// Creates a <see cref="String"/> representation of the node.
 /// </summary>
 /// <returns>A <see cref="String"/> representation of the node.</returns>
 public override string ToString()
 {
     return(ExpressionStringBuilder.ElementInitBindingToString(this));
 }
Exemple #16
0
 /// <summary>
 /// Returns a <see cref="String"/> that represents the current <see cref="Object"/>.
 /// </summary>
 /// <returns>A <see cref="String"/> that represents the current <see cref="Object"/>. </returns>
 public override string ToString()
 {
     return(ExpressionStringBuilder.CatchBlockToString(this));
 }
Exemple #17
0
 public void ElementInitBindingToString_NodeNullValueGiven_ShouldThrowArgumentNullException()
 {
     ExpressionStringBuilder.ElementInitBindingToString(null);
 }
 private void VerifyExpressionWithTruncate(Expression <Action> func, string expression)
 {
     ExpressionStringBuilder.ToString(func, trimLongArgumentList: true).ShouldBe(expression);
 }
 public ExpressionDefinition(Expression expression, NodeType nodeType, string nodeName, string pathOverride = null)
 {
     NodeType = nodeType;
     NodeName = nodeName;
     FullPath = pathOverride ?? ExpressionStringBuilder.ToString(expression);
 }
 void VerifyExpression(Expression <Action> func, string expression)
 {
     ExpressionStringBuilder.ToString(func).ShouldBe(expression);
 }
 void VerifyExpression <T>(Expression <Func <T> > func, string expression)
 {
     ExpressionStringBuilder.ToString(func).ShouldBe(expression);
 }
Exemple #22
0
 /// <summary>
 /// Produces string representation of <see cref="Expression"/>.
 /// </summary>
 /// <param name="expression">The expression to convert.</param>
 /// <returns>Returns a string representation of <see cref="Expression"/>.</returns>
 public string ExpressionToString(Expression expression)
 {
     return(ExpressionStringBuilder.ExpressionToString(expression));
 }
Exemple #23
0
 /// <summary>
 /// Returns a <see cref="String"/> that represents the current <see cref="Object"/>.
 /// </summary>
 /// <returns>A <see cref="String"/> that represents the current <see cref="Object"/>. </returns>
 public override string ToString()
 {
     return(ExpressionStringBuilder.MemberBindingToString(this));
 }
Exemple #24
0
 public void CatchBlockToString_NodeNullValueGiven_ShouldThrowArgumentNullException()
 {
     ExpressionStringBuilder.CatchBlockToString(null);
 }
Exemple #25
0
 /// <summary>
 /// Creates a <see cref="String"/> representation of the Expression.
 /// </summary>
 /// <returns>A <see cref="String"/> representation of the Expression.</returns>
 public override string ToString()
 {
     return(ExpressionStringBuilder.ExpressionToString(this));
 }
Exemple #26
0
 public void SwitchCaseToString_NodeNullValueGiven_ShouldThrowArgumentNullException()
 {
     ExpressionStringBuilder.SwitchCaseToString(null);
 }
Exemple #27
0
 /// <summary>
 /// Returns a <see cref="String"/> that represents the current <see cref="Object"/>.
 /// </summary>
 /// <returns>A <see cref="String"/> that represents the current <see cref="Object"/>. </returns>
 public override string ToString()
 {
     return(ExpressionStringBuilder.SwitchCaseToString(this));
 }
 private void Same(Expression <Action> expression, string str)
 {
     Xunit.Assert.Equal(ExpressionStringBuilder.ExpressionToString(expression.Body), str);
 }