{- 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\"" ]