gopro-plus-0.6.6.0: src/GoPro/Plus/Arbitrary.hs
{-|
Module : GoPro.Plus.Arbitrary
Description : Arbitrary instances.
Copyright : (c) Dustin Sallings, 2020
License : BSD3
Maintainer : dustin@spy.net
Stability : experimental
Arbitrary instances for GoPro.Plus
-}
{-# OPTIONS_GHC -Wno-orphans #-}
module GoPro.Plus.Arbitrary where
import Data.Text (Text)
import qualified Data.Text as T
import Generic.Random (genericArbitrary, uniform)
import Test.QuickCheck (Arbitrary (..), Gen, NonNegative (..), arbitraryBoundedEnum, choose,
elements, listOf, oneof, vector)
import Test.QuickCheck.Instances.Time ()
import GoPro.Plus.Auth
import GoPro.Plus.Media
instance Arbitrary FileInfo where arbitrary = genericArbitrary uniform
instance Arbitrary FileStuff where
arbitrary = do
_files <- vector =<< choose (0,3)
_variations <- vector =<< choose (0,3)
_sprites <- vector =<< choose (0,3)
_sidecar_files <- vector =<< choose (0,3)
pure FileStuff{..}
instance Arbitrary Variation where arbitrary = genericArbitrary uniform
instance Arbitrary SpriteFrame where arbitrary = genericArbitrary uniform
instance Arbitrary SidecarFile where arbitrary = genericArbitrary uniform
instance Arbitrary Sprite where arbitrary = genericArbitrary uniform
instance Arbitrary File where arbitrary = genericArbitrary uniform
instance Arbitrary AuthInfo where arbitrary = AuthInfo <$> aText <*> (getNonNegative <$> arbitrary) <*> aText <*> aText
aString :: Gen String
aString = listOf (elements (['a'..'z'] <> ['A'..'Z'] <> ['0'..'9'] <> "?<>/.\\!@#$%^&*()_-'\";:{}[]"))
aText :: Gen Text
aText = T.pack <$> aString
gMaybe :: Gen a -> Gen (Maybe a)
gMaybe a = oneof [pure Nothing, Just <$> a]
instance Arbitrary Medium where
arbitrary = Medium
<$> aText
<*> gMaybe aString
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> gMaybe aString
<*> arbitrary
<*> aString
<*> arbitrary
<*> arbitrary
<*> gMaybe aString
instance Arbitrary Moment where arbitrary = Moment <$> aText <*> arbitrary
instance Arbitrary ReadyToViewType where arbitrary = arbitraryBoundedEnum
instance Arbitrary MediumType where arbitrary = arbitraryBoundedEnum
instance Arbitrary PageInfo where arbitrary = genericArbitrary uniform
instance Arbitrary Listing where arbitrary = genericArbitrary uniform