module Html where import Test.Framework (Test, testGroup) import Test.Framework.Providers.HUnit (testCase) import Test.HUnit (Assertion, assertEqual) import Text.HTML.TagSoup.Entity (lookupEntity) replace_entities :: String -> String replace_entities [] = [] replace_entities ('&':xs) = let (b, a) = break (== ';') xs in case (lookupEntity b, a) of (Just c, ';':as) -> c : replace_entities as _ -> '&' : replace_entities xs replace_entities (x:xs) = x : replace_entities xs html_tests :: Test html_tests = testGroup "HTML Tests" [ tc1 ] where tc1 = testCase "All entities are replaced correctly." test_replace_entities test_replace_entities :: Assertion test_replace_entities = assertEqual description expected_text actual_text where description = "All entities are replaced correctly." actual_text = replace_entities $ ""The moon is gay……" " ++ "said <insert the current president of the " ++ "United States of America>. “It’s " ++ "OK—–he’s not a real doctor.”" expected_text = "\"The moon is gay……\" said . " ++ "“It’s OK—–he’s not a real doctor.”"