From: Jan P. <jp...@us...> - 2005-12-24 00:02:20
|
Update of /cvsroot/e-p-i-c/org.epic.perleditor-test/src-pde/org/epic/perleditor/editors In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9928/src-pde/org/epic/perleditor/editors Modified Files: BasePDETestCase.java TestSmartTyping.java TestBracketMatching.java Added Files: TestOpenSubDefinition.java Mouse.java TestPerlDoc.java PopupActionRunner.java TestFolding.java TestExplainErrors.java Log Message: Tests updated to reflect changes committed to org.epic.perleditor. New tests added for several features. --- NEW FILE: TestFolding.java --- package org.epic.perleditor.editors; import java.util.*; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.IAnnotationModel; import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel; public class TestFolding extends BasePDETestCase { public void testAll() throws Exception { _testCase("EPICTest/Twig.pm", "test.in/TestFolding-expected1.txt"); _testCase("EPICTest/test_Folding.pl", "test.in/TestFolding-expected2.txt"); } private void _testCase(String inFile, String outFile) throws Exception { String expected = readFile(outFile); PerlEditor editor = openEditor(inFile); try { IAnnotationModel model = (IAnnotationModel) editor.getAdapter(ProjectionAnnotationModel.class); List lines = new ArrayList(); for (Iterator i = model.getAnnotationIterator(); i.hasNext();) { Annotation a = (Annotation) i.next(); Position p = model.getPosition(a); StringBuffer buf = new StringBuffer(); buf.append(p.getOffset()); buf.append(':'); buf.append(p.getLength()); buf.append(':'); buf.append(a.getType()); lines.add(buf.toString()); } Collections.sort(lines); StringBuffer buf = new StringBuffer(); for (Iterator i = lines.iterator(); i.hasNext();) { buf.append(i.next()); buf.append('\n'); } //System.err.println(buf); assertEquals(expected, buf.toString()); } finally { closeEditor(editor); } } } --- NEW FILE: TestOpenSubDefinition.java --- package org.epic.perleditor.editors; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.*; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.swt.widgets.Display; public class TestOpenSubDefinition extends BasePDETestCase { public void testAll() throws Exception { PerlEditor editor = openEditor("EPICTest/test_OpenSub.pl"); PerlEditor.TestInterface testIface = editor.getTestInterface(); PerlEditor moduleEditor = null; try { testIface.selectText("some_sub()"); IAction openSubAction = editor.getAction(PerlEditorActionIds.OPEN_SUB); openSubAction.run(); // Check that the module editor opened with the right selection moduleEditor = findEditor("EPICTest/lib/TestOpenSub.pm"); assertNotNull(moduleEditor); ISelectionProvider provider = moduleEditor.getSelectionProvider(); ITextSelection selection = (ITextSelection) provider.getSelection(); assertEquals("some_sub", selection.getText()); assertEquals( "sub some_sub #ok", moduleEditor.getTestInterface().getText().substring( selection.getOffset() - 4, selection.getOffset() - 4 + "sub some_sub #ok".length())); IDocument doc1 = editor.getViewer().getDocument(); appendText(doc1, "\n\nzzz();"); IDocument doc2 = moduleEditor.getViewer().getDocument(); appendText(doc2, "\n\nsub zzz { }"); testIface.selectText("zzz"); openSubAction.run(); selection = (ITextSelection) provider.getSelection(); assertEquals( "sub zzz", moduleEditor.getTestInterface().getText().substring( selection.getOffset() - 4, selection.getOffset() - 4 + "sub zzz".length())); } finally { closeEditor(editor); if (moduleEditor != null) closeEditor(moduleEditor); } } private void appendText(final IDocument doc, final String text) { Display.getDefault().syncExec( new Runnable() { public void run() { try { doc.replace(doc.getLength(), 0, text); } catch (BadLocationException e) { throw new RuntimeException(e); } } }); } } Index: BasePDETestCase.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.perleditor-test/src-pde/org/epic/perleditor/editors/BasePDETestCase.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- BasePDETestCase.java 9 Sep 2005 11:27:45 -0000 1.1 +++ BasePDETestCase.java 24 Dec 2005 00:01:42 -0000 1.2 @@ -2,6 +2,7 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.*; import org.eclipse.ui.part.FileEditorInput; import org.epic.perl.editor.test.BaseTestCase; @@ -13,27 +14,75 @@ */ protected void closeEditor(IEditorPart editor) { - IWorkbenchPage page = - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - - page.closeEditor(editor, false); + activeWorkbenchPage().closeEditor(editor, false); + } + + /** + * Closes the specified view. + */ + protected void closeView(IViewPart view) + { + activeWorkbenchPage().hideView(view); + } + + /** + * Find an open PerlEditor for the specified file. + * + * @param path workspace-relative path to the file + * @return the found PerlEditor or null if not found + */ + protected PerlEditor findEditor(String path) + { + IEditorPart part = activeWorkbenchPage().findEditor(fileEditorInput(path)); + return (part instanceof PerlEditor) ? (PerlEditor) part : null; } /** + * Find an open view with the specified ID. + * + * @return the found view or null if not found + */ + protected IViewPart findView(String viewId) + { + return activeWorkbenchPage().findView(viewId); + } + + /** * Opens an editor for the specified file. * * @param path workspace-relative path to the file */ protected PerlEditor openEditor(String path) throws PartInitException { - IWorkbenchPage page = - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - - IEditorInput input = new FileEditorInput( + return (PerlEditor) + activeWorkbenchPage().openEditor( + fileEditorInput(path), PerlEditor.PERL_EDITOR_ID); + } + + /** + * Spins the event loop for the specified duration of time. + */ + protected void spinEventLoop(long timeMillis) + throws InterruptedException + { + Display display = Display.getDefault(); + long t1 = System.currentTimeMillis(); + while (t1 + timeMillis > System.currentTimeMillis()) + { + while (display.readAndDispatch()); + Thread.sleep(100); + } + } + + private IWorkbenchPage activeWorkbenchPage() + { + return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + } + + private IEditorInput fileEditorInput(String path) + { + return new FileEditorInput( ResourcesPlugin.getWorkspace().getRoot().getFile( new Path(path))); - - return (PerlEditor) - page.openEditor(input, "org.epic.perleditor.editors.PerlEditor"); } } --- NEW FILE: TestExplainErrors.java --- package org.epic.perleditor.editors; import java.util.Iterator; import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.source.IAnnotationModel; import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.texteditor.MarkerAnnotation; import org.epic.perleditor.views.ExplainErrorsView; public class TestExplainErrors extends BasePDETestCase { private static final String VIEW_ID = "org.epic.perleditor.views.ExplainErrorsView"; private static final String ACTION_ID = "org.epic.perleditor.popupmenus.ExplainErrorsRulerActionDelegate"; public void testAll() throws Exception { PerlEditor editor = openEditor("EPICTest/test_ExplainErrors.pl"); PerlEditor.TestInterface testIface = editor.getTestInterface(); ExplainErrorsView view = null; try { view = (ExplainErrorsView) findView(VIEW_ID); if (view != null) closeView(view); IVerticalRuler ruler = testIface.getVerticalRuler(); IAnnotationModel model = ruler.getModel(); IMarker marker = getErrorMarker(model); assertNotNull(marker); editor.addRulerContextMenuListener(new PopupActionRunner(ACTION_ID)); Mouse.click(getMarkerLocation(editor, marker), true); view = (ExplainErrorsView) findView(VIEW_ID); assertNotNull(view); assertTrue(view.getText().startsWith("Bareword")); } finally { if (view != null) closeView(view); closeEditor(editor); } } private IMarker getErrorMarker(IAnnotationModel model) { for (Iterator i = model.getAnnotationIterator(); i.hasNext();) { Object obj = i.next(); if (obj instanceof MarkerAnnotation) return ((MarkerAnnotation) obj).getMarker(); } return null; } private Point getMarkerLocation(PerlEditor editor, IMarker marker) throws CoreException { int lineNo = ((Integer) marker.getAttribute(IMarker.LINE_NUMBER)).intValue(); PerlEditor.TestInterface testIface = editor.getTestInterface(); IVerticalRuler ruler = testIface.getVerticalRuler(); testIface.setTopIndex(lineNo-1); int y1 = 0, y2; while (ruler.toDocumentLineNumber(y1) < lineNo-1) y1++; y2 = y1; while (ruler.toDocumentLineNumber(y2) < lineNo) y2++; return ruler.getControl().toDisplay(ruler.getWidth()/3, y1+(y2-y1)/2); } } Index: TestBracketMatching.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.perleditor-test/src-pde/org/epic/perleditor/editors/TestBracketMatching.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- TestBracketMatching.java 9 Sep 2005 11:27:45 -0000 1.1 +++ TestBracketMatching.java 24 Dec 2005 00:01:42 -0000 1.2 @@ -5,13 +5,14 @@ public class TestBracketMatching extends BasePDETestCase { public void testAll() throws Exception - { + { PerlEditor editor = openEditor("EPICTest/Twig.pm"); - editor._setExactBracketMatching(); + PerlEditor.TestInterface testIface = editor.getTestInterface(); + testIface.setExactBracketMatching(); try { - String text = editor._getText(); + String text = testIface.getText(); List expected = readLines("test.in/TestBracketMatching-expected.txt"); long t1 = System.currentTimeMillis(); @@ -22,8 +23,8 @@ if (c == '(' || c == '{' || c == '[' || c == '<' || c == ')' || c == '}' || c == ']' || c == '>') { - editor._setCaretOffset(i+1); - int offset = editor._getHighlightedBracketOffset(); + testIface.setCaretOffset(i+1); + int offset = testIface.getHighlightedBracketOffset(); String actual = i + " " + offset + " " + --- NEW FILE: TestPerlDoc.java --- package org.epic.perleditor.editors; import org.eclipse.jface.action.IAction; import org.epic.perleditor.views.PerlDocView; public class TestPerlDoc extends BasePDETestCase { private static final String VIEW_ID = "org.epic.perleditor.views.PerlDocView"; public void testAll() throws Exception { PerlEditor editor = openEditor("EPICTest/test_PerlDoc.pl"); PerlEditor.TestInterface testIface = editor.getTestInterface(); PerlDocView view = null; try { view = (PerlDocView) findView(VIEW_ID); if (view != null) closeView(view); testIface.selectText("print"); IAction perlDocAction = editor.getAction(PerlEditorActionIds.PERL_DOC); perlDocAction.run(); view = (PerlDocView) findView(VIEW_ID); assertNotNull(view); assertTrue( view.getDisplayedText(0).indexOf("print FILEHANDLE LIST") != -1); } finally { if (view != null) closeView(view); closeEditor(editor); } } } Index: TestSmartTyping.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.perleditor-test/src-pde/org/epic/perleditor/editors/TestSmartTyping.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- TestSmartTyping.java 9 Sep 2005 11:27:45 -0000 1.1 +++ TestSmartTyping.java 24 Dec 2005 00:01:42 -0000 1.2 @@ -1,85 +1,98 @@ package org.epic.perleditor.editors; import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.widgets.Display; import org.epic.perleditor.PerlEditorPlugin; import org.epic.perleditor.preferences.PreferenceConstants; +import org.omg.CORBA.OMGVMCID; public class TestSmartTyping extends BasePDETestCase { public void testAll() throws Exception { IPreferenceStore prefs = PerlEditorPlugin.getDefault().getPreferenceStore(); - assertTrue(prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET1)); - assertTrue(prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET2)); - assertTrue(prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET3)); - assertTrue(prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET4)); - assertTrue(prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_QUOTE1)); - assertTrue(prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_QUOTE2)); + + boolean p1 = prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET1); + boolean p2 = prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET2); + boolean p3 = prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET3); + boolean p4 = prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_BRACKET4); + boolean p5 = prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_QUOTE1); + boolean p6 = prefs.getBoolean(PreferenceConstants.AUTO_COMPLETION_QUOTE2); + + try { _testAll(); } + finally + { + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET1, p1); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET2, p2); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET3, p3); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET4, p4); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_QUOTE1, p5); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_QUOTE2, p6); + } + } + + private void _testAll() throws Exception + { + IPreferenceStore prefs = PerlEditorPlugin.getDefault().getPreferenceStore(); + + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET1, true); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET2, true); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET3, true); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_BRACKET4, true); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_QUOTE1, true); + prefs.setValue(PreferenceConstants.AUTO_COMPLETION_QUOTE2, true); PerlEditor editor = openEditor("EPICTest/empty.pl"); + PerlEditor.TestInterface testIface = editor.getTestInterface(); try { - Keyboard.typeString("}"); - assertEquals("}", editor._getText()); + Keyboard.typeString("}"); + assertEquals("}", testIface.getText()); - editor._clear(); + testIface.clear(); Keyboard.typeString("{"); - assertEquals("{}", editor._getText()); + assertEquals("{}", testIface.getText()); Keyboard.typeString("{"); - assertEquals("{{}}", editor._getText()); + assertEquals("{{}}", testIface.getText()); Keyboard.typeString("}"); Keyboard.typeString("}"); - assertEquals("{{}}", editor._getText()); + assertEquals("{{}}", testIface.getText()); - editor._clear(); + testIface.clear(); Keyboard.typeString("my @x = (foo"); - assertEquals("my @x = (foo)", editor._getText()); + assertEquals("my @x = (foo)", testIface.getText()); Keyboard.typeString(";"); - assertEquals("my @x = (foo;)", editor._getText()); + assertEquals("my @x = (foo;)", testIface.getText()); Keyboard.backspace(); - assertEquals("my @x = (foo)", editor._getText()); + assertEquals("my @x = (foo)", testIface.getText()); Keyboard.typeString(")"); - assertEquals("my @x = (foo)", editor._getText()); + assertEquals("my @x = (foo)", testIface.getText()); Keyboard.typeString(";"); - assertEquals("my @x = (foo);", editor._getText()); + assertEquals("my @x = (foo);", testIface.getText()); - editor._clear(); + testIface.clear(); Keyboard.typeString("print aaa"); - assertEquals("print aaa", editor._getText()); + assertEquals("print aaa", testIface.getText()); Keyboard.left(); Keyboard.left(); Keyboard.left(); Keyboard.typeString("'"); - assertEquals("print ''aaa", editor._getText()); + assertEquals("print ''aaa", testIface.getText()); Keyboard.backspace(); - assertEquals("print 'aaa", editor._getText()); + assertEquals("print 'aaa", testIface.getText()); Keyboard.right(); Keyboard.right(); Keyboard.right(); Keyboard.right(); Keyboard.typeString("'"); - assertEquals("print 'aaa''", editor._getText()); - Keyboard.right(); - Keyboard.backspace(); + assertEquals("print 'aaa'", testIface.getText()); Keyboard.left(); Keyboard.typeString("'"); Keyboard.typeString(";"); - assertEquals("print 'aaa';", editor._getText()); - - /* - Display display = Display.getDefault(); - long t1 = System.currentTimeMillis(); - while (t1 + 30000 > System.currentTimeMillis()) - { - while (display.readAndDispatch()); - Thread.sleep(100); - } - */ + assertEquals("print 'aaa';", testIface.getText()); } finally { --- NEW FILE: PopupActionRunner.java --- package org.epic.perleditor.editors; import org.eclipse.jface.action.*; import org.eclipse.swt.events.MenuAdapter; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.widgets.*; /** * Helper class to execute actions contributed to popup menus. * Usage: specify an action (contribution) ID at construction time * and register an instance with the IMenuManager responsible for * populating the popup menu. The action will be run after the menu * appears. * * @author jploski */ public class PopupActionRunner extends MenuAdapter implements IMenuListener { private final String actionID; public PopupActionRunner(String actionID) { this.actionID = actionID; } public void menuAboutToShow(IMenuManager manager) { Menu menu = ((MenuManager) manager).getMenu(); menu.addMenuListener(this); } public void menuShown(MenuEvent e) { Menu menu = (Menu) e.getSource(); menu.removeMenuListener(this); MenuItem[] items = menu.getItems(); for (int i = 0; i < items.length; i++) { Object item = items[i].getData(); if (!(item instanceof ActionContributionItem)) continue; final ActionContributionItem cItem = (ActionContributionItem) item; if (!actionID.equals(cItem.getId())) continue; Display.getDefault().asyncExec(new Runnable() { public void run() { cItem.getAction().run(); } }); } } } --- NEW FILE: Mouse.java --- package org.epic.perleditor.editors; import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Display; /** * Supports emulation of moving the mouse pointer and clicking. */ public class Mouse { public static void click(Point p, boolean rightClick) { // display.post doesn't work (under Linux?) Display display = Display.getDefault(); try { int button = rightClick ? InputEvent.BUTTON3_MASK : InputEvent.BUTTON1_MASK; Robot robot = new Robot(); robot.mouseMove(p.x, p.y); while (display.readAndDispatch()); try { Thread.sleep(20); } catch (InterruptedException _) { } robot.mousePress(button); while (display.readAndDispatch()); try { Thread.sleep(20); } catch (InterruptedException _) { } robot.mouseRelease(button); while (display.readAndDispatch()); try { Thread.sleep(20); } catch (InterruptedException _) { } } catch (AWTException e) { throw new RuntimeException(e); } } } |