Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| {-# OPTIONS_GHC -fno-warn-orphans #-} | |
| {-# LANGUAGE DeriveGeneric #-} | |
| module Main where | |
| ------------------------------------------------------------------------------ | |
| import Data.Foldable | |
| import Data.Time | |
| import GHC.Generics | |
| import System.Random | |
| import Test.Hspec | |
| import Data.Text (unpack) | |
| ------------------------------------------------------------------------------ | |
| import Fake.Cover | |
| import Fake.Combinators | |
| import Fake.Provider.Lang | |
| import Fake.Provider.Person.EN_US | |
| import Fake.Types | |
| ------------------------------------------------------------------------------ | |
| testFake :: FGen a -> a | |
| testFake (MkFGen f) = f $ mkStdGen 5 | |
| tc :: Coverage a -> [a] | |
| tc = testFake . sequence . unCoverage | |
| ------------------------------------------------------------------------------ | |
| main :: IO () | |
| main = hspec $ do | |
| describe "Fake.Cover" $ do | |
| it "Maybe Int" $ | |
| tc gcover `shouldBe` [Nothing, Just (94 :: Int)] | |
| it "Either Int Char" $ | |
| tc gcover `shouldBe` [Left (53 :: Int), Right 't'] | |
| it "(Maybe Int, ThreePhonetic)" $ | |
| tc gcover `shouldBe` | |
| [(Nothing,Alpha),(Just (84 :: Int),Bravo),(Nothing,Charlie)] | |
| it "(Either ThreePhonetic Four)" $ | |
| tc gcover `shouldBe` | |
| [ Left Alpha | |
| , Left Bravo | |
| , Left Charlie | |
| , Right (MOne 96) | |
| , Right (MTwo 'k') | |
| , Right (MThree 12) | |
| , Right (MFour 'v') | |
| ] | |
| -- Since Person contains one Maybe field, cover should generate two values | |
| it "Person" $ | |
| tc cover `shouldBe` | |
| [ Person "Maeve" "Russell" (fromGregorian 1958 10 12) Nothing | |
| , Person "Lavern" "Brooks" (fromGregorian 1966 07 21) (Just "123-45-6789") | |
| ] | |
| instance Cover Int where | |
| cover = Coverage [fakeInt 0 100] | |
| instance Cover Char where | |
| cover = Coverage [fakeLetter] | |
| data ThreePhonetic = Alpha | Bravo | Charlie | |
| deriving (Eq,Ord,Show,Generic) | |
| instance Cover ThreePhonetic where | |
| cover = gcover | |
| data Four = MOne Int | |
| | MTwo Char | |
| | MThree Int | |
| | MFour Char | |
| deriving (Eq,Ord,Show,Generic) | |
| instance Cover Four where | |
| cover = gcover | |
| birthdayCoverage :: Coverage Day | |
| birthdayCoverage = fromGregorian | |
| <$> Coverage [fakeEnumFromTo 1950 2017] | |
| <*> Coverage [fakeInt 1 12] | |
| <*> Coverage [fakeInt 1 31] | |
| ssnCoverage :: Coverage String | |
| ssnCoverage = Coverage [elements ["123-45-6789", "000-00-0000"]] | |
| data Person = Person | |
| { personFirstName :: String | |
| , personLastName :: String | |
| , personBirthdate :: Day | |
| , personSSN :: Maybe String | |
| } deriving (Eq,Ord,Show,Generic) | |
| ------------------------------------------------------------------------------ | |
| -- | Must be able to define a Cover instnance for Person without needing to | |
| -- define instances for Day and String. | |
| --instance Cover Person where | |
| -- cover = gcover | |
| instance Cover Person where | |
| cover = Person | |
| <$> fmap unpack (Coverage [unSingleWord <$> firstName]) | |
| <*> fmap unpack (Coverage [unSingleWord <$> lastName]) | |
| <*> birthdayCoverage | |
| <*> asum [ pure Nothing, Just <$> ssnCoverage ] |