blob: fe09f672b4578a91ecefa108e8b0a62e77f42992 [file] [log] [blame]
Roger Meier2b2c0b22012-09-12 20:09:02 +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
20unit TestSerializer.Data;
21
22interface
23
24uses
Jens Geyer17c3ad92017-09-05 20:31:27 +020025 SysUtils,
Jens Geyer62445c12022-06-29 00:00:00 +020026 ActiveX,
27 ComObj,
Jens Geyer07f4bb52022-09-03 14:50:06 +020028 Thrift.Protocol,
Roger Meier2b2c0b22012-09-12 20:09:02 +000029 Thrift.Collections,
Jens Geyer3a172092024-11-19 01:14:32 +010030 test.TestSerializer,
Roger Meier2b2c0b22012-09-12 20:09:02 +000031 DebugProtoTest;
32
33
34type
35 Fixtures = class
36 public
37 class function CreateOneOfEach : IOneOfEach;
38 class function CreateNesting : INesting;
39 class function CreateHolyMoley : IHolyMoley;
40 class function CreateCompactProtoTestStruct : ICompactProtoTestStruct;
Jens Geyer3a172092024-11-19 01:14:32 +010041 class function CreateBatchGetResponse : IBatchGetResponse;
Roger Meier2b2c0b22012-09-12 20:09:02 +000042
43 // These byte arrays are serialized versions of the above structs.
44 // They were serialized in binary protocol using thrift 0.6.x and are used to
45 // test backwards compatibility with respect to the standard scheme.
46 (*
47 all data copied from JAVA version,
48 to be used later
49
50 public static final byte[] persistentBytesOneOfEach = new byte[] {
51 $02, $00, $01, $01, $02, $00, $02, $00, $03, $00,
52 $03, $D6, $06, $00, $04, $69, $78, $08, $00, $05,
53 $01, $00, $00, $00, $0A, $00, $06, $00, $00, $00,
54 $01, $65, $A0, $BC, $00, $04, $00, $07, $40, $09,
55 $21, $FB, $54, $44, $2D, $18, $0B, $00, $08, $00,
56 $00, $00, $0D, $4A, $53, $4F, $4E, $20, $54, $48,
57 $49, $53, $21, $20, $22, $01, $0B, $00, $09, $00,
58 $00, $00, $2E, $D3, $80, $E2, $85, $AE, $CE, $9D,
59 $20, $D0, $9D, $CE, $BF, $E2, $85, $BF, $D0, $BE,
60 $C9, $A1, $D0, $B3, $D0, $B0, $CF, $81, $E2, $84,
61 $8E, $20, $CE, $91, $74, $74, $CE, $B1, $E2, $85,
62 $BD, $CE, $BA, $EF, $BF, $BD, $E2, $80, $BC, $02,
63 $00, $0A, $00, $0B, $00, $0B, $00, $00, $00, $06,
64 $62, $61, $73, $65, $36, $34, $0F, $00, $0C, $03,
65 $00, $00, $00, $03, $01, $02, $03, $0F, $00, $0D,
66 $06, $00, $00, $00, $03, $00, $01, $00, $02, $00,
67 $03, $0F, $00, $0E, $0A, $00, $00, $00, $03, $00,
68 $00, $00, $00, $00, $00, $00, $01, $00, $00, $00,
69 $00, $00, $00, $00, $02, $00, $00, $00, $00, $00,
70 $00, $00, $03, $00 };
71
72
73 public static final byte[] persistentBytesNesting = new byte[] {
74 $0C, $00, $01, $08, $00, $01, $00, $00, $7A, $69,
75 $0B, $00, $02, $00, $00, $00, $13, $49, $20, $61,
76 $6D, $20, $61, $20, $62, $6F, $6E, $6B, $2E, $2E,
77 $2E, $20, $78, $6F, $72, $21, $00, $0C, $00, $02,
78 $02, $00, $01, $01, $02, $00, $02, $00, $03, $00,
79 $03, $D6, $06, $00, $04, $69, $78, $08, $00, $05,
80 $01, $00, $00, $00, $0A, $00, $06, $00, $00, $00,
81 $01, $65, $A0, $BC, $00, $04, $00, $07, $40, $09,
82 $21, $FB, $54, $44, $2D, $18, $0B, $00, $08, $00,
83 $00, $00, $0D, $4A, $53, $4F, $4E, $20, $54, $48,
84 $49, $53, $21, $20, $22, $01, $0B, $00, $09, $00,
85 $00, $00, $2E, $D3, $80, $E2, $85, $AE, $CE, $9D,
86 $20, $D0, $9D, $CE, $BF, $E2, $85, $BF, $D0, $BE,
87 $C9, $A1, $D0, $B3, $D0, $B0, $CF, $81, $E2, $84,
88 $8E, $20, $CE, $91, $74, $74, $CE, $B1, $E2, $85,
89 $BD, $CE, $BA, $EF, $BF, $BD, $E2, $80, $BC, $02,
90 $00, $0A, $00, $0B, $00, $0B, $00, $00, $00, $06,
91 $62, $61, $73, $65, $36, $34, $0F, $00, $0C, $03,
92 $00, $00, $00, $03, $01, $02, $03, $0F, $00, $0D,
93 $06, $00, $00, $00, $03, $00, $01, $00, $02, $00,
94 $03, $0F, $00, $0E, $0A, $00, $00, $00, $03, $00,
95 $00, $00, $00, $00, $00, $00, $01, $00, $00, $00,
96 $00, $00, $00, $00, $02, $00, $00, $00, $00, $00,
97 $00, $00, $03, $00, $00 };
98
99 public static final byte[] persistentBytesHolyMoley = new byte[] {
100 $0F, $00, $01, $0C, $00, $00, $00, $02, $02, $00,
101 $01, $01, $02, $00, $02, $00, $03, $00, $03, $23,
102 $06, $00, $04, $69, $78, $08, $00, $05, $01, $00,
103 $00, $00, $0A, $00, $06, $00, $00, $00, $01, $65,
104 $A0, $BC, $00, $04, $00, $07, $40, $09, $21, $FB,
105 $54, $44, $2D, $18, $0B, $00, $08, $00, $00, $00,
106 $0D, $4A, $53, $4F, $4E, $20, $54, $48, $49, $53,
107 $21, $20, $22, $01, $0B, $00, $09, $00, $00, $00,
108 $2E, $D3, $80, $E2, $85, $AE, $CE, $9D, $20, $D0,
109 $9D, $CE, $BF, $E2, $85, $BF, $D0, $BE, $C9, $A1,
110 $D0, $B3, $D0, $B0, $CF, $81, $E2, $84, $8E, $20,
111 $CE, $91, $74, $74, $CE, $B1, $E2, $85, $BD, $CE,
112 $BA, $EF, $BF, $BD, $E2, $80, $BC, $02, $00, $0A,
113 $00, $0B, $00, $0B, $00, $00, $00, $06, $62, $61,
114 $73, $65, $36, $34, $0F, $00, $0C, $03, $00, $00,
115 $00, $03, $01, $02, $03, $0F, $00, $0D, $06, $00,
116 $00, $00, $03, $00, $01, $00, $02, $00, $03, $0F,
117 $00, $0E, $0A, $00, $00, $00, $03, $00, $00, $00,
118 $00, $00, $00, $00, $01, $00, $00, $00, $00, $00,
119 $00, $00, $02, $00, $00, $00, $00, $00, $00, $00,
120 $03, $00, $02, $00, $01, $01, $02, $00, $02, $00,
121 $03, $00, $03, $D6, $06, $00, $04, $69, $78, $08,
122 $00, $05, $01, $00, $00, $00, $0A, $00, $06, $00,
123 $00, $00, $01, $65, $A0, $BC, $00, $04, $00, $07,
124 $40, $09, $21, $FB, $54, $44, $2D, $18, $0B, $00,
125 $08, $00, $00, $00, $0D, $4A, $53, $4F, $4E, $20,
126 $54, $48, $49, $53, $21, $20, $22, $01, $0B, $00,
127 $09, $00, $00, $00, $2E, $D3, $80, $E2, $85, $AE,
128 $CE, $9D, $20, $D0, $9D, $CE, $BF, $E2, $85, $BF,
129 $D0, $BE, $C9, $A1, $D0, $B3, $D0, $B0, $CF, $81,
130 $E2, $84, $8E, $20, $CE, $91, $74, $74, $CE, $B1,
131 $E2, $85, $BD, $CE, $BA, $EF, $BF, $BD, $E2, $80,
132 $BC, $02, $00, $0A, $00, $0B, $00, $0B, $00, $00,
133 $00, $06, $62, $61, $73, $65, $36, $34, $0F, $00,
134 $0C, $03, $00, $00, $00, $03, $01, $02, $03, $0F,
135 $00, $0D, $06, $00, $00, $00, $03, $00, $01, $00,
136 $02, $00, $03, $0F, $00, $0E, $0A, $00, $00, $00,
137 $03, $00, $00, $00, $00, $00, $00, $00, $01, $00,
138 $00, $00, $00, $00, $00, $00, $02, $00, $00, $00,
139 $00, $00, $00, $00, $03, $00, $0E, $00, $02, $0F,
140 $00, $00, $00, $03, $0B, $00, $00, $00, $00, $0B,
141 $00, $00, $00, $03, $00, $00, $00, $0F, $74, $68,
142 $65, $6E, $20, $61, $20, $6F, $6E, $65, $2C, $20,
143 $74, $77, $6F, $00, $00, $00, $06, $74, $68, $72,
144 $65, $65, $21, $00, $00, $00, $06, $46, $4F, $55,
145 $52, $21, $21, $0B, $00, $00, $00, $02, $00, $00,
146 $00, $09, $61, $6E, $64, $20, $61, $20, $6F, $6E,
147 $65, $00, $00, $00, $09, $61, $6E, $64, $20, $61,
148 $20, $74, $77, $6F, $0D, $00, $03, $0B, $0F, $00,
149 $00, $00, $03, $00, $00, $00, $03, $74, $77, $6F,
150 $0C, $00, $00, $00, $02, $08, $00, $01, $00, $00,
151 $00, $01, $0B, $00, $02, $00, $00, $00, $05, $57,
152 $61, $69, $74, $2E, $00, $08, $00, $01, $00, $00,
153 $00, $02, $0B, $00, $02, $00, $00, $00, $05, $57,
154 $68, $61, $74, $3F, $00, $00, $00, $00, $05, $74,
155 $68, $72, $65, $65, $0C, $00, $00, $00, $00, $00,
156 $00, $00, $04, $7A, $65, $72, $6F, $0C, $00, $00,
157 $00, $00, $00 };
158
159
160*)
161
162 private
163 const
164 kUnicodeBytes : packed array[0..43] of Byte
165 = ( $d3, $80, $e2, $85, $ae, $ce, $9d, $20, $d0, $9d,
166 $ce, $bf, $e2, $85, $bf, $d0, $be, $c9, $a1, $d0,
167 $b3, $d0, $b0, $cf, $81, $e2, $84, $8e, $20, $ce,
168 $91, $74, $74, $ce, $b1, $e2, $85, $bd, $ce, $ba,
169 $83, $e2, $80, $bc);
170
171 end;
172
173
174implementation
175
176
177class function Fixtures.CreateOneOfEach : IOneOfEach;
178var db : Double;
179 us : Utf8String;
180begin
181 result := TOneOfEachImpl.Create;
182 result.setIm_true( TRUE);
183 result.setIm_false( FALSE);
184 result.setA_bite( ShortInt($D6));
185 result.setInteger16( 27000);
186 result.setInteger32( 1 shl 24);
187 result.setInteger64( Int64(6000) * Int64(1000) * Int64(1000));
188 db := Pi;
189 result.setDouble_precision( db);
190 result.setSome_characters( 'JSON THIS! \"\1');
191
192 // ??
193 SetLength( us, Length(kUnicodeBytes));
194 Move( kUnicodeBytes[0], us[1], Length(kUnicodeBytes));
195 // ??
196 SetString( us, PChar(@kUnicodeBytes[0]), Length(kUnicodeBytes));
197 // !!
198 result.setZomg_unicode( UnicodeString( us));
199
Jens Geyer62445c12022-06-29 00:00:00 +0200200 result.Rfc4122_uuid := TGuid.Create('{00112233-4455-6677-8899-aabbccddeeff}');
201
Roger Meier2b2c0b22012-09-12 20:09:02 +0000202 {$IF cDebugProtoTest_Option_AnsiStr_Binary}
203 result.SetBase64('base64');
Jens Geyer07f4bb52022-09-03 14:50:06 +0200204 {$ELSEIF cDebugProtoTest_Option_COM_Types}
205 result.SetBase64( TThriftBytesImpl.Create( TEncoding.UTF8.GetBytes('base64')));
Roger Meier2b2c0b22012-09-12 20:09:02 +0000206 {$ELSE}
Jens Geyer17c3ad92017-09-05 20:31:27 +0200207 result.SetBase64( TEncoding.UTF8.GetBytes('base64'));
Roger Meier2b2c0b22012-09-12 20:09:02 +0000208 {$IFEND}
209
210 // byte, i16, and i64 lists are populated by default constructor
211end;
212
213
214class function Fixtures.CreateNesting : INesting;
215var bonk : IBonk;
216begin
217 bonk := TBonkImpl.Create;
Jens Geyercd7a2aa2022-10-17 14:21:18 +0200218 bonk.&Type := 31337;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000219 bonk.Message := 'I am a bonk... xor!';
220
221 result := TNestingImpl.Create;
222 result.My_bonk := bonk;
223 result.My_ooe := CreateOneOfEach;
224end;
225
226
227class function Fixtures.CreateHolyMoley : IHolyMoley;
Jens Geyer07f4bb52022-09-03 14:50:06 +0200228type
229 TStringType = {$IF cDebugProtoTest_Option_COM_Types} WideString {$ELSE} String {$IFEND};
Roger Meier2b2c0b22012-09-12 20:09:02 +0000230var big : IThriftList<IOneOfEach>;
Jens Geyer07f4bb52022-09-03 14:50:06 +0200231 stage1 : IThriftList<TStringType>;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000232 stage2 : IThriftList<IBonk>;
233 b : IBonk;
234begin
235 result := THolyMoleyImpl.Create;
236
237 big := TThriftListImpl<IOneOfEach>.Create;
238 big.add( CreateOneOfEach);
239 big.add( CreateNesting.my_ooe);
240 result.Big := big;
241 result.Big[0].setA_bite( $22);
242 result.Big[0].setA_bite( $23);
243
Jens Geyer07f4bb52022-09-03 14:50:06 +0200244 result.Contain := TThriftHashSetImpl< IThriftList<TStringType>>.Create;
245 stage1 := TThriftListImpl<TStringType>.Create;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000246 stage1.add( 'and a one');
247 stage1.add( 'and a two');
248 result.Contain.add( stage1);
249
Jens Geyer07f4bb52022-09-03 14:50:06 +0200250 stage1 := TThriftListImpl<TStringType>.Create;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000251 stage1.add( 'then a one, two');
252 stage1.add( 'three!');
253 stage1.add( 'FOUR!!');
254 result.Contain.add( stage1);
255
Jens Geyer07f4bb52022-09-03 14:50:06 +0200256 stage1 := TThriftListImpl<TStringType>.Create;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000257 result.Contain.add( stage1);
258
259 stage2 := TThriftListImpl<IBonk>.Create;
Jens Geyer07f4bb52022-09-03 14:50:06 +0200260 result.Bonks := TThriftDictionaryImpl< TStringType, IThriftList< IBonk>>.Create;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000261 // one empty
262 result.Bonks.Add( 'zero', stage2);
263
264 // one with two
265 stage2 := TThriftListImpl<IBonk>.Create;
266 b := TBonkImpl.Create;
Jens Geyercd7a2aa2022-10-17 14:21:18 +0200267 b.&type := 1;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000268 b.message := 'Wait.';
269 stage2.Add( b);
270 b := TBonkImpl.Create;
Jens Geyercd7a2aa2022-10-17 14:21:18 +0200271 b.&type := 2;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000272 b.message := 'What?';
273 stage2.Add( b);
274 result.Bonks.Add( 'two', stage2);
275
276 // one with three
277 stage2 := TThriftListImpl<IBonk>.Create;
278 b := TBonkImpl.Create;
Jens Geyercd7a2aa2022-10-17 14:21:18 +0200279 b.&type := 3;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000280 b.message := 'quoth';
281 stage2.Add( b);
282 b := TBonkImpl.Create;
Jens Geyercd7a2aa2022-10-17 14:21:18 +0200283 b.&type := 4;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000284 b.message := 'the raven';
285 stage2.Add( b);
286 b := TBonkImpl.Create;
Jens Geyercd7a2aa2022-10-17 14:21:18 +0200287 b.&type := 5;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000288 b.message := 'nevermore';
289 stage2.Add( b);
290 result.bonks.Add( 'three', stage2);
291end;
292
293
294class function Fixtures.CreateCompactProtoTestStruct : ICompactProtoTestStruct;
295// superhuge compact proto test struct
296begin
297 result := TCompactProtoTestStructImpl.Create;
Jens Geyer66f95362021-03-29 20:35:41 +0200298 result.A_byte := DebugProtoTest.TConstants.COMPACT_TEST.A_byte;
299 result.A_i16 := DebugProtoTest.TConstants.COMPACT_TEST.A_i16;
300 result.A_i32 := DebugProtoTest.TConstants.COMPACT_TEST.A_i32;
301 result.A_i64 := DebugProtoTest.TConstants.COMPACT_TEST.A_i64;
302 result.A_double := DebugProtoTest.TConstants.COMPACT_TEST.A_double;
303 result.A_string := DebugProtoTest.TConstants.COMPACT_TEST.A_string;
304 result.A_binary := DebugProtoTest.TConstants.COMPACT_TEST.A_binary;
305 result.True_field := DebugProtoTest.TConstants.COMPACT_TEST.True_field;
306 result.False_field := DebugProtoTest.TConstants.COMPACT_TEST.False_field;
307 result.Empty_struct_field := DebugProtoTest.TConstants.COMPACT_TEST.Empty_struct_field;
308 result.Byte_list := DebugProtoTest.TConstants.COMPACT_TEST.Byte_list;
309 result.I16_list := DebugProtoTest.TConstants.COMPACT_TEST.I16_list;
310 result.I32_list := DebugProtoTest.TConstants.COMPACT_TEST.I32_list;
311 result.I64_list := DebugProtoTest.TConstants.COMPACT_TEST.I64_list;
312 result.Double_list := DebugProtoTest.TConstants.COMPACT_TEST.Double_list;
313 result.String_list := DebugProtoTest.TConstants.COMPACT_TEST.String_list;
314 result.Binary_list := DebugProtoTest.TConstants.COMPACT_TEST.Binary_list;
315 result.Boolean_list := DebugProtoTest.TConstants.COMPACT_TEST.Boolean_list;
316 result.Struct_list := DebugProtoTest.TConstants.COMPACT_TEST.Struct_list;
317 result.Byte_set := DebugProtoTest.TConstants.COMPACT_TEST.Byte_set;
318 result.I16_set := DebugProtoTest.TConstants.COMPACT_TEST.I16_set;
319 result.I32_set := DebugProtoTest.TConstants.COMPACT_TEST.I32_set;
320 result.I64_set := DebugProtoTest.TConstants.COMPACT_TEST.I64_set;
321 result.Double_set := DebugProtoTest.TConstants.COMPACT_TEST.Double_set;
322 result.String_set := DebugProtoTest.TConstants.COMPACT_TEST.String_set;
323 result.String_set := DebugProtoTest.TConstants.COMPACT_TEST.String_set;
324 result.String_set := DebugProtoTest.TConstants.COMPACT_TEST.String_set;
325 result.Binary_set := DebugProtoTest.TConstants.COMPACT_TEST.Binary_set;
326 result.Boolean_set := DebugProtoTest.TConstants.COMPACT_TEST.Boolean_set;
327 result.Struct_set := DebugProtoTest.TConstants.COMPACT_TEST.Struct_set;
328 result.Byte_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_byte_map;
329 result.I16_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.I16_byte_map;
330 result.I32_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.I32_byte_map;
331 result.I64_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.I64_byte_map;
332 result.Double_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.Double_byte_map;
333 result.String_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.String_byte_map;
334 result.Binary_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.Binary_byte_map;
335 result.Boolean_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.Boolean_byte_map;
336 result.Byte_i16_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_i16_map;
337 result.Byte_i32_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_i32_map;
338 result.Byte_i64_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_i64_map;
339 result.Byte_double_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_double_map;
340 result.Byte_string_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_string_map;
341 result.Byte_binary_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_binary_map;
342 result.Byte_boolean_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_boolean_map;
343 result.List_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.List_byte_map;
344 result.Set_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.Set_byte_map;
345 result.Map_byte_map := DebugProtoTest.TConstants.COMPACT_TEST.Map_byte_map;
346 result.Byte_map_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_map_map;
347 result.Byte_set_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_set_map;
348 result.Byte_list_map := DebugProtoTest.TConstants.COMPACT_TEST.Byte_list_map;
Roger Meier2b2c0b22012-09-12 20:09:02 +0000349
Jens Geyera715f702019-08-28 22:56:13 +0200350 result.Field500 := 500;
351 result.Field5000 := 5000;
352 result.Field20000 := 20000;
353
Roger Meier2b2c0b22012-09-12 20:09:02 +0000354 {$IF cDebugProtoTest_Option_AnsiStr_Binary}
355 result.A_binary := AnsiString( #0#1#2#3#4#5#6#7#8);
Jens Geyer07f4bb52022-09-03 14:50:06 +0200356 {$ELSEIF cDebugProtoTest_Option_COM_Types}
357 result.A_binary := TThriftBytesImpl.Create( TEncoding.UTF8.GetBytes( #0#1#2#3#4#5#6#7#8));
Roger Meier2b2c0b22012-09-12 20:09:02 +0000358 {$ELSE}
Jens Geyer17c3ad92017-09-05 20:31:27 +0200359 result.A_binary := TEncoding.UTF8.GetBytes( #0#1#2#3#4#5#6#7#8);
Roger Meier2b2c0b22012-09-12 20:09:02 +0000360 {$IFEND}
361end;
362
363
Jens Geyer3a172092024-11-19 01:14:32 +0100364class function Fixtures.CreateBatchGetResponse : IBatchGetResponse;
365begin
366 result := TBatchGetResponseImpl.Create;
367 x
368end;
Jens Geyer9bb4c112014-07-03 23:05:54 +0200369
370
Roger Meier2b2c0b22012-09-12 20:09:02 +0000371end.
372