packages feed

commonmark-wikilink-0.2.0.0: test/Commonmark/Extensions/WikiLinkSpec.hs

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 "<fp>" "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) "<fp>" "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) "<fp>"

-- | Like `parseMd` but get just the first paragraph
parseMdPara1 :: Text -> Either Text [Inline]
parseMdPara1 s = do
  Pandoc _ (Para inlines : _) <- parseMd s
  pure inlines