{-# LANGUAGE OverloadedStrings #-} {-| Description: Emulating tests from @encoding/iso-2022-jp-decoder.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.Iso2022JpDecoder ( tests ) where import qualified Data.ByteString as BS 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 = "iso-2022-jp-decoder.any.js" ~: U.TestList $ map test testData where test t = nameD t ~: decodeEnc' Iso2022Jp (inputD t) ~?= outputD t testData :: [InlineDecode] testData = [ InlineDecode { inputD = BS.pack [0x1b, 0x24] , outputD = T.pack "\xFFFD$" , nameD = "Error ESC" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x50] , outputD = T.pack "\xFFFD$P" , nameD = "Error ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x42, 0x50] , outputD = T.pack "P" , nameD = "ASCII ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x42, 0x1b, 0x28, 0x42, 0x50] , outputD = T.pack "\xFFFDP" , nameD = "Double ASCII ESC, character" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x28, 0x42, 0x50] , outputD = T.pack "PP" , nameD = "character, ASCII ESC, character" } , InlineDecode { inputD = BS.pack [0x5C, 0x5D, 0x7E] , outputD = T.pack "\\]~" , nameD = "characters" } , InlineDecode { inputD = BS.pack [0x0D, 0x0E, 0x0F, 0x10] , outputD = T.pack "\x0D\xFFFD\xFFFD\x10" , nameD = "SO / SI" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x4A, 0x5C, 0x5D, 0x7E] , outputD = T.pack "\x00A5]\x203E" , nameD = "Roman ESC, characters" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x4A, 0x0D, 0x0E, 0x0F, 0x10] , outputD = T.pack "\x0D\xFFFD\xFFFD\x10" , nameD = "Roman ESC, SO / SI" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x4A, 0x1b, 0x1b, 0x28, 0x49, 0x50] , outputD = T.pack "\xFFFD\xFF90" , nameD = "Roman ESC, error ESC, Katakana ESC" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x49, 0x50] , outputD = T.pack "\xFF90" , nameD = "Katakana ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x49, 0x1b, 0x24, 0x40, 0x50, 0x50] , outputD = T.pack "\xFFFD\x4F69" , nameD = "Katakana ESC, multibyte ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x49, 0x1b, 0x50] , outputD = T.pack "\xFFFD\xFF90" , nameD = "Katakana ESC, error ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x49, 0x1b, 0x24, 0x50] , outputD = T.pack "\xFFFD\xFF64\xFF90" , nameD = "Katakana ESC, error ESC #2, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x49, 0x50, 0x1b, 0x28, 0x49, 0x50] , outputD = T.pack "\xFF90\xFF90" , nameD = "Katakana ESC, character, Katakana ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x28, 0x49, 0x0D, 0x0E, 0x0F, 0x10] , outputD = T.pack "\xFFFD\xFFFD\xFFFD\xFFFD" , nameD = "Katakana ESC, SO / SI" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x50, 0x50] , outputD = T.pack "\x4F69" , nameD = "Multibyte ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x42, 0x50, 0x50] , outputD = T.pack "\x4F69" , nameD = "Multibyte ESC #2, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x42, 0x1b, 0x50, 0x50] , outputD = T.pack "\xFFFD\x4F69" , nameD = "Multibyte ESC, error ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x1b, 0x24, 0x40] , outputD = T.pack "\xFFFD" , nameD = "Double multibyte ESC" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x1b, 0x24, 0x40, 0x50, 0x50] , outputD = T.pack "\xFFFD\x4F69" , nameD = "Double multibyte ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x1b, 0x24, 0x42, 0x50, 0x50] , outputD = T.pack "\xFFFD\x4F69" , nameD = "Double multibyte ESC #2, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x1b, 0x24, 0x50, 0x50] , outputD = T.pack "\xFFFD\x3070\xFFFD" , nameD = "Multibyte ESC, error ESC #2, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x50, 0x1b, 0x24, 0x40, 0x50, 0x50] , outputD = T.pack "\xFFFD\x4F69" , nameD = "Multibyte ESC, single byte, multibyte ESC, character" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x20, 0x50] , outputD = T.pack "\xFFFD\xFFFD" , nameD = "Multibyte ESC, lead error byte" } , InlineDecode { inputD = BS.pack [0x1b, 0x24, 0x40, 0x50, 0x20] , outputD = T.pack "\xFFFD" , nameD = "Multibyte ESC, trail error byte" } , InlineDecode { inputD = BS.pack [0x50, 0x1b] , outputD = T.pack "P\xFFFD" , nameD = "character, error ESC" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x24] , outputD = T.pack "P\xFFFD$" , nameD = "character, error ESC #2" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x50] , outputD = T.pack "P\xFFFDP" , nameD = "character, error ESC #3" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x28, 0x42] , outputD = T.pack "P" , nameD = "character, ASCII ESC" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x28, 0x4A] , outputD = T.pack "P" , nameD = "character, Roman ESC" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x28, 0x49] , outputD = T.pack "P" , nameD = "character, Katakana ESC" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x24, 0x40] , outputD = T.pack "P" , nameD = "character, Multibyte ESC" } , InlineDecode { inputD = BS.pack [0x50, 0x1b, 0x24, 0x42] , outputD = T.pack "P" , nameD = "character, Multibyte ESC #2" } ]