1 package com.jetbrains.edu.coursecreator.actions;
3 import com.intellij.openapi.actionSystem.AnAction;
4 import com.intellij.openapi.actionSystem.CommonDataKeys;
5 import com.intellij.openapi.actionSystem.LangDataKeys;
6 import com.intellij.openapi.editor.Document;
7 import com.intellij.openapi.editor.Editor;
8 import com.intellij.openapi.editor.EditorFactory;
9 import com.intellij.openapi.editor.markup.MarkupModel;
10 import com.intellij.openapi.editor.markup.RangeHighlighter;
11 import com.intellij.openapi.util.Pair;
12 import com.intellij.openapi.vfs.VirtualFile;
13 import com.intellij.psi.PsiFile;
14 import com.intellij.testFramework.MapDataContext;
15 import com.intellij.testFramework.TestActionEvent;
16 import com.jetbrains.edu.coursecreator.CCTestCase;
17 import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
18 import org.jetbrains.annotations.Nullable;
20 import java.util.List;
22 public class CCShowPreviewTest extends CCTestCase {
24 public void testPreviewUnavailable() {
25 VirtualFile file = configureByTaskFile("noplaceholders.txt");
26 CCShowPreview action = new CCShowPreview();
27 TestActionEvent e = getActionEvent(action, getPsiManager().findFile(file));
28 action.beforeActionPerformedUpdate(e);
29 assertTrue(e.getPresentation().isEnabled() && e.getPresentation().isVisible());
31 action.actionPerformed(e);
32 assertTrue("No message shown", false);
33 } catch (RuntimeException ex) {
34 assertEquals(CCShowPreview.NO_PREVIEW_MESSAGE, ex.getMessage());
38 public void testOnePlaceholder() {
39 doTest("test_before.txt", "test_after.txt");
42 public void testSeveralPlaceholders() {
43 doTest("several_before.txt", "several_after.txt");
46 private void doTest(String beforeName, String afterName) {
47 VirtualFile file = configureByTaskFile(beforeName);
48 CCShowPreview action = new CCShowPreview();
49 TestActionEvent e = getActionEvent(action, getPsiManager().findFile(file));
50 action.beforeActionPerformedUpdate(e);
51 assertTrue(e.getPresentation().isEnabled() && e.getPresentation().isVisible());
52 action.actionPerformed(e);
53 Editor editor = EditorFactory.getInstance().getAllEditors()[1];
54 Pair<Document, List<AnswerPlaceholder>> pair = getPlaceholders(afterName);
55 assertEquals("Files don't match", editor.getDocument().getText(), pair.getFirst().getText());
56 for (AnswerPlaceholder placeholder : pair.getSecond()) {
57 assertNotNull("No highlighter for placeholder", getHighlighter(editor.getMarkupModel(), placeholder));
59 EditorFactory.getInstance().releaseEditor(editor);
63 private static RangeHighlighter getHighlighter(MarkupModel model, AnswerPlaceholder placeholder) {
64 for (RangeHighlighter highlighter : model.getAllHighlighters()) {
65 int endOffset = placeholder.getOffset() + placeholder.getRealLength();
66 if (highlighter.getStartOffset() == placeholder.getOffset() && highlighter.getEndOffset() == endOffset) {
74 protected String getTestDataPath() {
75 return super.getTestDataPath() + "/actions/preview";
79 protected boolean shouldContainTempFiles() {
83 TestActionEvent getActionEvent(AnAction action, PsiFile psiFile) {
84 MapDataContext context = new MapDataContext();
85 context.put(CommonDataKeys.PSI_FILE, psiFile);
86 context.put(CommonDataKeys.PROJECT, getProject());
87 context.put(LangDataKeys.MODULE, myFixture.getModule());
88 return new TestActionEvent(context, action);