Index: tests/language_strong/arithmetic2_test.dart |
diff --git a/tests/language_strong/arithmetic2_test.dart b/tests/language_strong/arithmetic2_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..65655da1f874fa5b59d1fa4bdaa8fcfbbf605716 |
--- /dev/null |
+++ b/tests/language_strong/arithmetic2_test.dart |
@@ -0,0 +1,73 @@ |
+// Copyright (c) 2012, 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 test program to test arithmetic operations. |
+ |
+import "package:expect/expect.dart"; |
+ |
+class A { |
+ static foo() => 499; |
+} |
+ |
+bool throwsNoSuchMethod(f) { |
+ try { |
+ f(); |
+ return false; |
+ } on NoSuchMethodError catch (e) { |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+bool throwsBecauseOfBadArgument(f) { |
+ try { |
+ f(); |
+ return false; |
+ } on NoSuchMethodError catch (e) { |
+ return true; |
+ } on ArgumentError catch (e) { |
+ return true; |
+ } on TypeError catch (e) { |
+ // In type checked mode. |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+numberOpBadSecondArgument(f) { |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f(true))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f(new A()))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f("foo"))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f("5"))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f(() => 499))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f(null))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f(false))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f([]))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f({}))); |
+ Expect.isTrue(throwsBecauseOfBadArgument(() => f(A.foo))); |
+} |
+ |
+badOperations(b) { |
+ Expect.isTrue(throwsNoSuchMethod(() => b - 3)); |
+ Expect.isTrue(throwsNoSuchMethod(() => b * 3)); |
+ Expect.isTrue(throwsNoSuchMethod(() => b ~/ 3)); |
+ Expect.isTrue(throwsNoSuchMethod(() => b / 3)); |
+ Expect.isTrue(throwsNoSuchMethod(() => b % 3)); |
+ Expect.isTrue(throwsNoSuchMethod(() => b + 3)); |
+ Expect.isTrue(throwsNoSuchMethod(() => b[3])); |
+ Expect.isTrue(throwsNoSuchMethod(() => ~b)); |
+ Expect.isTrue(throwsNoSuchMethod(() => -b)); |
+} |
+ |
+main() { |
+ numberOpBadSecondArgument((x) => 3 + x); |
+ numberOpBadSecondArgument((x) => 3 - x); |
+ numberOpBadSecondArgument((x) => 3 * x); |
+ numberOpBadSecondArgument((x) => 3 / x); |
+ numberOpBadSecondArgument((x) => 3 ~/ x); |
+ numberOpBadSecondArgument((x) => 3 % x); |
+ badOperations(true); |
+ badOperations(false); |
+ badOperations(() => 499); |
+ badOperations(A.foo); |
+} |