content: import System.IO
  import GHC.IO.Handle
  import GHC.IO.Encoding
  import System.Environment
  
  -- Test switching encodings
  -- The test file is built by the Makefile
  
  main = do
    [file] <- getArgs
    test file NoBuffering
    test file (BlockBuffering Nothing)
    test file (BlockBuffering (Just 5))
  
  test file buf = do
    hSetEncoding stdout utf8
    h <- openBinaryFile file ReadMode
    hSetBuffering stdout buf
    putStrLn "no encoding:"
    getUntilX h
    hSetEncoding h utf8
    putStrLn "UTF8:"
    getUntilX h
    hSetEncoding h utf16le
    putStrLn "UTF16LE:"
    getUntilX h
    hSetEncoding h utf16be
    putStrLn "UTF16BE:"
    getUntilX h
    hSetEncoding h utf16
    putStrLn "UTF16:"
    getUntilX h
    hSetEncoding h utf32
    putStrLn "UTF32:"
    getUntilX h
    hSetEncoding h utf32le
    putStrLn "UTF32LE:"
    getUntilX h
    hSetEncoding h utf32be
    putStrLn "UTF32BE:"
    getUntilX h
    hSetEncoding h utf8_bom
    putStrLn "UTF8-BOM:"
    getUntilX h
    hIsEOF h >>= print
  
  getUntilX h = do
    c <- hGetChar h
    if c == 'X' then return () else do putChar c; getUntilX h
  