7086015: fix test/tools/javac/parser/netbeans/JavacParserTest.java
authorksrini
Wed, 07 Dec 2011 10:47:46 -0800
changeset 11146 ceac617c1081
parent 11144 8a4ae514eedf
child 11147 20770e90d993
7086015: fix test/tools/javac/parser/netbeans/JavacParserTest.java Reviewed-by: ksrini, jjg Contributed-by: matherey.nunez@oracle.com
langtools/test/tools/javac/parser/netbeans/JavacParserTest.java
--- a/langtools/test/tools/javac/parser/netbeans/JavacParserTest.java	Mon Nov 28 16:05:46 2011 +0000
+++ b/langtools/test/tools/javac/parser/netbeans/JavacParserTest.java	Wed Dec 07 10:47:46 2011 -0800
@@ -32,6 +32,7 @@
 import com.sun.source.tree.BlockTree;
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.ErroneousTree;
 import com.sun.source.tree.ExpressionStatementTree;
 import com.sun.source.tree.ExpressionTree;
 import com.sun.source.tree.MethodInvocationTree;
@@ -49,6 +50,7 @@
 import com.sun.tools.javac.tree.JCTree;
 import java.io.IOException;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -82,6 +84,30 @@
         }
     }
 
+    public CompilationUnitTree getCompilationUnitTree(String code) throws IOException {
+
+        JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
+                null, Arrays.asList(new MyFileObject(code)));
+        CompilationUnitTree cut = ct.parse().iterator().next();
+        return cut;
+    }
+
+    public List<String> getErroneousTreeValues(ErroneousTree node) {
+
+        List<String> values = new ArrayList<>();
+
+        if (node.getErrorTrees() != null) {
+
+            for (Tree t : node.getErrorTrees()) {
+                values.add(t.toString());
+            }
+        } else {
+            throw new RuntimeException("ERROR: No Erroneous tree "
+                    + "has been created.");
+        }
+        return values;
+    }
+
     public void testPositionForSuperConstructorCalls() throws IOException {
         assert tool != null;
 
@@ -97,22 +123,28 @@
         ExpressionStatementTree es =
                 (ExpressionStatementTree) method.getBody().getStatements().get(0);
 
+        final int esStartPos = code.indexOf(es.toString());
+        final int esEndPos = esStartPos + es.toString().length();
         assertEquals("testPositionForSuperConstructorCalls",
-                72 - 24, pos.getStartPosition(cut, es));
+                esStartPos, pos.getStartPosition(cut, es));
         assertEquals("testPositionForSuperConstructorCalls",
-                80 - 24, pos.getEndPosition(cut, es));
+                esEndPos, pos.getEndPosition(cut, es));
 
         MethodInvocationTree mit = (MethodInvocationTree) es.getExpression();
 
+        final int mitStartPos = code.indexOf(mit.toString());
+        final int mitEndPos = mitStartPos + mit.toString().length();
         assertEquals("testPositionForSuperConstructorCalls",
-                72 - 24, pos.getStartPosition(cut, mit));
+                mitStartPos, pos.getStartPosition(cut, mit));
         assertEquals("testPositionForSuperConstructorCalls",
-                79 - 24, pos.getEndPosition(cut, mit));
+                mitEndPos, pos.getEndPosition(cut, mit));
 
+        final int methodStartPos = mitStartPos;
+        final int methodEndPos = methodStartPos + mit.getMethodSelect().toString().length();
         assertEquals("testPositionForSuperConstructorCalls",
-                72 - 24, pos.getStartPosition(cut, mit.getMethodSelect()));
+                methodStartPos, pos.getStartPosition(cut, mit.getMethodSelect()));
         assertEquals("testPositionForSuperConstructorCalls",
-                77 - 24, pos.getEndPosition(cut, mit.getMethodSelect()));
+                methodEndPos, pos.getEndPosition(cut, mit.getMethodSelect()));
 
     }
 
@@ -158,24 +190,21 @@
 
     public void testPreferredPositionForBinaryOp() throws IOException {
 
-        String code = "package test; public class Test {" +
-                "private void test() {" +
-                "Object o = null; boolean b = o != null && o instanceof String;" +
-                "} private Test() {}}";
+        String code = "package test; public class Test {"
+                + "private void test() {"
+                + "Object o = null; boolean b = o != null && o instanceof String;"
+                + "} private Test() {}}";
 
-        JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
-                null, Arrays.asList(new MyFileObject(code)));
-        CompilationUnitTree cut = ct.parse().iterator().next();
-
+        CompilationUnitTree cut = getCompilationUnitTree(code);
         ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0);
         MethodTree method = (MethodTree) clazz.getMembers().get(0);
         VariableTree condSt = (VariableTree) method.getBody().getStatements().get(1);
         BinaryTree cond = (BinaryTree) condSt.getInitializer();
 
         JCTree condJC = (JCTree) cond;
-
-        assertEquals("testNewClassWithEnclosing",
-                117 - 24, condJC.pos);
+        int condStartPos = code.indexOf("&&");
+        assertEquals("testPreferredPositionForBinaryOp",
+                condStartPos, condJC.pos);
     }
 
     public void testPositionBrokenSource126732a() throws IOException {
@@ -599,9 +628,7 @@
         final String code = "package t; class Test { " +
                 "{ try (java.io.InputStream in = null) { } } }";
 
-        JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
-                null, Arrays.asList(new MyFileObject(code)));
-        CompilationUnitTree cut = ct.parse().iterator().next();
+        CompilationUnitTree cut = getCompilationUnitTree(code);
 
         new TreeScanner<Void, Void>() {
             @Override
@@ -622,9 +649,7 @@
         final String code = "package t; class Test { " +
                 "{ java.io.InputStream in = null; } }";
 
-        JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, null,
-                null, Arrays.asList(new MyFileObject(code)));
-        CompilationUnitTree cut = ct.parse().iterator().next();
+        CompilationUnitTree cut = getCompilationUnitTree(code);
 
         new TreeScanner<Void, Void>() {
 
@@ -640,6 +665,138 @@
         }.scan(cut, null);
     }
 
+    // expected erroneous tree: int x = y;(ERROR);
+    public void testOperatorMissingError() throws IOException {
+
+        String code = "package test; public class ErrorTest { "
+                + "void method() { int x = y  z } }";
+        CompilationUnitTree cut = getCompilationUnitTree(code);
+        final List<String> values = new ArrayList<>();
+        final List<String> expectedValues =
+                new ArrayList<>(Arrays.asList("[z]"));
+
+        new TreeScanner<Void, Void>() {
+
+            @Override
+            public Void visitErroneous(ErroneousTree node, Void p) {
+
+                values.add(getErroneousTreeValues(node).toString());
+                return null;
+
+            }
+        }.scan(cut, null);
+
+        assertEquals("testSwitchError: The Erroneous tree "
+                + "error values: " + values
+                + " do not match expected error values: "
+                + expectedValues, values, expectedValues);
+    }
+
+    //expected erroneous tree:  String s = (ERROR);
+    public void testMissingParenthesisError() throws IOException {
+
+        String code = "package test; public class ErrorTest { "
+                + "void f() {String s = new String; } }";
+        CompilationUnitTree cut = getCompilationUnitTree(code);
+        final List<String> values = new ArrayList<>();
+        final List<String> expectedValues =
+                new ArrayList<>(Arrays.asList("[new String()]"));
+
+        new TreeScanner<Void, Void>() {
+
+            @Override
+            public Void visitErroneous(ErroneousTree node, Void p) {
+
+                values.add(getErroneousTreeValues(node).toString());
+                return null;
+            }
+        }.scan(cut, null);
+
+        assertEquals("testSwitchError: The Erroneous tree "
+                + "error values: " + values
+                + " do not match expected error values: "
+                + expectedValues, values, expectedValues);
+    }
+
+    //expected erroneous tree: package test; (ERROR)(ERROR)
+    public void testMissingClassError() throws IOException {
+
+        String code = "package Test; clas ErrorTest {  "
+                + "void f() {String s = new String(); } }";
+        CompilationUnitTree cut = getCompilationUnitTree(code);
+        final List<String> values = new ArrayList<>();
+        final List<String> expectedValues =
+                new ArrayList<>(Arrays.asList("[, clas]", "[]"));
+
+        new TreeScanner<Void, Void>() {
+
+            @Override
+            public Void visitErroneous(ErroneousTree node, Void p) {
+
+                values.add(getErroneousTreeValues(node).toString());
+                return null;
+            }
+        }.scan(cut, null);
+
+        assertEquals("testSwitchError: The Erroneous tree "
+                + "error values: " + values
+                + " do not match expected error values: "
+                + expectedValues, values, expectedValues);
+    }
+
+    //expected erroneous tree: void m1(int i) {(ERROR);{(ERROR);}
+    public void testSwitchError() throws IOException {
+
+        String code = "package test; public class ErrorTest { "
+                + "int numDays; void m1(int i) { switchh {i} { case 1: "
+                + "numDays = 31; break; } } }";
+        CompilationUnitTree cut = getCompilationUnitTree(code);
+        final List<String> values = new ArrayList<>();
+        final List<String> expectedValues =
+                new ArrayList<>(Arrays.asList("[switchh]", "[i]"));
+
+        new TreeScanner<Void, Void>() {
+
+            @Override
+            public Void visitErroneous(ErroneousTree node, Void p) {
+
+                values.add(getErroneousTreeValues(node).toString());
+                return null;
+            }
+        }.scan(cut, null);
+
+        assertEquals("testSwitchError: The Erroneous tree "
+                + "error values: " + values
+                + " do not match expected error values: "
+                + expectedValues, values, expectedValues);
+    }
+
+    //expected erroneous tree: class ErrorTest {(ERROR)
+    public void testMethodError() throws IOException {
+
+        String code = "package Test; class ErrorTest {  "
+                + "static final void f) {String s = new String(); } }";
+        CompilationUnitTree cut = getCompilationUnitTree(code);
+        final List<String> values = new ArrayList<>();
+        final List<String> expectedValues =
+                new ArrayList<>(Arrays.asList("[\nstatic final void f();]"));
+
+        new TreeScanner<Void, Void>() {
+
+            @Override
+            public Void visitErroneous(ErroneousTree node, Void p) {
+
+                values.add(getErroneousTreeValues(node).toString());
+                return null;
+            }
+        }.scan(cut, null);
+
+        assertEquals("testMethodError: The Erroneous tree "
+                + "error value: " + values
+                + " does not match expected error values: "
+                + expectedValues, values, expectedValues);
+    }
+
     void testsNotWorking() throws IOException {
 
         // Fails with nb-javac, needs further investigation
@@ -661,7 +818,13 @@
         testStartPositionForMethodWithoutModifiers();
         testVarPos();
         testVariableInIfThen3();
+        testMissingExponent();
         testTryResourcePos();
+        testOperatorMissingError();
+        testMissingParenthesisError();
+        testMissingClassError();
+        testSwitchError();
+        testMethodError();
     }
 
     public static void main(String... args) throws IOException {