| #!/usr/bin/env dart |
| // Copyright (c) 2013, 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 generated_message_test; |
| |
| import 'package:protobuf/protobuf.dart'; |
| import 'package:test/test.dart'; |
| |
| import '../out/protos/google/protobuf/unittest.pb.dart'; |
| import '../out/protos/google/protobuf/unittest_import.pb.dart'; |
| import '../out/protos/google/protobuf/unittest_optimize_for.pb.dart'; |
| import '../out/protos/multiple_files_test.pb.dart'; |
| import '../out/protos/reserved_names.pb.dart'; |
| import '../out/protos/duplicate_names_import.pb.dart'; |
| import '../out/protos/package1.pb.dart' as p1; |
| import '../out/protos/package2.pb.dart' as p2; |
| import '../out/protos/package3.pb.dart' as p3; |
| import '../out/protos/toplevel_import.pb.dart' as t; |
| import '../out/protos/toplevel.pb.dart'; |
| |
| import 'test_util.dart'; |
| |
| void main() { |
| final throwsInvalidProtocolBufferException = |
| throwsA(new isInstanceOf<InvalidProtocolBufferException>()); |
| test('testProtosShareRepeatedArraysIfDidntChange', () { |
| TestAllTypes value1 = new TestAllTypes() |
| ..repeatedInt32.add(100) |
| ..repeatedImportEnum.add(ImportEnum.IMPORT_BAR) |
| ..repeatedForeignMessage.add(new ForeignMessage()); |
| |
| TestAllTypes value2 = value1.clone(); |
| |
| expect(value2.repeatedInt32, value1.repeatedInt32); |
| expect(value2.repeatedImportEnum, value1.repeatedImportEnum); |
| expect(value2.repeatedForeignMessage, value1.repeatedForeignMessage); |
| }); |
| |
| test('testSettersRejectNull', () { |
| TestAllTypes message = new TestAllTypes(); |
| expect(() { |
| message.optionalString = null; |
| }, throwsArgumentError); |
| expect(() { |
| message.optionalBytes = null; |
| }, throwsArgumentError); |
| expect(() { |
| message.optionalNestedMessage = null; |
| }, throwsArgumentError); |
| expect(() { |
| message.optionalNestedMessage = null; |
| }, throwsArgumentError); |
| expect(() { |
| message.optionalNestedEnum = null; |
| }, throwsArgumentError); |
| expect(() { |
| message.repeatedString.add(null); |
| }, throwsArgumentError); |
| expect(() { |
| message.repeatedBytes.add(null); |
| }, throwsArgumentError); |
| expect(() { |
| message.repeatedNestedMessage.add(null); |
| }, throwsArgumentError); |
| expect(() { |
| message.repeatedNestedMessage.add(null); |
| }, throwsArgumentError); |
| expect(() { |
| message.repeatedNestedEnum.add(null); |
| }, throwsArgumentError); |
| }); |
| |
| test('testDefaultMessageIsReadOnly', () { |
| var message = new TestAllTypes(); |
| expect(message.optionalNestedMessage, |
| same(TestAllTypes_NestedMessage.getDefault())); |
| expect(() { |
| message.optionalNestedMessage.bb = 123; |
| }, throwsUnsupportedError); |
| |
| message = TestAllTypes.getDefault(); |
| expect(() { |
| message.clear(); |
| }, throwsUnsupportedError); |
| expect(() { |
| message.optionalString = "123"; |
| }, throwsUnsupportedError); |
| expect(() { |
| message.clearOptionalString(); |
| }, throwsUnsupportedError); |
| expect(() { |
| message.repeatedString.add("123"); |
| }, throwsUnsupportedError); |
| expect(() { |
| message.repeatedString.clear(); |
| }, throwsUnsupportedError); |
| expect(() { |
| message.unknownFields.clear(); |
| }, throwsUnsupportedError); |
| }); |
| |
| test('testRepeatedSetters', () { |
| TestAllTypes message = getAllSet(); |
| modifyRepeatedFields(message); |
| assertRepeatedFieldsModified(message); |
| }); |
| |
| test('testRepeatedSettersRejectNull', () { |
| TestAllTypes message = new TestAllTypes(); |
| |
| message.repeatedString.addAll(['one', 'two']); |
| expect(() { |
| message.repeatedString[1] = null; |
| }, throwsArgumentError); |
| |
| message.repeatedBytes.addAll(['one'.codeUnits, 'two'.codeUnits]); |
| expect(() { |
| message.repeatedBytes[1] = null; |
| }, throwsArgumentError); |
| |
| message.repeatedNestedMessage.addAll([ |
| new TestAllTypes_NestedMessage()..bb = 318, |
| new TestAllTypes_NestedMessage()..bb = 456 |
| ]); |
| expect(() { |
| message.repeatedNestedMessage[1] = null; |
| }, throwsArgumentError); |
| |
| message.repeatedNestedEnum |
| .addAll([TestAllTypes_NestedEnum.FOO, TestAllTypes_NestedEnum.BAR]); |
| expect(() { |
| message.repeatedNestedEnum[1] = null; |
| }, throwsArgumentError); |
| }); |
| |
| test('testRepeatedAppend', () { |
| TestAllTypes message = new TestAllTypes() |
| ..repeatedInt32.addAll([1, 2, 3, 4]) |
| ..repeatedForeignEnum.addAll([ForeignEnum.FOREIGN_BAZ]) |
| ..repeatedForeignMessage.addAll([new ForeignMessage()..c = 12]); |
| |
| expect(message.repeatedInt32, [1, 2, 3, 4]); |
| expect(message.repeatedForeignEnum, [ForeignEnum.FOREIGN_BAZ]); |
| expect(message.repeatedForeignMessage.length, 1); |
| expect(message.repeatedForeignMessage[0].c, 12); |
| }); |
| |
| test('testRepeatedAppendRejectsNull', () { |
| TestAllTypes message = new TestAllTypes(); |
| |
| expect(() { |
| message.repeatedForeignMessage |
| .addAll([new ForeignMessage()..c = 12, null]); |
| }, throwsArgumentError); |
| |
| expect(() { |
| message.repeatedForeignEnum.addAll([ForeignEnum.FOREIGN_BAZ, null]); |
| }, throwsArgumentError); |
| |
| expect(() { |
| message.repeatedString.addAll(['one', null]); |
| }, throwsArgumentError); |
| |
| expect(() { |
| message.repeatedBytes.addAll(['one'.codeUnits, null]); |
| }, throwsArgumentError); |
| }); |
| |
| test('testSettingForeignMessage', () { |
| TestAllTypes message = new TestAllTypes() |
| ..optionalForeignMessage = (new ForeignMessage()..c = 123); |
| |
| TestAllTypes expectedMessage = new TestAllTypes() |
| ..optionalForeignMessage = (new ForeignMessage()..c = 123); |
| |
| expect(message, expectedMessage); |
| }); |
| |
| test('testSettingRepeatedForeignMessage', () { |
| TestAllTypes message = new TestAllTypes() |
| ..repeatedForeignMessage.add(new ForeignMessage()..c = 456); |
| |
| TestAllTypes expectedMessage = new TestAllTypes() |
| ..repeatedForeignMessage.add(new ForeignMessage()..c = 456); |
| |
| expect(message, expectedMessage); |
| }); |
| |
| test('testDefaults', () { |
| assertClear(new TestAllTypes()); |
| |
| TestExtremeDefaultValues message = new TestExtremeDefaultValues(); |
| |
| expect(message.utf8String, '\u1234'); |
| expect(message.infDouble, same(double.INFINITY)); |
| expect(message.negInfDouble, same(double.NEGATIVE_INFINITY)); |
| expect(message.nanDouble, same(double.NAN)); |
| expect(message.infFloat, same(double.INFINITY)); |
| expect(message.negInfFloat, same(double.NEGATIVE_INFINITY)); |
| expect(message.nanFloat, same(double.NAN)); |
| expect(message.cppTrigraph, '? ? ?? ?? ??? ??/ ??-'); |
| expect(message.smallInt64.toRadixString(16).toUpperCase(), |
| '-7FFFFFFFFFFFFFFF'); |
| }); |
| |
| test('testClear', () { |
| TestAllTypes message = new TestAllTypes(); |
| |
| assertClear(message); |
| setAllFields(message); |
| message.clear(); |
| assertClear(message); |
| }); |
| |
| // void testReflectionGetters() {} // UNSUPPORTED -- until reflection |
| // void testReflectionSetters() {} // UNSUPPORTED -- until reflection |
| // void testReflectionSettersRejectNull() {} // UNSUPPORTED - reflection |
| // void testReflectionRepeatedSetters() {} // UNSUPPORTED -- reflection |
| // void testReflectionRepeatedSettersRejectNull() {} // UNSUPPORTED |
| // void testReflectionDefaults() {} // UNSUPPORTED -- until reflection |
| |
| test('testEnumInterface', () { |
| expect( |
| new TestAllTypes().defaultNestedEnum, new isInstanceOf<ProtobufEnum>()); |
| }); |
| |
| test('testEnumMap', () { |
| for (ForeignEnum value in ForeignEnum.values) { |
| expect(ForeignEnum.valueOf(value.value), value); |
| } |
| expect(ForeignEnum.valueOf(12345), isNull); |
| }); |
| |
| test('testParsePackedToUnpacked', () { |
| TestUnpackedTypes message = |
| new TestUnpackedTypes.fromBuffer(getPackedSet().writeToBuffer()); |
| assertUnpackedFieldsSet(message); |
| }); |
| |
| test('testParseUnpackedToPacked', () { |
| TestPackedTypes message = |
| new TestPackedTypes.fromBuffer(getUnpackedSet().writeToBuffer()); |
| assertPackedFieldsSet(message); |
| }); |
| |
| test('testIgnoreJavaMultipleFilesOption', () { |
| // UNSUPPORTED getFile |
| // We mostly just want to check that things compile. |
| MessageWithNoOuter message = new MessageWithNoOuter() |
| ..nested = (new MessageWithNoOuter_NestedMessage()..i = 1) |
| ..foreign.add(new TestAllTypes()..optionalInt32 = 1) |
| ..nestedEnum = MessageWithNoOuter_NestedEnum.BAZ |
| ..foreignEnum = EnumWithNoOuter.BAR; |
| |
| expect(new MessageWithNoOuter.fromBuffer(message.writeToBuffer()), message); |
| |
| // Not currently supported in Dart protobuf. |
| // expect(MessageWithNoOuter.getDescriptor().getFile(), |
| // MultipleFilesTestProto.getDescriptor()); |
| |
| int tagNumber = message.getTagNumber('foreignEnum'); |
| expect(tagNumber, isNotNull); |
| expect(message.getField(tagNumber), EnumWithNoOuter.BAR); |
| |
| // Not currently supported in Dart protobuf. |
| // expect(ServiceWithNoOuter.getDescriptor().getFile() |
| // MultipleFilesTestProto.getDescriptor()); |
| |
| expect( |
| new TestAllExtensions() |
| .hasExtension(Multiple_files_test.extensionWithOuter), |
| isFalse); |
| }); |
| |
| test('testOptionalFieldWithRequiredSubfieldsOptimizedForSize', () { |
| expect(new TestOptionalOptimizedForSize().isInitialized(), isTrue); |
| |
| expect( |
| (new TestOptionalOptimizedForSize() |
| ..o = new TestRequiredOptimizedForSize()) |
| .isInitialized(), |
| isFalse); |
| |
| expect( |
| (new TestOptionalOptimizedForSize() |
| ..o = (new TestRequiredOptimizedForSize()..x = 5)) |
| .isInitialized(), |
| isTrue); |
| }); |
| |
| test('testSetAllFieldsAndClone', () { |
| TestAllTypes message = getAllSet(); |
| assertAllFieldsSet(message); |
| assertAllFieldsSet(message.clone()); |
| }); |
| |
| test('testReadWholeMessage', () { |
| TestAllTypes message = getAllSet(); |
| List<int> rawBytes = message.writeToBuffer(); |
| assertAllFieldsSet(new TestAllTypes.fromBuffer(rawBytes)); |
| }); |
| |
| test('testReadHugeBlob', () { |
| // Allocate and initialize a 1MB blob. |
| List<int> blob = new List<int>(1 << 20); |
| for (int i = 0; i < blob.length; i++) { |
| blob[i] = i % 256; |
| } |
| |
| // Make a message containing it. |
| TestAllTypes message = getAllSet(); |
| message.optionalBytes = blob; |
| |
| TestAllTypes message2 = |
| new TestAllTypes.fromBuffer(message.writeToBuffer()); |
| expect(message2.optionalBytes, message.optionalBytes); |
| }); |
| |
| test('testRecursiveMessageDefaultInstance', () { |
| TestRecursiveMessage message = new TestRecursiveMessage(); |
| expect(message.a, isNotNull); |
| expect(message, message.a); |
| }); |
| |
| test('testMaliciousRecursion', () { |
| GeneratedMessage _makeRecursiveMessage(int depth) { |
| return depth == 0 |
| ? (new TestRecursiveMessage()..i = 5) |
| : (new TestRecursiveMessage()..a = _makeRecursiveMessage(depth - 1)); |
| } |
| |
| _assertMessageDepth(TestRecursiveMessage message, int depth) { |
| if (depth == 0) { |
| expect(message.hasA(), isFalse); |
| expect(message.i, 5); |
| } else { |
| expect(message.hasA(), isTrue); |
| _assertMessageDepth(message.a, depth - 1); |
| } |
| } |
| |
| List<int> data64 = _makeRecursiveMessage(64).writeToBuffer(); |
| List<int> data65 = _makeRecursiveMessage(65).writeToBuffer(); |
| |
| _assertMessageDepth(new TestRecursiveMessage.fromBuffer(data64), 64); |
| |
| expect(() { |
| new TestRecursiveMessage.fromBuffer(data65); |
| }, throwsInvalidProtocolBufferException); |
| |
| CodedBufferReader input = new CodedBufferReader(data64, recursionLimit: 8); |
| expect(() { |
| // Uncomfortable alternative to below... |
| new TestRecursiveMessage().mergeFromCodedBufferReader(input); |
| }, throwsInvalidProtocolBufferException); |
| }); |
| |
| test('testSizeLimit', () { |
| CodedBufferReader input = |
| new CodedBufferReader(getAllSet().writeToBuffer(), sizeLimit: 16); |
| |
| expect(() { |
| // Uncomfortable alternative to below... |
| new TestAllTypes().mergeFromCodedBufferReader(input); |
| }, throwsInvalidProtocolBufferException); |
| }); |
| test('testSerialize', () { |
| TestAllTypes expected = getAllSet(); |
| List<int> out = expected.writeToBuffer(); |
| TestAllTypes actual = new TestAllTypes.fromBuffer(out); |
| expect(actual, expected); |
| }); |
| |
| test('testEnumValues', () { |
| expect(TestAllTypes_NestedEnum.values, [ |
| TestAllTypes_NestedEnum.FOO, |
| TestAllTypes_NestedEnum.BAR, |
| TestAllTypes_NestedEnum.BAZ |
| ]); |
| expect(TestAllTypes_NestedEnum.FOO.value, 1); |
| expect(TestAllTypes_NestedEnum.BAR.value, 2); |
| expect(TestAllTypes_NestedEnum.BAZ.value, 3); |
| }); |
| |
| test('testWriteWholeMessage', () { |
| List<int> goldenMessage = const <int>[ |
| 0x08, |
| 0x65, |
| 0x10, |
| 0x66, |
| 0x18, |
| 0x67, |
| 0x20, |
| 0x68, |
| 0x28, |
| 0xd2, |
| 0x01, |
| 0x30, |
| 0xd4, |
| 0x01, |
| 0x3d, |
| 0x6b, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x41, |
| 0x6c, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x4d, |
| 0x6d, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x51, |
| 0x6e, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x5d, |
| 0x00, |
| 0x00, |
| 0xde, |
| 0x42, |
| 0x61, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x5c, |
| 0x40, |
| 0x68, |
| 0x01, |
| 0x72, |
| 0x03, |
| 0x31, |
| 0x31, |
| 0x35, |
| 0x7a, |
| 0x03, |
| 0x31, |
| 0x31, |
| 0x36, |
| 0x83, |
| 0x01, |
| 0x88, |
| 0x01, |
| 0x75, |
| 0x84, |
| 0x01, |
| 0x92, |
| 0x01, |
| 0x02, |
| 0x08, |
| 0x76, |
| 0x9a, |
| 0x01, |
| 0x02, |
| 0x08, |
| 0x77, |
| 0xa2, |
| 0x01, |
| 0x02, |
| 0x08, |
| 0x78, |
| 0xa8, |
| 0x01, |
| 0x03, |
| 0xb0, |
| 0x01, |
| 0x06, |
| 0xb8, |
| 0x01, |
| 0x09, |
| 0xc2, |
| 0x01, |
| 0x03, |
| 0x31, |
| 0x32, |
| 0x34, |
| 0xca, |
| 0x01, |
| 0x03, |
| 0x31, |
| 0x32, |
| 0x35, |
| 0xf8, |
| 0x01, |
| 0xc9, |
| 0x01, |
| 0xf8, |
| 0x01, |
| 0xad, |
| 0x02, |
| 0x80, |
| 0x02, |
| 0xca, |
| 0x01, |
| 0x80, |
| 0x02, |
| 0xae, |
| 0x02, |
| 0x88, |
| 0x02, |
| 0xcb, |
| 0x01, |
| 0x88, |
| 0x02, |
| 0xaf, |
| 0x02, |
| 0x90, |
| 0x02, |
| 0xcc, |
| 0x01, |
| 0x90, |
| 0x02, |
| 0xb0, |
| 0x02, |
| 0x98, |
| 0x02, |
| 0x9a, |
| 0x03, |
| 0x98, |
| 0x02, |
| 0xe2, |
| 0x04, |
| 0xa0, |
| 0x02, |
| 0x9c, |
| 0x03, |
| 0xa0, |
| 0x02, |
| 0xe4, |
| 0x04, |
| 0xad, |
| 0x02, |
| 0xcf, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xad, |
| 0x02, |
| 0x33, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0xb1, |
| 0x02, |
| 0xd0, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xb1, |
| 0x02, |
| 0x34, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xbd, |
| 0x02, |
| 0xd1, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xbd, |
| 0x02, |
| 0x35, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0xc1, |
| 0x02, |
| 0xd2, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xc1, |
| 0x02, |
| 0x36, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xcd, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x53, |
| 0x43, |
| 0xcd, |
| 0x02, |
| 0x00, |
| 0x80, |
| 0x9b, |
| 0x43, |
| 0xd1, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x80, |
| 0x6a, |
| 0x40, |
| 0xd1, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x80, |
| 0x73, |
| 0x40, |
| 0xd8, |
| 0x02, |
| 0x01, |
| 0xd8, |
| 0x02, |
| 0x00, |
| 0xe2, |
| 0x02, |
| 0x03, |
| 0x32, |
| 0x31, |
| 0x35, |
| 0xe2, |
| 0x02, |
| 0x03, |
| 0x33, |
| 0x31, |
| 0x35, |
| 0xea, |
| 0x02, |
| 0x03, |
| 0x32, |
| 0x31, |
| 0x36, |
| 0xea, |
| 0x02, |
| 0x03, |
| 0x33, |
| 0x31, |
| 0x36, |
| 0xf3, |
| 0x02, |
| 0xf8, |
| 0x02, |
| 0xd9, |
| 0x01, |
| 0xf4, |
| 0x02, |
| 0xf3, |
| 0x02, |
| 0xf8, |
| 0x02, |
| 0xbd, |
| 0x02, |
| 0xf4, |
| 0x02, |
| 0x82, |
| 0x03, |
| 0x03, |
| 0x08, |
| 0xda, |
| 0x01, |
| 0x82, |
| 0x03, |
| 0x03, |
| 0x08, |
| 0xbe, |
| 0x02, |
| 0x8a, |
| 0x03, |
| 0x03, |
| 0x08, |
| 0xdb, |
| 0x01, |
| 0x8a, |
| 0x03, |
| 0x03, |
| 0x08, |
| 0xbf, |
| 0x02, |
| 0x92, |
| 0x03, |
| 0x03, |
| 0x08, |
| 0xdc, |
| 0x01, |
| 0x92, |
| 0x03, |
| 0x03, |
| 0x08, |
| 0xc0, |
| 0x02, |
| 0x98, |
| 0x03, |
| 0x02, |
| 0x98, |
| 0x03, |
| 0x03, |
| 0xa0, |
| 0x03, |
| 0x05, |
| 0xa0, |
| 0x03, |
| 0x06, |
| 0xa8, |
| 0x03, |
| 0x08, |
| 0xa8, |
| 0x03, |
| 0x09, |
| 0xb2, |
| 0x03, |
| 0x03, |
| 0x32, |
| 0x32, |
| 0x34, |
| 0xb2, |
| 0x03, |
| 0x03, |
| 0x33, |
| 0x32, |
| 0x34, |
| 0xba, |
| 0x03, |
| 0x03, |
| 0x32, |
| 0x32, |
| 0x35, |
| 0xba, |
| 0x03, |
| 0x03, |
| 0x33, |
| 0x32, |
| 0x35, |
| 0xe8, |
| 0x03, |
| 0x91, |
| 0x03, |
| 0xf0, |
| 0x03, |
| 0x92, |
| 0x03, |
| 0xf8, |
| 0x03, |
| 0x93, |
| 0x03, |
| 0x80, |
| 0x04, |
| 0x94, |
| 0x03, |
| 0x88, |
| 0x04, |
| 0xaa, |
| 0x06, |
| 0x90, |
| 0x04, |
| 0xac, |
| 0x06, |
| 0x9d, |
| 0x04, |
| 0x97, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0xa1, |
| 0x04, |
| 0x98, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xad, |
| 0x04, |
| 0x99, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0xb1, |
| 0x04, |
| 0x9a, |
| 0x01, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xbd, |
| 0x04, |
| 0x00, |
| 0x80, |
| 0xcd, |
| 0x43, |
| 0xc1, |
| 0x04, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xc0, |
| 0x79, |
| 0x40, |
| 0xc8, |
| 0x04, |
| 0x00, |
| 0xd2, |
| 0x04, |
| 0x03, |
| 0x34, |
| 0x31, |
| 0x35, |
| 0xda, |
| 0x04, |
| 0x03, |
| 0x34, |
| 0x31, |
| 0x36, |
| 0x88, |
| 0x05, |
| 0x01, |
| 0x90, |
| 0x05, |
| 0x04, |
| 0x98, |
| 0x05, |
| 0x07, |
| 0xa2, |
| 0x05, |
| 0x03, |
| 0x34, |
| 0x32, |
| 0x34, |
| 0xaa, |
| 0x05, |
| 0x03, |
| 0x34, |
| 0x32, |
| 0x35 |
| ]; |
| expect(getAllSet().writeToBuffer(), goldenMessage); |
| }); |
| |
| test('testWriteWholePackedFieldsMessage', () { |
| List<int> goldenPackedMessage = const <int>[ |
| 0xd2, |
| 0x05, |
| 0x04, |
| 0xd9, |
| 0x04, |
| 0xbd, |
| 0x05, |
| 0xda, |
| 0x05, |
| 0x04, |
| 0xda, |
| 0x04, |
| 0xbe, |
| 0x05, |
| 0xe2, |
| 0x05, |
| 0x04, |
| 0xdb, |
| 0x04, |
| 0xbf, |
| 0x05, |
| 0xea, |
| 0x05, |
| 0x04, |
| 0xdc, |
| 0x04, |
| 0xc0, |
| 0x05, |
| 0xf2, |
| 0x05, |
| 0x04, |
| 0xba, |
| 0x09, |
| 0x82, |
| 0x0b, |
| 0xfa, |
| 0x05, |
| 0x04, |
| 0xbc, |
| 0x09, |
| 0x84, |
| 0x0b, |
| 0x82, |
| 0x06, |
| 0x08, |
| 0x5f, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0xc3, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x8a, |
| 0x06, |
| 0x10, |
| 0x60, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xc4, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x92, |
| 0x06, |
| 0x08, |
| 0x61, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0xc5, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x9a, |
| 0x06, |
| 0x10, |
| 0x62, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xc6, |
| 0x02, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0xa2, |
| 0x06, |
| 0x08, |
| 0x00, |
| 0xc0, |
| 0x18, |
| 0x44, |
| 0x00, |
| 0xc0, |
| 0x31, |
| 0x44, |
| 0xaa, |
| 0x06, |
| 0x10, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x20, |
| 0x83, |
| 0x40, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x00, |
| 0x40, |
| 0x86, |
| 0x40, |
| 0xb2, |
| 0x06, |
| 0x02, |
| 0x01, |
| 0x00, |
| 0xba, |
| 0x06, |
| 0x02, |
| 0x05, |
| 0x06 |
| ]; |
| expect(getPackedSet().writeToBuffer(), goldenPackedMessage); |
| }); |
| |
| test('testWriteMessageWithNegativeEnumValue', () { |
| SparseEnumMessage message = new SparseEnumMessage() |
| ..sparseEnum = TestSparseEnum.SPARSE_E; |
| expect(message.sparseEnum.value < 0, isTrue, |
| reason: 'enum.value should be -53452'); |
| SparseEnumMessage message2 = |
| new SparseEnumMessage.fromBuffer(message.writeToBuffer()); |
| expect(message2.sparseEnum, TestSparseEnum.SPARSE_E, |
| reason: 'should resolve back to SPARSE_E'); |
| }); |
| |
| test('testReservedNamesOptional', () { |
| ReservedNamesOptional message = new ReservedNamesOptional(); |
| message.hashCode_1 = 1; |
| expect(message.hashCode_1, 1); |
| expect(message.hasHashCode_1(), isTrue); |
| message.clearHashCode_1(); |
| |
| message.noSuchMethod_2 = 1; |
| message.runtimeType_3 = 1; |
| message.toString_4 = 1; |
| message.fromBuffer_10 = 1; |
| message.fromJson_11 = 1; |
| message.hasRequiredFields_12 = 1; |
| message.isInitialized_13 = 1; |
| message.clear_14 = 1; |
| message.getTagNumber_15 = 1; |
| message.check_16 = 1; |
| message.writeToBuffer_17 = 1; |
| message.writeToCodedBufferWriter_18 = 1; |
| message.mergeFromCodedBufferReader_19 = 1; |
| message.mergeFromBuffer_20 = 1; |
| message.writeToJson_21 = 1; |
| message.mergeFromJson_22 = 1; |
| message.addExtension_23 = 1; |
| message.getExtension_24 = 1; |
| message.setExtension_25 = 1; |
| message.hasExtension_26 = 1; |
| message.clearExtension_27 = 1; |
| message.getField_28 = 1; |
| message.setField_29 = 1; |
| message.hasField_30 = 1; |
| message.clearField_31 = 1; |
| message.extensionsAreInitialized_32 = 1; |
| message.mergeFromMessage_33 = 1; |
| message.mergeUnknownFields_34 = 1; |
| message.hashCode1 = 1; |
| message.x = 1; |
| message.hasX_51 = 1; |
| message.clearX_53 = 1; |
| message.hasX51 = 1; |
| message.clearX53 = 1; |
| }); |
| |
| test('testReservedNamesRepeated', () { |
| ReservedNamesRepeated message = new ReservedNamesRepeated(); |
| message.hashCode_1.clear(); |
| message.noSuchMethod_2.clear(); |
| message.runtimeType_3.clear(); |
| message.toString_4.clear(); |
| message.fromBuffer_10.clear(); |
| message.fromJson_11.clear(); |
| message.hasRequiredFields_12.clear(); |
| message.isInitialized_13.clear(); |
| message.clear_14.clear(); |
| message.getTagNumber_15.clear(); |
| message.check_16.clear(); |
| message.writeToBuffer_17.clear(); |
| message.writeToCodedBufferWriter_18.clear(); |
| message.mergeFromCodedBufferReader_19.clear(); |
| message.mergeFromBuffer_20.clear(); |
| message.writeToJson_21.clear(); |
| message.mergeFromJson_22.clear(); |
| message.addExtension_23.clear(); |
| message.getExtension_24.clear(); |
| message.setExtension_25.clear(); |
| message.hasExtension_26.clear(); |
| message.clearExtension_27.clear(); |
| message.getField_28.clear(); |
| message.setField_29.clear(); |
| message.hasField_30.clear(); |
| message.clearField_31.clear(); |
| message.extensionsAreInitialized_32.clear(); |
| message.mergeFromMessage_33.clear(); |
| message.mergeUnknownFields_34.clear(); |
| message.hashCode1.clear(); |
| message.x.clear(); |
| message.hasX.clear(); |
| message.clearX.clear(); |
| message.hasX51.clear(); |
| message.clearX53.clear(); |
| }); |
| |
| test('testReservedNamesRequired', () { |
| ReservedNamesRequired message = new ReservedNamesRequired(); |
| message.hashCode_1 = 1; |
| expect(message.hashCode_1, 1); |
| expect(message.hasHashCode_1(), isTrue); |
| message.clearHashCode_1(); |
| |
| message.noSuchMethod_2 = 1; |
| message.runtimeType_3 = 1; |
| message.toString_4 = 1; |
| message.fromBuffer_10 = 1; |
| message.fromJson_11 = 1; |
| message.hasRequiredFields_12 = 1; |
| message.isInitialized_13 = 1; |
| message.clear_14 = 1; |
| message.getTagNumber_15 = 1; |
| message.check_16 = 1; |
| message.writeToBuffer_17 = 1; |
| message.writeToCodedBufferWriter_18 = 1; |
| message.mergeFromCodedBufferReader_19 = 1; |
| message.mergeFromBuffer_20 = 1; |
| message.writeToJson_21 = 1; |
| message.mergeFromJson_22 = 1; |
| message.addExtension_23 = 1; |
| message.getExtension_24 = 1; |
| message.setExtension_25 = 1; |
| message.hasExtension_26 = 1; |
| message.clearExtension_27 = 1; |
| message.getField_28 = 1; |
| message.setField_29 = 1; |
| message.hasField_30 = 1; |
| message.clearField_31 = 1; |
| message.extensionsAreInitialized_32 = 1; |
| message.mergeFromMessage_33 = 1; |
| message.mergeUnknownFields_34 = 1; |
| message.hashCode1 = 1; |
| message.x = 1; |
| message.hasX_51 = 1; |
| message.clearX_53 = 1; |
| message.hasX51 = 1; |
| message.clearX53 = 1; |
| }); |
| |
| test('testReservedWordsOptional', () { |
| ReservedWordsOptional message = new ReservedWordsOptional(); |
| message.assert_1 = 1; |
| message.break_2 = 1; |
| message.case_3 = 1; |
| message.catch_4 = 1; |
| message.class_5 = 1; |
| message.const_6 = 1; |
| message.continue_7 = 1; |
| message.default_8 = 1; |
| message.do_9 = 1; |
| message.else_10 = 1; |
| message.enum_11 = 1; |
| message.extends_12 = 1; |
| message.false_13 = 1; |
| message.final_14 = 1; |
| message.finally_15 = 1; |
| message.for_16 = 1; |
| message.if_17 = 1; |
| message.in_18 = 1; |
| message.is_19 = 1; |
| message.new_20 = 1; |
| message.null_21 = 1; |
| message.rethrow_22 = 1; |
| message.return_23 = 1; |
| message.super_24 = 1; |
| message.switch_25 = 1; |
| message.this_26 = 1; |
| message.throw_27 = 1; |
| message.true_28 = 1; |
| message.try_29 = 1; |
| message.var_30 = 1; |
| message.void_31 = 1; |
| message.while_32 = 1; |
| message.with_33 = 1; |
| }); |
| |
| test('testReservedWordsRepeated', () { |
| ReservedWordsRepeated message = new ReservedWordsRepeated(); |
| message.assert_1.clear(); |
| message.break_2.clear(); |
| message.case_3.clear(); |
| message.catch_4.clear(); |
| message.class_5.clear(); |
| message.const_6.clear(); |
| message.continue_7.clear(); |
| message.default_8.clear(); |
| message.do_9.clear(); |
| message.else_10.clear(); |
| message.enum_11.clear(); |
| message.extends_12.clear(); |
| message.false_13.clear(); |
| message.final_14.clear(); |
| message.finally_15.clear(); |
| message.for_16.clear(); |
| message.if_17.clear(); |
| message.in_18.clear(); |
| message.is_19.clear(); |
| message.new_20.clear(); |
| message.null_21.clear(); |
| message.rethrow_22.clear(); |
| message.return_23.clear(); |
| message.super_24.clear(); |
| message.switch_25.clear(); |
| message.this_26.clear(); |
| message.throw_27.clear(); |
| message.true_28.clear(); |
| message.try_29.clear(); |
| message.var_30.clear(); |
| message.void_31.clear(); |
| message.while_32.clear(); |
| message.with_33.clear(); |
| }); |
| |
| test('testReservedWordsRequired', () { |
| ReservedWordsRequired message = new ReservedWordsRequired(); |
| message.assert_1 = 1; |
| message.break_2 = 1; |
| message.case_3 = 1; |
| message.catch_4 = 1; |
| message.class_5 = 1; |
| message.const_6 = 1; |
| message.continue_7 = 1; |
| message.default_8 = 1; |
| message.do_9 = 1; |
| message.else_10 = 1; |
| message.enum_11 = 1; |
| message.extends_12 = 1; |
| message.false_13 = 1; |
| message.final_14 = 1; |
| message.finally_15 = 1; |
| message.for_16 = 1; |
| message.if_17 = 1; |
| message.in_18 = 1; |
| message.is_19 = 1; |
| message.new_20 = 1; |
| message.null_21 = 1; |
| message.rethrow_22 = 1; |
| message.return_23 = 1; |
| message.super_24 = 1; |
| message.switch_25 = 1; |
| message.this_26 = 1; |
| message.throw_27 = 1; |
| message.true_28 = 1; |
| message.try_29 = 1; |
| message.var_30 = 1; |
| message.void_31 = 1; |
| message.while_32 = 1; |
| message.with_33 = 1; |
| }); |
| |
| test('testImportDuplicatenames', () { |
| M message = new M(); |
| message.m1 = new p1.M(); |
| message.m1M = new p1.M_M(); |
| message.m2 = new p2.M(); |
| message.m2M = new p2.M_M(); |
| message.m3 = new p3.M(); |
| message.m3M = new p3.M_M(); |
| }); |
| |
| test('testToplevel', () { |
| t.M message = new t.M(); |
| message.t = new T(); |
| new t.SApi(null); |
| }); |
| } |