willow-0.1.0.0: test/Test/Willow/WebPlatformTests/Manual/Encoding/TextDecoderUtf16Surrogates.hs
{-|
Description: Emulating tests from @encoding/textdecoder-utf16-surrogates.any.js@
Copyright: (c) 2020 Samuel May
License: MPL-2.0
Maintainer: ag.eitilt@gmail.com
Stability: experimental
Portability: portable
-}
module Test.Willow.WebPlatformTests.Manual.Encoding.TextDecoderUtf16Surrogates
( tests
) where
import qualified Data.ByteString as BS
import qualified Data.Either as E
import qualified Data.Text as T
import qualified Test.HUnit as U
import Test.HUnit ( (~:), (~?=) )
import Web.Willow.Common.Encoding
import Test.Willow.WebPlatformTests.Manual.Common
tests :: U.Test
tests = "textdecoder-utf16-surrogates.any.js" ~: U.TestList
[ "replacement" ~: U.TestList $ map testReplace testData
, "fatal" ~: U.TestList $ map testFatal testData
]
testFatal :: InlineDecode -> U.Test
--TODO: Should the fatal *coders stop on failure rather than just returning a 'Left'?
testFatal d = nameD d ~: takeWhile E.isRight (decodeEnc Utf16le $ inputD d) ~?= []
testReplace :: InlineDecode -> U.Test
testReplace d = nameD d ~: decodeEnc' Utf16le (inputD d) ~?= outputD d
testData :: [InlineDecode]
testData =
[ InlineDecode
{ inputD = BS.pack [0x00, 0xd8]
, outputD = T.pack "\xFFFD"
, nameD = "lone surrogate lead"
}
, InlineDecode
{ inputD = BS.pack [0x00, 0xdc]
, outputD = T.pack "\xFFFD"
, nameD = "lone surrogate trail"
}
, InlineDecode
{ inputD = BS.pack [0x00, 0xd8, 0x00, 0x00]
, outputD = T.pack "\xFFFD\x0000"
, nameD = "unmatched surrogate lead"
}
, InlineDecode
{ inputD = BS.pack [0x00, 0xdc, 0x00, 0x00]
, outputD = T.pack "\xFFFD\x0000"
, nameD = "unmatched surrogate trail"
}
, InlineDecode
{ inputD = BS.pack [0x00, 0xdc, 0x00, 0xd8]
, outputD = T.pack "\xFFFD\xFFFD"
, nameD = "swapped surrogate pair"
}
]