thrift-lib-0.1.0.1: test/JSONStringTest.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
{-# LANGUAGE TypeApplications #-}
module JSONStringTest where
import Thrift.Binary.Parser
import Data.ByteString (ByteString)
import Data.Proxy
import Data.Text (Text)
import Test.HUnit
import TestRunner
import qualified Thrift.Protocol as Protocol
import Thrift.Protocol.JSON
unicodeParsingTest :: Test
unicodeParsingTest = TestLabel "json string paring" $ TestCase $
assertEqual "parse string" (Right "\27979\35797") $
parseText "\"\\u00e6\\u00b5\\u008b\\u00e8\\u00af\\u0095\""
parseText :: ByteString -> Either String Text
parseText = parse (Protocol.parseText @JSON Proxy)
expectParseError :: String -> ByteString -> Test
expectParseError name input = TestLabel name $ TestCase $
case parseText input of
Left{} -> return ()
Right{} -> assertFailure "Should fail"
main :: IO ()
main = testRunner $ TestList
[ unicodeParsingTest
, expectParseError "Incomplete String" "\"xxx"
, expectParseError "Incomplete Escape" "\"xxx\\\""
, expectParseError "Incorrect Escape" "\"\\x\""
, expectParseError "Incorrect Unicode" "\"\\uwxyz\""
, expectParseError "Incomplete Unicode" "\"\\u00\""
]