packages feed

friendly-time-0.3: tests/Main.hs

module Main where

import Test.Framework
import Test.Framework.Providers.HUnit

import Test.HUnit

import Data.Maybe (fromJust)
import Data.Time.Clock
import Data.Time.Format
import Data.Time.Format.Human
import System.Locale

p :: String -> UTCTime
p = fromJust . parseTime defaultTimeLocale "%F %T"

helper :: String -> String -> String
helper future past = humanReadableTime' (p future) (p past)

testJustNow = "just now" @=? helper "2013-08-04 22:30:00"
                                    "2013-08-04 22:30:00"

testSecondsAgo = "13 seconds ago" @=? helper "2013-08-04 22:30:13"
                                             "2013-08-04 22:30:00"

testMinuteAgo = "one minute ago" @=? helper "2013-08-04 22:31:20"
                                            "2013-08-04 22:30:00"

testMinutesAgo = "10 minutes ago" @=? helper "2013-08-04 22:40:00"
                                             "2013-08-04 22:30:00"

testHourAgo = "one hour ago" @=? helper "2013-08-04 23:40:00"
                                        "2013-08-04 22:30:00"

testHoursAgo = "about 4 hours ago" @=? helper "2013-08-05 02:40:00"
                                              "2013-08-04 22:30:00"

testDow = "at 10:30 PM on Sunday" @=? helper "2013-08-08 10:10:10"
                                             "2013-08-04 22:30:00"

testDaysAgo = "6 days ago" @=? helper "2013-08-10 22:40:00"
                                      "2013-08-04 22:30:00"

testWeekAgo = "1 week ago" @=? helper "2013-08-16 22:40:00"
                                      "2013-08-04 22:30:00"

testWeeksAgo = "4 weeks ago" @=? helper "2013-09-04 22:40:00"
                                        "2013-08-04 22:30:00"

testThisYear = "on Aug  4" @=? helper "2013-11-04 22:40:00"
                                       "2013-08-04 22:30:00"

testPrevYear = "on Aug  4, 2013" @=? helper "2014-11-04 22:40:00"
                                            "2013-08-04 22:30:00"

tests = [
    testGroup "English friendly time"
        [ testCase "render now" testJustNow
        , testCase "seconds ago" testSecondsAgo
        , testCase "minute ago" testMinuteAgo
        , testCase "minutes ago" testMinutesAgo
        , testCase "hour ago" testHourAgo
        , testCase "hours ago" testHoursAgo
        , testCase "day of week" testDow
        , testCase "days ago" testDaysAgo
        , testCase "week ago" testWeekAgo
        , testCase "weeks ago" testWeeksAgo
        , testCase "this year" testThisYear
        , testCase "previous year" testPrevYear
        ]
    ]

main :: IO ()
main = defaultMain tests