| 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 |