blob: 57e94016e48c65376b3a96a47e2b31a6b601c160 [file] [log] [blame]
Jake Farrellb5a18a12012-10-09 01:10:43 +00001# encoding: UTF-8
Jake Farrell6f0f5272012-01-31 03:39:30 +00002#
3# Licensed to the Apache Software Foundation (ASF) under one
4# or more contributor license agreements. See the NOTICE file
5# distributed with this work for additional information
6# regarding copyright ownership. The ASF licenses this file
7# to you under the Apache License, Version 2.0 (the
8# "License"); you may not use this file except in compliance
9# with the License. You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing,
14# software distributed under the License is distributed on an
15# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16# KIND, either express or implied. See the License for the
17# specific language governing permissions and limitations
18# under the License.
19#
20
Jake Farrella87810f2012-09-28 01:59:04 +000021require 'spec_helper'
Jake Farrell6f0f5272012-01-31 03:39:30 +000022
Jake Farrella87810f2012-09-28 01:59:04 +000023describe 'JsonProtocol' do
Jake Farrell6f0f5272012-01-31 03:39:30 +000024
Jake Farrella87810f2012-09-28 01:59:04 +000025 describe Thrift::JsonProtocol do
26 before(:each) do
27 @trans = Thrift::MemoryBufferTransport.new
28 @prot = Thrift::JsonProtocol.new(@trans)
29 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000030
Jake Farrella87810f2012-09-28 01:59:04 +000031 it "should write json escaped char" do
32 @prot.write_json_escape_char("\n")
33 @trans.read(@trans.available).should == '\u000a'
Jake Farrell6f0f5272012-01-31 03:39:30 +000034
Jake Farrella87810f2012-09-28 01:59:04 +000035 @prot.write_json_escape_char(" ")
36 @trans.read(@trans.available).should == '\u0020'
37 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000038
Jake Farrella87810f2012-09-28 01:59:04 +000039 it "should write json char" do
40 @prot.write_json_char("\n")
41 @trans.read(@trans.available).should == '\\n'
Jake Farrell6f0f5272012-01-31 03:39:30 +000042
Jake Farrella87810f2012-09-28 01:59:04 +000043 @prot.write_json_char(" ")
44 @trans.read(@trans.available).should == ' '
Jake Farrell6f0f5272012-01-31 03:39:30 +000045
Jake Farrella87810f2012-09-28 01:59:04 +000046 @prot.write_json_char("\\")
47 @trans.read(@trans.available).should == "\\\\"
Jake Farrell6f0f5272012-01-31 03:39:30 +000048
Jake Farrella87810f2012-09-28 01:59:04 +000049 @prot.write_json_char("@")
50 @trans.read(@trans.available).should == '@'
51 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000052
Jake Farrella87810f2012-09-28 01:59:04 +000053 it "should write json string" do
54 @prot.write_json_string("this is a \\ json\nstring")
55 @trans.read(@trans.available).should == "\"this is a \\\\ json\\nstring\""
56 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000057
Jake Farrella87810f2012-09-28 01:59:04 +000058 it "should write json base64" do
59 @prot.write_json_base64("this is a base64 string")
Jens Geyer123258b2015-10-02 00:38:17 +020060 @trans.read(@trans.available).should == "\"dGhpcyBpcyBhIGJhc2U2NCBzdHJpbmc=\""
Jake Farrella87810f2012-09-28 01:59:04 +000061 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000062
Jake Farrella87810f2012-09-28 01:59:04 +000063 it "should write json integer" do
64 @prot.write_json_integer(45)
65 @trans.read(@trans.available).should == "45"
Jake Farrell6f0f5272012-01-31 03:39:30 +000066
Jake Farrella87810f2012-09-28 01:59:04 +000067 @prot.write_json_integer(33000)
68 @trans.read(@trans.available).should == "33000"
Jake Farrell6f0f5272012-01-31 03:39:30 +000069
Jake Farrella87810f2012-09-28 01:59:04 +000070 @prot.write_json_integer(3000000000)
71 @trans.read(@trans.available).should == "3000000000"
Jake Farrell6f0f5272012-01-31 03:39:30 +000072
Jake Farrella87810f2012-09-28 01:59:04 +000073 @prot.write_json_integer(6000000000)
74 @trans.read(@trans.available).should == "6000000000"
75 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000076
Jake Farrella87810f2012-09-28 01:59:04 +000077 it "should write json double" do
78 @prot.write_json_double(12.3)
79 @trans.read(@trans.available).should == "12.3"
Jake Farrell6f0f5272012-01-31 03:39:30 +000080
Jake Farrella87810f2012-09-28 01:59:04 +000081 @prot.write_json_double(-3.21)
82 @trans.read(@trans.available).should == "-3.21"
Jake Farrell6f0f5272012-01-31 03:39:30 +000083
Jake Farrella87810f2012-09-28 01:59:04 +000084 @prot.write_json_double(((+1.0/0.0)/(+1.0/0.0)))
85 @trans.read(@trans.available).should == "\"NaN\""
Jake Farrell6f0f5272012-01-31 03:39:30 +000086
Jake Farrella87810f2012-09-28 01:59:04 +000087 @prot.write_json_double((+1.0/0.0))
88 @trans.read(@trans.available).should == "\"Infinity\""
Jake Farrell6f0f5272012-01-31 03:39:30 +000089
Jake Farrella87810f2012-09-28 01:59:04 +000090 @prot.write_json_double((-1.0/0.0))
91 @trans.read(@trans.available).should == "\"-Infinity\""
92 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000093
Jake Farrella87810f2012-09-28 01:59:04 +000094 it "should write json object start" do
95 @prot.write_json_object_start
96 @trans.read(@trans.available).should == "{"
97 end
Jake Farrell6f0f5272012-01-31 03:39:30 +000098
Jake Farrella87810f2012-09-28 01:59:04 +000099 it "should write json object end" do
100 @prot.write_json_object_end
101 @trans.read(@trans.available).should == "}"
102 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000103
Jake Farrella87810f2012-09-28 01:59:04 +0000104 it "should write json array start" do
105 @prot.write_json_array_start
106 @trans.read(@trans.available).should == "["
107 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000108
Jake Farrella87810f2012-09-28 01:59:04 +0000109 it "should write json array end" do
110 @prot.write_json_array_end
111 @trans.read(@trans.available).should == "]"
112 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000113
Jake Farrella87810f2012-09-28 01:59:04 +0000114 it "should write message begin" do
115 @prot.write_message_begin("name", 12, 32)
116 @trans.read(@trans.available).should == "[1,\"name\",12,32"
117 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000118
Jake Farrella87810f2012-09-28 01:59:04 +0000119 it "should write message end" do
120 @prot.write_message_end
121 @trans.read(@trans.available).should == "]"
122 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000123
Jake Farrella87810f2012-09-28 01:59:04 +0000124 it "should write struct begin" do
125 @prot.write_struct_begin("name")
126 @trans.read(@trans.available).should == "{"
127 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000128
Jake Farrella87810f2012-09-28 01:59:04 +0000129 it "should write struct end" do
130 @prot.write_struct_end
131 @trans.read(@trans.available).should == "}"
132 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000133
Jake Farrella87810f2012-09-28 01:59:04 +0000134 it "should write field begin" do
135 @prot.write_field_begin("name", Thrift::Types::STRUCT, 32)
136 @trans.read(@trans.available).should == "32{\"rec\""
137 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000138
Jake Farrella87810f2012-09-28 01:59:04 +0000139 it "should write field end" do
140 @prot.write_field_end
141 @trans.read(@trans.available).should == "}"
142 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000143
Jake Farrella87810f2012-09-28 01:59:04 +0000144 it "should write field stop" do
145 @prot.write_field_stop
146 @trans.read(@trans.available).should == ""
147 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000148
Jake Farrella87810f2012-09-28 01:59:04 +0000149 it "should write map begin" do
150 @prot.write_map_begin(Thrift::Types::STRUCT, Thrift::Types::LIST, 32)
151 @trans.read(@trans.available).should == "[\"rec\",\"lst\",32,{"
152 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000153
Jake Farrella87810f2012-09-28 01:59:04 +0000154 it "should write map end" do
155 @prot.write_map_end
156 @trans.read(@trans.available).should == "}]"
157 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000158
Jake Farrella87810f2012-09-28 01:59:04 +0000159 it "should write list begin" do
160 @prot.write_list_begin(Thrift::Types::STRUCT, 32)
161 @trans.read(@trans.available).should == "[\"rec\",32"
162 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000163
Jake Farrella87810f2012-09-28 01:59:04 +0000164 it "should write list end" do
165 @prot.write_list_end
166 @trans.read(@trans.available).should == "]"
167 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000168
Jake Farrella87810f2012-09-28 01:59:04 +0000169 it "should write set begin" do
170 @prot.write_set_begin(Thrift::Types::STRUCT, 32)
171 @trans.read(@trans.available).should == "[\"rec\",32"
172 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000173
Jake Farrella87810f2012-09-28 01:59:04 +0000174 it "should write set end" do
175 @prot.write_set_end
176 @trans.read(@trans.available).should == "]"
177 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000178
Jake Farrella87810f2012-09-28 01:59:04 +0000179 it "should write bool" do
180 @prot.write_bool(true)
181 @trans.read(@trans.available).should == "1"
Jake Farrell6f0f5272012-01-31 03:39:30 +0000182
Jake Farrella87810f2012-09-28 01:59:04 +0000183 @prot.write_bool(false)
184 @trans.read(@trans.available).should == "0"
185 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000186
Jake Farrella87810f2012-09-28 01:59:04 +0000187 it "should write byte" do
188 @prot.write_byte(100)
189 @trans.read(@trans.available).should == "100"
190 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000191
Jake Farrella87810f2012-09-28 01:59:04 +0000192 it "should write i16" do
193 @prot.write_i16(1000)
194 @trans.read(@trans.available).should == "1000"
195 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000196
Jake Farrella87810f2012-09-28 01:59:04 +0000197 it "should write i32" do
198 @prot.write_i32(3000000000)
199 @trans.read(@trans.available).should == "3000000000"
200 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000201
Jake Farrella87810f2012-09-28 01:59:04 +0000202 it "should write i64" do
203 @prot.write_i64(6000000000)
204 @trans.read(@trans.available).should == "6000000000"
205 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000206
Jake Farrella87810f2012-09-28 01:59:04 +0000207 it "should write double" do
208 @prot.write_double(1.23)
209 @trans.read(@trans.available).should == "1.23"
Jake Farrell6f0f5272012-01-31 03:39:30 +0000210
Jake Farrella87810f2012-09-28 01:59:04 +0000211 @prot.write_double(-32.1)
212 @trans.read(@trans.available).should == "-32.1"
Jake Farrell6f0f5272012-01-31 03:39:30 +0000213
Jake Farrella87810f2012-09-28 01:59:04 +0000214 @prot.write_double(((+1.0/0.0)/(+1.0/0.0)))
215 @trans.read(@trans.available).should == "\"NaN\""
Jake Farrell6f0f5272012-01-31 03:39:30 +0000216
Jake Farrella87810f2012-09-28 01:59:04 +0000217 @prot.write_double((+1.0/0.0))
218 @trans.read(@trans.available).should == "\"Infinity\""
Jake Farrell6f0f5272012-01-31 03:39:30 +0000219
Jake Farrella87810f2012-09-28 01:59:04 +0000220 @prot.write_double((-1.0/0.0))
221 @trans.read(@trans.available).should == "\"-Infinity\""
222 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000223
Jake Farrellb5a18a12012-10-09 01:10:43 +0000224 if RUBY_VERSION >= '1.9'
225 it 'should write string' do
226 @prot.write_string('this is a test string')
227 a = @trans.read(@trans.available)
228 a.should == '"this is a test string"'.force_encoding(Encoding::BINARY)
229 a.encoding.should == Encoding::BINARY
230 end
231
232 it 'should write string with unicode characters' do
233 @prot.write_string("this is a test string with unicode characters: \u20AC \u20AD")
234 a = @trans.read(@trans.available)
235 a.should == "\"this is a test string with unicode characters: \u20AC \u20AD\"".force_encoding(Encoding::BINARY)
236 a.encoding.should == Encoding::BINARY
237 end
238 else
239 it 'should write string' do
240 @prot.write_string('this is a test string')
241 @trans.read(@trans.available).should == '"this is a test string"'
242 end
Jake Farrella87810f2012-09-28 01:59:04 +0000243 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000244
Jake Farrella87810f2012-09-28 01:59:04 +0000245 it "should write binary" do
246 @prot.write_binary("this is a base64 string")
Jens Geyer123258b2015-10-02 00:38:17 +0200247 @trans.read(@trans.available).should == "\"dGhpcyBpcyBhIGJhc2U2NCBzdHJpbmc=\""
248 end
249
250 it "should write long binary" do
251 @prot.write_binary((0...256).to_a.pack('C*'))
252 @trans.read(@trans.available).should == "\"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==\""
Jake Farrella87810f2012-09-28 01:59:04 +0000253 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000254
Jake Farrella87810f2012-09-28 01:59:04 +0000255 it "should get type name for type id" do
256 expect {@prot.get_type_name_for_type_id(Thrift::Types::STOP)}.to raise_error(NotImplementedError)
257 expect {@prot.get_type_name_for_type_id(Thrift::Types::VOID)}.to raise_error(NotImplementedError)
258 @prot.get_type_name_for_type_id(Thrift::Types::BOOL).should == "tf"
259 @prot.get_type_name_for_type_id(Thrift::Types::BYTE).should == "i8"
260 @prot.get_type_name_for_type_id(Thrift::Types::DOUBLE).should == "dbl"
261 @prot.get_type_name_for_type_id(Thrift::Types::I16).should == "i16"
262 @prot.get_type_name_for_type_id(Thrift::Types::I32).should == "i32"
263 @prot.get_type_name_for_type_id(Thrift::Types::I64).should == "i64"
264 @prot.get_type_name_for_type_id(Thrift::Types::STRING).should == "str"
265 @prot.get_type_name_for_type_id(Thrift::Types::STRUCT).should == "rec"
266 @prot.get_type_name_for_type_id(Thrift::Types::MAP).should == "map"
267 @prot.get_type_name_for_type_id(Thrift::Types::SET).should == "set"
268 @prot.get_type_name_for_type_id(Thrift::Types::LIST).should == "lst"
269 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000270
Jake Farrella87810f2012-09-28 01:59:04 +0000271 it "should get type id for type name" do
272 expect {@prot.get_type_id_for_type_name("pp")}.to raise_error(NotImplementedError)
273 @prot.get_type_id_for_type_name("tf").should == Thrift::Types::BOOL
274 @prot.get_type_id_for_type_name("i8").should == Thrift::Types::BYTE
275 @prot.get_type_id_for_type_name("dbl").should == Thrift::Types::DOUBLE
276 @prot.get_type_id_for_type_name("i16").should == Thrift::Types::I16
277 @prot.get_type_id_for_type_name("i32").should == Thrift::Types::I32
278 @prot.get_type_id_for_type_name("i64").should == Thrift::Types::I64
279 @prot.get_type_id_for_type_name("str").should == Thrift::Types::STRING
280 @prot.get_type_id_for_type_name("rec").should == Thrift::Types::STRUCT
281 @prot.get_type_id_for_type_name("map").should == Thrift::Types::MAP
282 @prot.get_type_id_for_type_name("set").should == Thrift::Types::SET
283 @prot.get_type_id_for_type_name("lst").should == Thrift::Types::LIST
284 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000285
Jake Farrella87810f2012-09-28 01:59:04 +0000286 it "should read json syntax char" do
287 @trans.write('F')
288 expect {@prot.read_json_syntax_char('G')}.to raise_error(Thrift::ProtocolException)
289 @trans.write('H')
290 @prot.read_json_syntax_char('H')
291 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000292
Jake Farrella87810f2012-09-28 01:59:04 +0000293 it "should read json escape char" do
294 @trans.write('0054')
295 @prot.read_json_escape_char.should == 'T'
Nobuaki Sukegawa8cd519f2015-10-10 01:52:13 +0900296
297 @trans.write("\"\\\"\"")
298 @prot.read_json_string(false).should == "\""
299
300 @trans.write("\"\\\\\"")
301 @prot.read_json_string(false).should == "\\"
302
303 @trans.write("\"\\/\"")
304 @prot.read_json_string(false).should == "\/"
305
306 @trans.write("\"\\b\"")
307 @prot.read_json_string(false).should == "\b"
308
309 @trans.write("\"\\f\"")
310 @prot.read_json_string(false).should == "\f"
311
312 @trans.write("\"\\n\"")
313 @prot.read_json_string(false).should == "\n"
314
315 @trans.write("\"\\r\"")
316 @prot.read_json_string(false).should == "\r"
317
318 @trans.write("\"\\t\"")
319 @prot.read_json_string(false).should == "\t"
Jake Farrella87810f2012-09-28 01:59:04 +0000320 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000321
Jake Farrella87810f2012-09-28 01:59:04 +0000322 it "should read json string" do
323 @trans.write("\"\\P")
324 expect {@prot.read_json_string(false)}.to raise_error(Thrift::ProtocolException)
Jake Farrell6f0f5272012-01-31 03:39:30 +0000325
Jake Farrella87810f2012-09-28 01:59:04 +0000326 @trans.write("\"this is a test string\"")
327 @prot.read_json_string.should == "this is a test string"
328 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000329
Jake Farrella87810f2012-09-28 01:59:04 +0000330 it "should read json base64" do
331 @trans.write("\"dGhpcyBpcyBhIHRlc3Qgc3RyaW5n\"")
332 @prot.read_json_base64.should == "this is a test string"
333 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000334
Jake Farrella87810f2012-09-28 01:59:04 +0000335 it "should is json numeric" do
336 @prot.is_json_numeric("A").should == false
337 @prot.is_json_numeric("+").should == true
338 @prot.is_json_numeric("-").should == true
339 @prot.is_json_numeric(".").should == true
340 @prot.is_json_numeric("0").should == true
341 @prot.is_json_numeric("1").should == true
342 @prot.is_json_numeric("2").should == true
343 @prot.is_json_numeric("3").should == true
344 @prot.is_json_numeric("4").should == true
345 @prot.is_json_numeric("5").should == true
346 @prot.is_json_numeric("6").should == true
347 @prot.is_json_numeric("7").should == true
348 @prot.is_json_numeric("8").should == true
349 @prot.is_json_numeric("9").should == true
350 @prot.is_json_numeric("E").should == true
351 @prot.is_json_numeric("e").should == true
352 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000353
Jake Farrella87810f2012-09-28 01:59:04 +0000354 it "should read json numeric chars" do
355 @trans.write("1.453E45T")
356 @prot.read_json_numeric_chars.should == "1.453E45"
357 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000358
Jake Farrella87810f2012-09-28 01:59:04 +0000359 it "should read json integer" do
360 @trans.write("1.45\"\"")
361 expect {@prot.read_json_integer}.to raise_error(Thrift::ProtocolException)
362 @prot.read_string
Jake Farrell6f0f5272012-01-31 03:39:30 +0000363
Jake Farrella87810f2012-09-28 01:59:04 +0000364 @trans.write("1453T")
365 @prot.read_json_integer.should == 1453
366 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000367
Jake Farrella87810f2012-09-28 01:59:04 +0000368 it "should read json double" do
369 @trans.write("1.45e3e01\"\"")
370 expect {@prot.read_json_double}.to raise_error(Thrift::ProtocolException)
371 @prot.read_string
Jake Farrell6f0f5272012-01-31 03:39:30 +0000372
Jake Farrella87810f2012-09-28 01:59:04 +0000373 @trans.write("\"1.453e01\"")
374 expect {@prot.read_json_double}.to raise_error(Thrift::ProtocolException)
Jake Farrell6f0f5272012-01-31 03:39:30 +0000375
Jake Farrella87810f2012-09-28 01:59:04 +0000376 @trans.write("1.453e01\"\"")
377 @prot.read_json_double.should == 14.53
378 @prot.read_string
Jake Farrell6f0f5272012-01-31 03:39:30 +0000379
Jake Farrella87810f2012-09-28 01:59:04 +0000380 @trans.write("\"NaN\"")
381 @prot.read_json_double.nan?.should == true
Jake Farrell6f0f5272012-01-31 03:39:30 +0000382
Jake Farrella87810f2012-09-28 01:59:04 +0000383 @trans.write("\"Infinity\"")
384 @prot.read_json_double.should == +1.0/0.0
Jake Farrell6f0f5272012-01-31 03:39:30 +0000385
Jake Farrella87810f2012-09-28 01:59:04 +0000386 @trans.write("\"-Infinity\"")
387 @prot.read_json_double.should == -1.0/0.0
388 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000389
Jake Farrella87810f2012-09-28 01:59:04 +0000390 it "should read json object start" do
391 @trans.write("{")
392 @prot.read_json_object_start.should == nil
393 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000394
Jake Farrella87810f2012-09-28 01:59:04 +0000395 it "should read json object end" do
396 @trans.write("}")
397 @prot.read_json_object_end.should == nil
398 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000399
Jake Farrella87810f2012-09-28 01:59:04 +0000400 it "should read json array start" do
401 @trans.write("[")
402 @prot.read_json_array_start.should == nil
403 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000404
Jake Farrella87810f2012-09-28 01:59:04 +0000405 it "should read json array end" do
406 @trans.write("]")
407 @prot.read_json_array_end.should == nil
408 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000409
Jake Farrella87810f2012-09-28 01:59:04 +0000410 it "should read_message_begin" do
411 @trans.write("[2,")
412 expect {@prot.read_message_begin}.to raise_error(Thrift::ProtocolException)
Jake Farrell6f0f5272012-01-31 03:39:30 +0000413
Jake Farrella87810f2012-09-28 01:59:04 +0000414 @trans.write("[1,\"name\",12,32\"\"")
415 @prot.read_message_begin.should == ["name", 12, 32]
416 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000417
Jake Farrella87810f2012-09-28 01:59:04 +0000418 it "should read message end" do
419 @trans.write("]")
420 @prot.read_message_end.should == nil
421 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000422
Jake Farrella87810f2012-09-28 01:59:04 +0000423 it "should read struct begin" do
424 @trans.write("{")
425 @prot.read_struct_begin.should == nil
426 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000427
Jake Farrella87810f2012-09-28 01:59:04 +0000428 it "should read struct end" do
429 @trans.write("}")
430 @prot.read_struct_end.should == nil
431 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000432
Jake Farrella87810f2012-09-28 01:59:04 +0000433 it "should read field begin" do
434 @trans.write("1{\"rec\"")
435 @prot.read_field_begin.should == [nil, 12, 1]
436 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000437
Jake Farrella87810f2012-09-28 01:59:04 +0000438 it "should read field end" do
439 @trans.write("}")
440 @prot.read_field_end.should == nil
441 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000442
Jake Farrella87810f2012-09-28 01:59:04 +0000443 it "should read map begin" do
444 @trans.write("[\"rec\",\"lst\",2,{")
445 @prot.read_map_begin.should == [12, 15, 2]
446 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000447
Jake Farrella87810f2012-09-28 01:59:04 +0000448 it "should read map end" do
449 @trans.write("}]")
450 @prot.read_map_end.should == nil
451 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000452
Jake Farrella87810f2012-09-28 01:59:04 +0000453 it "should read list begin" do
454 @trans.write("[\"rec\",2\"\"")
455 @prot.read_list_begin.should == [12, 2]
456 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000457
Jake Farrella87810f2012-09-28 01:59:04 +0000458 it "should read list end" do
459 @trans.write("]")
460 @prot.read_list_end.should == nil
461 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000462
Jake Farrella87810f2012-09-28 01:59:04 +0000463 it "should read set begin" do
Roger Meier772b2b12013-01-19 21:04:12 +0100464 @trans.write("[\"rec\",2\"\"")
465 @prot.read_set_begin.should == [12, 2]
Jake Farrella87810f2012-09-28 01:59:04 +0000466 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000467
Jake Farrella87810f2012-09-28 01:59:04 +0000468 it "should read set end" do
469 @trans.write("]")
470 @prot.read_set_end.should == nil
471 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000472
Jake Farrella87810f2012-09-28 01:59:04 +0000473 it "should read bool" do
474 @trans.write("0\"\"")
475 @prot.read_bool.should == false
476 @prot.read_string
Jake Farrell6f0f5272012-01-31 03:39:30 +0000477
Jake Farrella87810f2012-09-28 01:59:04 +0000478 @trans.write("1\"\"")
479 @prot.read_bool.should == true
480 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000481
Jake Farrella87810f2012-09-28 01:59:04 +0000482 it "should read byte" do
483 @trans.write("60\"\"")
484 @prot.read_byte.should == 60
485 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000486
Jake Farrella87810f2012-09-28 01:59:04 +0000487 it "should read i16" do
488 @trans.write("1000\"\"")
489 @prot.read_i16.should == 1000
490 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000491
Jake Farrella87810f2012-09-28 01:59:04 +0000492 it "should read i32" do
493 @trans.write("3000000000\"\"")
494 @prot.read_i32.should == 3000000000
495 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000496
Jake Farrella87810f2012-09-28 01:59:04 +0000497 it "should read i64" do
498 @trans.write("6000000000\"\"")
499 @prot.read_i64.should == 6000000000
500 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000501
Jake Farrella87810f2012-09-28 01:59:04 +0000502 it "should read double" do
503 @trans.write("12.23\"\"")
504 @prot.read_double.should == 12.23
505 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000506
Jake Farrellb5a18a12012-10-09 01:10:43 +0000507 if RUBY_VERSION >= '1.9'
508 it 'should read string' do
509 @trans.write('"this is a test string"'.force_encoding(Encoding::BINARY))
510 a = @prot.read_string
511 a.should == 'this is a test string'
512 a.encoding.should == Encoding::UTF_8
513 end
514
515 it 'should read string with unicode characters' do
516 @trans.write('"this is a test string with unicode characters: \u20AC \u20AD"'.force_encoding(Encoding::BINARY))
517 a = @prot.read_string
518 a.should == "this is a test string with unicode characters: \u20AC \u20AD"
519 a.encoding.should == Encoding::UTF_8
520 end
521 else
522 it 'should read string' do
523 @trans.write('"this is a test string"')
524 @prot.read_string.should == 'this is a test string'
525 end
Jake Farrella87810f2012-09-28 01:59:04 +0000526 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000527
Jake Farrella87810f2012-09-28 01:59:04 +0000528 it "should read binary" do
529 @trans.write("\"dGhpcyBpcyBhIHRlc3Qgc3RyaW5n\"")
530 @prot.read_binary.should == "this is a test string"
531 end
Jens Geyer123258b2015-10-02 00:38:17 +0200532
533 it "should read long binary" do
534 @trans.write("\"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==\"")
535 @prot.read_binary.bytes.to_a.should == (0...256).to_a
536 end
James E. King III9aaf2952018-03-20 15:06:08 -0400537
538 it "should provide a reasonable to_s" do
539 @prot.to_s.should == "json(memory)"
540 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000541 end
542
Jake Farrella87810f2012-09-28 01:59:04 +0000543 describe Thrift::JsonProtocolFactory do
Jake Farrell6f0f5272012-01-31 03:39:30 +0000544 it "should create a JsonProtocol" do
Jake Farrella87810f2012-09-28 01:59:04 +0000545 Thrift::JsonProtocolFactory.new.get_protocol(mock("MockTransport")).should be_instance_of(Thrift::JsonProtocol)
Jake Farrell6f0f5272012-01-31 03:39:30 +0000546 end
James E. King III9aaf2952018-03-20 15:06:08 -0400547
548 it "should provide a reasonable to_s" do
549 Thrift::JsonProtocolFactory.new.to_s.should == "json"
550 end
Jake Farrell6f0f5272012-01-31 03:39:30 +0000551 end
552end