packages feed

shelly-extra-0.2.2: test/main.hs

{-# Language OverloadedStrings #-}
{-# Language ExtendedDefaultRules #-}
{-# Language ScopedTypeVariables #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}

import Shelly
import Shelly.Background
import Data.Text.Lazy (Text, stripEnd)
import Test.HUnit
default (Text)

shIOUnit :: ShIO ()
shIOUnit = do
  cmd "pwd"
  chdir ".." $
    cmd "pwd"

main :: IO ()
main = do
  -- stdin
  shelly $ do
    setStdin "in"
    let overStdin = "override stdin"
    setStdin overStdin
    over <- run "cat" ["-"]
    liftIO $ stripEnd over @?= overStdin

  -- various uses of cmd
  shelly $ do
    recho <- cmd "echo" "cmd"
    _<-cmd "echo" "bar" "baz"
    echo recho

    (res :: Text) <- cmd "pwd"
    liftIO $ putStrLn $ show res
    inspect res

    inspect =<< (cmd "echo" "compose" :: ShIO Text)
    inspect =<< (cmd "pwd")

    -- this somehow forces more evaluation
    shIOUnit

  -- waiting on background jobs
  shelly $ do
    jobs 2 $ \job -> do
      _<- background job $ cmd "sleep" "2"
      echo "immediate"
      _<- background job $ cmd "sleep" "2"
      echo "immediate2"
      _<- background job $ cmd "sleep" "2"
      echo "blocked by background "
 
    echo "blocked by jobs"