packages feed

vformat-time-0.1.0.0: test/Main.hs

{-# LANGUAGE OverloadedStrings #-}

module Main ( main ) where

import           Control.Exception

import           Data.Time.Calendar
import           Data.Time.Clock
import           Data.Time.Format
import           Data.Time.LocalTime
import           Text.Format
import           Text.Format.Time    hiding (formatTime)

main :: IO ()
main = do
  utc <- getCurrentTime
  zoned <- getZonedTime
  let tz = zonedTimeZone zoned
      locale = utcToLocalTime tz utc
      universal = read (show locale) :: UniversalTime
      day = localDay locale
      time = localTimeOfDay locale

  putStrLn "\n<<<<<<<<<<<<<<<<<<<<<< Test <<<<<<<<<<<<<<<<<<<<<<"

  it "UTCTime default specs" $
    format "{}" utc == formatTimeDef "%F %T%Q" utc
  it "ZonedTime default specs" $
    format "{}" zoned == formatTimeDef "%F %T%Q %Z" zoned
  it "LocalTime default specs" $
    format "{}" locale == formatTimeDef "%F %T%Q" locale
  it "UniversalTime default specs" $
    format "{}" universal == formatTimeDef "%F %T%Q" universal
  it "Day default specs" $
    format "{}" day == formatTimeDef "%F" day
  it "TimeZone default specs" $
    format "{}" tz == formatTimeDef "%Z" tz
  it "Customize specs" $
    format "{:%Y-%m-%d}" utc == formatTimeDef "%Y-%m-%d" utc

  putStrLn "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"


it :: String -> Bool -> IO ()
it = flip assert . putStrLn


formatTimeDef :: FormatTime t => String -> t -> String
formatTimeDef = formatTime defaultTimeLocale