Chromium Code Reviews| Index: tests/language/constructor12_test.dart |
| diff --git a/tests/language/constructor12_test.dart b/tests/language/constructor12_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..1dec3715a4ae93a1a3286188c9fde8e81481ac37 |
| --- /dev/null |
| +++ b/tests/language/constructor12_test.dart |
| @@ -0,0 +1,62 @@ |
| +// Copyright (c) 2015, 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 "package:expect/expect.dart"; |
| + |
| +class B { |
| + final z; |
| + B(this.z); |
| + |
| + foo() => this.z; |
| +} |
| + |
| +class A<T> extends B { |
| + var captured, captured2; |
| + var typedList; |
| + |
| + // p must be inside a box (in dart2js). |
| + A(p) : captured = (() => p), super(p++) { |
| + // Make non-inlinable. |
| + try {} catch(e) {} |
| + |
| + captured2 = () => p++; |
| + |
| + // In the current implementation of dart2js makes the generic type an |
| + // argument to the body. |
| + typedList = <T>[]; |
| + } |
| + |
| + foo() => captured(); |
| + bar() => captured2(); |
| +} |
| + |
| +@NoInline() |
| +@AssumeDynamic() |
| +confuse(x) => x; |
| + |
| +main() { |
| + var a = confuse(new A<int>(1)); |
| + var a2 = confuse(new A(2)); |
| + var b = confuse(new B(3)); |
| + Expect.equals(2, a.foo()); |
| + Expect.equals(3, a2.foo()); |
| + Expect.equals(3, b.foo()); |
|
Johnni Winther
2015/03/02 10:41:52
What is testing?
Shouldn't we (instead) test tha
floitsch
2015/03/02 14:56:52
Added tests against "z".
|
| + Expect.isTrue(a is A<int>); |
| + Expect.isFalse(a is A<String>); |
| + Expect.isTrue(a2 is A<int>); |
| + Expect.isTrue(a2 is A<String>); |
| + Expect.equals(2, a.bar()); |
| + Expect.equals(3, a2.bar()); |
| + Expect.equals(3, a.foo()); |
| + Expect.equals(4, a2.foo()); |
| + Expect.equals(0, a.typedList.length); |
| + Expect.equals(0, a2.typedList.length); |
| + a.typedList.add(499); |
| + Expect.equals(1, a.typedList.length); |
| + Expect.equals(0, a2.typedList.length); |
| + Expect.isTrue(a.typedList is List<int>); |
| + Expect.isTrue(a2.typedList is List<int>); |
| + Expect.isFalse(a.typedList is List<String>); |
| + Expect.isTrue(a2.typedList is List<String>); |
| +} |