diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/BasicCEditorTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/BasicCEditorTest.java index b18420b6fc7..6b38dc6d61a 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/BasicCEditorTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/BasicCEditorTest.java @@ -81,8 +81,8 @@ public class BasicCEditorTest extends BaseUITestCase { super.tearDown(); } - private void setUpEditor(String file) throws PartInitException { - IEditorPart editor= EditorTestHelper.openInEditor(ResourceTestHelper.findFile(file), true); + private void setUpEditor(IFile file) throws PartInitException { + IEditorPart editor= EditorTestHelper.openInEditor(file, true); assertNotNull(editor); assertTrue(editor instanceof CEditor); fEditor= (CEditor) editor; @@ -93,6 +93,10 @@ public class BasicCEditorTest extends BaseUITestCase { assertNotNull(fDocument); } + private void setUpEditor(String file) throws PartInitException { + setUpEditor(ResourceTestHelper.findFile(file)); + } + private void setUpEditor(File file) throws PartInitException, CModelException { IEditorPart editor= EditorUtility.openInEditor(new ExternalTranslationUnit(fCProject, Path.fromOSString(file.toString()), CCorePlugin.CONTENT_TYPE_CXXSOURCE)); assertNotNull(editor); @@ -105,6 +109,119 @@ public class BasicCEditorTest extends BaseUITestCase { assertNotNull(fDocument); } + public void testEditTranslationUnit() throws Exception { + final String file= "/ceditor/src/main.cpp"; + fCProject= EditorTestHelper.createCProject("ceditor", "resources/ceditor", false); + IFile mainFile= ResourceTestHelper.findFile(file); + assertNotNull(mainFile); + setUpEditor(mainFile); + fSourceViewer= EditorTestHelper.getSourceViewer(fEditor); + assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100)); + String content= fDocument.get(); + setCaret(0); + String newtext= "/* "+getName()+" */"; + type(newtext); + type('\n'); + String newContent= fDocument.get(); + assertEquals("Edit failed", newtext, newContent.substring(0, newtext.length())); + // save + fEditor.doSave(new NullProgressMonitor()); + assertFalse("Editor is still dirty", fEditor.isDirty()); + // close and reopen + EditorTestHelper.closeEditor(fEditor); + setUpEditor(mainFile); + fSourceViewer= EditorTestHelper.getSourceViewer(fEditor); + assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100)); + content= fDocument.get(); + assertEquals("Save failed", newContent, content); + // check reconciler + ITranslationUnit tUnit= (ITranslationUnit)fEditor.getInputCElement(); + ICElement[] children= tUnit.getChildren(); + assertEquals(2, children.length); + setCaret(content.length()); + type('\n'); + type("void func() {}\n"); + assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100)); + children= tUnit.getChildren(); + assertEquals(3, children.length); + } + //{Point.cpp} + //#include + //class Point { + //public: + // Point(double xc, double yc) : + // x(xc), y(yc) {} + // double distance(const Point& other) const; + // int compareX(const Point& other) const; + // double x; + // double y; + //}; + //double Point::distance(const Point& other) const { + // double dx = x - other.x; + // double dy = y - other.y; + // return sqrt(dx * dx + dy * dy); + //} + //int Point::compareX(const Point& other) const { + // if (x < other.x) { + // return -1; + // } + // else if (x > other.x) { + // return 1; + // } + // else { + // return 0; + // } + //} + public void testEditNewTranslationUnit() throws Exception { + fCProject= EditorTestHelper.createCProject("ceditor", "resources/ceditor", false); + IFile newFile= createFile(fCProject.getProject(), "Point.cpp", ""); + assertNotNull(newFile); + setUpEditor(newFile); + fSourceViewer= EditorTestHelper.getSourceViewer(fEditor); + assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100)); + String content= fDocument.get(); + setCaret(0); + String newText= "/* "+getName()+" */\n"; + newText += readTaggedComment("Point.cpp"); + String[] lines= newText.split("\\r\\n|\\r|\\n"); + for (int i = 0; i < lines.length; i++) { + String line= lines[i].trim(); + if (line.startsWith("}")) { + setCaret(fDocument.get().indexOf(line, getCaret())+line.length()); + Thread.sleep(500); + } else { + if (i > 0) type('\n'); + type(line); + Thread.sleep(200); + } + } + String newContent= fDocument.get(); + String[] newLines= newContent.split("\\r\\n|\\r|\\n"); + for (int i = 0; i < lines.length; i++) { + String line= lines[i].trim(); + assertEquals(line, newLines[i].trim()); + } + // save + fEditor.doSave(new NullProgressMonitor()); + assertFalse("Editor is still dirty", fEditor.isDirty()); + // close and reopen + EditorTestHelper.closeEditor(fEditor); + setUpEditor(newFile); + fSourceViewer= EditorTestHelper.getSourceViewer(fEditor); + assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100)); + content= fDocument.get(); + assertEquals("Save failed", newContent, content); + // check reconciler + ITranslationUnit tUnit= (ITranslationUnit)fEditor.getInputCElement(); + ICElement[] children= tUnit.getChildren(); + assertEquals(4, children.length); + setCaret(content.length()); + type('\n'); + type("void func() {}\n"); + assertTrue(EditorTestHelper.joinReconciler(fSourceViewer, 0, 10000, 100)); + children= tUnit.getChildren(); + assertEquals(5, children.length); + } public void testEditInNonCProject() throws Exception { final String file= "/ceditor/src/main.cpp"; fNonCProject= EditorTestHelper.createNonCProject("ceditor", "resources/ceditor", false);