blob: 3cb3478e471b5b63e871fa700ade060fab233670 [file] [log] [blame]
David Reissea2cba82009-03-30 21:35:00 +00001/*
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
Roger Meier213a6642010-10-27 12:30:11 +000020namespace c_glib TTest
David Reiss2a4bfd62008-04-07 23:45:00 +000021namespace cpp thrift.test.debug
David Reiss3b15ebc2008-03-02 06:29:19 +000022namespace java thrift.test
David Reiss00dcccf2007-07-21 01:18:10 +000023
David Reissdb0ea152008-02-18 01:49:37 +000024struct Doubles {
25 1: double nan,
26 2: double inf,
27 3: double neginf,
28 4: double repeating,
29 5: double big,
Roger Meier22888ce2014-02-09 11:31:02 +010030 6: double tiny,
David Reissdb0ea152008-02-18 01:49:37 +000031 7: double zero,
32 8: double negzero,
33}
34
David Reiss00dcccf2007-07-21 01:18:10 +000035struct OneOfEach {
36 1: bool im_true,
37 2: bool im_false,
Christian Lavoiecbf87cb2010-11-28 14:34:26 +000038 3: byte a_bite = 0x7f,
39 4: i16 integer16 = 0x7fff,
David Reiss00dcccf2007-07-21 01:18:10 +000040 5: i32 integer32,
David Reissa8efac82008-12-16 20:28:13 +000041 6: i64 integer64 = 10000000000,
David Reiss00dcccf2007-07-21 01:18:10 +000042 7: double double_precision,
43 8: string some_characters,
44 9: string zomg_unicode,
45 10: bool what_who,
David Reissdb0ea152008-02-18 01:49:37 +000046 11: binary base64,
David Reissa8efac82008-12-16 20:28:13 +000047 12: list<byte> byte_list = [1, 2, 3],
48 13: list<i16> i16_list = [1,2,3],
49 14: list<i64> i64_list = [1,2,3]
David Reiss00dcccf2007-07-21 01:18:10 +000050}
51
52struct Bonk {
53 1: i32 type,
54 2: string message,
55}
56
57struct Nesting {
58 1: Bonk my_bonk,
59 2: OneOfEach my_ooe,
60}
61
62struct HolyMoley {
63 1: list<OneOfEach> big,
64 2: set<list<string>> contain,
65 3: map<string,list<Bonk>> bonks,
66}
David Reiss382fc302007-08-25 18:01:30 +000067
68struct Backwards {
69 2: i32 first_tag2,
70 1: i32 second_tag1,
71}
72
73struct Empty {
74}
75
76struct Wrapper {
77 1: Empty foo
78}
79
80struct RandomStuff {
81 1: i32 a,
82 2: i32 b,
83 3: i32 c,
84 4: i32 d,
85 5: list<i32> myintlist,
86 6: map<i32,Wrapper> maps,
87 7: i64 bigint,
88 8: double triple,
89}
90
David Reiss4a8f46c2008-03-07 20:12:07 +000091struct Base64 {
92 1: i32 a,
93 2: binary b1,
94 3: binary b2,
95 4: binary b3,
96 5: binary b4,
97 6: binary b5,
98 7: binary b6,
99}
100
Bryan Duxbury538e3442009-02-10 04:49:39 +0000101struct CompactProtoTestStruct {
102 // primitive fields
David Reissfe5b77d2009-04-07 20:51:48 +0000103 1: byte a_byte;
104 2: i16 a_i16;
105 3: i32 a_i32;
106 4: i64 a_i64;
107 5: double a_double;
108 6: string a_string;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000109 7: binary a_binary;
David Reissfe5b77d2009-04-07 20:51:48 +0000110 8: bool true_field;
111 9: bool false_field;
112 10: Empty empty_struct_field;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000113
114 // primitives in lists
David Reissfe5b77d2009-04-07 20:51:48 +0000115 11: list<byte> byte_list;
116 12: list<i16> i16_list;
117 13: list<i32> i32_list;
118 14: list<i64> i64_list;
119 15: list<double> double_list;
120 16: list<string> string_list;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000121 17: list<binary> binary_list;
David Reissfe5b77d2009-04-07 20:51:48 +0000122 18: list<bool> boolean_list;
123 19: list<Empty> struct_list;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000124
125 // primitives in sets
David Reissfe5b77d2009-04-07 20:51:48 +0000126 20: set<byte> byte_set;
127 21: set<i16> i16_set;
128 22: set<i32> i32_set;
129 23: set<i64> i64_set;
130 24: set<double> double_set;
131 25: set<string> string_set;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000132 26: set<binary> binary_set;
David Reissfe5b77d2009-04-07 20:51:48 +0000133 27: set<bool> boolean_set;
134 28: set<Empty> struct_set;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000135
136 // maps
137 // primitives as keys
David Reissfe5b77d2009-04-07 20:51:48 +0000138 29: map<byte, byte> byte_byte_map;
139 30: map<i16, byte> i16_byte_map;
140 31: map<i32, byte> i32_byte_map;
141 32: map<i64, byte> i64_byte_map;
142 33: map<double, byte> double_byte_map;
143 34: map<string, byte> string_byte_map;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000144 35: map<binary, byte> binary_byte_map;
David Reissfe5b77d2009-04-07 20:51:48 +0000145 36: map<bool, byte> boolean_byte_map;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000146 // primitives as values
David Reissfe5b77d2009-04-07 20:51:48 +0000147 37: map<byte, i16> byte_i16_map;
148 38: map<byte, i32> byte_i32_map;
149 39: map<byte, i64> byte_i64_map;
150 40: map<byte, double> byte_double_map;
151 41: map<byte, string> byte_string_map;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000152 42: map<byte, binary> byte_binary_map;
David Reissfe5b77d2009-04-07 20:51:48 +0000153 43: map<byte, bool> byte_boolean_map;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000154 // collections as keys
David Reissfe5b77d2009-04-07 20:51:48 +0000155 44: map<list<byte>, byte> list_byte_map;
156 45: map<set<byte>, byte> set_byte_map;
157 46: map<map<byte,byte>, byte> map_byte_map;
Bryan Duxbury538e3442009-02-10 04:49:39 +0000158 // collections as values
David Reissfe5b77d2009-04-07 20:51:48 +0000159 47: map<byte, map<byte,byte>> byte_map_map;
160 48: map<byte, set<byte>> byte_set_map;
161 49: map<byte, list<byte>> byte_list_map;
162}
163
Bryan Duxburye80a1942011-09-20 18:45:56 +0000164// To be used to test the serialization of an empty map
165struct SingleMapTestStruct {
166 1: required map<i32, i32> i32_map;
167}
David Reissfe5b77d2009-04-07 20:51:48 +0000168
169const CompactProtoTestStruct COMPACT_TEST = {
170 'a_byte' : 127,
171 'a_i16' : 32000,
172 'a_i32' : 1000000000,
173 'a_i64' : 0xffffffffff,
174 'a_double' : 5.6789,
175 'a_string' : "my string",
176//'a_binary,'
177 'true_field' : 1,
178 'false_field' : 0,
179 'empty_struct_field' : {},
180 'byte_list' : [-127, -1, 0, 1, 127],
181 'i16_list' : [-1, 0, 1, 0x7fff],
182 'i32_list' : [-1, 0, 0xff, 0xffff, 0xffffff, 0x7fffffff],
183 'i64_list' : [-1, 0, 0xff, 0xffff, 0xffffff, 0xffffffff, 0xffffffffff, 0xffffffffffff, 0xffffffffffffff, 0x7fffffffffffffff],
184 'double_list' : [0.1, 0.2, 0.3],
185 'string_list' : ["first", "second", "third"],
186//'binary_list,'
187 'boolean_list' : [1, 1, 1, 0, 0, 0],
188 'struct_list' : [{}, {}],
189 'byte_set' : [-127, -1, 0, 1, 127],
190 'i16_set' : [-1, 0, 1, 0x7fff],
191 'i32_set' : [1, 2, 3],
192 'i64_set' : [-1, 0, 0xff, 0xffff, 0xffffff, 0xffffffff, 0xffffffffff, 0xffffffffffff, 0xffffffffffffff, 0x7fffffffffffffff],
193 'double_set' : [0.1, 0.2, 0.3],
194 'string_set' : ["first", "second", "third"],
195//'binary_set,'
196 'boolean_set' : [1, 0],
197 'struct_set' : [{}],
198 'byte_byte_map' : {1 : 2},
199 'i16_byte_map' : {1 : 1, -1 : 1, 0x7fff : 1},
200 'i32_byte_map' : {1 : 1, -1 : 1, 0x7fffffff : 1},
201 'i64_byte_map' : {0 : 1, 1 : 1, -1 : 1, 0x7fffffffffffffff : 1},
202 'double_byte_map' : {-1.1 : 1, 1.1 : 1},
203 'string_byte_map' : {"first" : 1, "second" : 2, "third" : 3, "" : 0},
204//'binary_byte_map,'
205 'boolean_byte_map' : {1 : 1, 0 : 0},
206 'byte_i16_map' : {1 : 1, 2 : -1, 3 : 0x7fff},
207 'byte_i32_map' : {1 : 1, 2 : -1, 3 : 0x7fffffff},
208 'byte_i64_map' : {1 : 1, 2 : -1, 3 : 0x7fffffffffffffff},
209 'byte_double_map' : {1 : 0.1, 2 : -0.1, 3 : 1000000.1},
210 'byte_string_map' : {1 : "", 2 : "blah", 3 : "loooooooooooooong string"},
211//'byte_binary_map,'
212 'byte_boolean_map' : {1 : 1, 2 : 0},
213 'list_byte_map' : {[1, 2, 3] : 1, [0, 1] : 2, [] : 0},
214 'set_byte_map' : {[1, 2, 3] : 1, [0, 1] : 2, [] : 0},
215 'map_byte_map' : {{1 : 1} : 1, {2 : 2} : 2, {} : 0},
216 'byte_map_map' : {0 : {}, 1 : {1 : 1}, 2 : {1 : 1, 2 : 2}},
217 'byte_set_map' : {0 : [], 1 : [1], 2 : [1, 2]},
218 'byte_list_map' : {0 : [], 1 : [1], 2 : [1, 2]},
Bryan Duxbury538e3442009-02-10 04:49:39 +0000219}
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000220
221
Bryan Duxbury2d804702009-12-18 19:41:11 +0000222const i32 MYCONST = 2
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000223
Bryan Duxbury986d50f2009-12-31 18:18:00 +0000224
225exception ExceptionWithAMap {
226 1: string blah;
227 2: map<string, string> map_field;
228}
229
230service ServiceForExceptionWithAMap {
231 void methodThatThrowsAnException() throws (1: ExceptionWithAMap xwamap);
232}
233
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000234service Srv {
David Reiss689c9ad2009-04-02 19:24:02 +0000235 i32 Janky(1: i32 arg);
Bryan Duxburyd58ccec2010-05-26 16:34:48 +0000236
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000237 // return type only methods
Bryan Duxburyd58ccec2010-05-26 16:34:48 +0000238
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000239 void voidMethod();
240 i32 primitiveMethod();
241 CompactProtoTestStruct structMethod();
Bryan Duxburyd58ccec2010-05-26 16:34:48 +0000242
Bryan Duxbury2d804702009-12-18 19:41:11 +0000243 void methodWithDefaultArgs(1: i32 something = MYCONST);
Bryan Duxburyd58ccec2010-05-26 16:34:48 +0000244
245 oneway void onewayMethod();
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000246}
247
248service Inherited extends Srv {
David Reiss689c9ad2009-04-02 19:24:02 +0000249 i32 identity(1: i32 arg)
Bryan Duxbury5b8b4842009-04-01 20:10:15 +0000250}
251
252service EmptyService {}
253
254// The only purpose of this thing is to increase the size of the generated code
255// so that ZlibTest has more highly compressible data to play with.
256struct BlowUp {
257 1: map<list<i32>,set<map<i32,string>>> b1;
258 2: map<list<i32>,set<map<i32,string>>> b2;
259 3: map<list<i32>,set<map<i32,string>>> b3;
260 4: map<list<i32>,set<map<i32,string>>> b4;
261}
262
Bryan Duxburyff219ac2009-04-10 21:51:00 +0000263
264struct ReverseOrderStruct {
265 4: string first;
266 3: i16 second;
267 2: i32 third;
268 1: i64 fourth;
269}
270
271service ReverseOrderService {
272 void myMethod(4: string first, 3: i16 second, 2: i32 third, 1: i64 fourth);
Bryan Duxburyab3666e2009-09-01 23:03:47 +0000273}
274
Bryan Duxbury9af23d92009-11-19 17:26:38 +0000275enum SomeEnum {
Bryan Duxbury2d804702009-12-18 19:41:11 +0000276 ONE = 1
277 TWO = 2
278}
279
Bryan Duxburyd4235e02010-09-13 16:28:53 +0000280/** This is a docstring on a constant! */
Bryan Duxbury6e05e252010-09-12 15:22:49 +0000281const SomeEnum MY_SOME_ENUM = SomeEnum.ONE
Bryan Duxbury2d804702009-12-18 19:41:11 +0000282
283const SomeEnum MY_SOME_ENUM_1 = 1
284/*const SomeEnum MY_SOME_ENUM_2 = 7*/
285
286const map<SomeEnum,SomeEnum> MY_ENUM_MAP = {
Bryan Duxbury6e05e252010-09-12 15:22:49 +0000287 SomeEnum.ONE : SomeEnum.TWO
Bryan Duxbury2d804702009-12-18 19:41:11 +0000288}
289
290struct StructWithSomeEnum {
291 1: SomeEnum blah;
292}
293
294const map<SomeEnum,StructWithSomeEnum> EXTRA_CRAZY_MAP = {
Bryan Duxbury6e05e252010-09-12 15:22:49 +0000295 SomeEnum.ONE : {"blah" : SomeEnum.TWO}
Bryan Duxbury9af23d92009-11-19 17:26:38 +0000296}
297
Bryan Duxburyab3666e2009-09-01 23:03:47 +0000298union TestUnion {
299 /**
300 * A doc string
301 */
302 1: string string_field;
303 2: i32 i32_field;
304 3: OneOfEach struct_field;
305 4: list<RandomStuff> struct_list;
306 5: i32 other_i32_field;
Bryan Duxbury9af23d92009-11-19 17:26:38 +0000307 6: SomeEnum enum_field;
Bryan Duxbury162b3ac2010-06-23 21:17:48 +0000308 7: set<i32> i32_set;
309 8: map<i32, i32> i32_map;
Bryan Duxburyab3666e2009-09-01 23:03:47 +0000310}
311
Bryan Duxburyc2ec7ca2009-12-31 18:59:15 +0000312union TestUnionMinusStringField {
313 2: i32 i32_field;
314 3: OneOfEach struct_field;
315 4: list<RandomStuff> struct_list;
316 5: i32 other_i32_field;
317 6: SomeEnum enum_field;
Bryan Duxbury162b3ac2010-06-23 21:17:48 +0000318 7: set<i32> i32_set;
319 8: map<i32, i32> i32_map;
Bryan Duxburyc2ec7ca2009-12-31 18:59:15 +0000320}
321
Bryan Duxburye2e4ea12009-11-11 21:01:35 +0000322union ComparableUnion {
323 1: string string_field;
324 2: binary binary_field;
325}
326
Bryan Duxburyab3666e2009-09-01 23:03:47 +0000327struct StructWithAUnion {
328 1: TestUnion test_union;
Bryan Duxbury51f28802009-10-01 20:53:45 +0000329}
330
331struct PrimitiveThenStruct {
332 1: i32 blah;
333 2: i32 blah2;
334 3: Backwards bw;
Bryan Duxbury2845b162009-11-09 15:55:22 +0000335}
336
337typedef map<i32,i32> SomeMap
338
339struct StructWithASomemap {
340 1: required SomeMap somemap_field;
Bryan Duxbury986d50f2009-12-31 18:18:00 +0000341}
Bryan Duxbury35565a42010-01-06 23:12:09 +0000342
343struct BigFieldIdStruct {
344 1: string field1;
345 45: string field2;
346}
347
348struct BreaksRubyCompactProtocol {
349 1: string field1;
350 2: BigFieldIdStruct field2;
351 3: i32 field3;
Bryan Duxbury162b3ac2010-06-23 21:17:48 +0000352}
353
Bryan Duxbury40d51a22011-09-26 21:29:15 +0000354struct TupleProtocolTestStruct {
355 optional i32 field1;
356 optional i32 field2;
357 optional i32 field3;
358 optional i32 field4;
359 optional i32 field5;
360 optional i32 field6;
361 optional i32 field7;
362 optional i32 field8;
363 optional i32 field9;
364 optional i32 field10;
365 optional i32 field11;
366 optional i32 field12;
367}