mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-06 09:16:02 +02:00
Add basic editor test for files in non-CProjects
This commit is contained in:
parent
c1ca84452f
commit
1d75b6815e
4 changed files with 201 additions and 13 deletions
5
core/org.eclipse.cdt.ui.tests/resources/ceditor/main.cpp
Normal file
5
core/org.eclipse.cdt.ui.tests/resources/ceditor/main.cpp
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
std::cout << "Hello and so.\n";
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,13 +28,16 @@ import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IFolder;
|
import org.eclipse.core.resources.IFolder;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
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.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.IJobManager;
|
import org.eclipse.core.runtime.jobs.IJobManager;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
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.IImportStructureProvider;
|
||||||
import org.eclipse.ui.wizards.datatransfer.ImportOperation;
|
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.dom.IPDOMManager;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexManager;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
@ -256,7 +261,7 @@ public class EditorTestHelper {
|
||||||
boolean interrupted= true;
|
boolean interrupted= true;
|
||||||
while (interrupted) {
|
while (interrupted) {
|
||||||
try {
|
try {
|
||||||
Platform.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
|
Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
|
||||||
interrupted= false;
|
interrupted= false;
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
interrupted= true;
|
interrupted= true;
|
||||||
|
@ -264,15 +269,8 @@ public class EditorTestHelper {
|
||||||
}
|
}
|
||||||
// Join indexing
|
// Join indexing
|
||||||
Logger.global.finer("join indexer");
|
Logger.global.finer("join indexer");
|
||||||
// new SearchEngine().searchAllTypeNames(
|
IIndexManager indexManager= CCorePlugin.getIndexManager();
|
||||||
// null,
|
indexManager.joinIndexer(1000, new NullProgressMonitor());
|
||||||
// "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);
|
|
||||||
// Join jobs
|
// Join jobs
|
||||||
joinJobs(0, 0, 500);
|
joinJobs(0, 0, 500);
|
||||||
Logger.global.exiting("EditorTestHelper", "joinBackgroundActivities");
|
Logger.global.exiting("EditorTestHelper", "joinBackgroundActivities");
|
||||||
|
@ -301,7 +299,7 @@ public class EditorTestHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean allJobsQuiet() {
|
public static boolean allJobsQuiet() {
|
||||||
IJobManager jobManager= Platform.getJobManager();
|
IJobManager jobManager= Job.getJobManager();
|
||||||
Job[] jobs= jobManager.find(null);
|
Job[] jobs= jobManager.find(null);
|
||||||
for (int i= 0; i < jobs.length; i++) {
|
for (int i= 0; i < jobs.length; i++) {
|
||||||
Job job= jobs[i];
|
Job job= jobs[i];
|
||||||
|
@ -435,7 +433,7 @@ public class EditorTestHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ICProject createCProject(String project, String externalSourceFolder, boolean linkSourceFolder) throws CoreException {
|
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;
|
IFolder folder;
|
||||||
if (linkSourceFolder)
|
if (linkSourceFolder)
|
||||||
folder= ResourceHelper.createLinkedFolder((IProject) cProject.getUnderlyingResource(), new Path("src"), CTestPlugin.getDefault(), new Path(externalSourceFolder));
|
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");
|
CProjectHelper.addCContainer(cProject, "src");
|
||||||
return cProject;
|
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 {
|
public static IFile createFile(IContainer container, String fileName, String contents, IProgressMonitor monitor) throws CoreException {
|
||||||
//Obtain file handle
|
//Obtain file handle
|
||||||
|
|
|
@ -46,5 +46,8 @@ public class TextTestSuite extends TestSuite {
|
||||||
|
|
||||||
// folding tests
|
// folding tests
|
||||||
addTest(FoldingTest.suite());
|
addTest(FoldingTest.suite());
|
||||||
|
|
||||||
|
// basic editing tests
|
||||||
|
addTest(BasicCEditorTest.suite());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue