Index: test/codegen/language/generic_tearoff_test.dart |
diff --git a/test/codegen/language/generic_tearoff_test.dart b/test/codegen/language/generic_tearoff_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e07ba4360d52d37622dcdb19332a726e7a276acb |
--- /dev/null |
+++ b/test/codegen/language/generic_tearoff_test.dart |
@@ -0,0 +1,44 @@ |
+// Copyright (c) 2016, 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. |
+ |
+import 'dart:math' as math; |
+import 'dart:math' show min; // <-- generic: <T extends num>(T, T) -> T |
+import 'package:expect/expect.dart'; |
+ |
+class C { |
+ /*=T*/ m/*<T extends num>*/(/*=T*/ x, /*=T*/ y) => min(x, y); |
+ int m2(int x, int y) => min(x, y); |
+} |
+ |
+typedef int Int2Int2Int(int x, int y); |
+ |
+void _test(Int2Int2Int f) { |
+ int y = f(123, 456); |
+ Expect.equals(y, 123); |
+ // `f` doesn't take type args. |
+ Expect.throws(() => (f as dynamic)/*<int>*/(123, 456)); |
+} |
+ |
+void _testParam(/*=T*/ minFn/*<T extends num>*/(/*=T*/ x, /*=T*/ y)) { |
+ _test(minFn); |
+} |
+ |
+main() { |
+ // Strong mode infers: `min<int>` |
+ // Test simple/prefixed identifiers and property access |
+ _test(min); |
+ _test(math.min); |
+ _test(new C().m); |
+ |
+ // Test local function, variable, and parameter |
+ /*=T*/ m/*<T extends num>*/(/*=T*/ x, /*=T*/ y) => min(x, y); |
+ _test(m); |
+ final f = min; |
+ _test(f); |
+ _testParam(math.min); |
+ |
+ // A few misc tests for methods |
+ Expect.equals(123, (new C() as dynamic).m/*<int>*/(123, 456)); |
+ Expect.throws(() => (new C() as dynamic).m2/*<int>*/(123, 456)); |
+} |