X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTwitter%2FStatus.hs;h=6238b684deffecd9094f2383069f739c179ae468;hb=d7c6b5499c0969b6e488d9fc583f93bbb4e3d4c7;hp=6ff7e6c1dba241880ed81d989f8bfa2f36f381f7;hpb=cf0e5470657c80d2e4db116b309e8ca35b4136ad;p=dead%2Fhalcyon.git diff --git a/src/Twitter/Status.hs b/src/Twitter/Status.hs index 6ff7e6c..6238b68 100644 --- a/src/Twitter/Status.hs +++ b/src/Twitter/Status.hs @@ -1,26 +1,35 @@ {-# LANGUAGE NoMonomorphismRestriction #-} -- | Functions and data for working with Twitter statuses. -module Twitter.Status +module Twitter.Status ( + Status(..), + Timeline, + get_max_status_id, + pretty_print, + status_tests, + utc_time_to_rfc822 ) where -import Control.Applicative ((<$>), (<*>)) -import Control.Monad (liftM) -import Data.Aeson ((.:), FromJSON(..), Value(Object)) -import Data.Maybe (fromMaybe, mapMaybe, isJust) -import Data.Monoid (mempty) -import Data.String.Utils (join, splitWs) -import Data.Text (pack) -import Data.Time (formatTime) -import Data.Time.Clock (UTCTime) -import Data.Time.Format (parseTime) -import Data.Time.LocalTime (TimeZone, utcToZonedTime) -import System.Locale (defaultTimeLocale, rfc822DateFormat) -import Test.HUnit -import Text.Regex (matchRegex, mkRegex) - -import StringUtils (listify) -import Twitter.User +import Control.Applicative ( (<$>), (<*>) ) +import Control.Monad ( liftM ) +import Data.Aeson ( (.:), FromJSON(..), Value(Object) ) +import Data.Maybe ( mapMaybe, isJust ) +import Data.Monoid ( mempty ) +import Data.String.Utils ( join, splitWs ) +import Data.Text ( pack ) +import Data.Time ( formatTime ) +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 Text.Regex ( matchRegex, mkRegex ) + +import Html ( replace_entities ) +import StringUtils ( listify ) +import Twitter.User ( User(..), screen_name_to_timeline_url ) data Status = Status { created_at :: Maybe UTCTime, @@ -40,7 +49,7 @@ instance FromJSON Status where (t .: id_field) <*> liftM isJustInt (t .: in_reply_to_status_id_field) <*> (t .: retweeted_field) <*> - (t .: text_field) <*> + liftM replace_entities (t .: text_field) <*> (t .: user_field) where -- The typechecker flips out without this. @@ -76,7 +85,7 @@ utc_time_to_rfc822 mtz utc = show_created_at :: Maybe TimeZone -> Status -> String show_created_at mtz = - (fromMaybe "") . (fmap $ utc_time_to_rfc822 mtz) . created_at + (maybe "" (utc_time_to_rfc822 mtz)) . created_at -- | Returns a nicely-formatted String representing the given 'Status' -- object. @@ -135,26 +144,30 @@ make_user_timeline_urls status = usernames = parse_usernames_from_status status -status_tests :: [Test] -status_tests = [ test_parse_usernames ] +status_tests :: Test +status_tests = + testGroup "Status Tests" [ tc1 ] + where + tc1 = testCase "All usernames are parsed." test_parse_usernames -test_parse_usernames :: Test +test_parse_usernames :: Assertion test_parse_usernames = - TestCase $ - assertEqual - "All usernames are parsed." - expected_usernames - actual_usernames - where - dummy_user = User { screen_name = "nobody" } - dummy_status = Status { status_id = 1, - created_at = Nothing, - text = "Hypothesis: @donsbot and @bonus500 are two personalities belonging to the same person.", - user = dummy_user, - reply = False, - retweeted = False - } - - actual_usernames = parse_usernames_from_status dummy_status - expected_usernames = ["donsbot", "bonus500"] + assertEqual + "All usernames are parsed." + expected_usernames + actual_usernames + where + dummy_user = User { screen_name = "nobody" } + dummy_text = "Hypothesis: @donsbot and @bonus500 are two " ++ + "personalities belonging to the same person." + dummy_status = Status { status_id = 1, + created_at = Nothing, + text = dummy_text, + user = dummy_user, + reply = False, + retweeted = False + } + + actual_usernames = parse_usernames_from_status dummy_status + expected_usernames = ["donsbot", "bonus500"]