packages feed

posix-escape-0.1: test/test.hs

{-# LANGUAGE
    CPP #-}

module Main(main) where

import Test.QuickCheck
import Test.QuickCheck.Monadic
import System.Process
import System.IO
import Control.Exception ( evaluate )

#ifdef UNICODE
import System.Posix.Escape.Unicode
#else
import System.Posix.Escape
#endif

echo :: String -> IO String
echo xs = do
    (_, Just hOut, _, hProc) <- createProcess $
        (shell ("/bin/echo -n " ++ xs)) { std_out = CreatePipe }
    out <- hGetContents hOut
    _ <- evaluate (length out)
    hClose hOut
    _ <- waitForProcess hProc
    return out

mangled :: String -> String
#ifdef UNICODE
mangled = id
#else
mangled = filter ((< 0x80) . fromEnum)
#endif

prop_escaped :: String -> Property
prop_escaped xs = monadicIO $ do
    pre (all (/= '\0') xs)
    ys <- run $ echo (escape xs)
    assert (mangled xs == ys)

main :: IO ()
main = quickCheck prop_escaped