aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/libposix/posix004.hs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libposix/posix004.hs')
-rw-r--r--tests/libposix/posix004.hs44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/libposix/posix004.hs b/tests/libposix/posix004.hs
new file mode 100644
index 0000000..20e2af2
--- /dev/null
+++ b/tests/libposix/posix004.hs
@@ -0,0 +1,44 @@
+
+import System.Exit (ExitCode(..), exitWith)
+import System.Posix.Process
+import System.Posix.Signals
+
+main = do test1
+ test2
+ test3
+ test4
+ putStrLn "I'm happy."
+
+test1 = do
+ forkProcess $ raiseSignal floatingPointException
+ Just (pid, tc) <- getAnyProcessStatus True False
+ case tc of
+ Terminated sig | sig == floatingPointException -> return ()
+ _ -> error "unexpected termination cause"
+
+test2 = do
+ forkProcess $ exitImmediately (ExitFailure 42)
+ Just (pid, tc) <- getAnyProcessStatus True False
+ case tc of
+ Exited (ExitFailure 42) -> return ()
+ _ -> error "unexpected termination cause (2)"
+
+test3 = do
+ forkProcess $ exitImmediately ExitSuccess
+ Just (pid, tc) <- getAnyProcessStatus True False
+ case tc of
+ Exited ExitSuccess -> return ()
+ _ -> error "unexpected termination cause (3)"
+
+test4 = do
+ forkProcess $ raiseSignal softwareStop
+ Just (pid, tc) <- getAnyProcessStatus True True
+ case tc of
+ 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)"
+