| Index: pkg/kernel/testcases/closures/instance_tear_off.dart
|
| diff --git a/pkg/kernel/testcases/closures/instance_tear_off.dart b/pkg/kernel/testcases/closures/instance_tear_off.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a0c4ce8bfd7da735bff419527564ec5f8ead3df1
|
| --- /dev/null
|
| +++ b/pkg/kernel/testcases/closures/instance_tear_off.dart
|
| @@ -0,0 +1,65 @@
|
| +// 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.md file.
|
| +
|
| +class C {
|
| + var f = () => "f";
|
| + get g => (x) => "g($x)";
|
| + a() => "a";
|
| + b(x) => x;
|
| + c(x, [y = 2]) => x + y;
|
| + d(x, {y: 2}) => x + y;
|
| +}
|
| +
|
| +/// This class doesn't use its type variable.
|
| +class D<T> {
|
| + var f = () => "f";
|
| + get g => (x) => "g($x)";
|
| + a() => "a";
|
| + b(x) => x;
|
| + c(x, [y = 2]) => x + y;
|
| + d(x, {y: 2}) => x + y;
|
| +}
|
| +
|
| +/// This class uses its type variable.
|
| +class E<T> {
|
| + var f = () => "f";
|
| + get g => (T x) => "g($x)";
|
| + a() => "a";
|
| + b(T x) => x;
|
| + c(T x, [T y = 2]) => x + y;
|
| + d(T x, {T y: 2}) => x + y;
|
| +}
|
| +
|
| +expect(expected, actual) {
|
| + print("Expecting '$expected' and got '$actual'");
|
| + if (expected != actual) {
|
| + print("Expected '$expected' but got '$actual'");
|
| + throw "Expected '$expected' but got '$actual'";
|
| + }
|
| +}
|
| +
|
| +test(o) {
|
| + expect("f", o.f());
|
| + expect("f", (o.f)());
|
| + expect("g(42)", o.g(42));
|
| + expect("g(42)", (o.g)(42));
|
| + expect("a", o.a());
|
| + expect("a", (o.a)());
|
| + expect(42, o.b(42));
|
| + expect(42, (o.b)(42));
|
| + expect(42, o.c(40));
|
| + expect(42, (o.c)(40));
|
| + expect(87, o.c(80, 7));
|
| + expect(87, (o.c)(80, 7));
|
| + expect(42, o.d(40));
|
| + expect(42, (o.d)(40));
|
| + expect(87, o.d(80, y: 7));
|
| + expect(87, (o.d)(80, y: 7));
|
| +}
|
| +
|
| +main(arguments) {
|
| + test(new C());
|
| + test(new D<int>());
|
| + test(new E<int>());
|
| +}
|
|
|