Index: test/file_generator_test.dart |
diff --git a/test/file_generator_test.dart b/test/file_generator_test.dart |
index 9bc506b82f6c428051b53ff6e9918b4ab4bf8240..2f3b078f7fae60898559ba417cf27fe04337089a 100644 |
--- a/test/file_generator_test.dart |
+++ b/test/file_generator_test.dart |
@@ -11,7 +11,26 @@ import 'package:protoc-plugin/protoc.dart'; |
import 'package:unittest/unittest.dart'; |
-FileDescriptorProto buildFileDescriptor() { |
+FileDescriptorProto buildFileDescriptor({topLevelEnum: false}) { |
+ EnumDescriptorProto ed; |
+ if (topLevelEnum) { |
+ ed = new EnumDescriptorProto() |
+ ..name = 'PhoneType' |
+ ..value.addAll([ |
+ new EnumValueDescriptorProto() |
+ ..name = 'MOBILE' |
+ ..number = 0, |
+ new EnumValueDescriptorProto() |
+ ..name = 'HOME' |
+ ..number = 1, |
+ new EnumValueDescriptorProto() |
+ ..name = 'WORK' |
+ ..number = 2, |
+ new EnumValueDescriptorProto() |
+ ..name = 'BUSINESS' |
+ ..number = 2]); |
+ } |
+ |
DescriptorProto md = new DescriptorProto() |
..name = 'PhoneNumber' |
..field.addAll([ |
@@ -22,12 +41,15 @@ FileDescriptorProto buildFileDescriptor() { |
..label = FieldDescriptorProto_Label.LABEL_REQUIRED |
..type = FieldDescriptorProto_Type.TYPE_STRING, |
// optional int32 type = 2; |
+ // OR |
+ // optional PhoneType type = 2; |
new FieldDescriptorProto() |
..name = 'type' |
..number = 2 |
..label = FieldDescriptorProto_Label.LABEL_OPTIONAL |
- ..type = FieldDescriptorProto_Type.TYPE_INT32 |
- ..typeName = '.PhoneNumber.PhoneType', |
+ ..type = topLevelEnum ? FieldDescriptorProto_Type.TYPE_ENUM |
+ : FieldDescriptorProto_Type.TYPE_INT32 |
+ ..typeName = topLevelEnum ? '.PhoneType' : '', |
// optional string name = 3 [default = "$"]; |
new FieldDescriptorProto() |
..name = 'name' |
@@ -39,6 +61,7 @@ FileDescriptorProto buildFileDescriptor() { |
FileDescriptorProto fd = new FileDescriptorProto() |
..name = 'test' |
..messageType.add(md); |
+ if (topLevelEnum) fd.enumType.add(ed); |
return fd; |
} |
@@ -97,6 +120,79 @@ class PhoneNumber extends GeneratedMessage { |
expect(buffer.toString(), expected); |
}); |
+ test('testMessageGeneratorTopLevelEmun', () { |
+ // NOTE: Below > 80 cols because it is matching generated code > 80 cols. |
+ String expected = r''' |
+/// |
+// Generated code. Do not modify. |
+/// |
+library test; |
+ |
+import 'dart:typed_data'; |
+ |
+import 'package:protobuf/protobuf.dart'; |
+ |
+class PhoneType extends ProtobufEnum { |
+ static const PhoneType MOBILE = const PhoneType._(0, 'MOBILE'); |
+ static const PhoneType HOME = const PhoneType._(1, 'HOME'); |
+ static const PhoneType WORK = const PhoneType._(2, 'WORK'); |
+ |
+ static const PhoneType BUSINESS = WORK; |
+ |
+ static const List<PhoneType> values = const <PhoneType> [ |
+ MOBILE, |
+ HOME, |
+ WORK, |
+ ]; |
+ |
+ static final Map<int, PhoneType> _byValue = ProtobufEnum.initByValue(values); |
+ static PhoneType valueOf(int value) => _byValue[value]; |
+ |
+ const PhoneType._(int v, String n) : super(v, n); |
+} |
+ |
+class PhoneNumber extends GeneratedMessage { |
+ static final BuilderInfo _i = new BuilderInfo('PhoneNumber') |
+ ..a(1, 'number', GeneratedMessage.QS) |
+ ..e(2, 'type', GeneratedMessage.OE, () => PhoneType.MOBILE, (var v) => PhoneType.valueOf(v)) |
+ ..a(3, 'name', GeneratedMessage.OS, () => '\$') |
+ ; |
+ |
+ PhoneNumber() : super(); |
+ PhoneNumber.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r); |
+ PhoneNumber.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r); |
+ PhoneNumber clone() => new PhoneNumber()..mergeFromMessage(this); |
+ BuilderInfo get info_ => _i; |
+ |
+ String get number => getField(1); |
+ void set number(String v) { setField(1, v); } |
+ bool hasNumber() => hasField(1); |
+ void clearNumber() => clearField(1); |
+ |
+ PhoneType get type => getField(2); |
+ void set type(PhoneType v) { setField(2, v); } |
+ bool hasType() => hasField(2); |
+ void clearType() => clearField(2); |
+ |
+ String get name => getField(3); |
+ void set name(String v) { setField(3, v); } |
+ bool hasName() => hasField(3); |
+ void clearName() => clearField(3); |
+} |
+ |
+'''; |
+ FileDescriptorProto fd = buildFileDescriptor(topLevelEnum: true); |
+ MemoryWriter buffer = new MemoryWriter(); |
+ IndentingWriter writer = new IndentingWriter(' ', buffer); |
+ var options = |
+ new GenerationOptions( |
+ new CodeGeneratorRequest(), new CodeGeneratorResponse()); |
+ FileGenerator fg = |
+ new FileGenerator(fd, null, new GenerationContext(options)); |
+ fg.generate(writer); |
+ expect(buffer.toString(), expected); |
+ }); |
+ |
test('testMessageGeneratorPackage', () { |
// NOTE: Below > 80 cols because it is matching generated code > 80 cols. |
String expected = r''' |