navigation to class fixed if file not opened (IDEADEV-41617 re-fixed): added test for editor selection

This commit is contained in:
Dmitry Avdeev
2013-04-30 13:40:21 +04:00
parent 2ce25fa129
commit c18ded1c74
2 changed files with 27 additions and 15 deletions
@@ -33,6 +33,7 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.messages.MessageBusConnection;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -51,30 +52,21 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme
/**
* State corresponding to the most recent file is the last
*/
private final ArrayList<HistoryEntry> myEntriesList;
private final ArrayList<HistoryEntry> myEntriesList = new ArrayList<HistoryEntry>();
/** Invoked by reflection */
EditorHistoryManager(final Project project, FileEditorManager fileEditorManager, final UISettings uiSettings){
EditorHistoryManager(final Project project, final UISettings uiSettings){
super(project);
myEntriesList = new ArrayList<HistoryEntry>();
MyEditorManagerListener editorManagerListener = new MyEditorManagerListener();
/**
* Updates history length
*/
final MyUISettingsListener myUISettingsListener = new MyUISettingsListener();
fileEditorManager.addFileEditorManagerListener(editorManagerListener, project);
project.getMessageBus().connect().subscribe(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER, new MyEditorManagerBeforeListener());
uiSettings.addUISettingsListener(myUISettingsListener, project);
uiSettings.addUISettingsListener(new MyUISettingsListener(), project);
}
public void projectOpened(){
connectToManager();
StartupManager.getInstance(myProject).registerPostStartupActivity(
new DumbAwareRunnable(){
public void run(){
// myElement may be null if node that correspondes to this manager does not exist
// myElement may be null if node that corresponds to this manager does not exist
if (myElement != null){
final List children = myElement.getChildren(HistoryEntry.TAG);
myElement = null;
@@ -100,6 +92,12 @@ public final class EditorHistoryManager extends AbstractProjectComponent impleme
);
}
public void connectToManager() {
MessageBusConnection connection = myProject.getMessageBus().connect();
connection.subscribe(FileEditorManagerListener.Before.FILE_EDITOR_MANAGER, new MyEditorManagerBeforeListener());
connection.subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new MyEditorManagerListener());
}
@NotNull
public String getComponentName(){
@@ -1,7 +1,9 @@
package com.intellij.openapi.fileEditor;
import com.intellij.codeInsight.navigation.NavigationUtil;
import com.intellij.openapi.components.impl.ComponentManagerImpl;
import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
import com.intellij.openapi.fileEditor.impl.EditorHistoryManager;
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
import com.intellij.openapi.fileEditor.impl.IdeDocumentHistoryImpl;
import com.intellij.openapi.vfs.LocalFileSystem;
@@ -35,6 +37,17 @@ public class NewDocumentHistoryTest extends PlatformLangTestCase {
assertEquals("mockEditor", myManager.getSelectedEditor(file).getName());
}
public void testSelectFileOnNavigation() throws Exception {
VirtualFile file1 = getFile("/src/1.txt");
myManager.openFile(file1, true);
VirtualFile file2 = getFile("/src/2.txt");
myManager.openFile(file2, true);
NavigationUtil.activateFileWithPsiElement(getPsiManager().findFile(file1));
VirtualFile[] files = myManager.getSelectedFiles();
assertEquals(1, files.length);
assertEquals("1.txt", files[0].getName());
}
protected VirtualFile getFile(String path) {
return LocalFileSystem.getInstance().refreshAndFindFileByPath(
PlatformTestUtil.getCommunityPath().replace(File.separatorChar, '/') + "/platform/platform-tests/testData/fileEditorManager" + path);
@@ -45,5 +58,6 @@ public class NewDocumentHistoryTest extends PlatformLangTestCase {
myManager = new FileEditorManagerImpl(getProject(), DockManager.getInstance(getProject()));
((ComponentManagerImpl)getProject()).registerComponentInstance(FileEditorManager.class, myManager);
((IdeDocumentHistoryImpl)IdeDocumentHistory.getInstance(getProject())).projectOpened();
EditorHistoryManager.getInstance(getProject()).connectToManager();
}
}