我的目标是为我的Eclipse插件编写一个JUnit插件测试。测试应打开一个现有项目并在我的编辑器中打开一个文件。该文件的内容类型与plugin.xml
文件中的我的编辑器相关联。
使用Wiki页面How do I open an editor progrmamatically中的代码段,我得到了:
@Test
public void test() {
IProject project;
try {
URI locationURI = workspace.getRoot().getLocationURI();
project = ResourcesPlugin.getWorkspace().getRoot().getProject("/MyDemoProject");
if (!project.exists()) {
assert(false);
return;
}
project.open(null); // maybe not necessary. No action of already open.
} catch (CoreException e) {
assert(false);
return;
}
IFile file = project.getFile("/model/test/Adapter.grr");
IFileStore fileStore;
try {
fileStore = EFS.getStore(file.getLocationURI());
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IDE.openEditorOnFileStore( page, fileStore );
} catch (Exception e1) {
e1.printStackTrace();
}
}
我看到在运行中的日食中打开编辑器时,方法IDE.openEditorOnFileStore()
也被调用。但是在JUnit插件测试中,调用导致异常。
org.eclipse.ui.PartInitException: Editor could not be initialized.
at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3212)
at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3221)
at org.eclipse.ui.internal.EditorReference.initialize(EditorReference.java:353)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:340)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
这意味着对getSite().getWorkbenchWindow().run(false, true, runnable);
中的org.eclipse.ui.texteditor.AbstractTextEditor
的调用失败。在run
方法内部,是调用doSetInput(input);
引发NullpointerException。最后,在类FileStoreFileBuffer
中引发了异常:create(EFS.getStore(URIUtil.toURI(getLocation())), monitor);
方法中对create
的调用失败,可能是因为位置不正确(调试器显示了{{1} }。
我不知道为什么,因为文件路径正确。我应该提到我正在使用自定义FileStore实现,该实现具有方法/
,可以帮助我检查是否可以找到和读取文件。
我注意到呼叫String getContent()
成功返回了有效的page.openEditor(new FileEditorInput(file), "myeditorID");
。但是我收到一条错误消息
responseCode!= HttpURLConnection.HTTP_OK(原为404)
我假设我将需要fileStore变体,因为文件保留在我通过FileSystem实现访问的服务器上。