b5f57febac055dbc255cc4d6337aacd821af5f4c
[idea/community.git] / python / educational-core / course-creator / testSrc / com / jetbrains / edu / coursecreator / actions / CCShowPreviewTest.java
1 package com.jetbrains.edu.coursecreator.actions;
2
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.util.Pair;
10 import com.intellij.openapi.vfs.VirtualFile;
11 import com.intellij.psi.PsiFile;
12 import com.intellij.testFramework.MapDataContext;
13 import com.intellij.testFramework.TestActionEvent;
14 import com.jetbrains.edu.coursecreator.CCTestCase;
15 import com.jetbrains.edu.coursecreator.CCTestsUtil;
16 import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
17
18 import java.util.List;
19
20 public class CCShowPreviewTest extends CCTestCase {
21
22   public void testPreviewUnavailable() {
23     VirtualFile file = configureByTaskFile("noplaceholders.txt");
24     CCShowPreview action = new CCShowPreview();
25     TestActionEvent e = getActionEvent(action, getPsiManager().findFile(file));
26     action.beforeActionPerformedUpdate(e);
27     assertTrue(e.getPresentation().isEnabled() && e.getPresentation().isVisible());
28     try {
29       action.actionPerformed(e);
30       assertTrue("No message shown", false);
31     } catch (RuntimeException ex) {
32       assertEquals(CCShowPreview.NO_PREVIEW_MESSAGE, ex.getMessage());
33     }
34   }
35
36   public void testOnePlaceholder() {
37     doTest("test");
38   }
39
40   public void testSeveralPlaceholders() {
41     doTest("several");
42   }
43
44   private void doTest(String name) {
45     VirtualFile file = configureByTaskFile(name + CCTestsUtil.BEFORE_POSTFIX);
46     CCShowPreview action = new CCShowPreview();
47     TestActionEvent e = getActionEvent(action, getPsiManager().findFile(file));
48     action.beforeActionPerformedUpdate(e);
49     assertTrue(e.getPresentation().isEnabled() && e.getPresentation().isVisible());
50     action.actionPerformed(e);
51     Editor editor = EditorFactory.getInstance().getAllEditors()[1];
52     Pair<Document, List<AnswerPlaceholder>> pair = getPlaceholders(name + CCTestsUtil.AFTER_POSTFIX);
53     assertEquals("Files don't match", editor.getDocument().getText(), pair.getFirst().getText());
54     for (AnswerPlaceholder placeholder : pair.getSecond()) {
55       assertNotNull("No highlighter for placeholder:" + CCTestsUtil.getPlaceholderPresentation(placeholder), getHighlighter(editor.getMarkupModel(), placeholder));
56     }
57     EditorFactory.getInstance().releaseEditor(editor);
58   }
59
60   @Override
61   protected String getTestDataPath() {
62     return super.getTestDataPath() + "/actions/preview";
63   }
64
65   TestActionEvent getActionEvent(AnAction action, PsiFile psiFile) {
66     MapDataContext context = new MapDataContext();
67     context.put(CommonDataKeys.PSI_FILE, psiFile);
68     context.put(CommonDataKeys.PROJECT, getProject());
69     context.put(LangDataKeys.MODULE, myFixture.getModule());
70     return new TestActionEvent(context, action);
71   }
72 }