| #!/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. |
| |
| @TestOn('vm') |
| library reserved_names_test; |
| |
| import 'dart:collection' show MapMixin; |
| import 'dart:mirrors'; |
| |
| import 'package:protobuf/meta.dart' |
| show GeneratedMessage_reservedNames, ProtobufEnum_reservedNames; |
| // Import the libraries we will access via the mirrors. |
| // ignore_for_file: unused_import |
| import 'package:protobuf/protobuf.dart' show GeneratedMessage, ProtobufEnum; |
| import 'package:protobuf/src/protobuf/mixins/event_mixin.dart' |
| show PbEventMixin; |
| import 'package:protobuf/src/protobuf/mixins/map_mixin.dart' show PbMapMixin; |
| import 'package:protoc_plugin/mixins.dart' show findMixin; |
| import 'package:test/test.dart'; |
| |
| import 'mirror_util.dart' show findMemberNames; |
| |
| void main() { |
| test('GeneratedMessage reserved names are up to date', () { |
| var actual = Set<String>.from(GeneratedMessage_reservedNames); |
| var expected = |
| findMemberNames('package:protobuf/protobuf.dart', #GeneratedMessage) |
| // TODO: see https://github.com/google/protobuf.dart/issues/527 |
| ..removeAll(_oneOffNames); |
| |
| expect(actual.toList()..sort(), equals(expected.toList()..sort())); |
| }); |
| |
| test('ProtobufEnum reserved names are up to date', () { |
| var actual = Set<String>.from(ProtobufEnum_reservedNames); |
| var expected = |
| findMemberNames('package:protobuf/protobuf.dart', #ProtobufEnum) |
| // TODO: see https://github.com/google/protobuf.dart/issues/527 |
| ..removeAll(_oneOffNames); |
| |
| expect(actual.toList()..sort(), equals(expected.toList()..sort())); |
| }); |
| |
| test("ReadonlyMessageMixin doesn't add any reserved names", () { |
| var mixinNames = |
| findMemberNames('package:protobuf/protobuf.dart', #ReadonlyMessageMixin) |
| // TODO: see https://github.com/google/protobuf.dart/issues/527 |
| ..removeAll(_oneOffNames); |
| var reservedNames = Set<String>.from(GeneratedMessage_reservedNames); |
| for (var name in mixinNames) { |
| if (name == 'ReadonlyMessageMixin' || name == 'unknownFields') continue; |
| if (!reservedNames.contains(name)) { |
| fail('name from ReadonlyMessageMixin is not reserved: $name'); |
| } |
| } |
| }); |
| |
| test('PbMapMixin reserved names are up to date', () { |
| var meta = findMixin('PbMapMixin')!; |
| var actual = Set<String>.from(meta.findReservedNames()); |
| |
| var expected = findMemberNames(meta.importFrom, #PbMapMixin) |
| ..addAll(findMemberNames('dart:collection', #MapMixin)) |
| ..removeAll(GeneratedMessage_reservedNames) |
| // TODO: see https://github.com/google/protobuf.dart/issues/527 |
| ..removeAll(_oneOffNames); |
| |
| expect( |
| actual.toList()..sort(), containsAllInOrder(expected.toList()..sort())); |
| }); |
| |
| test('PbEventMixin reserved names are up to date', () { |
| var meta = findMixin('PbEventMixin')!; |
| var actual = Set<String>.from(meta.findReservedNames()); |
| |
| var expected = findMemberNames(meta.importFrom, #PbEventMixin) |
| ..removeAll(GeneratedMessage_reservedNames) |
| // TODO: see https://github.com/google/protobuf.dart/issues/527 |
| ..removeAll(_oneOffNames); |
| |
| expect(actual.toList()..sort(), equals(expected.toList()..sort())); |
| }); |
| } |
| |
| // See https://github.com/google/protobuf.dart/issues/527 |
| const _oneOffNames = { |
| 'hash', |
| 'hashAll', |
| 'hashAllUnordered', |
| }; |