{-# LANGUAGE OverloadedStrings #-}
module System.IO.Streams.Tests.Text (tests) where
import Control.Monad ((>=>))
import Data.Text.Encoding.Error
import qualified System.IO.Streams.Internal as Streams
import qualified System.IO.Streams.List as Streams
import System.IO.Streams.Tests.Common
import qualified System.IO.Streams.Text as Streams
import Test.Framework
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
tests :: [Test]
tests = [ testDecodeOK
, testStrictDecodeError
, testEncode
]
testEncode :: Test
testEncode = testCase "text/encodeUtf8" $ do
is <- Streams.fromList ["\x3BC", "ok", ""]
Streams.outputToList (Streams.encodeUtf8 >=> Streams.connect is)
>>= assertEqual "ok encode" ["\xCE\xBC", "ok", ""]
testDecodeOK :: Test
testDecodeOK = testCase "text/decodeUtf8/wholeChunk" $ do
Streams.fromList ["\xCE\xBC", "ok", ""]
>>= Streams.decodeUtf8
>>= Streams.toList
>>= assertEqual "ok decode" ["\x3BC", "ok", ""]
Streams.fromList ["\xCE", "\xBC", "ok", "foo\xCE", "\xBC"]
>>= Streams.decodeUtf8
>>= Streams.toList
>>= assertEqual "ok decode 2" ["\x3BC", "ok", "foo", "\x3BC"]
Streams.fromList ["\xE2\xB6", "\x8E"]
>>= Streams.decodeUtf8
>>= Streams.toList
>>= assertEqual "ok decode 3" ["\x2D8E"]
Streams.fromList ["\xF0\x90\x80\x83"]
>>= Streams.decodeUtf8
>>= Streams.toList
>>= assertEqual "ok decode 4" ["\x10003"]
Streams.fromList []
>>= Streams.decodeUtf8With strictDecode
>>= Streams.toList
>>= assertEqual "ok strict empty" []
testStrictDecodeError :: Test
testStrictDecodeError = testCase "text/decodeUtf8/error" $ do
expectExceptionH (Streams.fromList ["\x87"] >>=
Streams.decodeUtf8With strictDecode >>=
Streams.toList)
expectExceptionH (Streams.fromList ["o\x87\x87"] >>=
Streams.decodeUtf8With strictDecode >>=
Streams.toList)