1
0
Fork 0
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:
Anton Leherbauer 2006-12-14 14:21:29 +00:00
parent c1ca84452f
commit 1d75b6815e
4 changed files with 201 additions and 13 deletions

View file

@ -0,0 +1,5 @@
#include <iostream>
void main() {
std::cout << "Hello and so.\n";
}

View file

@ -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);
}
}

View file

@ -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

View file

@ -46,5 +46,8 @@ public class TextTestSuite extends TestSuite {
// folding tests
addTest(FoldingTest.suite());
// basic editing tests
addTest(BasicCEditorTest.suite());
}
}