OLD | NEW |
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'; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 } | 120 } |
121 | 121 |
122 class _ReadonlyPhoneNumber extends PhoneNumber with ReadonlyMessageMixin {} | 122 class _ReadonlyPhoneNumber extends PhoneNumber with ReadonlyMessageMixin {} |
123 | 123 |
124 '''; | 124 '''; |
125 FileDescriptorProto fd = buildFileDescriptor(); | 125 FileDescriptorProto fd = buildFileDescriptor(); |
126 var options = parseGenerationOptions( | 126 var options = parseGenerationOptions( |
127 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 127 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
128 FileGenerator fg = new FileGenerator(fd); | 128 FileGenerator fg = new FileGenerator(fd); |
129 link(options, [fg]); | 129 link(options, [fg]); |
130 | 130 expect(fg.generateMainFile(), expected); |
131 IndentingWriter writer = new IndentingWriter(); | |
132 fg.generate(writer); | |
133 expect(writer.toString(), expected); | |
134 }); | 131 }); |
135 | 132 |
136 test('FileGenerator outputs a pbjson.dart file for a proto with one message', | 133 test('FileGenerator outputs a pbjson.dart file for a proto with one message', |
137 () { | 134 () { |
138 var expected = r''' | 135 var expected = r''' |
139 /// | 136 /// |
140 // Generated code. Do not modify. | 137 // Generated code. Do not modify. |
141 /// | 138 /// |
142 library test_pbjson; | 139 library test_pbjson; |
143 | 140 |
144 const PhoneNumber$json = const { | 141 const PhoneNumber$json = const { |
145 '1': 'PhoneNumber', | 142 '1': 'PhoneNumber', |
146 '2': const [ | 143 '2': const [ |
147 const {'1': 'number', '3': 1, '4': 2, '5': 9}, | 144 const {'1': 'number', '3': 1, '4': 2, '5': 9}, |
148 const {'1': 'type', '3': 2, '4': 1, '5': 5, '6': ''}, | 145 const {'1': 'type', '3': 2, '4': 1, '5': 5, '6': ''}, |
149 const {'1': 'name', '3': 3, '4': 1, '5': 9, '7': r'$'}, | 146 const {'1': 'name', '3': 3, '4': 1, '5': 9, '7': r'$'}, |
150 ], | 147 ], |
151 }; | 148 }; |
152 | 149 |
153 '''; | 150 '''; |
154 FileDescriptorProto fd = buildFileDescriptor(); | 151 FileDescriptorProto fd = buildFileDescriptor(); |
155 var options = parseGenerationOptions( | 152 var options = parseGenerationOptions( |
156 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 153 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
157 FileGenerator fg = new FileGenerator(fd); | 154 FileGenerator fg = new FileGenerator(fd); |
158 link(options, [fg]); | 155 link(options, [fg]); |
159 | 156 expect(fg.generateJsonFile(), expected); |
160 IndentingWriter writer = new IndentingWriter(); | |
161 fg.generateJsonDart(writer); | |
162 expect(writer.toString(), expected); | |
163 }); | 157 }); |
164 | 158 |
165 test('FileGenerator generates files for a top-level enum', () { | 159 test('FileGenerator generates files for a top-level enum', () { |
166 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. | 160 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. |
167 | 161 |
168 String expected = r''' | 162 String expected = r''' |
169 /// | 163 /// |
170 // Generated code. Do not modify. | 164 // Generated code. Do not modify. |
171 /// | 165 /// |
172 library test; | 166 library test; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 | 201 |
208 '''; | 202 '''; |
209 | 203 |
210 FileDescriptorProto fd = | 204 FileDescriptorProto fd = |
211 buildFileDescriptor(phoneNumber: false, topLevelEnum: true); | 205 buildFileDescriptor(phoneNumber: false, topLevelEnum: true); |
212 var options = parseGenerationOptions( | 206 var options = parseGenerationOptions( |
213 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 207 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
214 | 208 |
215 FileGenerator fg = new FileGenerator(fd); | 209 FileGenerator fg = new FileGenerator(fd); |
216 link(options, [fg]); | 210 link(options, [fg]); |
217 | 211 expect(fg.generateMainFile(), expected); |
218 var writer = new IndentingWriter(); | 212 expect(fg.generateEnumFile(), expectedEnum); |
219 fg.generate(writer); | |
220 expect(writer.toString(), expected); | |
221 | |
222 writer = new IndentingWriter(); | |
223 fg.generateEnumFile(writer); | |
224 expect(writer.toString(), expectedEnum); | |
225 }); | 213 }); |
226 | 214 |
227 test('FileGenerator generates a .pbjson.dart file for a top-level enum', () { | 215 test('FileGenerator generates a .pbjson.dart file for a top-level enum', () { |
228 String expected = r''' | 216 String expected = r''' |
229 /// | 217 /// |
230 // Generated code. Do not modify. | 218 // Generated code. Do not modify. |
231 /// | 219 /// |
232 library test_pbjson; | 220 library test_pbjson; |
233 | 221 |
234 const PhoneType$json = const { | 222 const PhoneType$json = const { |
235 '1': 'PhoneType', | 223 '1': 'PhoneType', |
236 '2': const [ | 224 '2': const [ |
237 const {'1': 'MOBILE', '2': 0}, | 225 const {'1': 'MOBILE', '2': 0}, |
238 const {'1': 'HOME', '2': 1}, | 226 const {'1': 'HOME', '2': 1}, |
239 const {'1': 'WORK', '2': 2}, | 227 const {'1': 'WORK', '2': 2}, |
240 const {'1': 'BUSINESS', '2': 2}, | 228 const {'1': 'BUSINESS', '2': 2}, |
241 ], | 229 ], |
242 }; | 230 }; |
243 | 231 |
244 '''; | 232 '''; |
245 | 233 |
246 FileDescriptorProto fd = | 234 FileDescriptorProto fd = |
247 buildFileDescriptor(phoneNumber: false, topLevelEnum: true); | 235 buildFileDescriptor(phoneNumber: false, topLevelEnum: true); |
248 var options = parseGenerationOptions( | 236 var options = parseGenerationOptions( |
249 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 237 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
250 | 238 |
251 FileGenerator fg = new FileGenerator(fd); | 239 FileGenerator fg = new FileGenerator(fd); |
252 link(options, [fg]); | 240 link(options, [fg]); |
253 | 241 expect(fg.generateJsonFile(), expected); |
254 var writer = new IndentingWriter(); | |
255 fg.generateJsonDart(writer); | |
256 expect(writer.toString(), expected); | |
257 }); | 242 }); |
258 | 243 |
259 test('FileGenerator outputs library for a .proto in a package', () { | 244 test('FileGenerator outputs library for a .proto in a package', () { |
260 String expected = r''' | 245 String expected = r''' |
261 /// | 246 /// |
262 // Generated code. Do not modify. | 247 // Generated code. Do not modify. |
263 /// | 248 /// |
264 library pb_library_test; | 249 library pb_library_test; |
265 | 250 |
266 import 'package:protobuf/protobuf.dart'; | 251 import 'package:protobuf/protobuf.dart'; |
267 | 252 |
268 '''; | 253 '''; |
269 FileDescriptorProto fd = buildFileDescriptor(); | 254 FileDescriptorProto fd = buildFileDescriptor(); |
270 fd.package = "pb_library"; | 255 fd.package = "pb_library"; |
271 var options = parseGenerationOptions( | 256 var options = parseGenerationOptions( |
272 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 257 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
273 | 258 |
274 FileGenerator fg = new FileGenerator(fd); | 259 FileGenerator fg = new FileGenerator(fd); |
275 link(options, [fg]); | 260 link(options, [fg]); |
276 | 261 |
277 var writer = new IndentingWriter(); | 262 var writer = new IndentingWriter(); |
278 fg.generateHeader(writer); | 263 fg.writeMainHeader(writer); |
279 expect(writer.toString(), expected); | 264 expect(writer.toString(), expected); |
280 }); | 265 }); |
281 | 266 |
282 test('FileGenerator outputs a fixnum import when needed', () { | 267 test('FileGenerator outputs a fixnum import when needed', () { |
283 String expected = r''' | 268 String expected = r''' |
284 /// | 269 /// |
285 // Generated code. Do not modify. | 270 // Generated code. Do not modify. |
286 /// | 271 /// |
287 library test; | 272 library test; |
288 | 273 |
(...skipping 12 matching lines...) Expand all Loading... |
301 ..type = FieldDescriptorProto_Type.TYPE_INT64 | 286 ..type = FieldDescriptorProto_Type.TYPE_INT64 |
302 ])); | 287 ])); |
303 | 288 |
304 var options = parseGenerationOptions( | 289 var options = parseGenerationOptions( |
305 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 290 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
306 | 291 |
307 FileGenerator fg = new FileGenerator(fd); | 292 FileGenerator fg = new FileGenerator(fd); |
308 link(options, [fg]); | 293 link(options, [fg]); |
309 | 294 |
310 var writer = new IndentingWriter(); | 295 var writer = new IndentingWriter(); |
311 fg.generateHeader(writer); | 296 fg.writeMainHeader(writer); |
312 expect(writer.toString(), expected); | 297 expect(writer.toString(), expected); |
313 }); | 298 }); |
314 | 299 |
315 test('FileGenerator outputs extra imports for a service', () { | 300 test('FileGenerator outputs extra imports for a service', () { |
316 String expected = r''' | 301 String expected = r''' |
317 /// | 302 /// |
318 // Generated code. Do not modify. | 303 // Generated code. Do not modify. |
319 /// | 304 /// |
320 library test; | 305 library test; |
321 | 306 |
322 import 'dart:async'; | 307 import 'dart:async'; |
323 | 308 |
324 import 'package:protobuf/protobuf.dart'; | 309 import 'package:protobuf/protobuf.dart'; |
325 | 310 |
326 import 'test.pbjson.dart'; | 311 import 'test.pbjson.dart'; |
327 | 312 |
328 '''; | 313 '''; |
329 FileDescriptorProto fd = new FileDescriptorProto() | 314 FileDescriptorProto fd = new FileDescriptorProto() |
330 ..name = 'test' | 315 ..name = 'test' |
331 ..service.add(new ServiceDescriptorProto()); | 316 ..service.add(new ServiceDescriptorProto()); |
332 | 317 |
333 var options = parseGenerationOptions( | 318 var options = parseGenerationOptions( |
334 new CodeGeneratorRequest(), new CodeGeneratorResponse()); | 319 new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
335 | 320 |
336 FileGenerator fg = new FileGenerator(fd); | 321 FileGenerator fg = new FileGenerator(fd); |
337 link(options, [fg]); | 322 link(options, [fg]); |
338 | 323 |
339 var writer = new IndentingWriter(); | 324 var writer = new IndentingWriter(); |
340 fg.generateHeader(writer); | 325 fg.writeMainHeader(writer); |
341 expect(writer.toString(), expected); | 326 expect(writer.toString(), expected); |
342 }); | 327 }); |
343 | 328 |
344 test('FileGenerator handles field_name options', () { | 329 test('FileGenerator handles field_name options', () { |
345 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. | 330 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. |
346 String expected = r''' | 331 String expected = r''' |
347 /// | 332 /// |
348 // Generated code. Do not modify. | 333 // Generated code. Do not modify. |
349 /// | 334 /// |
350 library test; | 335 library test; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 '''; | 380 '''; |
396 FileDescriptorProto fd = buildFileDescriptor(); | 381 FileDescriptorProto fd = buildFileDescriptor(); |
397 var request = new CodeGeneratorRequest(); | 382 var request = new CodeGeneratorRequest(); |
398 request.parameter = 'field_name=PhoneNumber.number|No,' | 383 request.parameter = 'field_name=PhoneNumber.number|No,' |
399 'field_name=PhoneNumber.name|Name_,' | 384 'field_name=PhoneNumber.name|Name_,' |
400 'field_name=PhoneNumber.type|The_type'; | 385 'field_name=PhoneNumber.type|The_type'; |
401 var options = parseGenerationOptions(request, new CodeGeneratorResponse()); | 386 var options = parseGenerationOptions(request, new CodeGeneratorResponse()); |
402 | 387 |
403 FileGenerator fg = new FileGenerator(fd); | 388 FileGenerator fg = new FileGenerator(fd); |
404 link(options, [fg]); | 389 link(options, [fg]); |
405 | 390 expect(fg.generateMainFile(), expected); |
406 var writer = new IndentingWriter(); | |
407 fg.generate(writer); | |
408 expect(writer.toString(), expected); | |
409 }); | 391 }); |
410 | 392 |
411 test('FileGenerator generates imports for .pb.dart files', () { | 393 test('FileGenerator generates imports for .pb.dart files', () { |
412 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. | 394 // NOTE: Below > 80 cols because it is matching generated code > 80 cols. |
413 String expected = r''' | 395 String expected = r''' |
414 /// | 396 /// |
415 // Generated code. Do not modify. | 397 // Generated code. Do not modify. |
416 /// | 398 /// |
417 library test; | 399 library test; |
418 | 400 |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 FileDescriptorProto fd = new FileDescriptorProto() | 555 FileDescriptorProto fd = new FileDescriptorProto() |
574 ..name = 'test.proto' | 556 ..name = 'test.proto' |
575 ..messageType.add(md); | 557 ..messageType.add(md); |
576 fd.dependency.addAll(['package1.proto', 'package2.proto']); | 558 fd.dependency.addAll(['package1.proto', 'package2.proto']); |
577 var request = new CodeGeneratorRequest(); | 559 var request = new CodeGeneratorRequest(); |
578 var response = new CodeGeneratorResponse(); | 560 var response = new CodeGeneratorResponse(); |
579 var options = parseGenerationOptions(request, response); | 561 var options = parseGenerationOptions(request, response); |
580 | 562 |
581 FileGenerator fg = new FileGenerator(fd); | 563 FileGenerator fg = new FileGenerator(fd); |
582 link(options, [fg, new FileGenerator(fd1), new FileGenerator(fd2)]); | 564 link(options, [fg, new FileGenerator(fd1), new FileGenerator(fd2)]); |
583 | 565 expect(fg.generateMainFile(), expected); |
584 var writer = new IndentingWriter(); | 566 expect(fg.generateJsonFile(), expectedJson); |
585 fg.generate(writer); | |
586 expect(writer.toString(), expected); | |
587 | |
588 writer = new IndentingWriter(); | |
589 fg.generateJsonDart(writer); | |
590 expect(writer.toString(), expectedJson); | |
591 }); | 567 }); |
592 } | 568 } |
OLD | NEW |