| #!/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. |
| |
| // @dart=2.11 |
| |
| import 'package:fixnum/fixnum.dart'; |
| import 'package:test/test.dart'; |
| |
| import '../out/protos/google/protobuf/unittest.pb.dart'; |
| |
| // [ArgumentError] in production mode, [TypeError] in checked. |
| final invalidArgumentException = |
| // ignore: deprecated_member_use |
| predicate((e) => e is ArgumentError || e is TypeError || e is CastError); |
| final badArgument = throwsA(invalidArgumentException); |
| |
| // Suppress an analyzer warning for a deliberate type mismatch. |
| dynamic cast(x) => x; |
| |
| void main() { |
| // TODO(sigurdm): in a Dart 2 world most of these tests don't really make sense. |
| test('testValidationFailureMessages', () { |
| var builder = TestAllTypes(); |
| |
| expect(() { |
| builder.optionalInt32 = null; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalInt32 = cast('101') as int; |
| }, badArgument); |
| expect(() { |
| builder.optionalInt32 = -2147483649; |
| }, throwsArgumentError); |
| expect(() { |
| builder.optionalInt32 = 2147483648; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalInt64 = cast('102') as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalInt64 = cast(-9223372036854775808) as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalInt64 = cast(9223372036854775807) as Int64; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalUint32 = cast('103') as int; |
| }, badArgument); |
| expect(() { |
| builder.optionalUint32 = -1; |
| }, throwsArgumentError); |
| expect(() { |
| builder.optionalUint32 = 4294967296; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalUint64 = cast('104') as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalUint64 = cast(-1) as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalUint64 = cast(8446744073709551616) as Int64; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalSint32 = cast('105') as int; |
| }, badArgument); |
| expect(() { |
| builder.optionalSint32 = -2147483649; |
| }, throwsArgumentError); |
| expect(() { |
| builder.optionalSint32 = 2147483648; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalSint64 = cast('106') as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalSint64 = cast(-9223372036854775808) as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalSint64 = cast(9223372036854775807) as Int64; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalFixed32 = cast('107') as int; |
| }, badArgument); |
| expect(() { |
| builder.optionalFixed32 = -1; |
| }, throwsArgumentError); |
| expect(() { |
| builder.optionalFixed32 = 4294967296; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalFixed64 = cast('108') as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalFixed64 = cast(-1) as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalFixed64 = cast(8446744073709551616) as Int64; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalSfixed32 = cast('109') as int; |
| }, badArgument); |
| expect(() { |
| builder.optionalSfixed32 = -2147483649; |
| }, throwsArgumentError); |
| expect(() { |
| builder.optionalSfixed32 = 2147483648; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalSfixed64 = cast('110') as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalSfixed64 = cast(-9223372036854775808) as Int64; |
| }, badArgument); |
| expect(() { |
| builder.optionalSfixed64 = cast(9223372036854775807) as Int64; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalFloat = cast('111') as double; |
| }, badArgument); |
| expect(() { |
| builder.optionalFloat = -3.4028234663852886E39; |
| }, throwsArgumentError); |
| expect(() { |
| builder.optionalFloat = 3.4028234663852886E39; |
| }, throwsArgumentError); |
| |
| expect(() { |
| builder.optionalDouble = cast('112') as double; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalBool = cast('113') as bool; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalString = cast(false) as String; |
| }, badArgument); |
| |
| // Can't test this easily in strong mode. |
| // expect(() { |
| // builder.optionalBytes = cast('115'); |
| // }, badArgument); |
| |
| expect(() { |
| builder.optionalNestedMessage = cast('118') as TestAllTypes_NestedMessage; |
| }, badArgument); |
| |
| expect(() { |
| builder.optionalNestedEnum = cast('121') as TestAllTypes_NestedEnum; |
| }, badArgument); |
| |
| // Set repeating value (no setter should exist). |
| expect(() { |
| cast(builder).repeatedInt32 = 201; |
| }, throwsNoSuchMethodError); |
| |
| // Unknown tag. |
| expect(() { |
| builder.setField(999, 'field'); |
| }, throwsArgumentError); |
| |
| expect(() { |
| TestAllExtensions().setExtension(Unittest.optionalInt32Extension, '101'); |
| }, throwsArgumentError); |
| }); |
| } |