text-show-3.6: tests/Spec/GHC/GenericsSpec.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE TypeOperators #-}
#if __GLASGOW_HASKELL__ >= 706
{-# LANGUAGE DataKinds #-}
#endif
{-|
Module: Spec.GHC.GenericsSpec
Copyright: (C) 2014-2017 Ryan Scott
License: BSD-style (see the file LICENSE)
Maintainer: Ryan Scott
Stability: Provisional
Portability: GHC
@hspec@ tests for data types in the "GHC.Generics" module.
-}
module Spec.GHC.GenericsSpec (main, spec) where
import Data.Orphans ()
import Data.Proxy (Proxy(..))
import Generics.Deriving.Base ( U1, Par1, Rec1, K1, M1, (:+:), (:*:), (:.:)
, UChar, UDouble, UFloat, UInt, UWord
, Fixity, Associativity
#if MIN_VERSION_base(4,9,0)
, Meta(MetaData), SourceUnpackedness
, SourceStrictness, DecidedStrictness
#else
, Arity
#endif
)
import Instances.GHC.Generics ()
import Spec.Utils (matchesTextShowSpec, genericTextShowSpec)
import Test.Hspec (Spec, describe, hspec, parallel)
main :: IO ()
main = hspec spec
#if MIN_VERSION_base(4,9,0)
type MD = 'MetaData "Example" "Module" "package" 'False
m1Description :: String
m1Description = "M1 () ('MetaData \"Example\" \"Module\" \"package\" 'False) Maybe Int"
#else
type MD = ()
m1Description :: String
m1Description = "M1 () () Maybe Int"
#endif
spec :: Spec
spec = parallel $ do
describe "Fixity" $ do
let p :: Proxy Fixity
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "Associativity" $ do
let p :: Proxy Associativity
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
#if MIN_VERSION_base(4,9,0)
describe "SourceUnpackedness" $ do
let p :: Proxy SourceUnpackedness
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "SourceStrictness" $ do
let p :: Proxy SourceStrictness
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "DecidedStrictness" $ do
let p :: Proxy DecidedStrictness
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
#else
describe "Arity" $ do
let p :: Proxy Arity
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
#endif
describe "U1 Int" $ do
let p :: Proxy (U1 Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "Par1 Int" $ do
let p :: Proxy (Par1 Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "Rec1 Maybe Int" $ do
let p :: Proxy (Rec1 Maybe Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "K1 () Int ()" $ do
let p :: Proxy (K1 () Int ())
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe m1Description $ do
let p :: Proxy (M1 () MD Maybe Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "(Maybe :+: Maybe) Int" $ do
let p :: Proxy ((Maybe :+: Maybe) Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "(Maybe :*: Maybe) Int" $ do
let p :: Proxy ((Maybe :*: Maybe) Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "(Maybe :.: Maybe) Int" $ do
let p :: Proxy ((Maybe :.: Maybe) Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "UChar Int" $ do
let p :: Proxy (UChar Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "UDouble Int" $ do
let p :: Proxy (UDouble Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "UFloat Int" $ do
let p :: Proxy (UFloat Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "UInt Int" $ do
let p :: Proxy (UInt Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p
describe "UWord Int" $ do
let p :: Proxy (UWord Int)
p = Proxy
matchesTextShowSpec p
genericTextShowSpec p