iris-0.1.0.0: test/Test/Iris/Colour/Mode.hs
module Test.Iris.Colour.Mode (modeSpec) where
import Data.Foldable (for_)
import System.Environment (setEnv, unsetEnv)
import System.IO (stderr, stdout)
import Test.Hspec (Spec, before_, describe, it, shouldReturn)
import Iris.Cli.Colour (ColourOption (..))
import Iris.Colour.Mode (ColourMode (..), detectColourMode)
import Test.Iris.Common (checkCI)
modeSpec :: Spec
modeSpec = before_ clearAppEnv $ describe "Mode" $ do
let detectStdoutColour option = detectColourMode stdout option (Just "myapp")
let detectStderrColour option = detectColourMode stderr option (Just "myapp")
it "DisableColour when --no-colour" $ do
detectStdoutColour Never `shouldReturn` DisableColour
detectStderrColour Never `shouldReturn` DisableColour
it "EnableColour when --colour" $ do
detectStdoutColour Always `shouldReturn` EnableColour
detectStderrColour Always `shouldReturn` EnableColour
it "EnableColour in clear environment" $ do
ciColour <- colourWithCI
detectStdoutColour Auto `shouldReturn` ciColour
detectStderrColour Auto `shouldReturn` ciColour
it "DisableColour when NO_COLOR is set" $ do
setEnv "NO_COLOR" "1"
detectStdoutColour Auto `shouldReturn` DisableColour
detectStderrColour Auto `shouldReturn` DisableColour
it "DisableColour when NO_COLOUR is set" $ do
setEnv "NO_COLOUR" "1"
detectStdoutColour Auto `shouldReturn` DisableColour
detectStderrColour Auto `shouldReturn` DisableColour
it "DisableColour when MYAPP_NO_COLOR is set" $ do
setEnv "MYAPP_NO_COLOR" "1"
detectStdoutColour Auto `shouldReturn` DisableColour
detectStderrColour Auto `shouldReturn` DisableColour
it "DisableColour when MYAPP_NO_COLOUR is set" $ do
setEnv "MYAPP_NO_COLOUR" "1"
detectStdoutColour Auto `shouldReturn` DisableColour
detectStderrColour Auto `shouldReturn` DisableColour
it "DisableColour when TERM=dumb" $ do
setEnv "TERM" "dumb"
detectStdoutColour Auto `shouldReturn` DisableColour
detectStderrColour Auto `shouldReturn` DisableColour
it "EnableColour when TERM=xterm-256color" $ do
setEnv "TERM" "xterm-256color"
ciColour <- colourWithCI
detectStdoutColour Auto `shouldReturn` ciColour
detectStderrColour Auto `shouldReturn` ciColour
it "DisableColour when CI is set" $ do
ciColour <- colourWithCI
detectStdoutColour Auto `shouldReturn` ciColour
detectStderrColour Auto `shouldReturn` ciColour
-- Helper functions
testEnvVars :: [String]
testEnvVars =
[ "NO_COLOR"
, "NO_COLOUR"
, "MYAPP_NO_COLOR"
, "MYAPP_NO_COLOUR"
, "TERM"
]
clearAppEnv :: IO ()
clearAppEnv = for_ testEnvVars unsetEnv
colourWithCI :: IO ColourMode
colourWithCI = do
isCi <- checkCI
pure $ if isCi then DisableColour else EnableColour