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.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;
18 import java.util.List;
20 public class CCShowPreviewTest extends CCTestCase {
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());
29 action.actionPerformed(e);
30 assertTrue("No message shown", false);
31 } catch (RuntimeException ex) {
32 assertEquals(CCShowPreview.NO_PREVIEW_MESSAGE, ex.getMessage());
36 public void testOnePlaceholder() {
40 public void testSeveralPlaceholders() {
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));
57 EditorFactory.getInstance().releaseEditor(editor);
61 protected String getTestDataPath() {
62 return super.getTestDataPath() + "/actions/preview";
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);