private Iterable<String> _createOptions( List<? extends File> classPath, List<? extends File> sourcePath, File destination, List<? extends File> bootClassPath, String sourceVersion, boolean showWarnings) { if (bootClassPath == null) { bootClassPath = _defaultBootClassPath; } LinkedList<String> options = new LinkedList<String>(); for (Map.Entry<String, String> e : CompilerOptions.getOptions(showWarnings).entrySet()) { options.add(e.getKey()); if (e.getValue().length() > 0) options.add(e.getValue()); } options.add("-g"); if (classPath != null) { options.add("-classpath"); options.add(IOUtil.pathToString(classPath)); } if (sourcePath != null) { options.add("-sourcepath"); options.add(IOUtil.pathToString(sourcePath)); } if (destination != null) { options.add("-d"); options.add(destination.getPath()); } if (bootClassPath != null) { options.add("-bootclasspath"); options.add(IOUtil.pathToString(bootClassPath)); } if (sourceVersion != null) { options.add("-source"); options.add(sourceVersion); } if (!showWarnings) { options.add("-nowarn"); } // Bug fix: if "-target" is not present, Iterables in for-each loops cause compiler errors if (sourceVersion != null) { options.add("-target"); options.add(sourceVersion); } /* The following line is commented out because it does not work for Java 8. */ // else { options.add("-target"); options.add("1.7"); } return options; }
/** Tests that the save button does not set itself as enabled immediately after opening a file. */ public void testSaveButtonEnabled() throws IOException { String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); File forceOpenClass1_file = new File(_tempDir, "ForceOpenClass1.java"); String forceOpenClass1_string = "public class ForceOpenClass1 {\n" + " ForceOpenClass2 class2;\n" + " ForceOpenClass3 class3;\n\n" + " public ForceOpenClass1() {\n" + " class2 = new ForceOpenClass2();\n" + " class3 = new ForceOpenClass3();\n" + " }\n" + "}"; IOUtil.writeStringToFile(forceOpenClass1_file, forceOpenClass1_string); forceOpenClass1_file.deleteOnExit(); // _frame.setVisible(true); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.pack(); _frame.open( new FileOpenSelector() { public File[] getFiles() { File[] return_me = new File[1]; return_me[0] = new File(_tempDir, "ForceOpenClass1.java"); return return_me; } }); } }); Utilities.clearEventQueue(); assertTrue( "the save button should not be enabled after opening a document", !_frame.isSaveEnabled()); _log.log("testSaveButtonEnabled completed"); }
/** * Sets the class path to use for starting the interpreter JVM. Must include the classes for the * interpreter. * * @param classPath Class path for the interpreter JVM */ public void setStartupClassPath(String classPath) { _startupClassPath = IOUtil.parsePath(classPath); }
public Options(JavaVersion javaVersion, Iterable<? extends File> classPath) { this(javaVersion, classPath, IOUtil.parsePath(System.getProperty("sun.boot.class.path", ""))); }
/** Tests that "go to file under cursor" works if unique after appending ".java" */ public void testGotoFileUnderCursorAppendJava() throws IOException { String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); final File goto1_file = new File(_tempDir, "GotoFileUnderCursor2Test.java"); final String goto1_string = "GotoFileUnderCursor2"; IOUtil.writeStringToFile(goto1_file, goto1_string); goto1_file.deleteOnExit(); final File goto2_file = new File(_tempDir, "GotoFileUnderCursor2.java"); String goto2_string = "GotoFileUnderCursor2Test"; IOUtil.writeStringToFile(goto2_file, goto2_string); goto2_file.deleteOnExit(); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.pack(); _frame.open( new FileOpenSelector() { public File[] getFiles() { return new File[] {goto1_file, goto2_file}; } }); } }); Utilities.clearEventQueue(); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.initGotoFileDialog(); _frame._gotoFileDialog.addWindowListener( new WindowListener() { public void windowActivated(WindowEvent e) { throw new RuntimeException("Should not activate _gotoFileDialog"); } public void windowClosed(WindowEvent e) { throw new RuntimeException("Should not close _gotoFileDialog"); } public void windowClosing(WindowEvent e) { throw new RuntimeException("Should not be closing _gotoFileDialog"); } public void windowDeactivated(WindowEvent e) { throw new RuntimeException("Should not deactivate _gotoFileDialog"); } public void windowDeiconified(WindowEvent e) { throw new RuntimeException("Should not deiconify _gotoFileDialog"); } public void windowIconified(WindowEvent e) { throw new RuntimeException("Should not iconify _gotoFileDialog"); } public void windowOpened(WindowEvent e) { throw new RuntimeException("Should not open _gotoFileDialog"); } }); } }); Utilities.clearEventQueue(); Utilities.invokeAndWait( new Runnable() { public void run() { SingleDisplayModel model = _frame.getModel(); try { OpenDefinitionsDocument goto1_doc = model.getDocumentForFile(goto1_file); OpenDefinitionsDocument goto2_doc = model.getDocumentForFile(goto2_file); model.setActiveDocument(model.getDocumentForFile(goto1_file)); assertEquals( "Document contains the incorrect text", goto1_string, model.getActiveDocument().getText()); _frame._gotoFileUnderCursor(); assertEquals( "Incorrect active document; did not go to?", goto2_doc, model.getActiveDocument()); _frame._gotoFileUnderCursor(); assertEquals( "Incorrect active document; did not go to?", goto1_doc, model.getActiveDocument()); } catch (IOException ioe) { throw new UnexpectedException(ioe); } } }); _log.log("gotoFileUnderCursorAppendJava completed"); }
/** * A Test to guarantee that the Dancing UI bug will not rear its ugly head again. Basically, add a * component listener to the leftComponent of _docSplitPane and make certain its size does not * change while closing an OpenDefinitionsDocument outside the event thread. */ public void testDancingUIFileClosed() throws IOException { /** * Maybe this sequence of calls should be incorporated into one function createTestDir(), which * would get the username and create the temporary directory. Only sticky part is deciding where * to put it, in FileOps maybe? */ String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); File forceOpenClass1_file = new File(_tempDir, "ForceOpenClass1.java"); String forceOpenClass1_string = "public class ForceOpenClass1 {\n" + " ForceOpenClass2 class2;\n" + " ForceOpenClass3 class3;\n\n" + " public ForceOpenClass1() {\n" + " class2 = new ForceOpenClass2();\n" + " class3 = new ForceOpenClass3();\n" + " }\n" + "}"; IOUtil.writeStringToFile(forceOpenClass1_file, forceOpenClass1_string); forceOpenClass1_file.deleteOnExit(); final ComponentAdapter listener = new ComponentAdapter() { public void componentResized(ComponentEvent event) { _testFailed = true; fail("testDancingUI: Open Documents List danced!"); } }; final SingleDisplayModelFileClosedListener closeListener = new SingleDisplayModelFileClosedListener(); _closeDone = false; Utilities.invokeAndWait( new Runnable() { public void run() { // _frame.setVisible(true); _frame.pack(); _frame.addComponentListenerToOpenDocumentsList(listener); _frame.open( new FileOpenSelector() { public File[] getFiles() { File[] return_me = new File[1]; return_me[0] = new File(_tempDir, "ForceOpenClass1.java"); return return_me; } }); _frame.getModel().addListener(closeListener); } }); Utilities.clearEventQueue(); /* Asynchronously close the file */ Utilities.invokeLater( new Runnable() { public void run() { _frame.getCloseButton().doClick(); } }); _log.log("Waiting for file closing"); synchronized (_closeLock) { try { while (!_closeDone) _closeLock.wait(); } catch (InterruptedException e) { fail(e.toString()); } } if (!IOUtil.deleteRecursively(_tempDir)) { System.err.println( "Couldn't fully delete directory " + _tempDir.getAbsolutePath() + "\nDo it by hand.\n"); } _log.log("testDancingUIFileClosed completed"); }
/** * A Test to guarantee that the Dancing UI bug will not rear its ugly head again. Basically, add a * component listener to the leftComponent of _docSplitPane and make certain its size does not * change while compiling a class which depends on another class. */ public void testDancingUIFileOpened() throws IOException { // System.out.println("DEBUG: Entering messed up test"); /** * Maybe this sequence of calls should be incorporated into one function createTestDir(), which * would get the username and create the temporary directory. Only sticky part is deciding where * to put it, in FileOps maybe? */ _log.log("Starting testingDancingUIFileOpened"); final GlobalModel _model = _frame.getModel(); String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); File forceOpenClass1_file = new File(_tempDir, "ForceOpenClass1.java"); String forceOpenClass1_string = "public class ForceOpenClass1 {\n" + " ForceOpenClass2 class2;\n" + " ForceOpenClass3 class3;\n\n" + " public ForceOpenClass1() {\n" + " class2 = new ForceOpenClass2();\n" + " class3 = new ForceOpenClass3();\n" + " }\n" + "}"; File forceOpenClass2_file = new File(_tempDir, "ForceOpenClass2.java"); String forceOpenClass2_string = "public class ForceOpenClass2 {\n" + " inx x = 4;\n" + "}"; File forceOpenClass3_file = new File(_tempDir, "ForceOpenClass3.java"); String forceOpenClass3_string = "public class ForceOpenClass3 {\n" + " String s = \"asf\";\n" + "}"; IOUtil.writeStringToFile(forceOpenClass1_file, forceOpenClass1_string); IOUtil.writeStringToFile(forceOpenClass2_file, forceOpenClass2_string); IOUtil.writeStringToFile(forceOpenClass3_file, forceOpenClass3_string); forceOpenClass1_file.deleteOnExit(); forceOpenClass2_file.deleteOnExit(); forceOpenClass3_file.deleteOnExit(); _log.log("DancingUIFileOpened Set Up"); // _frame.setVisible(true); // set up listeners and signal flags final ComponentAdapter listener = new ComponentAdapter() { public void componentResized(ComponentEvent event) { _testFailed = true; fail("testDancingUI: Open Documents List danced!"); } }; final SingleDisplayModelFileOpenedListener openListener = new SingleDisplayModelFileOpenedListener(); final SingleDisplayModelCompileListener compileListener = new SingleDisplayModelCompileListener(); _openDone = false; Utilities.invokeAndWait( new Runnable() { public void run() { // _frame.setVisible(true); _frame.pack(); _frame.addComponentListenerToOpenDocumentsList(listener); } }); Utilities.clearEventQueue(); _model.addListener(openListener); _log.log("opening file"); Utilities.invokeLater( new Runnable() { public void run() { _frame.open( new FileOpenSelector() { public File[] getFiles() { File[] return_me = new File[1]; return_me[0] = new File(_tempDir, "ForceOpenClass1.java"); return return_me; } }); } }); Utilities.clearEventQueue(); /* wait until file has been open and active document changed. */ synchronized (_openLock) { try { while (!_openDone) _openLock.wait(); } catch (InterruptedException e) { fail(e.toString()); } } _model.removeListener(openListener); _log.log("File opened"); _compileDone = false; _model.addListener(compileListener); // save and compile the new file asynchronously Utilities.invokeLater( new Runnable() { public void run() { _log.log("saving all files"); _frame._saveAll(); _log.log("invoking compileAll action"); _frame.getCompileAllButton().doClick(); } }); Utilities.clearEventQueue(); synchronized (_compileLock) { try { while (!_compileDone) _compileLock.wait(); } catch (InterruptedException e) { fail(e.toString()); } } _log.log("File saved and compiled"); if (!IOUtil.deleteRecursively(_tempDir)) System.err.println( "Couldn't fully delete directory " + _tempDir.getAbsolutePath() + "\nDo it by hand.\n"); _log.log("testDancingUIFileOpened completed"); }
/** Tests that "go to file under cursor" displays the dialog if choice is not unique */ public void testGotoFileUnderCursorShowDialog() throws IOException { // Utilities.show("Running testGotoFileUnderCursorShowDialog()"); String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); final File goto1_file = new File(_tempDir, "GotoFileUnderCursor3.java"); final String goto1_string = "GotoFileUnderCursor"; IOUtil.writeStringToFile(goto1_file, goto1_string); goto1_file.deleteOnExit(); final File goto2_file = new File(_tempDir, "GotoFileUnderCursor4.java"); String goto2_string = "GotoFileUnderCursor3"; IOUtil.writeStringToFile(goto2_file, goto2_string); goto2_file.deleteOnExit(); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.pack(); _frame.open( new FileOpenSelector() { public File[] getFiles() { return new File[] {goto1_file, goto2_file}; } }); } }); final int[] count = new int[2]; Utilities.invokeAndWait( new Runnable() { public void run() { _frame.initGotoFileDialog(); _frame._gotoFileDialog.addWindowListener( new WindowListener() { public void windowActivated(WindowEvent e) { ++count[0]; } public void windowClosed(WindowEvent e) { throw new RuntimeException("Should not close _gotoFileDialog"); } public void windowClosing(WindowEvent e) { throw new RuntimeException("Should not be closing _gotoFileDialog"); } public void windowDeactivated(WindowEvent e) { /* throw new RuntimeException("Should not deactivate _gotoFileDialog"); */ } public void windowDeiconified(WindowEvent e) { throw new RuntimeException("Should not deiconify _gotoFileDialog"); } public void windowIconified(WindowEvent e) { throw new RuntimeException("Should not iconify _gotoFileDialog"); } public void windowOpened(WindowEvent e) { ++count[1]; } }); } }); Utilities.clearEventQueue(); Utilities.invokeAndWait( new Runnable() { public void run() { SingleDisplayModel model = _frame.getModel(); try { model.setActiveDocument(model.getDocumentForFile(goto1_file)); assertEquals( "Document contains the incorrect text", goto1_string, model.getActiveDocument().getText()); } catch (IOException ioe) { throw new UnexpectedException(ioe); } } }); Utilities.invokeAndWait( new Runnable() { public void run() { _frame._gotoFileUnderCursor(); } }); Utilities.clearEventQueue(); // wait for any asynchronous actions to complete /* The following test was commented out before test following it was. It presumably fails even if * the "MainFrame.this.isVisible()" test mentioned below is removed from _gotoFileUnderCursor */ // assertEquals("Did not activate _gotoFileDialog", 1, count[0]); /* The following test was commented out after suppressing this display when _frame is not visible. If it is * uncommented, then the "MainFrame.this.isVisible()" test in _gotoFileDialog must be removed. */ // assertEquals("Did not open _gotoFileDialog", 1, count[1]); _log.log("gotoFileUnderCursorShowDialog completed"); }