seonbi-0.2.3: test/Text/Seonbi/Html/TextNormalizerSpec.hs
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Seonbi.Html.TextNormalizerSpec (spec) where
import Control.Monad
import Test.Hspec
import Text.Seonbi.Html.Entity
import Text.Seonbi.Html.Tag
import Text.Seonbi.Html.TagStack
import Text.Seonbi.Html.TextNormalizer
spec :: Spec
spec = do
specify "normalizeText" $
normalizeText
[ HtmlText { tagStack = [], rawText = "foo " }
, HtmlText { tagStack = [], rawText = "& bar" }
, HtmlCdata { tagStack = [], text = " & baz " }
, HtmlStartTag { tagStack = [], tag = P, rawAttributes = "" }
, HtmlText { tagStack = [P], rawText = "qux " }
, HtmlCdata { tagStack = [P], text = "& \"quux\"" }
, HtmlEndTag { tagStack = [], tag = P }
, HtmlCdata { tagStack = [], text = " <end>" }
] `shouldBe`
[ HtmlText { tagStack = [], rawText = "foo & bar & baz " }
, HtmlStartTag { tagStack = [], tag = P, rawAttributes = "" }
, HtmlText
{ tagStack = [P]
, rawText = "qux & "quux""
}
, HtmlEndTag { tagStack = [], tag = P }
, HtmlText { tagStack = [], rawText = " <end>" }
]
describe "normalizeCdata" $ do
let s1 = [] :: HtmlTagStack
let s2 = [Div, P] :: HtmlTagStack
specify "HtmlStartTag" $ do
let entity1 = HtmlStartTag
{ tagStack = s1
, tag = P
, rawAttributes = ""
}
normalizeCdata entity1 `shouldBe` entity1
let entity2 = HtmlStartTag
{ tagStack = s2
, tag = P
, rawAttributes = " class=\"entity2\""
}
normalizeCdata entity2 `shouldBe` entity2
let stacks = [s1, s2] :: [HtmlTagStack]
forM_ stacks $ \ s -> do
specify ("HtmlEndTag: " ++ show s) $ do
let e = HtmlEndTag { tagStack = s, tag = P }
normalizeCdata e `shouldBe` e
specify ("HtmlText: " ++ show s) $ do
let e = HtmlText { tagStack = s, rawText = "foo & bar" }
normalizeCdata e `shouldBe` e
specify ("HtmlComment: " ++ show s) $ do
let e = HtmlComment { tagStack = s, comment = "foo" }
normalizeCdata e `shouldBe` e
specify ("HtmlCdata: " ++ show s) $ do
let e = HtmlCdata { tagStack = s, text = "<p>foo & bar</p>" }
normalizeCdata e `shouldBe`
HtmlText
{ tagStack = s
, rawText = "<p>foo & bar</p>"
}
specify "escapeHtmlEntities" $ do
escapeHtmlEntities "<p id=\"foo\">" `shouldBe`
"<p id="foo">"
escapeHtmlEntities "AT&T" `shouldBe`
"AT&T"