packages feed

hs-di-0.2.0: test/GradualSpec.hs

module GradualSpec where

import Test.Hspec hiding (specify)
import qualified Test.Hspec as Hspec (specify)
import Data.List

import Language.Haskell.TH
import DI
import SimpleDefs
import NotSoEasyToTestCode

import Data.Maybe
import Data.Time
import Data.IORef
import Data.String.Utils
import Common
import Control.Exception (evaluate)
import Gradual as G

inj
aMock = 33

spec = do
  specify "dependencies" $ do
    removeIname "aI" `shouldBe` "a"
    removeIname "aasdasdI" `shouldBe` "aasdasd"
    (evaluate $ removeIname "a") `shouldThrow` anyException
    (evaluate $ removeIname "I") `shouldThrow` anyException

  specify "injG should allow for seamless introduction" $ do
    G.a `shouldBe` 1
    G.b `shouldBe` 2
    G.c `shouldBe` 3
    $( bD $> assemble ) `shouldBe` 2
    $( bD $> override "a" "aMock" $> assemble ) `shouldBe` 34
    $( dD $> override "a" "aMock" $> assemble ) `shouldBe` 37
    G.aA `shouldBe` 1

runOnlyPrefix = [""]
specify a = if (any (`isPrefixOf` a) runOnlyPrefix)
  then Hspec.specify a
  else (\_->return ())