--- /dev/null
+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 <insert " ++
+ "the current president of the United States of America>. " ++
+ "“It’s OK—–he’s not a real doctor.”"