From 1d75b6815e64760994c7cf1e272cf8576e300808 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Thu, 14 Dec 2006 14:21:29 +0000 Subject: [PATCH] Add basic editor test for files in non-CProjects --- .../resources/ceditor/main.cpp | 5 + .../cdt/ui/tests/text/BasicCEditorTest.java | 148 ++++++++++++++++++ .../cdt/ui/tests/text/EditorTestHelper.java | 58 +++++-- .../cdt/ui/tests/text/TextTestSuite.java | 3 + 4 files changed, 201 insertions(+), 13 deletions(-) create mode 100644 core/org.eclipse.cdt.ui.tests/resources/ceditor/main.cpp create mode 100644 core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/BasicCEditorTest.java diff --git a/core/org.eclipse.cdt.ui.tests/resources/ceditor/main.cpp b/core/org.eclipse.cdt.ui.tests/resources/ceditor/main.cpp new file mode 100644 index 00000000000..76788d4687b --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/resources/ceditor/main.cpp @@ -0,0 +1,5 @@ +#include + +void main() { + std::cout << "Hello and so.\n"; +} 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 new file mode 100644 index 00000000000..3afeae83e2a --- /dev/null +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/BasicCEditorTest.java @@ -0,0 +1,148 @@ +/******************************************************************************* + * Copyright (c) 2006 Wind River Systems, Inc. and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Anton Leherbauer (Wind River Systems) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.ui.tests.text; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.ITextSelection; +import org.eclipse.jface.text.TextSelection; +import org.eclipse.jface.text.source.SourceViewer; +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.widgets.Event; +import org.eclipse.ui.PartInitException; + +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.core.testplugin.CProjectHelper; +import org.eclipse.cdt.ui.tests.BaseUITestCase; + +import org.eclipse.cdt.internal.ui.editor.CEditor; + +/** + * Basic CEditor tests. + * + * @since 4.0 + */ +public class BasicCEditorTest extends BaseUITestCase { + + private static CEditor fEditor; + private static SourceViewer fSourceViewer; + private ICProject fCProject; + private IProject fNonCProject; + private StyledText fTextWidget; + private Accessor fAccessor; + private IDocument fDocument; + + public static Test suite() { + return new TestSuite(BasicCEditorTest.class); + } + + protected void setUp() throws Exception { + super.setUp(); + } + + protected void tearDown () throws Exception { + EditorTestHelper.closeEditor(fEditor); + + if (fCProject != null) + CProjectHelper.delete(fCProject); + if (fNonCProject != null) { + ResourceHelper.delete(fNonCProject); + } + super.tearDown(); + } + + private void setUpEditor(String file) throws PartInitException { + fEditor= (CEditor) EditorTestHelper.openInEditor(ResourceTestHelper.findFile(file), true); + assertNotNull(fEditor); + fTextWidget= fEditor.getViewer().getTextWidget(); + assertNotNull(fTextWidget); + fAccessor= new Accessor(fTextWidget, StyledText.class); + fDocument= fEditor.getDocumentProvider().getDocument(fEditor.getEditorInput()); + assertNotNull(fDocument); + } + + public void testEditInNonCProject() throws Exception { + final String file= "/ceditor/src/main.cpp"; + fNonCProject = EditorTestHelper.createNonCProject("ceditor", "resources/ceditor", false); + setUpEditor(file); + 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()); + // close and reopen + EditorTestHelper.closeEditor(fEditor); + setUpEditor(file); + content= fDocument.get(); + assertEquals("Save failed", newContent, content); + } + + /** + * Type characters into the styled text. + * + * @param characters the characters to type + */ + private void type(CharSequence characters) { + for (int i= 0; i < characters.length(); i++) + type(characters.charAt(i), 0, 0); + } + + /** + * Type a character into the styled text. + * + * @param character the character to type + */ + private void type(char character) { + type(character, 0, 0); + } + + /** + * Type a character into the styled text. + * + * @param character the character to type + * @param keyCode the key code + * @param stateMask the state mask + */ + private void type(char character, int keyCode, int stateMask) { + Event event= new Event(); + event.character= character; + event.keyCode= keyCode; + event.stateMask= stateMask; + fAccessor.invoke("handleKeyDown", new Object[] {event}); + + new DisplayHelper() { + protected boolean condition() { + return false; + } + }.waitForCondition(EditorTestHelper.getActiveDisplay(), 50); + } + + private int getCaret() { + return ((ITextSelection) fEditor.getSelectionProvider().getSelection()).getOffset(); + } + + private void setCaret(int offset) { + fEditor.getSelectionProvider().setSelection(new TextSelection(offset, 0)); + int newOffset= ((ITextSelection)fEditor.getSelectionProvider().getSelection()).getOffset(); + assertEquals(offset, newOffset); + } +} diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/EditorTestHelper.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/EditorTestHelper.java index 41f2fd9ab4b..7f5e8e86615 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/EditorTestHelper.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/EditorTestHelper.java @@ -28,13 +28,16 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobManager; import org.eclipse.core.runtime.jobs.Job; @@ -69,7 +72,9 @@ import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider; import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider; import org.eclipse.ui.wizards.datatransfer.ImportOperation; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.index.IIndexManager; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.ui.CUIPlugin; @@ -256,7 +261,7 @@ public class EditorTestHelper { boolean interrupted= true; while (interrupted) { try { - Platform.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null); + Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null); interrupted= false; } catch (InterruptedException e) { interrupted= true; @@ -264,15 +269,8 @@ public class EditorTestHelper { } // Join indexing Logger.global.finer("join indexer"); -// new SearchEngine().searchAllTypeNames( -// null, -// "XXXXXXXXX".toCharArray(), // make sure we search a concrete name. This is faster according to Kent -// SearchPattern.R_EXACT_MATCH, -// IJavaSearchConstants.CLASS, -// SearchEngine.createJavaSearchScope(new ICElement[0]), -// new Requestor(), -// IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, -// null); + IIndexManager indexManager= CCorePlugin.getIndexManager(); + indexManager.joinIndexer(1000, new NullProgressMonitor()); // Join jobs joinJobs(0, 0, 500); Logger.global.exiting("EditorTestHelper", "joinBackgroundActivities"); @@ -301,7 +299,7 @@ public class EditorTestHelper { } public static boolean allJobsQuiet() { - IJobManager jobManager= Platform.getJobManager(); + IJobManager jobManager= Job.getJobManager(); Job[] jobs= jobManager.find(null); for (int i= 0; i < jobs.length; i++) { Job job= jobs[i]; @@ -435,7 +433,7 @@ public class EditorTestHelper { } public static ICProject createCProject(String project, String externalSourceFolder, boolean linkSourceFolder) throws CoreException { - ICProject cProject= CProjectHelper.createCProject(project, "bin", IPDOMManager.ID_NO_INDEXER); + ICProject cProject= CProjectHelper.createCCProject(project, "bin", IPDOMManager.ID_NO_INDEXER); IFolder folder; if (linkSourceFolder) folder= ResourceHelper.createLinkedFolder((IProject) cProject.getUnderlyingResource(), new Path("src"), CTestPlugin.getDefault(), new Path(externalSourceFolder)); @@ -448,6 +446,40 @@ public class EditorTestHelper { CProjectHelper.addCContainer(cProject, "src"); return cProject; } + + public static IProject createNonCProject(final String projectName, String externalSourceFolder, boolean linkSourceFolder) throws CoreException { + final IWorkspace ws = ResourcesPlugin.getWorkspace(); + final IProject newProject[] = new IProject[1]; + ws.run(new IWorkspaceRunnable() { + public void run(IProgressMonitor monitor) throws CoreException { + IWorkspaceRoot root = ws.getRoot(); + IProject project = root.getProject(projectName); + if (!project.exists()) { + project.create(null); + } else { + project.refreshLocal(IResource.DEPTH_INFINITE, null); + } + if (!project.isOpen()) { + project.open(null); + } + newProject[0] = project; + } + }, null); + + final IProject project= newProject[0]; + Assert.assertNotNull(project); + final IFolder folder; + if (linkSourceFolder) + folder= ResourceHelper.createLinkedFolder(project, new Path("src"), CTestPlugin.getDefault(), new Path(externalSourceFolder)); + else { + folder= project.getFolder("src"); + importFilesFromDirectory(FileTool.getFileInPlugin(CTestPlugin.getDefault(), new Path(externalSourceFolder)), folder.getFullPath(), null); + } + Assert.assertNotNull(folder); + Assert.assertTrue(folder.exists()); + + return project; + } public static IFile createFile(IContainer container, String fileName, String contents, IProgressMonitor monitor) throws CoreException { //Obtain file handle diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java index 6bea8b483cd..ab7325a2876 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/TextTestSuite.java @@ -46,5 +46,8 @@ public class TextTestSuite extends TestSuite { // folding tests addTest(FoldingTest.suite()); + + // basic editing tests + addTest(BasicCEditorTest.suite()); } }