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

Unified Diff: test/file_generator_test.dart

Issue 24738002: Fix handling of top level enums (Closed) Base URL: https://github.com/dart-lang/dart-protoc-plugin.git@master
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/enum_generator.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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'''
« no previous file with comments | « lib/enum_generator.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698