コード例 #1
0
 static string OutermostValue(ExpressionToCodeConfiguration config, StringifiedExpression node)
 {
     if (node.OptionalValue != null)
     {
         return(ObjectToCodeImpl.ExpressionValueAsCode(config, node.OptionalValue, 10));
     }
     foreach (var kid in node.Children)
     {
         if (!kid.IsConceptualChild)
         {
             var value = OutermostValue(config, kid);
             if (value != null)
             {
                 return(value);
             }
         }
     }
     foreach (var kid in node.Children)
     {
         if (kid.IsConceptualChild)
         {
             var value = OutermostValue(config, kid);
             if (value != null)
             {
                 return(value);
             }
         }
     }
     return(null);
 }
コード例 #2
0
        static void AppendTo(
            ExpressionToCodeConfiguration config,
            StringBuilder sb,
            List <SubExpressionInfo> nodeInfos,
            StringifiedExpression node,
            ref bool ignoreInitialSpace,
            bool showTopExpressionValue)
        {
            if (node.Text != null)
            {
                var trimmedText = ignoreInitialSpace ? node.Text.TrimStart() : node.Text;
                var pos0        = sb.Length;
                sb.Append(trimmedText);
                ignoreInitialSpace = node.Text.Any() && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
                if (showTopExpressionValue)
                {
                    var valueString = node.OptionalValue == null ? null : ObjectToCodeImpl.ExpressionValueAsCode(config, node.OptionalValue, 0);
                    if (valueString != null)
                    {
                        nodeInfos.Add(new SubExpressionInfo {
                            Location = pos0 + trimmedText.Length / 2, Value = valueString
                        });
                    }
                }
            }

            foreach (var kid in node.Children)
            {
                AppendTo(config, sb, nodeInfos, kid, ref ignoreInitialSpace, showTopExpressionValue || kid.IsConceptualChild);
            }
        }
コード例 #3
0
 StringifiedExpression(string text, StringifiedExpression[] children, Expression optionalValue, bool isConceptualChild)
 {
     Text = text;
     this.children = children;
     OptionalValue = optionalValue;
     IsConceptualChild = isConceptualChild;
 }
コード例 #4
0
 static void AppendTo(StringBuilder sb, ref bool ignoreInitialSpace, StringifiedExpression node)
 {
     if (node.Text != null) {
         sb.Append(ignoreInitialSpace ? node.Text.TrimStart() : node.Text);
         ignoreInitialSpace = node.Text.Any() && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
     } else {
         foreach (var kid in node.Children) {
             AppendTo(sb, ref ignoreInitialSpace, kid);
         }
     }
 }
 static void AppendNodeToStringBuilder(StringBuilder sb, StringifiedExpression node, ref bool ignoreInitialSpace)
 {
     if (node.Text != null) {
         var trimmedText = ignoreInitialSpace ? node.Text.TrimStart() : node.Text;
         sb.Append(trimmedText);
         ignoreInitialSpace = node.Text != "" && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
     } else {
         foreach (var kid in node.Children) {
             AppendNodeToStringBuilder(sb, kid, ref ignoreInitialSpace);
         }
     }
 }
コード例 #6
0
 static void AppendTo(StringBuilder sb, ref bool ignoreInitialSpace, StringifiedExpression node)
 {
     if (node.Text != null)
     {
         sb.Append(ignoreInitialSpace ? node.Text.TrimStart() : node.Text);
         ignoreInitialSpace = node.Text.Any() && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
     }
     else
     {
         foreach (var kid in node.Children)
         {
             AppendTo(sb, ref ignoreInitialSpace, kid);
         }
     }
 }
コード例 #7
0
 static void AppendNodeToStringBuilder(StringBuilder sb, StringifiedExpression node, ref bool ignoreInitialSpace)
 {
     if (node.Text != null)
     {
         var trimmedText = ignoreInitialSpace ? node.Text.TrimStart() : node.Text;
         sb.Append(trimmedText);
         ignoreInitialSpace = node.Text != "" && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
     }
     else
     {
         foreach (var kid in node.Children)
         {
             AppendNodeToStringBuilder(sb, kid, ref ignoreInitialSpace);
         }
     }
 }
 static void AppendNodeWithLimitedDepth(StringBuilder sb, StringifiedExpression node, ref bool ignoreInitialSpace, int unfoldToDepth)
 {
     if (node.Text != null) {
         var trimmedText = ignoreInitialSpace ? node.Text.TrimStart() : node.Text;
         sb.Append(trimmedText);
         ignoreInitialSpace = node.Text != "" && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
     } else {
         foreach (var kid in node.Children) {
             if (kid.IsConceptualChild && unfoldToDepth == 0) {
                 sb.Append("...");
                 ignoreInitialSpace = false;
             } else {
                 AppendNodeWithLimitedDepth(sb, kid, ref ignoreInitialSpace, unfoldToDepth - (kid.IsConceptualChild ? 1 : 0));
             }
         }
     }
 }
コード例 #9
0
 static void AppendTo(ExpressionToCodeConfiguration config, StringBuilder sb, List<SubExpressionInfo> nodeInfos, StringifiedExpression node, ref bool ignoreInitialSpace, bool showTopExpressionValue)
 {
     if (node.Text != null) {
         var trimmedText = ignoreInitialSpace ? node.Text.TrimStart() : node.Text;
         var pos0 = sb.Length;
         sb.Append(trimmedText);
         ignoreInitialSpace = node.Text.Any() && ExpressionToCode.ShouldIgnoreSpaceAfter(node.Text[node.Text.Length - 1]);
         if (showTopExpressionValue) {
             string valueString = node.OptionalValue == null ? null : ObjectToCodeImpl.ExpressionValueAsCode(config, node.OptionalValue);
             if (valueString != null) {
                 nodeInfos.Add(new SubExpressionInfo { Location = pos0 + trimmedText.Length / 2, Value = valueString });
             }
         }
     }
     foreach (var kid in node.Children) {
         AppendTo(config, sb, nodeInfos, kid, ref ignoreInitialSpace, showTopExpressionValue || kid.IsConceptualChild);
     }
 }
コード例 #10
0
            static void FindSubExpressionValues(
                ExpressionToCodeConfiguration config,
                StringifiedExpression node,
                StringifiedExpression subExprNode,
                List <SubExpressionValue> subExpressionValues,
                bool outerValueIsAssertionFailure)
            {
                if (!outerValueIsAssertionFailure && node.OptionalValue != null)
                {
                    var sb = new StringBuilder();
                    var ignoreInitialSpace = true;
                    var valueString        = ObjectToCodeImpl.ExpressionValueAsCode(config, node.OptionalValue, 10);
                    AppendNodeToStringBuilder(sb, subExprNode, ref ignoreInitialSpace);
                    var maxSize       = Math.Max(40, config.Value.MaximumValueLength ?? 200);
                    var subExprString = sb.Length <= maxSize
                        ? sb.ToString()
                        : sb.ToString(0, maxSize / 2 - 1) + "  …  " + sb.ToString(sb.Length - (maxSize / 2 - 1), maxSize / 2 - 1);

                    // ReSharper disable once ReplaceWithStringIsNullOrEmpty - for nullability analysis
                    if (valueString != null && valueString != "")
                    {
                        subExpressionValues.Add(new SubExpressionValue {
                            SubExpression = subExprString, ValueAsString = valueString
                        });
                    }
                }

                foreach (var kid in node.Children)
                {
                    if (!kid.IsConceptualChild)
                    {
                        FindSubExpressionValues(config, kid, subExprNode, subExpressionValues, outerValueIsAssertionFailure);
                    }
                }

                foreach (var kid in node.Children)
                {
                    if (kid.IsConceptualChild)
                    {
                        FindSubExpressionValues(config, kid, kid, subExpressionValues, false);
                    }
                }
            }
コード例 #11
0
            static void FindSubExpressionValues(
                ExpressionToCodeConfiguration config,
                StringifiedExpression node,
                StringifiedExpression subExprNode,
                List <SubExpressionValue> subExpressionValues,
                bool hideOutermostValue)
            {
                if (!hideOutermostValue && node.OptionalValue != null)
                {
                    var sb = new StringBuilder();
                    var ignoreInitialSpace = true;
                    var valueString        = ObjectToCodeImpl.ExpressionValueAsCode(config, node.OptionalValue, 10);
                    AppendNodeToStringBuilder(sb, subExprNode, ref ignoreInitialSpace);
                    var maxSize       = 80;
                    var subExprString = sb.Length <= maxSize
                        ? sb.ToString()
                        : sb.ToString(0, maxSize / 2 - 1) + "  …  " + sb.ToString(sb.Length - (maxSize / 2 - 1), maxSize / 2 - 1);

                    if (!string.IsNullOrEmpty(valueString))
                    {
                        subExpressionValues.Add(new SubExpressionValue {
                            SubExpression = subExprString, ValueAsString = valueString
                        });
                    }
                }
                foreach (var kid in node.Children)
                {
                    if (kid.IsConceptualChild)
                    {
                        FindSubExpressionValues(config, kid, kid, subExpressionValues, false);
                    }
                }
                foreach (var kid in node.Children)
                {
                    if (!kid.IsConceptualChild)
                    {
                        FindSubExpressionValues(config, kid, subExprNode, subExpressionValues, hideOutermostValue);
                    }
                }
            }
 static void FindSubExpressionValues(
     ExpressionToCodeConfiguration config,
     StringifiedExpression node,
     StringifiedExpression subExprNode,
     List<SubExpressionValue> subExpressionValues,
     bool hideOutermostValue)
 {
     if (!hideOutermostValue && node.OptionalValue != null) {
         var sb = new StringBuilder();
         var ignoreInitialSpace = true;
         AppendNodeWithLimitedDepth(sb, subExprNode, ref ignoreInitialSpace, 2);
         var subExprString = sb.ToString();
         string valueString = ObjectToCodeImpl.ExpressionValueAsCode(config, node.OptionalValue);
         subExpressionValues.Add(new SubExpressionValue { SubExpression = subExprString, ValueAsString = valueString });
     }
     foreach (var kid in node.Children) {
         if (kid.IsConceptualChild) {
             FindSubExpressionValues(config, kid, kid, subExpressionValues, false);
         } else {
             FindSubExpressionValues(config, kid, subExprNode, subExpressionValues, hideOutermostValue);
         }
     }
 }
コード例 #13
0
 public static StringifiedExpression WithChildren(StringifiedExpression[] children) => new StringifiedExpression(null, children, null, false);