public void testLinenoInfix() { AstRoot root = parse( "\nvar d = a\n" + " + \n" + " b;\n" + "var\n" + " e =\n" + " a +\n" + " c;\n" + "var f = b\n" + " / c;\n"); VariableDeclaration stmt1 = (VariableDeclaration) root.getFirstChild(); List<VariableInitializer> vars1 = stmt1.getVariables(); VariableInitializer var1 = vars1.get(0); Name firstVarName = (Name) var1.getTarget(); InfixExpression var1Add = (InfixExpression) var1.getInitializer(); VariableDeclaration stmt2 = (VariableDeclaration) stmt1.getNext(); List<VariableInitializer> vars2 = stmt2.getVariables(); VariableInitializer var2 = vars2.get(0); Name secondVarName = (Name) var2.getTarget(); InfixExpression var2Add = (InfixExpression) var2.getInitializer(); VariableDeclaration stmt3 = (VariableDeclaration) stmt2.getNext(); List<VariableInitializer> vars3 = stmt3.getVariables(); VariableInitializer var3 = vars3.get(0); Name thirdVarName = (Name) var3.getTarget(); InfixExpression thirdVarDiv = (InfixExpression) var3.getInitializer(); ReturnStatement returnStmt = (ReturnStatement) stmt3.getNext(); assertEquals(1, var1.getLineno()); assertEquals(1, firstVarName.getLineno()); assertEquals(1, var1Add.getLineno()); assertEquals(1, var1Add.getLeft().getLineno()); assertEquals(3, var1Add.getRight().getLineno()); // var directive with name on next line wrong -- // should be 6. assertEquals(5, var2.getLineno()); assertEquals(5, secondVarName.getLineno()); assertEquals(6, var2Add.getLineno()); assertEquals(6, var2Add.getLeft().getLineno()); assertEquals(7, var2Add.getRight().getLineno()); assertEquals(8, var3.getLineno()); assertEquals(8, thirdVarName.getLineno()); assertEquals(8, thirdVarDiv.getLineno()); assertEquals(8, thirdVarDiv.getLeft().getLineno()); assertEquals(9, thirdVarDiv.getRight().getLineno()); }
public void testLinenoTry() { AstRoot root = parse( "\ntry {\n" + " var x = 1;\n" + "} catch\n" + " (err)\n" + "{\n" + "} finally {\n" + " var y = 2;\n" + "}\n"); TryStatement tryStmt = (TryStatement) root.getFirstChild(); AstNode tryBlock = tryStmt.getTryBlock(); List<CatchClause> catchBlocks = tryStmt.getCatchClauses(); CatchClause catchClause = catchBlocks.get(0); Block catchVarBlock = catchClause.getBody(); Name catchVar = catchClause.getVarName(); AstNode finallyBlock = tryStmt.getFinallyBlock(); AstNode finallyStmt = (AstNode) finallyBlock.getFirstChild(); assertEquals(1, tryStmt.getLineno()); assertEquals(1, tryBlock.getLineno()); assertEquals(5, catchVarBlock.getLineno()); assertEquals(4, catchVar.getLineno()); assertEquals(3, catchClause.getLineno()); assertEquals(6, finallyBlock.getLineno()); assertEquals(7, finallyStmt.getLineno()); }
public void testLinenoFunctionParams() { AstRoot root = parse("\nfunction\n" + " foo(\n" + " a,\n" + " b,\n" + " c) {\n" + "}\n"); FunctionNode function = (FunctionNode) root.getFirstChild(); Name functionName = function.getFunctionName(); AstNode body = function.getBody(); List<AstNode> params = function.getParams(); AstNode param1 = params.get(0); AstNode param2 = params.get(1); AstNode param3 = params.get(2); assertEquals(1, function.getLineno()); assertEquals(2, functionName.getLineno()); assertEquals(3, param1.getLineno()); assertEquals(4, param2.getLineno()); assertEquals(5, param3.getLineno()); assertEquals(5, body.getLineno()); }
public void testRegexpLocation() { AstNode root = parse("\nvar path =\n" + " replace(\n" + "/a/g," + "'/');\n"); VariableDeclaration firstVarDecl = (VariableDeclaration) root.getFirstChild(); List<VariableInitializer> vars1 = firstVarDecl.getVariables(); VariableInitializer firstInitializer = vars1.get(0); Name firstVarName = (Name) firstInitializer.getTarget(); FunctionCall callNode = (FunctionCall) firstInitializer.getInitializer(); AstNode fnName = callNode.getTarget(); List<AstNode> args = callNode.getArguments(); RegExpLiteral regexObject = (RegExpLiteral) args.get(0); AstNode aString = args.get(1); assertEquals(1, firstVarDecl.getLineno()); assertEquals(1, firstVarName.getLineno()); assertEquals(2, callNode.getLineno()); assertEquals(2, fnName.getLineno()); assertEquals(3, regexObject.getLineno()); assertEquals(3, aString.getLineno()); }
public void testObjectLitLocation() { AstNode root = parse( "\nvar foo =\n" + "{ \n" + "'A' : 'A', \n" + "'B' : 'B', \n" + "'C' : \n" + " 'C' \n" + "};\n"); VariableDeclaration firstVarDecl = (VariableDeclaration) root.getFirstChild(); List<VariableInitializer> vars1 = firstVarDecl.getVariables(); VariableInitializer firstInitializer = vars1.get(0); Name firstVarName = (Name) firstInitializer.getTarget(); ObjectLiteral objectLiteral = (ObjectLiteral) firstInitializer.getInitializer(); List<ObjectProperty> props = objectLiteral.getElements(); ObjectProperty firstObjectLit = props.get(0); ObjectProperty secondObjectLit = props.get(1); ObjectProperty thirdObjectLit = props.get(2); AstNode firstKey = firstObjectLit.getLeft(); AstNode firstValue = firstObjectLit.getRight(); AstNode secondKey = secondObjectLit.getLeft(); AstNode secondValue = secondObjectLit.getRight(); AstNode thirdKey = thirdObjectLit.getLeft(); AstNode thirdValue = thirdObjectLit.getRight(); assertEquals(1, firstVarName.getLineno()); assertEquals(2, objectLiteral.getLineno()); assertEquals(3, firstObjectLit.getLineno()); assertEquals(3, firstKey.getLineno()); assertEquals(3, firstValue.getLineno()); assertEquals(4, secondKey.getLineno()); assertEquals(4, secondValue.getLineno()); assertEquals(5, thirdKey.getLineno()); assertEquals(6, thirdValue.getLineno()); }