module Html where import Test.HUnit 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 = [ test_replace_entities ] test_replace_entities :: Test test_replace_entities = TestCase $ 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.”"