c0beb436f91f36e531288963d5c57859320c6f2e
[idea/community.git] / platform / platform-tests / testSrc / com / intellij / openapi / fileEditor / NewDocumentHistoryTest.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.fileEditor;
3
4 import com.intellij.codeInsight.navigation.NavigationUtil;
5 import com.intellij.openapi.command.CommandProcessor;
6 import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
7 import com.intellij.openapi.fileEditor.impl.IdeDocumentHistoryImpl;
8 import com.intellij.openapi.util.Disposer;
9 import com.intellij.openapi.vfs.VirtualFile;
10 import com.intellij.psi.PsiManager;
11 import org.junit.Assert;
12
13 /**
14  * @author Dmitry Avdeev
15  */
16 public class NewDocumentHistoryTest extends HeavyFileEditorManagerTestCase {
17   private IdeDocumentHistoryImpl myHistory;
18
19   @Override
20   public void setUp() throws Exception {
21     super.setUp();
22     myHistory = new IdeDocumentHistoryImpl(getProject(), FileEditorManagerEx.getInstanceEx(getProject()));
23   }
24
25   @Override
26   protected void tearDown() throws Exception {
27     try {
28       Disposer.dispose(myHistory);
29     }
30     catch (Throwable e) {
31       addSuppressedException(e);
32     }
33     finally {
34       myHistory = null;
35       super.tearDown();
36     }
37   }
38
39   public void testBackNavigationBetweenEditors() {
40     FileEditorProvider.EP_FILE_EDITOR_PROVIDER
41       .getPoint(null).registerExtension(new FileEditorManagerTest.MyFileEditorProvider(), myFixture.getTestRootDisposable());
42     VirtualFile file = getFile("/src/1.txt");
43     assertNotNull(file);
44     FileEditorManagerEx manager = FileEditorManagerEx.getInstanceEx(getProject());
45     FileEditor[] editors = manager.openFile(file, true);
46     assertEquals(2, editors.length);
47     assertEquals("Text", manager.getSelectedEditor(file).getName());
48     manager.setSelectedEditor(file, "mock");
49     assertEquals("mockEditor", manager.getSelectedEditor(file).getName());
50     manager.closeAllFiles();
51
52     myHistory.back();
53     assertEquals("mockEditor", manager.getSelectedEditor(file).getName());
54   }
55
56   public void testSelectFileOnNavigation() {
57     VirtualFile file1 = getFile("/src/1.txt");
58     FileEditorManagerEx manager = FileEditorManagerEx.getInstanceEx(getProject());
59     manager.openFile(file1, true);
60     VirtualFile file2 = getFile("/src/2.txt");
61     manager.openFile(file2, true);
62     NavigationUtil.activateFileWithPsiElement(PsiManager.getInstance(getProject()).findFile(file1));
63     VirtualFile[] files = manager.getSelectedFiles();
64     assertEquals(1, files.length);
65     assertEquals("1.txt", files[0].getName());
66   }
67
68   public void testMergingCommands() {
69     VirtualFile file1 = getFile("/src/1.txt");
70     VirtualFile file2 = getFile("/src/2.txt");
71     VirtualFile file3 = getFile("/src/3.txt");
72
73     FileEditorManagerEx manager = FileEditorManagerEx.getInstanceEx(getProject());
74     manager.openFile(file1, true);
75     manager.openFile(file2, true);
76     Object group = new Object();
77     CommandProcessor.getInstance().executeCommand(getProject(), () -> {}, null, group);
78     CommandProcessor.getInstance().executeCommand(getProject(), () -> manager.openFile(file3, true), null, group);
79     myHistory.back();
80     VirtualFile[] selectedFiles = manager.getSelectedFiles();
81     Assert.assertArrayEquals(new VirtualFile[] {file2}, selectedFiles);
82   }
83 }