blob: bbcbe9b4c2f24999ef3531e8d98753381ddefc01 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.history.integration.ui;
import com.intellij.history.integration.TestVirtualFile;
import com.intellij.history.integration.ui.actions.LocalHistoryAction;
import com.intellij.history.integration.ui.actions.ShowHistoryAction;
import com.intellij.history.integration.ui.actions.ShowSelectionHistoryAction;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
public class LocalHistoryActionsTest extends LocalHistoryUITestCase {
VirtualFile f;
Editor editor;
Document document;
@Override
protected void setUpInWriteAction() throws Exception {
super.setUpInWriteAction();
f = myRoot.createChildData(null, "f.txt");
document = FileDocumentManager.getInstance().getDocument(f);
document.setText("foo");
editor = getEditorFactory().createEditor(document);
}
@Override
protected void tearDown() throws Exception {
getEditorFactory().releaseEditor(editor);
super.tearDown();
}
private static EditorFactory getEditorFactory() {
return EditorFactory.getInstance();
}
public void testShowHistoryAction() throws IOException {
ShowHistoryAction a = new ShowHistoryAction();
assertStatus(a, myRoot, true);
assertStatus(a, f, true);
assertStatus(a, null, false);
assertStatus(a, myRoot.createChildData(null, "f.hprof"), false);
assertStatus(a, myRoot.createChildData(null, "f.xxx"), false);
}
public void testLocalHistoryActionDisabledWithoutProject() throws IOException {
LocalHistoryAction a = new LocalHistoryAction() {
@Override
public void actionPerformed(AnActionEvent e) {
}
};
assertStatus(a, myRoot, myProject, true);
assertStatus(a, myRoot, null, false);
}
public void testShowHistoryActionIsDisabledForMultipleSelection() throws Exception {
ShowHistoryAction a = new ShowHistoryAction();
assertStatus(a, new VirtualFile[] {f, new TestVirtualFile("ff")}, myProject, false);
}
public void testShowSelectionHistoryActionForSelection() throws Exception {
editor.getSelectionModel().setSelection(0, 2);
ShowSelectionHistoryAction a = new ShowSelectionHistoryAction();
AnActionEvent e = createEventFor(a, new VirtualFile[] {f}, myProject);
a.update(e);
assertTrue(e.getPresentation().isEnabled());
assertEquals("Show History for Selection", e.getPresentation().getText());
}
public void testShowSelectionHistoryActionIsDisabledForNonFiles() throws IOException {
ShowSelectionHistoryAction a = new ShowSelectionHistoryAction();
assertStatus(a, myRoot, false);
assertStatus(a, null, false);
}
public void testShowSelectionHistoryActionIsDisabledForEmptySelection() throws Exception {
ShowSelectionHistoryAction a = new ShowSelectionHistoryAction();
assertStatus(a, f, false);
}
private void assertStatus(AnAction a, VirtualFile f, boolean isEnabled) {
assertStatus(a, f, myProject, isEnabled);
}
private void assertStatus(AnAction a, VirtualFile f, Project p, boolean isEnabled) {
VirtualFile[] files = f == null ? null : new VirtualFile[]{f};
assertStatus(a, files, p, isEnabled);
}
private void assertStatus(AnAction a, VirtualFile[] files, Project p, boolean isEnabled) {
AnActionEvent e = createEventFor(a, files, p);
a.update(e);
assertEquals(isEnabled, e.getPresentation().isEnabled());
}
private AnActionEvent createEventFor(AnAction a, final VirtualFile[] files, final Project p) {
DataContext dc = new DataContext() {
@Override
@Nullable
public Object getData(String id) {
if (CommonDataKeys.VIRTUAL_FILE_ARRAY.is(id)) return files;
if (CommonDataKeys.EDITOR.is(id)) return editor;
if (CommonDataKeys.PROJECT.is(id)) return p;
return null;
}
};
return new AnActionEvent(null, dc, "", a.getTemplatePresentation(), ActionManager.getInstance(), -1);
}
}