All Downloads are FREE. Search and download functionalities are using the official Maven repository.

make.langtools.netbeans.nb-javac.test.global.ErrorToleranceTest Maven / Gradle / Ivy

Go to download

"nb-javac" is a patched version of OpenJDK "javac", i.e., the Java compiler. This has long been part of NetBeans, providing a highly tuned Java compiler specifically for the Java editor i.e., parsing and lexing for features such as syntax coloring, code completion.

There is a newer version: 17.0.0.0
Show newest version
/*
 * Copyright 2003-2004 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 */

package global;

//import com.sun.tools.javac.api.JavacTaskImpl;
//import com.sun.tools.javap.DisassemblerTool.DisassemblerTask;
//import com.sun.tools.javap.JavapTask;
//import global.ap1.AP;
//import java.io.File;
//import java.io.IOException;
//import java.io.PrintWriter;
//import java.io.StringWriter;
//import java.net.URI;
//import java.net.URL;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.Collection;
//import java.util.Collections;
//import java.util.LinkedList;
//import java.util.List;
//import javax.lang.model.element.Element;
//import javax.lang.model.element.TypeElement;
//import javax.lang.model.util.ElementFilter;
//import javax.tools.*;
//import javax.tools.JavaFileManager.Location;
//import javax.tools.JavaFileObject.Kind;
import junit.framework.TestCase;

/**
 *
 * @author Jan Lahoda
 */
public class ErrorToleranceTest extends TestCase {

//    public void testSimple1() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(Unknown u) {\n" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(Unknown u) {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - cannot find symbol\\n  symbol:   class Unknown\\n  location: class test.Test\");" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testSimple2() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(Object u) {\n" +
//                      "        bflmpsvz" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(Object u) {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - not a statement\");" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testSimple3() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(Object o) {\n" +
//                      "    }\n" +
//                      "    private void method(Unknown u) {\n" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(Object o) {\n" +
//                      "    }\n" +
//                      "    private void method(Unknown u) {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - cannot find symbol\\n  symbol:   class Unknown\\n  location: class test.Test\");" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidFieldInit() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    public Test() {\n" +
//                      "    }\n" +
//                      "    public Test(Object o) {\n" +
//                      "    }\n" +
//                      "    private String s = bflmpsvz;\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    public Test() {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - cannot find symbol\\n  symbol:   variable bflmpsvz\\n  location: class test.Test\");" +
//                      "    }\n" +
//                      "    public Test(Object o) {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - cannot find symbol\\n  symbol:   variable bflmpsvz\\n  location: class test.Test\");" +
//                      "    }\n" +
//                      "    private String s;\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidStaticFieldInit() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private static String s = bflmpsvz;\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - cannot find symbol\\n  symbol:   variable bflmpsvz\\n  location: class test.Test\");" +
//                      "    }\n" +
//                      "    private static String s;\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidCase() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(int i) {\n" +
//                      "        switch(i) {\n" +
//                      "            case Unknown.CONSTANT:\n" +
//                      "                break;\n" +
//                      "        }\n" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    private void method(int i) {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - cannot find symbol\\n  symbol:   variable Unknown\\n  location: class test.Test\");" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidImport() throws Exception {
//        final String code = "package test;\n" +
//                      "import a.b.c.List;\n" +
//                      "public class Test {\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - package a.b.c does not exist\");\n" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidImportWithStaticInit() throws Exception {
//        final String code = "package test;\n" +
//                      "import a.b.c.List;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        System.out.println();\n" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - package a.b.c does not exist\");\n" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidCodeBeforePackage() throws Exception {
//        final String code = "xyz\n" +
//                      "package test;\n" +
//                      "public class Test {\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testInvalidCodeAfterClass() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "}\n" +
//                      "xyz\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testMethodWithoutBody1() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "     public void test();\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "     public void test() {" +
//                      "        throw new RuntimeException(\"Uncompilable source code - missing method body, or declare abstract\");\n" +
//                      "     }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//    
//    public void testMethodWithoutBody2() throws Exception {
//        final String code = "package test;\n" +
//                      "public abstract class Test {\n" +
//                      "     public abstract void test() {}\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public abstract class Test {\n" +
//                      "     public void test() {" +
//                      "        throw new RuntimeException(\"Uncompilable source code - abstract methods cannot have a body\");\n" +
//                      "     }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testDuplicateMethods() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    public void test() {\n" +
//                      "    };\n" +
//                      "    public void test() {\n" +
//                      "    };\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - method test() is already defined in class test.Test\");\n" +
//                      "    }\n" +
//                      "    public void test() {" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testDuplicateClasses() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    public static class Nested {\n" +
//                      "    }\n" +
//                      "    public static class Nested {\n" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - class test.Test.Nested is already defined in class test.Test\");\n" +
//                      "    }\n" +
//                      "    public static class Nested {\n" +
//                      "    }\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//
//    public void testIssue147516() throws Exception {
//        final String code = "package test;\n" +
//                      "public class Test {\n" +
//                      "    public static final Nested NESTED = new Nested();\n" +
//                      "    public static class Nested implements Runnable {\n" +
//                      "    }\n" +
//                      "}\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {\n" +
//                      "    static {\n" +
//                      "        throw new RuntimeException(\"Uncompilable source code - test.Test.Nested is not abstract and does not override abstract method run() in java.lang.Runnable\");\n" +
//                      "    }\n" +
//                      "    public static final Nested NESTED = new Nested();\n" +
//                      "    public static class Nested implements Runnable {\n" +
//                      "        static {\n" +
//                      "            throw new RuntimeException(\"Uncompilable source code - test.Test.Nested is not abstract and does not override abstract method run() in java.lang.Runnable\");\n" +
//                      "        }\n" +
//                      "    };\n" +
//                      "}\n";
//
//        compareResults(golden, code);
//    }
//    
//    public void testIssue212342a() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; public class G {}\") public class Test { void t1(G g) {} G t2() { return null; } }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test { void t1(G g) {} G t2() { return null; } }\n" +
//                      "class G {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//    }
//    
//    public void testIssue212342b() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; @global.ap1.Ann(fqnToGenerate=\\\"test.H\\\", content=\\\"package test; public class H {}\\\") public class G {}\") public class Test { void t(H h) { System.err.println(1); } void t(G g) { System.err.println(2); } }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {  void t(H h) { System.err.println(1); } void t(G g) { System.err.println(2); } }\n" +
//                      "class G {}\n" +
//                      "class H {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//    }
//    
//    public void testIssue212342c() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; @global.ap1.Ann(fqnToGenerate=\\\"test.H\\\", content=\\\"package test; public class H {}\\\") public class G {}\") public class Test { void t(G g) { System.err.println(2); } void t(H h) { System.err.println(1); } }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {  void t(G g) { System.err.println(2); } void t(H h) { System.err.println(1); } }\n" +
//                      "class G {}\n" +
//                      "class H {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//
//    }
//    public void testIssue212342d() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; @global.ap1.Ann(fqnToGenerate=\\\"test.H\\\", content=\\\"package test; public class H {}\\\") public class G {}\") public class Test { void t(G g, String str) { System.err.println(2); } void t(H h, String str) { System.err.println(1); } }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {  void t(G g, String str) { System.err.println(2); } void t(H h, String str) { System.err.println(1); } }\n" +
//                      "class G {}\n" +
//                      "class H {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//
//    }
//    
//    public void testIssue212342e() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; @global.ap1.Ann(fqnToGenerate=\\\"test.H\\\", content=\\\"package test; public class H {}\\\") public class G {}\") public class Test {  void t(G g, T t) { System.err.println(2); }  void t(H h, T t) { System.err.println(1); } }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {  void t(G g, T t) { System.err.println(2); }  void t(H h, T t) { System.err.println(1); } }\n" +
//                      "class G {}\n" +
//                      "class H {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//
//    }
//    
//    public void testIssue212342f() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; @global.ap1.Ann(fqnToGenerate=\\\"test.H\\\", content=\\\"package test; public class H {}\\\") public class G {}\") public class Test {  void t(G g, T t) { System.err.println(2); }  void t(H h, T t) { System.err.println(1); } }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {  void t(G g, T t) { System.err.println(2); }  void t(H h, T t) { System.err.println(1); } }\n" +
//                      "class G {}\n" +
//                      "class H {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//
//    }
//
//    public void testIssue212342g() throws Exception {
//        final String code = "package test;\n" +
//                      "@global.ap1.Ann(fqnToGenerate=\"test.G\", content=\"package test; @global.ap1.Ann(fqnToGenerate=\\\"test.H\\\", content=\\\"package test; public class H {}\\\") public class G {}\") public class Test { H h = new H(); G g = new G(); }\n";
//
//        final String golden = "package test;\n" +
//                      "public class Test {  H h = new H(); G g = new G(); }\n" +
//                      "class G {}\n" +
//                      "class H {}\n";
//
//        compile(code, true, AP.class.getName());
//        
//        Collection codeSig = dumpSignatures("test.Test");
//        
//        compile(golden, true);
//        
//        Collection goldenSig = dumpSignatures("test.Test");
//        assertEquals(goldenSig, codeSig);
//    }
//    
//    //
//    static class MyFileObject extends SimpleJavaFileObject {
//        private String text;
//
//        public MyFileObject(String text) {
//            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
//            this.text = text;
//        }
//
//        @Override
//        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
//            return text;
//        }
//    }
//
//    private File workingDir;
//
//    @Override
//    protected void setUp() throws Exception {
//        super.setUp();
//
//        workingDir = File.createTempFile("ErrorToleranceTest", "");
//
//        workingDir.delete();
//        workingDir.mkdirs();
//    }
//
//    @Override
//    protected void tearDown() throws Exception {
//        deleteRecursively(workingDir);
//        super.tearDown();
//    }
//
//    private String[] compile(String code, boolean repair) throws Exception {
//        return compile(code, repair, null);
//    }
//    
//    private String[] compile(String code, boolean repair, String apToRun) throws Exception {
//        final String bootPath = System.getProperty("sun.boot.class.path"); //NOI18N
//        final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
//        assert tool != null;
//
//        StandardJavaFileManager std = tool.getStandardFileManager(null, null, null);
//        MemoryJavaFileManager mjfm = new MemoryJavaFileManager(std);
//
//        std.setLocation(StandardLocation.CLASS_OUTPUT, Collections.singleton(workingDir));
//        
//        List compilerOptions = new ArrayList();
//        compilerOptions.addAll(global.Utils.asParameters("-Xjcov", "-XDshouldStopPolicy=GENERATE", "-XDbackgroundCompilation"));
//        if (apToRun != null) {
//            URL myself = AnnotationProcessingTest.class.getProtectionDomain().getCodeSource().getLocation();
//            File sourceOutput = new File(workingDir, "sourceOutput");
//            sourceOutput.mkdirs();
//            compilerOptions.addAll(Arrays.asList("-classpath", myself.toExternalForm(), "-processor", AP.class.getName(), "-s", sourceOutput.getAbsolutePath()));
//        }
//        JavacTaskImpl ct = (JavacTaskImpl)tool.getTask(null, mjfm, null, compilerOptions, null, Arrays.asList(new MyFileObject(code)));
//        com.sun.tools.javac.main.JavaCompiler.instance(ct.getContext()).doRepair = repair;
//        ct.parse();
//        Iterable analyze = ct.analyze();
//        
//        List result = new LinkedList();
//        
//        for (TypeElement te : ElementFilter.typesIn(analyze)) {
//            result.add(ct.getElements().getBinaryName(te).toString());
//        }
//        
//        ct.generate();
//        
//        return result.toArray(new String[0]);
//    }
//    
//    private Collection dumpSignatures(String... fqns) throws Exception {
//        List result = new LinkedList();
//        
//        for (String fqn : fqns) {
//            StringWriter s = new StringWriter();
//            PrintWriter w = new PrintWriter(s);
//            DisassemblerTask javapTool = new JavapTask(w, null, null, Arrays.asList("-classpath", workingDir.getAbsolutePath(), "-private", "-c"), Collections.singletonList(fqn));
//            javapTool.call();
//            w.close();
//            result.add(s.toString());
//        }
//        
//        return result;
//    }
//    
//    private void compareResults(String golden, String code) throws Exception {
//        Collection codeSig = dumpSignatures(compile(code, true));
//        Collection goldenSig = dumpSignatures(compile(golden, false));
//        assertEquals(goldenSig, codeSig);
//    }
//
//    private void deleteRecursively(File f) {
//        if (f.isDirectory()) {
//            for (File c : f.listFiles()) {
//                deleteRecursively(c);
//            }
//        }
//        
//        f.delete();
//    }
//    
//    private static final class MemoryJavaFileManager extends ForwardingJavaFileManager {
//
//        public MemoryJavaFileManager(JavaFileManager jfm) {
//            super(jfm);
//        }
//
//        @Override
//        public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
//            JavaFileObject jfo = super.getJavaFileForOutput(location, className, kind, sibling);
//            
//            System.err.println("output=" + jfo);
//            
//            return jfo;
//        }
//        
//    }
//    //

    public void testNoop() {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy