package org.intellij.plugins.markdown.editor; import com.intellij.psi.PsiFile; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; import org.intellij.plugins.markdown.lang.psi.impl.MarkdownFile; import org.jetbrains.annotations.NotNull; public class MarkdownQuoteHandlerTest extends LightPlatformCodeInsightFixtureTestCase { private void doTest(@NotNull String text, char charToType, @NotNull String expectedResult) { final PsiFile file = myFixture.configureByText("test.md", text); assertInstanceOf(file, MarkdownFile.class); myFixture.type(charToType); myFixture.checkResult(expectedResult); } public void testSingleQuote() { doTest("Hello <caret> world", '\'', "Hello '<caret>' world"); } public void testSingleQuoteBeforeWord() { doTest("Hello <caret>world", '\'', "Hello '<caret>world"); } public void testSingleQuoteAtEof() { doTest("Hello <caret>", '\'', "Hello '<caret>'"); } public void testDoubleQuote() { doTest("Hello <caret> world", '"', "Hello \"<caret>\" world"); } public void testBacktick() { doTest("Hello <caret> world", '`', "Hello `<caret>` world"); } public void testEmphAsterisk() { doTest("Hello <caret> world", '*', "Hello *<caret> world"); } public void testEmphUnderscore() { doTest("Hello <caret> world", '_', "Hello _<caret> world"); } public void testSingleQuoteAsApostrophe() { doTest("Hello dear<caret> world", '\'', "Hello dear\'<caret> world"); } public void testBacktickAsAccent() { doTest("Hello dear<caret> world", '`', "Hello dear`<caret> world"); } public void testClosingQuote() { doTest("Hello '<caret>' world", '\'', "Hello ''<caret> world"); } public void testClosingQuoteWithWord() { doTest("Hello 'cool<caret>' world", '\'', "Hello 'cool'<caret> world"); } public void testBacktickShouldBeAdded() { final PsiFile file = myFixture.configureByText("test.md", "Hello <caret> world"); assertInstanceOf(file, MarkdownFile.class); myFixture.type('`'); myFixture.checkResult("Hello `<caret>` world"); myFixture.type('`'); myFixture.checkResult("Hello ``<caret>`` world"); myFixture.type('`'); myFixture.checkResult("Hello ```<caret>``` world"); } public void testBacktickShouldBeAddedStartOfLine() { final PsiFile file = myFixture.configureByText("test.md", "<caret>"); assertInstanceOf(file, MarkdownFile.class); myFixture.type('`'); myFixture.checkResult("`<caret>`"); myFixture.type('`'); myFixture.checkResult("``<caret>``"); myFixture.type('`'); myFixture.checkResult("```<caret>```"); } public void testBackticksGoodBalance() { doTest("Hello ``code<caret>`` world", '`', "Hello ``code`<caret>` world"); } public void testBackticksGoodBalance2() { doTest("Hello ``code`<caret>` world", '`', "Hello ``code``<caret> world"); } public void testBackticksBadBalance() { doTest("Hello ``code<caret>` world", '`', "Hello ``code`<caret>` world"); } }