{-# LANGUAGE ExtendedDefaultRules #-} {-# LANGUAGE CPP #-} import Test.Hspec import Data.Conduit.Shell hiding (ignore) -- https://github.com/fpco/stackage/issues/2355#issue-212177275 import Data.Conduit.Shell.PATH (true, false) import Data.Conduit.Shell.Segments (strings, ignore) import Control.Applicative main :: IO () main = hspec $ do describe "SHELL path functions" $ do it "false" $ do val <- run $ strings (false <|> echo "failed") val `shouldBe` ["failed"] it "true" $ do val <- run $ strings (true <|> echo "passed") val `shouldBe` [] describe "ls" $ do it "home directory check" $ do val <- run $ strings (ls "/") val `shouldContain` ["home"] it "long option" $ do val <- run $ strings (ls "-a" ["/"]) val `shouldContain` ["home"] describe "multiple string usage" $ do it "make two directory" $ do val <- run $ do ignore $ mkdir "-p" "mtest1" "mtest2" "mtest3" strings $ ls "." run $ rmdir ["mtest1", "mtest2", "mtest3"] val `shouldContain` ["mtest1", "mtest2", "mtest3"] describe "list usage in variadic" $ do it "two directory" $ do val <- run $ do ignore $ mkdir "-p" ["test1", "test2"] strings $ ls "." run $ rmdir ["test1", "test2"] val `shouldContain` ["test1", "test2"] describe "shell calls" $ do it "shell ls" $ do val <- run $ do strings $ shell "ls /" val `shouldContain` ["home"] describe "ordering of arguments" $ do it "echo -e" $ do val <- run $ do strings $ echo "-e" "hello\n" "haskell" #ifdef darwin_HOST_OS val `shouldBe` ["-e hello", " haskell"] #else val `shouldBe` ["hello", " haskell"] #endif it "mixed variant" $ do val <- run $ strings $ echo "-e" ["hello\n", "haskell"] #ifdef darwin_HOST_OS val `shouldBe` ["-e hello", " haskell"] #else val `shouldBe` ["hello", " haskell"] #endif it "list variant" $ do val <- run $ strings $ echo ["-e", "hello\n", "haskell"] #ifdef darwin_HOST_OS val `shouldBe` ["-e hello", " haskell"] #else val `shouldBe` ["hello", " haskell"] #endif describe "cd" $ do it "cd /" $ do val <- run $ do ignore $ cd "/" strings pwd val `shouldBe` ["/"] it "cd /home" $ do val <- run $ do ignore $ cd ["/home", undefined] strings pwd val `shouldBe` ["/home"]