| // 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 = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class A { |
| var __PROTO__ = 499; |
| var constructor = 1; |
| var prototype = 2; |
| } |
| |
| // TODO(jmesserly): changed this test to avoid shadowing a field with a getter, |
| // which DDC doesn't currently support, see: |
| // https://github.com/dart-lang/dev_compiler/issues/52 |
| class A2 { |
| get __PROTO__ => 499; |
| get constructor => 1; |
| get prototype => 2; |
| } |
| |
| class B extends A2 { |
| get __PROTO__ => 42; |
| get constructor => 3; |
| get prototype => 4; |
| } |
| |
| class P { |
| m() => 42; |
| } |
| |
| class C { |
| m() => 777; |
| static get prototype => new P(); |
| static get name => 'hello from C.name'; |
| static void _check(obj) { |
| Expect.equals(obj, 'hello'); |
| check_++; |
| } |
| |
| static void as(obj) { |
| Expect.equals(obj, 'world'); |
| as_++; |
| } |
| |
| static int as_ = 0; |
| static int check_ = 0; |
| } |
| |
| // Regression test for https://github.com/dart-lang/sdk/issues/31049 |
| regress31049() { |
| dynamic d = new C(); |
| C c = d; // implicit cast |
| d as C; // explicit cast |
| C._check('hello'); |
| Expect.equals(C.check_, 1); |
| C.as('world'); |
| Expect.equals(C.as_, 1); |
| } |
| |
| // Regression test for https://github.com/dart-lang/sdk/issues/31050 |
| regress31050() { |
| Expect.isFalse((C).toString().contains('C.name'), 'should not call C.name'); |
| Expect.equals(C.name, 'hello from C.name'); |
| Expect.equals(C.prototype.m(), 42); |
| Expect.equals(new C().m(), 777); |
| } |
| |
| var name = 42; |
| regress31117() { |
| Expect.equals(name, 42); |
| } |
| |
| main() { |
| var a = new A(); |
| var a2 = new A2(); |
| var b = new B(); |
| var list = <dynamic>[a, a2, b]; |
| for (int i = 0; i < list.length; i++) { |
| var proto = list[i].__PROTO__; |
| var constructor = list[i].constructor; |
| var prototype = list[i].prototype; |
| if (i < 2) { |
| Expect.equals(499, proto); |
| Expect.equals(1, constructor); |
| Expect.equals(2, prototype); |
| } else { |
| Expect.equals(42, proto); |
| Expect.equals(3, constructor); |
| Expect.equals(4, prototype); |
| } |
| } |
| |
| regress31049(); |
| regress31050(); |
| regress31117(); |
| } |