blob: 5dde01ef5d02feab101ba4bbead33b8e181f0b36 [file] [log] [blame]
Anton Muhin2f64c7a2013-05-15 15:27:26 +04001#!/usr/bin/env dart
2// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
3// for details. All rights reserved. Use of this source code is governed by a
4// BSD-style license that can be found in the LICENSE file.
5
Brett Morganaa9958e2021-02-05 00:46:20 +11006import 'package:fixnum/fixnum.dart';
Brian Slesinskycbd66dc2015-07-10 19:35:08 -07007import 'package:test/test.dart';
Anton Muhin2f64c7a2013-05-15 15:27:26 +04008
Anton Muhin2f64c7a2013-05-15 15:27:26 +04009import '../out/protos/google/protobuf/unittest.pb.dart';
10
Anton Muhin21247272013-07-11 13:54:17 +040011// [ArgumentError] in production mode, [TypeError] in checked.
Brian Slesinsky23a67b42016-04-04 10:09:12 -070012final invalidArgumentException =
Brett Morganaa9958e2021-02-05 00:46:20 +110013// ignore: deprecated_member_use
14 predicate((e) => e is ArgumentError || e is TypeError || e is CastError);
Anton Muhin21247272013-07-11 13:54:17 +040015final badArgument = throwsA(invalidArgumentException);
16
Brian Slesinsky598f4482015-08-07 11:30:37 -070017// Suppress an analyzer warning for a deliberate type mismatch.
Ivan52544ea2020-08-26 20:11:46 +030018dynamic cast(x) => x;
Brian Slesinsky598f4482015-08-07 11:30:37 -070019
Anton Muhin2f64c7a2013-05-15 15:27:26 +040020void main() {
Brett Morganaa9958e2021-02-05 00:46:20 +110021 // TODO(sigurdm): in a Dart 2 world most of these tests don't really make sense.
Anton Muhin2f64c7a2013-05-15 15:27:26 +040022 test('testValidationFailureMessages', () {
Ivan52544ea2020-08-26 20:11:46 +030023 var builder = TestAllTypes();
Anton Muhin2f64c7a2013-05-15 15:27:26 +040024
Brian Slesinsky23a67b42016-04-04 10:09:12 -070025 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110026 builder.optionalInt32 = cast('101') as int;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070027 }, badArgument);
28 expect(() {
29 builder.optionalInt32 = -2147483649;
30 }, throwsArgumentError);
31 expect(() {
32 builder.optionalInt32 = 2147483648;
33 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040034
Brian Slesinsky23a67b42016-04-04 10:09:12 -070035 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110036 builder.optionalInt64 = cast('102') as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070037 }, badArgument);
38 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110039 builder.optionalInt64 = cast(-9223372036854775808) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070040 }, badArgument);
41 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110042 builder.optionalInt64 = cast(9223372036854775807) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070043 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040044
Brian Slesinsky23a67b42016-04-04 10:09:12 -070045 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110046 builder.optionalUint32 = cast('103') as int;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070047 }, badArgument);
48 expect(() {
49 builder.optionalUint32 = -1;
50 }, throwsArgumentError);
51 expect(() {
52 builder.optionalUint32 = 4294967296;
53 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040054
Brian Slesinsky23a67b42016-04-04 10:09:12 -070055 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110056 builder.optionalUint64 = cast('104') as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070057 }, badArgument);
58 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110059 builder.optionalUint64 = cast(-1) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070060 }, badArgument);
61 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110062 builder.optionalUint64 = cast(8446744073709551616) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070063 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040064
Brian Slesinsky23a67b42016-04-04 10:09:12 -070065 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110066 builder.optionalSint32 = cast('105') as int;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070067 }, badArgument);
68 expect(() {
69 builder.optionalSint32 = -2147483649;
70 }, throwsArgumentError);
71 expect(() {
72 builder.optionalSint32 = 2147483648;
73 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040074
Brian Slesinsky23a67b42016-04-04 10:09:12 -070075 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110076 builder.optionalSint64 = cast('106') as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070077 }, badArgument);
78 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110079 builder.optionalSint64 = cast(-9223372036854775808) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070080 }, badArgument);
81 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110082 builder.optionalSint64 = cast(9223372036854775807) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070083 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040084
Brian Slesinsky23a67b42016-04-04 10:09:12 -070085 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110086 builder.optionalFixed32 = cast('107') as int;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070087 }, badArgument);
88 expect(() {
89 builder.optionalFixed32 = -1;
90 }, throwsArgumentError);
91 expect(() {
92 builder.optionalFixed32 = 4294967296;
93 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +040094
Brian Slesinsky23a67b42016-04-04 10:09:12 -070095 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110096 builder.optionalFixed64 = cast('108') as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -070097 }, badArgument);
98 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +110099 builder.optionalFixed64 = cast(-1) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700100 }, badArgument);
101 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100102 builder.optionalFixed64 = cast(8446744073709551616) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700103 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400104
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700105 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100106 builder.optionalSfixed32 = cast('109') as int;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700107 }, badArgument);
108 expect(() {
109 builder.optionalSfixed32 = -2147483649;
110 }, throwsArgumentError);
111 expect(() {
112 builder.optionalSfixed32 = 2147483648;
113 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400114
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700115 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100116 builder.optionalSfixed64 = cast('110') as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700117 }, badArgument);
118 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100119 builder.optionalSfixed64 = cast(-9223372036854775808) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700120 }, badArgument);
121 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100122 builder.optionalSfixed64 = cast(9223372036854775807) as Int64;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700123 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400124
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700125 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100126 builder.optionalFloat = cast('111') as double;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700127 }, badArgument);
128 expect(() {
129 builder.optionalFloat = -3.4028234663852886E39;
130 }, throwsArgumentError);
131 expect(() {
132 builder.optionalFloat = 3.4028234663852886E39;
133 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400134
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700135 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100136 builder.optionalDouble = cast('112') as double;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700137 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400138
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700139 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100140 builder.optionalBool = cast('113') as bool;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700141 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400142
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700143 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100144 builder.optionalString = cast(false) as String;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700145 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400146
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700147 // Can't test this easily in strong mode.
148 // expect(() {
149 // builder.optionalBytes = cast('115');
150 // }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400151
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700152 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100153 builder.optionalNestedMessage = cast('118') as TestAllTypes_NestedMessage;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700154 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400155
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700156 expect(() {
Brett Morganaa9958e2021-02-05 00:46:20 +1100157 builder.optionalNestedEnum = cast('121') as TestAllTypes_NestedEnum;
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700158 }, badArgument);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400159
160 // Set repeating value (no setter should exist).
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700161 expect(() {
162 cast(builder).repeatedInt32 = 201;
163 }, throwsNoSuchMethodError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400164
165 // Unknown tag.
Brian Slesinsky23a67b42016-04-04 10:09:12 -0700166 expect(() {
167 builder.setField(999, 'field');
168 }, throwsArgumentError);
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400169
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400170 expect(() {
Diego Ballesteros Villamizar4ce027a2019-03-29 12:48:39 +0100171 TestAllExtensions().setExtension(Unittest.optionalInt32Extension, '101');
Anton Muhin2f64c7a2013-05-15 15:27:26 +0400172 }, throwsArgumentError);
173 });
174}