mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-05 00:36:16 +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.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
|
||||
|
|
|
@ -46,5 +46,8 @@ public class TextTestSuite extends TestSuite {
|
|||
|
||||
// folding tests
|
||||
addTest(FoldingTest.suite());
|
||||
|
||||
// basic editing tests
|
||||
addTest(BasicCEditorTest.suite());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue