twitter-types-0.11.0: tests/Instances.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Instances where
import Control.Applicative
import Data.Aeson
#if MIN_VERSION_aeson(2, 0, 0)
import Data.Aeson.KeyMap as KeyMap
#else
import Data.HashMap.Strict as KeyMap
#endif
import Data.HashMap.Strict as HashMap
import Data.String
import qualified Data.Text as T
import Data.Time (UTCTime (..), defaultTimeLocale, fromGregorian, readTime)
import Generic.Random
import Test.Tasty.QuickCheck
import Web.Twitter.Types
instance IsString UTCTime where
fromString = readTime defaultTimeLocale twitterTimeFormat
instance Arbitrary UTCTime where
arbitrary =
do
randomDay <- choose (1, 29) :: Gen Int
randomMonth <- choose (1, 12) :: Gen Int
randomYear <- choose (2001, 2002) :: Gen Integer
randomTime <- choose (0, 86401) :: Gen Int
return $ UTCTime (fromGregorian randomYear randomMonth randomDay) (fromIntegral randomTime)
instance Arbitrary T.Text where
arbitrary = T.pack <$> arbitrary
instance Arbitrary Value where
arbitrary =
elements
[ Object KeyMap.empty
, Object (KeyMap.fromList [("test", Number 2), ("value", String "non empty")])
]
-- derive makeArbitrary ''StreamingAPI
instance Arbitrary Status where
arbitrary = do
qt <- frequency [(5, Just <$> arbitrary), (95, pure Nothing)] :: Gen (Maybe Status)
rt <- frequency [(5, Just <$> arbitrary), (95, pure Nothing)] :: Gen (Maybe Status)
Status <$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> pure Nothing
<*> pure (statusId <$> qt)
<*> pure qt
<*> arbitrary
<*> arbitrary
<*> pure rt
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
instance Arbitrary SearchStatus where
arbitrary = genericArbitraryU
instance Arbitrary SearchMetadata where
arbitrary = genericArbitraryU
instance Arbitrary RetweetedStatus where
arbitrary = genericArbitraryU
instance Arbitrary DirectMessage where
arbitrary = genericArbitrarySingleG customGens
where
customGens :: Gen Integer :+ ()
customGens =
(getNonNegative <$> arbitrary) :+ ()
instance Arbitrary EventTarget where
arbitrary = genericArbitraryU
instance Arbitrary Event where
arbitrary = genericArbitraryU
instance Arbitrary Delete where
arbitrary = genericArbitraryU
instance Arbitrary User where
arbitrary = genericArbitraryU
instance Arbitrary List where
arbitrary = genericArbitraryU
instance Arbitrary HashTagEntity where
arbitrary = genericArbitraryU
instance Arbitrary UserEntity where
arbitrary = genericArbitraryU
instance Arbitrary URLEntity where
arbitrary = genericArbitraryU
instance Arbitrary MediaEntity where
arbitrary = do
ms <- arbitrary
MediaEntity
<$> arbitrary
<*> arbitrary
<*> pure (HashMap.fromList [("medium", ms)])
<*> arbitrary
<*> arbitrary
<*> arbitrary
instance Arbitrary MediaSize where
arbitrary = genericArbitraryU
instance Arbitrary Coordinates where
arbitrary = genericArbitraryU
instance Arbitrary Place where
arbitrary = do
Place HashMap.empty
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
instance Arbitrary BoundingBox where
arbitrary = genericArbitraryU
instance Arbitrary Entities where
arbitrary = genericArbitraryU
instance Arbitrary ExtendedEntities where
arbitrary = genericArbitraryU
instance Arbitrary Variant where
arbitrary = genericArbitraryU
instance Arbitrary VideoInfo where
arbitrary = genericArbitraryU
instance Arbitrary ExtendedEntity where
arbitrary = do
ms <- arbitrary
ExtendedEntity
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> pure (HashMap.fromList [("medium", ms)])
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
instance Arbitrary a => Arbitrary (Entity a) where
arbitrary = do
a <- arbitrary
ind <- arbitrary
return $ Entity a ind
instance Arbitrary Contributor where
arbitrary = genericArbitraryU
instance Arbitrary ImageSizeType where
arbitrary = genericArbitraryU
instance Arbitrary UploadedMedia where
arbitrary = genericArbitraryU
instance Arbitrary DisplayTextRange where
arbitrary = genericArbitraryU