module Commonmark.Extensions.WikiLinkSpec where import Commonmark.Extensions.WikiLink import Commonmark.Simple import Test.Hspec import Text.Pandoc.Definition spec :: Spec spec = do describe "commonmark-wikilink" $ do it "basic" $ do let res = snd <$> parseMarkdownWithFrontMatter @Text fullMarkdownSpec "" "Hello [[World]]." expected = Pandoc mempty [Para [Str "Hello", Space, Str "[[World]]."]] res `shouldBe` Right expected it "wikilink-parsing" $ do let res = snd <$> parseMarkdownWithFrontMatter @Text (fullMarkdownSpec <> wikilinkSpec) "" "Hello [[World]]." expected = Pandoc mempty [ Para [ Str "Hello" , Space , Link ("", [], [("data-wikilink-type", "WikiLinkNormal")]) [] ("World", "") , Str "." ] ] res `shouldBe` Right expected describe "plainify" $ do it "basic" $ do plainify <$> parseMdPara1 "Hello" `shouldBe` Right "Hello" it "with space" $ do plainify <$> parseMdPara1 "Hello World" `shouldBe` Right "Hello World" -- FIXME xit "with link" $ do plainify <$> parseMdPara1 "[Hello](https://example.com)" `shouldBe` Right "Hello" it "with wikilink" $ do plainify <$> parseMdPara1 "[[World]]" `shouldBe` Right "[[World]]" it "with footnote" $ do plainify <$> parseMdPara1 "Hello[^1] World.\n\n[^1]: Some footnote." `shouldBe` Right "Hello World." it "with quotes" $ do plainify <$> parseMdPara1 "Foo \"Bar\" - MySite" `shouldBe` Right "Foo “Bar” - MySite" it "with emoji" $ do plainify <$> parseMdPara1 "Emoji :writing_hand:" `shouldBe` Right "Emoji ✍️" it "erases strikethroughs" $ do plainify <$> parseMdPara1 "Hello ~~wonderful~~ world!" `shouldBe` Right "Hello world!" -- | Parse Markdown with our wikilink parser enabled parseMd :: Text -> Either Text Pandoc parseMd = fmap snd . parseMarkdownWithFrontMatter @Text (fullMarkdownSpec <> wikilinkSpec) "" -- | Like `parseMd` but get just the first paragraph parseMdPara1 :: Text -> Either Text [Inline] parseMdPara1 s = do Pandoc _ (Para inlines : _) <- parseMd s pure inlines