/** Ensure that all key events are disabled when the glass pane is up. */ public void testGlassPaneHidesKeyEvents() { SingleDisplayModel model = _frame.getModel(); final OpenDefinitionsDocument doc1 = model.newFile(); final OpenDefinitionsDocument doc2 = model.newFile(); // doc2 is now active Utilities.invokeAndWait( new Runnable() { public void run() { _pane1 = _frame._createDefScrollPane(doc1); _pane2 = _frame._createDefScrollPane(doc2); _defPane1 = (DefinitionsPane) _pane1.getViewport().getView(); _defPane2 = (DefinitionsPane) _pane2.getViewport().getView(); _frame.validate(); _frame.hourglassOn(); _defPane1.processKeyEvent(makeFindKeyEvent(_defPane1, 70)); _frame.validate(); } }); Utilities.clearEventQueue(); assertTrue( "the find replace dialog should not come up", !_frame.getFindReplaceDialog().isDisplayed()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame .getInteractionsPane() .processKeyEvent(makeFindKeyEvent(_frame.getInteractionsPane(), 0)); _frame.validate(); } }); Utilities.clearEventQueue(); assertTrue( "the find replace dialog should not come up", !_frame.getFindReplaceDialog().isDisplayed()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.hourglassOff(); } }); _log.log("testGlassPaneHidesKeyEvents completed"); }
/** * Tests that the current location of a document is equal to the caret Position after switching to * another document and back. */ public void testDocLocationAfterSwitch() throws BadLocationException { final DefinitionsPane pane = _frame.getCurrentDefPane(); final OpenDefinitionsDocument doc = pane.getOpenDefDocument(); setDocText(doc.getDocument(), "abcd"); Utilities.invokeAndWait( new Runnable() { public void run() { doc.setCurrentLocation(3); pane.setCaretPosition(3); // The caret is not affected by setCurrentLocation } }); assertEquals("Location of old doc before switch", 3, doc.getCurrentLocation()); assertEquals("Location of cursor in old document", 3, pane.getCaretPosition()); // Create a new file SingleDisplayModel model = _frame.getModel(); final OpenDefinitionsDocument oldDoc = doc; final DefinitionsPane oldPane = pane; final OpenDefinitionsDocument newDoc = model.newFile(); // Current pane should be new doc, pos 0 DefinitionsPane curPane; OpenDefinitionsDocument curDoc; curPane = _frame.getCurrentDefPane(); curDoc = curPane.getOpenDefDocument(); // .getDocument(); assertEquals("New curr DefPane's document", newDoc, curDoc); assertEquals("Location in new document", 0, newDoc.getCurrentLocation()); // Switch back to old document model.setActiveNextDocument(); Utilities.clearEventQueue(); assertEquals("Next active doc", oldDoc, model.getActiveDocument()); // Current pane should be old doc, pos 3 curPane = _frame.getCurrentDefPane(); curDoc = curPane.getOpenDefDocument(); // .getDocument(); assertEquals("Next active pane", oldPane, curPane); assertEquals("Current document is old document", oldDoc, curDoc); assertEquals("Location of caret in old document", 3, curPane.getCaretPosition()); _log.log("testDocLocationAfterSwitch completed"); }
/** * Make sure that the InteractionsPane is displaying the correct InteractionsDocument. * (SourceForge bug #681547) Also make sure this document cannot be edited before the prompt. */ public void testCorrectInteractionsDocument() throws EditDocumentException { InteractionsPane pane = _frame.getInteractionsPane(); final SingleDisplayModel model = _frame.getModel(); InteractionsDJDocument doc = model.getSwingInteractionsDocument(); // Make the test silent Utilities.invokeAndWait( new Runnable() { public void run() { model.getInteractionsModel().getDocument().setBeep(new TestBeep()); } }); Utilities.clearEventQueue(); // Test for strict == equality assertTrue("UI's int. doc. should equals Model's int. doc.", pane.getDocument() == doc); int origLength = doc.getLength(); doc.insertText(1, "typed text", ConsoleDocument.DEFAULT_STYLE); Utilities.clearEventQueue(); assertEquals("Document should not have changed.", origLength, doc.getLength()); _log.log("testCorrectInteractionsDocument 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"); }
/** * Ensure that a document's editable status is set appropriately throughout the compile process. * Since the behavior is interesting only when the model changes its active document, that's what * this test looks most like. */ public void testGlassPaneEditableState() { SingleDisplayModel model = _frame.getModel(); final OpenDefinitionsDocument doc1 = model.newFile(); final OpenDefinitionsDocument doc2 = model.newFile(); // doc2 is now active Utilities.invokeAndWait( new Runnable() { public void run() { _pane1 = _frame._createDefScrollPane(doc1); _pane2 = _frame._createDefScrollPane(doc2); _defPane1 = (DefinitionsPane) _pane1.getViewport().getView(); _defPane2 = (DefinitionsPane) _pane2.getViewport().getView(); _frame._switchDefScrollPane(); } }); Utilities.clearEventQueue(); // Execute all pending asynchronous tasks; assertTrue("Start: defPane1", _defPane1.isEditable()); assertTrue("Start: defPane2", _defPane2.isEditable()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.hourglassOn(); } }); Utilities.clearEventQueue(); assertTrue("Glass on: defPane1", _defPane1.isEditable()); assertTrue("Glass on: defPane2", (!_defPane2.isEditable())); model.setActiveDocument(doc1); Utilities.invokeAndWait( new Runnable() { public void run() { _frame._switchDefScrollPane(); } }); Utilities.clearEventQueue(); assertTrue("Doc Switch: defPane1", (!_defPane1.isEditable())); assertTrue("Doc Switch: defPane2", _defPane2.isEditable()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.hourglassOff(); } }); Utilities.clearEventQueue(); assertTrue("End: defPane1", _defPane1.isEditable()); assertTrue("End: defPane2", _defPane2.isEditable()); _log.log("testGlassPaneEditableState completed"); }