1# 2# Licensed to the Apache Software Foundation (ASF) under one 3# or more contributor license agreements. See the NOTICE file 4# distributed with this work for additional information 5# regarding copyright ownership. The ASF licenses this file 6# to you under the Apache License, Version 2.0 (the 7# "License"); you may not use this file except in compliance 8# with the License. You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, 13# software distributed under the License is distributed on an 14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15# KIND, either express or implied. See the License for the 16# specific language governing permissions and limitations 17# under the License. 18# 19 20import sys 21import unittest 22 23import _import_local_thrift # noqa 24from thrift.protocol.TJSONProtocol import TJSONProtocol 25from thrift.transport import TTransport 26 27# 28# In order to run the test under Windows. We need to create symbolic link 29# name 'thrift' to '../src' folder by using: 30# 31# mklink /D thrift ..\src 32# 33 34 35class TestJSONString(unittest.TestCase): 36 37 def test_escaped_unicode_string(self): 38 unicode_json = b'"hello \\u0e01\\u0e02\\u0e03\\ud835\\udcab\\udb40\\udc70 unicode"' 39 unicode_text = u'hello \u0e01\u0e02\u0e03\U0001D4AB\U000E0070 unicode' 40 41 buf = TTransport.TMemoryBuffer(unicode_json) 42 transport = TTransport.TBufferedTransportFactory().getTransport(buf) 43 protocol = TJSONProtocol(transport) 44 45 if sys.version_info[0] == 2: 46 unicode_text = unicode_text.encode('utf8') 47 self.assertEqual(protocol.readString(), unicode_text) 48 49 50if __name__ == '__main__': 51 unittest.main() 52