extensions-0.0.0.0: test/Test/Extensions/Types.hs
module Test.Extensions.Types
( onOffSpec
) where
import GHC.LanguageExtensions.Type (Extension (..))
import Hedgehog (Gen, PropertyT, forAll, tripping)
import Test.Hspec (Expectation, Spec, describe, it, shouldBe)
import Test.Hspec.Hedgehog (hedgehog)
import Extensions.Types (OnOffExtension (..), mergeExtensions, readOnOffExtension,
showOnOffExtension)
import qualified Data.Set as Set
import qualified Data.Text as Text
import qualified Hedgehog.Gen as Gen
onOffSpec :: Spec
onOffSpec = describe "OnOffExtension tests" $ do
mergeSpec
propertiesSpec
mergeSpec :: Spec
mergeSpec = describe "Merging on-off extensions" $ do
it "should enable non default ext" $
checkMerge [On LambdaCase] [On LambdaCase]
it "should not add default ext" $
checkMerge [On ImplicitPrelude] []
it "should disable default ext" $
checkMerge [Off ImplicitPrelude] [Off ImplicitPrelude]
it "should not affect disabling non default ext" $
checkMerge [Off LambdaCase] []
it "should not affect enable+disable non default ext" $
checkMerge [On LambdaCase, Off LambdaCase] []
it "should enable when disable+enable non default ext" $
checkMerge [Off LambdaCase, On LambdaCase] [On LambdaCase]
it "should not affect disable+enable non default ext" $
checkMerge [Off ImplicitPrelude, On ImplicitPrelude] []
it "should enable when disable+enable non default ext" $
checkMerge [On ImplicitPrelude, Off ImplicitPrelude] [Off ImplicitPrelude]
where
checkMerge :: [OnOffExtension] -> [OnOffExtension] -> Expectation
checkMerge exts res = mergeExtensions exts `shouldBe` Set.fromList res
propertiesSpec :: Spec
propertiesSpec = describe "Property tests" $
it "read . show ≡ Just" roundtripProperty
roundtripProperty :: PropertyT IO ()
roundtripProperty = hedgehog $ do
onOffExtension <- forAll genOnOffExtension
tripping
onOffExtension
showOnOffExtension
(readOnOffExtension . Text.unpack)
genOnOffExtension :: Gen OnOffExtension
genOnOffExtension = Gen.choice
[ On <$> genExtension
, Off <$> genExtension
]
where
genExtension :: Gen Extension
genExtension = Gen.enumBounded