Index: test/names_test.dart |
diff --git a/test/names_test.dart b/test/names_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e0ced0342472374646ac9dff96cbed4938488667 |
--- /dev/null |
+++ b/test/names_test.dart |
@@ -0,0 +1,92 @@ |
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library dart_name_test; |
+ |
+import 'package:test/test.dart'; |
+import 'package:protoc_plugin/names.dart' as names; |
+import 'package:protoc_plugin/src/descriptor.pb.dart'; |
+import 'package:protoc_plugin/src/dart_options.pb.dart'; |
+ |
+import '../out/protos/dart_name.pb.dart'; |
+ |
+Matcher throwsMessage(String msg) => throwsA(new _ToStringMatcher(equals(msg))); |
+ |
+class _ToStringMatcher extends CustomMatcher { |
+ _ToStringMatcher(Matcher matcher) |
+ : super("object where toString() returns", "toString()", matcher); |
+ featureValueOf(actual) => actual.toString(); |
+} |
+ |
+void main() { |
+ test('Can access a field that was renamed using dart_name option', () { |
+ var msg = new DartName(); |
+ expect(msg.hasRenamedField(), false); |
+ msg.renamedField = 'test'; |
+ expect(msg.hasRenamedField(), true); |
+ expect(msg.renamedField, 'test'); |
+ msg.clearRenamedField(); |
+ expect(msg.hasRenamedField(), false); |
+ }); |
+ |
+ test('Can swap field names using dart_name option', () { |
+ var msg = new SwapNames(); |
+ msg.first = "one"; |
+ msg.second = "two"; |
+ expect(msg.getField(1), "two"); |
+ expect(msg.getField(2), "one"); |
+ }); |
+ |
+ test("Can take another field's name using dart_name option", () { |
+ var msg = new TakeExistingName(); |
+ msg.first = "one"; |
+ expect(msg.getField(2), "one"); |
Søren Gjesse
2016/06/09 09:07:13
Also test the original first field (called first_1
skybrian
2016/06/09 19:10:47
Done.
|
+ }); |
+ |
+ test('Throws exception for dart_name option containing a space', () { |
+ var descriptor = new DescriptorProto() |
+ ..name = 'Example' |
+ ..field.addAll([stringField("first", 1, "hello world"),]); |
frederikmutzel
2016/06/09 07:50:28
just add? (also below)
skybrian
2016/06/09 19:10:47
Done.
|
+ expect(() { |
+ names.messageFieldNames(descriptor); |
+ }, |
+ throwsMessage("Example.first: dart_name option is invalid: " |
+ "'hello world' is not a valid Dart field name")); |
+ }); |
+ |
+ test('Throws exception for dart_name option set to reserved word', () { |
+ var descriptor = new DescriptorProto() |
+ ..name = 'Example' |
+ ..field.addAll([stringField("first", 1, "class"),]); |
+ expect(() { |
+ names.messageFieldNames(descriptor); |
+ }, |
+ throwsMessage("Example.first: " |
+ "dart_name option is invalid: 'class' is already used")); |
+ }); |
+ |
+ test('Throws exception for duplicate dart_name options', () { |
+ var descriptor = new DescriptorProto() |
+ ..name = 'Example' |
+ ..field.addAll([ |
+ stringField("first", 1, "renamed"), |
+ stringField("second", 2, "renamed"), |
+ ]); |
+ expect(() { |
+ names.messageFieldNames(descriptor); |
+ }, |
+ throwsMessage("Example.second: " |
+ "dart_name option is invalid: 'renamed' is already used")); |
+ }); |
+} |
+ |
+FieldDescriptorProto stringField(String name, int number, String dartName) { |
+ return new FieldDescriptorProto() |
+ ..name = name |
+ ..number = number |
+ ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL |
+ ..type = FieldDescriptorProto_Type.TYPE_STRING |
+ ..options = |
+ (new FieldOptions()..setExtension(Dart_options.dartName, dartName)); |
+} |