public void ExpressionNodeTypeIsNotParenthesizedInsideConditional() { AssertCorrect(JsExpression.Conditional( JsExpression.Unary(ExpressionNodeType.Negate, JsExpression.Number(1)), JsExpression.Unary(ExpressionNodeType.Negate, JsExpression.Number(2)), JsExpression.Unary(ExpressionNodeType.Negate, JsExpression.Number(3)) ), "(-1 ? -2 : -3)"); }
public void ExpressionNodeTypeIsNotParenthesizedWhenUsedAsBinaryArgument() { AssertCorrect(JsExpression.Binary(ExpressionNodeType.Multiply, JsExpression.Unary(ExpressionNodeType.Negate, JsExpression.Identifier("X") ), JsExpression.Number(1) ), "-X * 1"); }
public void IncrementIsParenthesizedWhenBeingUsedAsInvocationTarget() { AssertCorrect(JsExpression.Invocation( JsExpression.Unary(ExpressionNodeType.PostfixPlusPlus, JsExpression.Identifier("X") ), new[] { JsExpression.Number(1) } ), "(X++)(1)"); }
public void IncrementIsParenthesizedWhenUsedAsInvocationMethod() { AssertCorrect(JsExpression.Invocation( JsExpression.Unary(ExpressionNodeType.PostfixMinusMinus, JsExpression.Identifier("x") ), new JsExpression[0] ), "(x--)()"); }
public void UnaryOperatorsAreCorrectlyOutput() { var operators = new Dictionary <ExpressionNodeType, string> { { ExpressionNodeType.TypeOf, "typeof({0})" }, { ExpressionNodeType.LogicalNot, "!{0}" }, { ExpressionNodeType.Negate, "-{0}" }, { ExpressionNodeType.Positive, "+{0}" }, { ExpressionNodeType.PrefixPlusPlus, "++{0}" }, { ExpressionNodeType.PrefixMinusMinus, "--{0}" }, { ExpressionNodeType.PostfixPlusPlus, "{0}++" }, { ExpressionNodeType.PostfixMinusMinus, "{0}--" }, { ExpressionNodeType.Delete, "delete {0}" }, { ExpressionNodeType.Void, "void({0})" }, { ExpressionNodeType.BitwiseNot, "~{0}" }, }; for (var oper = ExpressionNodeType.UnaryFirst; oper <= ExpressionNodeType.UnaryLast; oper++) { Assert.That(operators.ContainsKey(oper), string.Format("Unexpected operator {0}", oper)); var expr = JsExpression.Unary(oper, JsExpression.Identifier("a")); AssertCorrect(expr, string.Format(operators[oper], "a")); } }
public void ASpaceIsInsertedBetweenBinaryAndUnaryPlusAndMinusToAvoidParseAsIncrementOrDecrement() { AssertCorrect(JsExpression.Binary(ExpressionNodeType.Add, JsExpression.Identifier("a"), JsExpression.Unary(ExpressionNodeType.Positive, JsExpression.Identifier("b"))), "a+ +b"); AssertCorrect(JsExpression.Binary(ExpressionNodeType.Subtract, JsExpression.Identifier("a"), JsExpression.Unary(ExpressionNodeType.Negate, JsExpression.Identifier("b"))), "a- -b"); AssertCorrect(JsExpression.Binary(ExpressionNodeType.Subtract, JsExpression.Identifier("a"), JsExpression.Unary(ExpressionNodeType.Positive, JsExpression.Identifier("b"))), "a-+b"); AssertCorrect(JsExpression.Binary(ExpressionNodeType.Add, JsExpression.Identifier("a"), JsExpression.Unary(ExpressionNodeType.Negate, JsExpression.Identifier("b"))), "a+-b"); }
public virtual JsExpression VisitUnaryExpression(JsUnaryExpression expression, TData data) { var operand = VisitExpression(expression.Operand, data); return(ReferenceEquals(operand, expression.Operand) ? expression : JsExpression.Unary(expression.NodeType, operand)); }