willow-0.1.0.0: test/Test/Willow/WebPlatformTests/Manual/Encoding/Iso2022JpDecoder.hs
{-# 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"
}
]