Repository : ssh://darcs.haskell.org//srv/darcs/testsuite

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/ff8408526f92b4ee4f513a1b3ce37433e2eb78d4

>---------------------------------------------------------------

commit ff8408526f92b4ee4f513a1b3ce37433e2eb78d4
Author: Ian Lynagh <[email protected]>
Date:   Sun Nov 20 01:23:48 2011 +0000

    Enable and fix the posix* tests

>---------------------------------------------------------------

 tests/lib/libposix/all.T           |    3 +
 tests/lib/libposix/posix002.hs     |    2 +-
 tests/lib/libposix/posix003.hs     |   21 +++++++--
 tests/lib/libposix/posix003.stdout |    1 +
 tests/lib/libposix/posix004.hs     |   80 +++++++++++++++---------------------
 5 files changed, 54 insertions(+), 53 deletions(-)

diff --git a/tests/lib/libposix/all.T b/tests/lib/libposix/all.T
new file mode 100644
index 0000000..49d25d8
--- /dev/null
+++ b/tests/lib/libposix/all.T
@@ -0,0 +1,3 @@
+test('posix002', reqlib('unix'), compile_and_run, [''])
+test('posix003', normal,         compile_and_run, [''])
+test('posix004', reqlib('unix'), compile_and_run, [''])
diff --git a/tests/lib/libposix/posix002.hs b/tests/lib/libposix/posix002.hs
index 8d01e8b..c5909ab 100644
--- a/tests/lib/libposix/posix002.hs
+++ b/tests/lib/libposix/posix002.hs
@@ -1,4 +1,4 @@
-import Posix
+import System.Posix.Process
 
 main =
     executeFile "printenv" True [] (Just [("ONE","1"),("TWO","2")])
diff --git a/tests/lib/libposix/posix003.hs b/tests/lib/libposix/posix003.hs
index dbea5e1..1298450 100644
--- a/tests/lib/libposix/posix003.hs
+++ b/tests/lib/libposix/posix003.hs
@@ -1,6 +1,17 @@
-import IO
-import Posix
 
-main = 
-    openFile "po003.out" WriteMode >>= \ h ->
-    runProcess "pwd" [] Nothing (Just "/usr/tmp") Nothing (Just h) Nothing
+import Control.Monad
+import Data.Char
+import System.Exit
+import System.IO
+import System.Process
+
+main = do hw <- openFile "po003.out" WriteMode
+          ph <- runProcess "pwd" [] (Just "/tmp") Nothing Nothing (Just hw) 
Nothing
+          ec <- waitForProcess ph
+          hClose hw
+          unless (ec == ExitSuccess) $ error "pwd failed"
+          hr <- openFile "po003.out" ReadMode
+          output <- hGetContents hr
+          putStrLn ("Got: " ++ show (filter (not . isSpace) output))
+          hClose hr
+
diff --git a/tests/lib/libposix/posix003.stdout 
b/tests/lib/libposix/posix003.stdout
index e69de29..0bef00a 100644
--- a/tests/lib/libposix/posix003.stdout
+++ b/tests/lib/libposix/posix003.stdout
@@ -0,0 +1 @@
+Got: "/tmp"
diff --git a/tests/lib/libposix/posix004.hs b/tests/lib/libposix/posix004.hs
index 2423f3f..20e2af2 100644
--- a/tests/lib/libposix/posix004.hs
+++ b/tests/lib/libposix/posix004.hs
@@ -1,58 +1,44 @@
-import Posix
-import System(ExitCode(..), exitWith)
 
-main = 
-    forkProcess >>= \ maybe_pid ->
-    case maybe_pid of
-       Nothing -> raiseSignal floatingPointException
-       _ -> doParent
+import System.Exit (ExitCode(..), exitWith)
+import System.Posix.Process
+import System.Posix.Signals
 
-doParent =
-    getAnyProcessStatus True False >>= \ (Just (pid, tc)) ->
-    case tc of
-       Terminated sig | sig == floatingPointException -> forkChild2
-       _ -> fail (userError "unexpected termination cause")
-
-forkChild2 =
-    forkProcess >>= \ maybe_pid ->
-    case maybe_pid of
-       Nothing -> exitImmediately (ExitFailure 42)
-       _ -> doParent2
+main = do test1
+          test2
+          test3
+          test4
+          putStrLn "I'm happy."
     
-doParent2 =
-    getAnyProcessStatus True False >>= \ (Just (pid, tc)) ->
+test1 = do
+    forkProcess $ raiseSignal floatingPointException
+    Just (pid, tc) <- getAnyProcessStatus True False
     case tc of
-       Exited (ExitFailure 42) -> forkChild3
-       _ -> fail (userError "unexpected termination cause (2)")
+        Terminated sig | sig == floatingPointException -> return ()
+        _ -> error "unexpected termination cause"
            
-forkChild3 =
-    forkProcess >>= \ maybe_pid ->
-    case maybe_pid of
-       Nothing -> exitImmediately (ExitSuccess)
-       _ -> doParent3
-    
-doParent3 =
-    getAnyProcessStatus True False >>= \ (Just (pid, tc)) ->
+test2 = do
+    forkProcess $ exitImmediately (ExitFailure 42)
+    Just (pid, tc) <- getAnyProcessStatus True False
     case tc of
-       Exited ExitSuccess -> forkChild4
-       _ -> fail (userError "unexpected termination cause (3)")
-           
-forkChild4 =
-    forkProcess >>= \ maybe_pid ->
-    case maybe_pid of
-       Nothing -> raiseSignal softwareStop
-       _ -> doParent4
+        Exited (ExitFailure 42) -> return ()
+        _ -> error "unexpected termination cause (2)"
     
-doParent4 =
-    getAnyProcessStatus True True >>= \ (Just (pid, tc)) ->
+test3 = do
+    forkProcess $ exitImmediately ExitSuccess
+    Just (pid, tc) <- getAnyProcessStatus True False
     case tc of
-       Stopped sig | sig == softwareStop -> enoughAlready pid
-       _ -> fail (userError "unexpected termination cause (4)")
+        Exited ExitSuccess -> return ()
+        _ -> error "unexpected termination cause (3)"
            
-enoughAlready pid =
-    signalProcess killProcess pid >>
-    getAnyProcessStatus True True >>= \ (Just (pid, tc)) ->
+test4 = do
+    forkProcess $ raiseSignal softwareStop
+    Just (pid, tc) <- getAnyProcessStatus True True
     case tc of
-       Terminated sig | sig == killProcess -> putStr "I'm happy.\n"
-       _ -> fail (userError "unexpected termination cause (5)")
+        Stopped sig | sig == softwareStop -> do
+            signalProcess killProcess pid
+            Just (pid, tc) <- getAnyProcessStatus True True
+            case tc of
+                Terminated sig | sig == killProcess -> return ()
+                _ -> error "unexpected termination cause (5)"
+        _ -> error "unexpected termination cause (4)"
     



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to