packages feed

tagsoup-megaparsec-0.1.0.0: test/Spec.hs

{-# LANGUAGE QuasiQuotes #-}
import Test.Hspec
import Text.RawString.QQ
import Text.HTML.TagSoup
import Text.Megaparsec
import Text.Megaparsec.TagSoup

type StringTagParser = TagParser String

testDoc = [r|
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
|]

liParser :: StringTagParser String
liParser = do
  tagOpen "li"
  text <- tagText
  tagClose "li"
  return (fromTagText text)

ulParser :: StringTagParser [String]
ulParser = do
  tagOpen "ul"
  texts <- many liParser
  tagClose "ul"
  return texts

tagParserSpec :: Spec
tagParserSpec = do
  let input = parseTags testDoc
  describe "TagParser" $ do
    it "parses a xml doc" $
      parse (whitespace *> ulParser) "" input `shouldBe` Right ["Item 1", "Item 2"]

main :: IO ()
main = hspec tagParserSpec