]> gitweb.michael.orlitzky.com - dead/halcyon.git/blobdiff - src/Twitter/Status.hs
Clean up a bunch of code and comments.
[dead/halcyon.git] / src / Twitter / Status.hs
index 6238b684deffecd9094f2383069f739c179ae468..ba27d527d44f14ceeb3c6766e326d24d8beae501 100644 (file)
@@ -22,9 +22,8 @@ import Data.Time.Clock ( UTCTime )
 import Data.Time.Format ( parseTime )
 import Data.Time.LocalTime ( TimeZone, utcToZonedTime )
 import System.Locale ( defaultTimeLocale, rfc822DateFormat )
-import Test.Framework ( Test, testGroup )
-import Test.Framework.Providers.HUnit ( testCase )
-import Test.HUnit ( Assertion, assertEqual )
+import Test.Tasty ( TestTree, testGroup )
+import Test.Tasty.HUnit ( (@?=), testCase )
 import Text.Regex ( matchRegex, mkRegex )
 
 import Html ( replace_entities )
@@ -37,8 +36,8 @@ data Status = Status {
   reply :: Bool,
   retweeted :: Bool,
   text :: String,
-  user :: User
-  } deriving (Show, Eq)
+  user :: User }
+  deriving (Eq, Show)
 
 type Timeline = [Status]
 
@@ -66,6 +65,8 @@ instance FromJSON Status where
   -- Do whatever.
   parseJSON _ = mempty
 
+-- | Parse a timestamp from a status into a UTCTime (or Nothing).
+--
 parse_status_time :: String -> Maybe UTCTime
 parse_status_time =
   parseTime defaultTimeLocale status_format
@@ -74,6 +75,10 @@ parse_status_time =
     status_format :: String
     status_format = "%a %b %d %H:%M:%S %z %Y"
 
+
+-- | Given a 'TimeZone', convert a 'UTCTime' into an RFC822-format
+--   time string. If no 'TimeZone' is given, assume UTC.
+--
 utc_time_to_rfc822 :: Maybe TimeZone -> UTCTime -> String
 utc_time_to_rfc822 mtz utc =
   case mtz of
@@ -83,12 +88,18 @@ utc_time_to_rfc822 mtz utc =
     foo = formatTime defaultTimeLocale rfc822DateFormat
 
 
+-- | Get the 'created_at' time out of a 'Status' and display it as an
+--   RFC822-format time string. If there's no created-at time in the
+--   status, you'll get an empty string instead.
+--
 show_created_at :: Maybe TimeZone -> Status -> String
 show_created_at mtz =
   (maybe "" (utc_time_to_rfc822 mtz)) . created_at
 
+
 -- | Returns a nicely-formatted String representing the given 'Status'
 --   object.
+--
 pretty_print :: Maybe TimeZone -> Status -> String
 pretty_print mtz status =
   concat [ name,
@@ -110,6 +121,7 @@ pretty_print mtz status =
 
 -- | Given a list of statuses, returns the greatest status_id
 --   belonging to one of the statuses in the list.
+--
 get_max_status_id :: Timeline -> Integer
 get_max_status_id statuses =
   maximum status_ids
@@ -118,6 +130,7 @@ get_max_status_id statuses =
 
 
 -- | Parse one username from a word.
+--
 parse_username :: String -> Maybe String
 parse_username word =
   case matches of
@@ -130,13 +143,16 @@ parse_username word =
 
 
 -- | Parse all usernames of the form \@username from a status.
+--
 parse_usernames_from_status :: Status -> [String]
 parse_usernames_from_status status =
   mapMaybe parse_username status_words
   where
     status_words = splitWs (text status)
 
+
 -- | Get all referenced users' timeline URLs.
+--
 make_user_timeline_urls :: Status -> [String]
 make_user_timeline_urls status =
   map screen_name_to_timeline_url usernames
@@ -144,20 +160,17 @@ make_user_timeline_urls status =
     usernames = parse_usernames_from_status status
 
 
-status_tests :: Test
+status_tests :: TestTree
 status_tests =
-  testGroup "Status Tests" [ tc1 ]
-  where
-    tc1 = testCase "All usernames are parsed." test_parse_usernames
+  testGroup "Status Tests" [ test_parse_usernames ]
 
 
-test_parse_usernames :: Assertion
+test_parse_usernames :: TestTree
 test_parse_usernames =
-  assertEqual
-    "All usernames are parsed."
-    expected_usernames
-    actual_usernames
+  testCase description $ actual @?= expected
   where
+    description = "all usernames are parsed"
+
     dummy_user = User { screen_name = "nobody" }
     dummy_text = "Hypothesis: @donsbot and @bonus500 are two " ++
                  "personalities belonging to the same person."
@@ -169,5 +182,5 @@ test_parse_usernames =
                             retweeted = False
                           }
 
-    actual_usernames = parse_usernames_from_status dummy_status
-    expected_usernames = ["donsbot", "bonus500"]
+    actual = parse_usernames_from_status dummy_status
+    expected = ["donsbot", "bonus500"]