Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: test/file_generator_test.dart

Issue 1829573002: Fix all strong mode warnings in protoc-plugin (Closed) Base URL: git@github.com:dart-lang/dart-protoc-plugin.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env dart 1 #!/usr/bin/env dart
2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
3 // for details. All rights reserved. Use of this source code is governed by a 3 // for details. All rights reserved. Use of this source code is governed by a
4 // BSD-style license that can be found in the LICENSE file. 4 // BSD-style license that can be found in the LICENSE file.
5 5
6 library file_generator_test; 6 library file_generator_test;
7 7
8 import 'package:protoc_plugin/indenting_writer.dart'; 8 import 'package:protoc_plugin/indenting_writer.dart';
9 import 'package:protoc_plugin/src/descriptor.pb.dart'; 9 import 'package:protoc_plugin/src/descriptor.pb.dart';
10 import 'package:protoc_plugin/src/plugin.pb.dart'; 10 import 'package:protoc_plugin/src/plugin.pb.dart';
11 import 'package:protoc_plugin/protoc.dart'; 11 import 'package:protoc_plugin/protoc.dart';
12 import 'package:test/test.dart'; 12 import 'package:test/test.dart';
13 13
14 FileDescriptorProto buildFileDescriptor( 14 FileDescriptorProto buildFileDescriptor(
15 {phoneNumber: true, topLevelEnum: false}) { 15 {phoneNumber: true, topLevelEnum: false}) {
16 16 FileDescriptorProto fd = new FileDescriptorProto()..name = 'test';
17 FileDescriptorProto fd = new FileDescriptorProto()
18 ..name = 'test';
19 17
20 if (topLevelEnum) { 18 if (topLevelEnum) {
21 fd.enumType.add(new EnumDescriptorProto() 19 fd.enumType.add(new EnumDescriptorProto()
22 ..name = 'PhoneType' 20 ..name = 'PhoneType'
23 ..value.addAll([ 21 ..value.addAll([
24 new EnumValueDescriptorProto() 22 new EnumValueDescriptorProto()
25 ..name = 'MOBILE' 23 ..name = 'MOBILE'
26 ..number = 0, 24 ..number = 0,
27 new EnumValueDescriptorProto() 25 new EnumValueDescriptorProto()
28 ..name = 'HOME' 26 ..name = 'HOME'
29 ..number = 1, 27 ..number = 1,
30 new EnumValueDescriptorProto() 28 new EnumValueDescriptorProto()
31 ..name = 'WORK' 29 ..name = 'WORK'
32 ..number = 2, 30 ..number = 2,
33 new EnumValueDescriptorProto() 31 new EnumValueDescriptorProto()
34 ..name = 'BUSINESS' 32 ..name = 'BUSINESS'
35 ..number = 2])); 33 ..number = 2
34 ]));
36 } 35 }
37 36
38 if (phoneNumber) { 37 if (phoneNumber) {
39 fd.messageType.add(new DescriptorProto() 38 fd.messageType.add(new DescriptorProto()
40 ..name = 'PhoneNumber' 39 ..name = 'PhoneNumber'
41 ..field.addAll([ 40 ..field.addAll([
42 // required string number = 1; 41 // required string number = 1;
43 new FieldDescriptorProto() 42 new FieldDescriptorProto()
44 ..name = 'number' 43 ..name = 'number'
45 ..number = 1 44 ..number = 1
46 ..label = FieldDescriptorProto_Label.LABEL_REQUIRED 45 ..label = FieldDescriptorProto_Label.LABEL_REQUIRED
47 ..type = FieldDescriptorProto_Type.TYPE_STRING, 46 ..type = FieldDescriptorProto_Type.TYPE_STRING,
48 // optional int32 type = 2; 47 // optional int32 type = 2;
49 // OR 48 // OR
50 // optional PhoneType type = 2; 49 // optional PhoneType type = 2;
51 new FieldDescriptorProto() 50 new FieldDescriptorProto()
52 ..name = 'type' 51 ..name = 'type'
53 ..number = 2 52 ..number = 2
54 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 53 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
55 ..type = topLevelEnum ? FieldDescriptorProto_Type.TYPE_ENUM 54 ..type = topLevelEnum
56 : FieldDescriptorProto_Type.TYPE_INT32 55 ? FieldDescriptorProto_Type.TYPE_ENUM
57 ..typeName = topLevelEnum ? '.PhoneType' : '', 56 : FieldDescriptorProto_Type.TYPE_INT32
58 // optional string name = 3 [default = "$"]; 57 ..typeName = topLevelEnum ? '.PhoneType' : '',
59 new FieldDescriptorProto() 58 // optional string name = 3 [default = "$"];
60 ..name = 'name' 59 new FieldDescriptorProto()
61 ..number = 3 60 ..name = 'name'
62 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 61 ..number = 3
63 ..type = FieldDescriptorProto_Type.TYPE_STRING 62 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
64 ..defaultValue = r'$' 63 ..type = FieldDescriptorProto_Type.TYPE_STRING
65 ])); 64 ..defaultValue = r'$'
65 ]));
66 } 66 }
67 67
68 return fd; 68 return fd;
69 } 69 }
70 70
71 void main() { 71 void main() {
72 test('FileGenerator output for a proto with one message', () { 72 test('FileGenerator output for a proto with one message', () {
73 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. 73 // NOTE: Below > 80 cols because it is matching generated code > 80 cols.
74 String expected = r''' 74 String expected = r'''
75 /// 75 ///
(...skipping 19 matching lines...) Expand all
95 static PbList<PhoneNumber> createRepeated() => new PbList<PhoneNumber>(); 95 static PbList<PhoneNumber> createRepeated() => new PbList<PhoneNumber>();
96 static PhoneNumber getDefault() { 96 static PhoneNumber getDefault() {
97 if (_defaultInstance == null) _defaultInstance = new _ReadonlyPhoneNumber(); 97 if (_defaultInstance == null) _defaultInstance = new _ReadonlyPhoneNumber();
98 return _defaultInstance; 98 return _defaultInstance;
99 } 99 }
100 static PhoneNumber _defaultInstance; 100 static PhoneNumber _defaultInstance;
101 static void $checkItem(PhoneNumber v) { 101 static void $checkItem(PhoneNumber v) {
102 if (v is !PhoneNumber) checkItemFailed(v, 'PhoneNumber'); 102 if (v is !PhoneNumber) checkItemFailed(v, 'PhoneNumber');
103 } 103 }
104 104
105 String get number => $_get(0, 1, ''); 105 String get number => $_get(0, 1, '') as String;
106 void set number(String v) { $_setString(0, 1, v); } 106 void set number(String v) { $_setString(0, 1, v); }
107 bool hasNumber() => $_has(0, 1); 107 bool hasNumber() => $_has(0, 1);
108 void clearNumber() => clearField(1); 108 void clearNumber() => clearField(1);
109 109
110 int get type => $_get(1, 2, 0); 110 int get type => $_get(1, 2, 0) as int;
111 void set type(int v) { $_setUnsignedInt32(1, 2, v); } 111 void set type(int v) { $_setUnsignedInt32(1, 2, v); }
112 bool hasType() => $_has(1, 2); 112 bool hasType() => $_has(1, 2);
113 void clearType() => clearField(2); 113 void clearType() => clearField(2);
114 114
115 String get name => $_get(2, 3, '\$'); 115 String get name => $_get(2, 3, '\$') as String;
116 void set name(String v) { $_setString(2, 3, v); } 116 void set name(String v) { $_setString(2, 3, v); }
117 bool hasName() => $_has(2, 3); 117 bool hasName() => $_has(2, 3);
118 void clearName() => clearField(3); 118 void clearName() => clearField(3);
119 } 119 }
120 120
121 class _ReadonlyPhoneNumber extends PhoneNumber with ReadonlyMessageMixin {} 121 class _ReadonlyPhoneNumber extends PhoneNumber with ReadonlyMessageMixin {}
122 122
123 const PhoneNumber$json = const { 123 const PhoneNumber$json = const {
124 '1': 'PhoneNumber', 124 '1': 'PhoneNumber',
125 '2': const [ 125 '2': const [
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 static const PhoneType WORK = const PhoneType._(2, 'WORK'); 157 static const PhoneType WORK = const PhoneType._(2, 'WORK');
158 158
159 static const PhoneType BUSINESS = WORK; 159 static const PhoneType BUSINESS = WORK;
160 160
161 static const List<PhoneType> values = const <PhoneType> [ 161 static const List<PhoneType> values = const <PhoneType> [
162 MOBILE, 162 MOBILE,
163 HOME, 163 HOME,
164 WORK, 164 WORK,
165 ]; 165 ];
166 166
167 static final Map<int, PhoneType> _byValue = ProtobufEnum.initByValue(values); 167 static final Map<int, dynamic> _byValue = ProtobufEnum.initByValue(values);
168 static PhoneType valueOf(int value) => _byValue[value]; 168 static PhoneType valueOf(int value) => _byValue[value] as PhoneType;
169 static void $checkItem(PhoneType v) { 169 static void $checkItem(PhoneType v) {
170 if (v is !PhoneType) checkItemFailed(v, 'PhoneType'); 170 if (v is !PhoneType) checkItemFailed(v, 'PhoneType');
171 } 171 }
172 172
173 const PhoneType._(int v, String n) : super(v, n); 173 const PhoneType._(int v, String n) : super(v, n);
174 } 174 }
175 175
176 const PhoneType$json = const { 176 const PhoneType$json = const {
177 '1': 'PhoneType', 177 '1': 'PhoneType',
178 '2': const [ 178 '2': const [
179 const {'1': 'MOBILE', '2': 0}, 179 const {'1': 'MOBILE', '2': 0},
180 const {'1': 'HOME', '2': 1}, 180 const {'1': 'HOME', '2': 1},
181 const {'1': 'WORK', '2': 2}, 181 const {'1': 'WORK', '2': 2},
182 const {'1': 'BUSINESS', '2': 2}, 182 const {'1': 'BUSINESS', '2': 2},
183 ], 183 ],
184 }; 184 };
185 185
186 '''; 186 ''';
187 FileDescriptorProto fd = buildFileDescriptor( 187 FileDescriptorProto fd =
188 phoneNumber: false, 188 buildFileDescriptor(phoneNumber: false, topLevelEnum: true);
189 topLevelEnum: true);
190 var options = parseGenerationOptions( 189 var options = parseGenerationOptions(
191 new CodeGeneratorRequest(), new CodeGeneratorResponse()); 190 new CodeGeneratorRequest(), new CodeGeneratorResponse());
192 191
193 FileGenerator fg = new FileGenerator(fd); 192 FileGenerator fg = new FileGenerator(fd);
194 link(options, [fg]); 193 link(options, [fg]);
195 194
196 var writer = new IndentingWriter(); 195 var writer = new IndentingWriter();
197 fg.generate(writer); 196 fg.generate(writer);
198 expect(writer.toString(), expected); 197 expect(writer.toString(), expected);
199 }); 198 });
(...skipping 28 matching lines...) Expand all
228 /// 227 ///
229 library test; 228 library test;
230 229
231 import 'package:fixnum/fixnum.dart'; 230 import 'package:fixnum/fixnum.dart';
232 import 'package:protobuf/protobuf.dart'; 231 import 'package:protobuf/protobuf.dart';
233 232
234 '''; 233 ''';
235 FileDescriptorProto fd = new FileDescriptorProto() 234 FileDescriptorProto fd = new FileDescriptorProto()
236 ..name = 'test' 235 ..name = 'test'
237 ..messageType.add(new DescriptorProto() 236 ..messageType.add(new DescriptorProto()
238 ..name = 'Count' 237 ..name = 'Count'
239 ..field.addAll([ 238 ..field.addAll([
240 new FieldDescriptorProto() 239 new FieldDescriptorProto()
241 ..name = 'count' 240 ..name = 'count'
242 ..number = 1 241 ..number = 1
243 ..type = FieldDescriptorProto_Type.TYPE_INT64 242 ..type = FieldDescriptorProto_Type.TYPE_INT64
244 ])); 243 ]));
245 244
246 var options = parseGenerationOptions( 245 var options = parseGenerationOptions(
247 new CodeGeneratorRequest(), new CodeGeneratorResponse()); 246 new CodeGeneratorRequest(), new CodeGeneratorResponse());
248 247
249 FileGenerator fg = new FileGenerator(fd); 248 FileGenerator fg = new FileGenerator(fd);
250 link(options, [fg]); 249 link(options, [fg]);
251 250
252 var writer = new IndentingWriter(); 251 var writer = new IndentingWriter();
253 fg.generateHeader(writer, Uri.parse("test.proto")); 252 fg.generateHeader(writer, Uri.parse("test.proto"));
254 expect(writer.toString(), expected); 253 expect(writer.toString(), expected);
255 }); 254 });
256 255
257
258 test('FileGenerator handles field_name options', () { 256 test('FileGenerator handles field_name options', () {
259 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. 257 // NOTE: Below > 80 cols because it is matching generated code > 80 cols.
260 String expected = r''' 258 String expected = r'''
261 /// 259 ///
262 // Generated code. Do not modify. 260 // Generated code. Do not modify.
263 /// 261 ///
264 library test; 262 library test;
265 263
266 import 'package:protobuf/protobuf.dart'; 264 import 'package:protobuf/protobuf.dart';
267 265
(...skipping 13 matching lines...) Expand all
281 static PbList<PhoneNumber> createRepeated() => new PbList<PhoneNumber>(); 279 static PbList<PhoneNumber> createRepeated() => new PbList<PhoneNumber>();
282 static PhoneNumber getDefault() { 280 static PhoneNumber getDefault() {
283 if (_defaultInstance == null) _defaultInstance = new _ReadonlyPhoneNumber(); 281 if (_defaultInstance == null) _defaultInstance = new _ReadonlyPhoneNumber();
284 return _defaultInstance; 282 return _defaultInstance;
285 } 283 }
286 static PhoneNumber _defaultInstance; 284 static PhoneNumber _defaultInstance;
287 static void $checkItem(PhoneNumber v) { 285 static void $checkItem(PhoneNumber v) {
288 if (v is !PhoneNumber) checkItemFailed(v, 'PhoneNumber'); 286 if (v is !PhoneNumber) checkItemFailed(v, 'PhoneNumber');
289 } 287 }
290 288
291 String get no => $_get(0, 1, ''); 289 String get no => $_get(0, 1, '') as String;
292 void set no(String v) { $_setString(0, 1, v); } 290 void set no(String v) { $_setString(0, 1, v); }
293 bool hasNo() => $_has(0, 1); 291 bool hasNo() => $_has(0, 1);
294 void clearNo() => clearField(1); 292 void clearNo() => clearField(1);
295 293
296 int get the_type => $_get(1, 2, 0); 294 int get the_type => $_get(1, 2, 0) as int;
297 void set the_type(int v) { $_setUnsignedInt32(1, 2, v); } 295 void set the_type(int v) { $_setUnsignedInt32(1, 2, v); }
298 bool hasThe_type() => $_has(1, 2); 296 bool hasThe_type() => $_has(1, 2);
299 void clearThe_type() => clearField(2); 297 void clearThe_type() => clearField(2);
300 298
301 String get name_ => $_get(2, 3, '\$'); 299 String get name_ => $_get(2, 3, '\$') as String;
302 void set name_(String v) { $_setString(2, 3, v); } 300 void set name_(String v) { $_setString(2, 3, v); }
303 bool hasName_() => $_has(2, 3); 301 bool hasName_() => $_has(2, 3);
304 void clearName_() => clearField(3); 302 void clearName_() => clearField(3);
305 } 303 }
306 304
307 class _ReadonlyPhoneNumber extends PhoneNumber with ReadonlyMessageMixin {} 305 class _ReadonlyPhoneNumber extends PhoneNumber with ReadonlyMessageMixin {}
308 306
309 const PhoneNumber$json = const { 307 const PhoneNumber$json = const {
310 '1': 'PhoneNumber', 308 '1': 'PhoneNumber',
311 '2': const [ 309 '2': const [
312 const {'1': 'number', '3': 1, '4': 2, '5': 9}, 310 const {'1': 'number', '3': 1, '4': 2, '5': 9},
313 const {'1': 'type', '3': 2, '4': 1, '5': 5, '6': ''}, 311 const {'1': 'type', '3': 2, '4': 1, '5': 5, '6': ''},
314 const {'1': 'name', '3': 3, '4': 1, '5': 9, '7': r'$'}, 312 const {'1': 'name', '3': 3, '4': 1, '5': 9, '7': r'$'},
315 ], 313 ],
316 }; 314 };
317 315
318 '''; 316 ''';
319 FileDescriptorProto fd = buildFileDescriptor(); 317 FileDescriptorProto fd = buildFileDescriptor();
320 var request = new CodeGeneratorRequest(); 318 var request = new CodeGeneratorRequest();
321 request.parameter = 'field_name=PhoneNumber.number|No,' 319 request.parameter = 'field_name=PhoneNumber.number|No,'
322 'field_name=PhoneNumber.name|Name_,' 320 'field_name=PhoneNumber.name|Name_,'
323 'field_name=PhoneNumber.type|The_type'; 321 'field_name=PhoneNumber.type|The_type';
324 var options = parseGenerationOptions( 322 var options = parseGenerationOptions(request, new CodeGeneratorResponse());
325 request, new CodeGeneratorResponse());
326 323
327 FileGenerator fg = new FileGenerator(fd); 324 FileGenerator fg = new FileGenerator(fd);
328 link(options, [fg]); 325 link(options, [fg]);
329 326
330 var writer = new IndentingWriter(); 327 var writer = new IndentingWriter();
331 fg.generate(writer); 328 fg.generate(writer);
332 expect(writer.toString(), expected); 329 expect(writer.toString(), expected);
333 }); 330 });
334 331
335 test('FileGenerator generates imports for .pb.dart files', () { 332 test('FileGenerator generates imports for .pb.dart files', () {
(...skipping 25 matching lines...) Expand all
361 static PbList<M> createRepeated() => new PbList<M>(); 358 static PbList<M> createRepeated() => new PbList<M>();
362 static M getDefault() { 359 static M getDefault() {
363 if (_defaultInstance == null) _defaultInstance = new _ReadonlyM(); 360 if (_defaultInstance == null) _defaultInstance = new _ReadonlyM();
364 return _defaultInstance; 361 return _defaultInstance;
365 } 362 }
366 static M _defaultInstance; 363 static M _defaultInstance;
367 static void $checkItem(M v) { 364 static void $checkItem(M v) {
368 if (v is !M) checkItemFailed(v, 'M'); 365 if (v is !M) checkItemFailed(v, 'M');
369 } 366 }
370 367
371 M get m => $_get(0, 1, null); 368 M get m => $_get(0, 1, null) as M;
372 void set m(M v) { setField(1, v); } 369 void set m(M v) { setField(1, v); }
373 bool hasM() => $_has(0, 1); 370 bool hasM() => $_has(0, 1);
374 void clearM() => clearField(1); 371 void clearM() => clearField(1);
375 372
376 p1.M get m1 => $_get(1, 2, null); 373 p1.M get m1 => $_get(1, 2, null) as p1.M;
377 void set m1(p1.M v) { setField(2, v); } 374 void set m1(p1.M v) { setField(2, v); }
378 bool hasM1() => $_has(1, 2); 375 bool hasM1() => $_has(1, 2);
379 void clearM1() => clearField(2); 376 void clearM1() => clearField(2);
380 377
381 p2.M get m2 => $_get(2, 3, null); 378 p2.M get m2 => $_get(2, 3, null) as p2.M;
382 void set m2(p2.M v) { setField(3, v); } 379 void set m2(p2.M v) { setField(3, v); }
383 bool hasM2() => $_has(2, 3); 380 bool hasM2() => $_has(2, 3);
384 void clearM2() => clearField(3); 381 void clearM2() => clearField(3);
385 } 382 }
386 383
387 class _ReadonlyM extends M with ReadonlyMessageMixin {} 384 class _ReadonlyM extends M with ReadonlyMessageMixin {}
388 385
389 const M$json = const { 386 const M$json = const {
390 '1': 'M', 387 '1': 'M',
391 '2': const [ 388 '2': const [
(...skipping 28 matching lines...) Expand all
420 // import "package1.proto"; 417 // import "package1.proto";
421 // import "package2.proto"; 418 // import "package2.proto";
422 // message M { 419 // message M {
423 // optional M m = 1; 420 // optional M m = 1;
424 // optional p1.M m1 = 2; 421 // optional p1.M m1 = 2;
425 // optional p2.M m2 = 3; 422 // optional p2.M m2 = 3;
426 // } 423 // }
427 424
428 // Description of package1.proto. 425 // Description of package1.proto.
429 DescriptorProto md1 = new DescriptorProto() 426 DescriptorProto md1 = new DescriptorProto()
430 ..name = 'M' 427 ..name = 'M'
431 ..field.addAll([ 428 ..field.addAll([
432 // optional M m = 1; 429 // optional M m = 1;
433 new FieldDescriptorProto() 430 new FieldDescriptorProto()
434 ..name = 'm' 431 ..name = 'm'
435 ..number = 1 432 ..number = 1
436 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 433 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
437 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE 434 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
438 ..typeName = ".p1.M", 435 ..typeName = ".p1.M",
439 ]); 436 ]);
440 FileDescriptorProto fd1 = new FileDescriptorProto() 437 FileDescriptorProto fd1 = new FileDescriptorProto()
441 ..package = 'p1' 438 ..package = 'p1'
442 ..name = 'package1.proto' 439 ..name = 'package1.proto'
443 ..messageType.add(md1); 440 ..messageType.add(md1);
444 441
445 // Description of package1.proto. 442 // Description of package1.proto.
446 DescriptorProto md2 = new DescriptorProto() 443 DescriptorProto md2 = new DescriptorProto()
447 ..name = 'M' 444 ..name = 'M'
448 ..field.addAll([ 445 ..field.addAll([
449 // optional M m = 1; 446 // optional M m = 1;
450 new FieldDescriptorProto() 447 new FieldDescriptorProto()
451 ..name = 'x' 448 ..name = 'x'
452 ..number = 1 449 ..number = 1
453 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 450 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
454 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE 451 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
455 ..typeName = ".p2.M", 452 ..typeName = ".p2.M",
456 ]); 453 ]);
457 FileDescriptorProto fd2 = new FileDescriptorProto() 454 FileDescriptorProto fd2 = new FileDescriptorProto()
458 ..package = 'p2' 455 ..package = 'p2'
459 ..name = 'package2.proto' 456 ..name = 'package2.proto'
460 ..messageType.add(md2); 457 ..messageType.add(md2);
461 458
462 // Description of test.proto. 459 // Description of test.proto.
463 DescriptorProto md = new DescriptorProto() 460 DescriptorProto md = new DescriptorProto()
464 ..name = 'M' 461 ..name = 'M'
465 ..field.addAll([ 462 ..field.addAll([
466 // optional M m = 1; 463 // optional M m = 1;
467 new FieldDescriptorProto() 464 new FieldDescriptorProto()
468 ..name = 'm' 465 ..name = 'm'
469 ..number = 1 466 ..number = 1
470 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 467 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
471 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE 468 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
472 ..typeName = ".M", 469 ..typeName = ".M",
473 // optional p1.M m1 = 2; 470 // optional p1.M m1 = 2;
474 new FieldDescriptorProto() 471 new FieldDescriptorProto()
475 ..name = 'm1' 472 ..name = 'm1'
476 ..number = 2 473 ..number = 2
477 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 474 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
478 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE 475 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
479 ..typeName = ".p1.M", 476 ..typeName = ".p1.M",
480 // optional p2.M m2 = 3; 477 // optional p2.M m2 = 3;
481 new FieldDescriptorProto() 478 new FieldDescriptorProto()
482 ..name = 'm2' 479 ..name = 'm2'
483 ..number = 3 480 ..number = 3
484 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL 481 ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
485 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE 482 ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
486 ..typeName = ".p2.M", 483 ..typeName = ".p2.M",
487 ]); 484 ]);
488 FileDescriptorProto fd = new FileDescriptorProto() 485 FileDescriptorProto fd = new FileDescriptorProto()
489 ..name = 'test.proto' 486 ..name = 'test.proto'
490 ..messageType.add(md); 487 ..messageType.add(md);
491 fd.dependency.addAll(['package1.proto', 'package2.proto']); 488 fd.dependency.addAll(['package1.proto', 'package2.proto']);
492 var request = new CodeGeneratorRequest(); 489 var request = new CodeGeneratorRequest();
493 var response = new CodeGeneratorResponse(); 490 var response = new CodeGeneratorResponse();
494 var options = parseGenerationOptions(request, response); 491 var options = parseGenerationOptions(request, response);
495 492
496 FileGenerator fg = new FileGenerator(fd); 493 FileGenerator fg = new FileGenerator(fd);
497 link(options, [fg, new FileGenerator(fd1), new FileGenerator(fd2)]); 494 link(options, [fg, new FileGenerator(fd1), new FileGenerator(fd2)]);
498 495
499 var writer = new IndentingWriter(); 496 var writer = new IndentingWriter();
500 fg.generate(writer); 497 fg.generate(writer);
501 expect(writer.toString(), expected); 498 expect(writer.toString(), expected);
502 }); 499 });
503 } 500 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698