module Main where import qualified Codec.Binary.UTF8.String as UTF8 import qualified Data.ByteString.Lazy as L import Data.ListLike (ListLike(concat)) import Prelude hiding (length, concat) import System.Exit import System.Posix.Files (getFileStatus, fileMode, setFileMode, unionFileModes, ownerExecuteMode, groupExecuteMode, otherExecuteMode) import System.Process (proc, shell) import System.Process.Progress (Output(..), readProcessChunks, keepStdout, discardStdout, collectOutputs) import System.Process.Read.Chunks (readProcessChunks') import Test.HUnit hiding (path) main :: IO () main = do chmod "Tests/Test1.hs" chmod "Tests/Test2.hs" chmod "Tests/Test4.hs" (c,st) <- runTestText putTextToShowS test1 -- (TestList (versionTests ++ sourcesListTests ++ dependencyTests ++ changesTests)) putStrLn (st "") case (failures c) + (errors c) of 0 -> return () _ -> exitFailure encode :: String -> L.ByteString encode = L.pack . UTF8.encode chmod :: FilePath -> IO () chmod path = getFileStatus "Tests/Test1.hs" >>= \ status -> setFileMode path (foldr unionFileModes (fileMode status) [ownerExecuteMode, groupExecuteMode, otherExecuteMode]) test1 :: Test test1 = TestLabel "test1" (TestList [ TestLabel "pnmfile3" $ TestCase (do jpg <- L.readFile "Tests/penguin.jpg" pnm <- readProcessChunks (proc "djpeg" []) jpg >>= return . concat . keepStdout :: IO L.ByteString info <- readProcessChunks (proc "pnmfile" []) pnm >>= return . concat . keepStdout :: IO L.ByteString assertEqual "pnmfile3" (encode "stdin:\tPPM raw, 96 by 96 maxval 255\n") info) , test2 , TestLabel "readProcessChunks stdout stderr" $ TestCase (do out <- readProcessChunks (shell "yes | head -10 | while read i; do echo stdout; echo stderr 1>&2; done") L.empty let result = collectOutputs out assertEqual "readProcessChunks stdout stderr" ([ExitSuccess], encode "stdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\n", encode "stderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\n", []) result) , test3 , TestLabel "readProcessChunks' stdout stderr" $ TestCase (do out <- readProcessChunks' (shell "yes | head -10 | while read i; do echo stdout; echo stderr 1>&2; done") L.empty let result = collectOutputs out assertEqual "readProcessChunks' stdout stderr" ([ExitSuccess], encode "stdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\nstdout\n", encode "stderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\nstderr\n", []) result) {- , TestLabel "timed dot test" $ TestCase (do output <- readModifiedProcess id (ShellCommand "Tests/Test2.hs") "" >>= return . take 10 assertEqual "timed dot test" ".........." output) -} ]) test2 :: Test test2 = TestLabel "readProcessChunks gzip" $ TestCase (do result <- readProcessChunks (shell "gzip -v -f < Tests/penguin.jpg") L.empty assertEqual "readProcessChunks gzip" [Stderr (encode " 2.0%\n"),Result ExitSuccess] (discardStdout result)) test3 :: Test test3 = TestLabel "readProcessChunks' gzip'" $ TestCase (do result <- readProcessChunks' (shell "gzip -v -f < Tests/penguin.jpg") L.empty assertEqual "readProcessChunks' gzip" [Stderr (encode " 2.0%\n"),Result ExitSuccess] (discardStdout result))