Commit ae959ec4 authored by Simon Marlow's avatar Simon Marlow
Browse files

Add a test for reliable encoding errors

parent acf9517f
......@@ -156,3 +156,5 @@ test('openTempFile001', normal, compile_and_run, [''])
test('T4113', normal, compile_and_run, [''])
test('T4144', normal, compile_and_run, [''])
test('encodingerror001', normal, compile_and_run, [''])
import System.IO
import System.IO.Error
import Text.Printf
import Control.Monad
main = do
hSetEncoding stdout latin1
forM [NoBuffering,
LineBuffering,
BlockBuffering Nothing,
BlockBuffering (Just 3),
BlockBuffering (Just 9),
BlockBuffering (Just 32)] $ \b -> do
hSetBuffering stdout b
checkedPutStr "test 1\n"
checkedPutStr \n" -- nothing gets written
checkedPutStr "test 2\n"
checkedPutStr "Hέllo\n" -- we should write at least the 'H'
checkedPutStr "test 3\n"
checkedPutStr "Hello αβγ\n" -- we should write at least the "Hello "
checkedPutStr str = do
r <- try $ putStr str
case r of
Right _ -> return ()
Left e -> printf "Caught %s while trying to write %s\n"
(show e) (show str)
test 1
Caught <stdout>: hPutChar: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
test 2
HCaught <stdout>: hPutChar: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
test 3
Hello Caught <stdout>: hPutChar: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
test 1
Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
test 2
HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
test 3
Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
test 1
Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
test 2
HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
test 3
Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
test 1
Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
test 2
HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
test 3
Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
test 1
Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
test 2
HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
test 3
Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
test 1
Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "\283\n"
test 2
HCaught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "H\941llo\n"
test 3
Hello Caught <stdout>: commitBuffer: invalid argument (character is out of range for this encoding) while trying to write "Hello \945\946\947\n"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment