| // 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. |
| // Check that we can use pseudo keywords as names in function level code. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class PseudoKWTest { |
| static testMain() { |
| // This is a list of built-in identifiers from the Dart spec. |
| // It sanity checks that these pseudo-keywords are legal identifiers. |
| |
| var abstract = 0; //# 01: ok |
| var as = 0; |
| var dynamic = 0; |
| var export = 0; |
| var external = 0; //# 01: ok |
| var factory = 0; |
| var get = 0; |
| var interface = 0; |
| var implements = 0; |
| var import = 0; |
| var library = 0; |
| var mixin = 0; |
| var operator = 0; |
| var part = 0; |
| var set = 0; |
| var static = 0; //# 01: ok |
| var typedef = 0; |
| |
| // "native" is a per-implementation extension that is not a part of the |
| // Dart language. While it is not an official built-in identifier, it |
| // is useful to ensure that it remains a legal identifier. |
| var native = 0; |
| |
| // The code below adds a few additional variants of usage without any |
| // attempt at complete coverage. |
| { |
| void factory(set) { |
| return; //# 01: ok |
| } |
| } |
| |
| get: |
| while (import > 0) { |
| break get; |
| } |
| |
| return |
| static + //# 01: ok |
| library * operator; |
| } |
| } |
| |
| typedef(x) => "typedef $x"; //# 01: ok |
| |
| static(abstract) { //# 01: ok |
| return abstract == true; //# 01: ok |
| } //# 01: ok |
| |
| class A { |
| var typedef = 0; |
| final operator = "smooth"; |
| |
| set(x) { |
| typedef = x; |
| } |
| |
| get() => typedef - 5; |
| |
| static static() { //# 01: ok |
| return 1; //# 01: ok |
| } //# 01: ok |
| static check() { |
| var o = new A(); |
| o.set(55); |
| Expect.equals(50, o.get()); |
| static(); //# 01: ok |
| } |
| } |
| |
| class B { |
| var set = 100; |
| get get => set; |
| set get(get) => set = 2 * get.get; |
| |
| static() { //# 01: ok |
| var set = new B(); //# 01: ok |
| set.get = set; //# 01: ok |
| Expect.equals(200, set.get); //# 01: ok |
| } //# 01: ok |
| int operator() { |
| return 1; |
| } |
| } |
| |
| class C { |
| static int operator = (5); |
| static var get; |
| static get set => 111; |
| static set set(set) {} |
| } |
| |
| main() { |
| PseudoKWTest.testMain(); |
| A.check(); |
| new B().static(); //# 01: ok |
| Expect.equals(1, new B().operator()); |
| Expect.equals(1, A.static()); //# 01: ok |
| typedef("T"); //# 01: ok |
| Expect.equals("typedef T", typedef("T")); //# 01: ok |
| static("true"); //# 01: ok |
| Expect.equals(false, static("true")); //# 01: ok |
| Expect.equals(5, C.operator); |
| Expect.equals(null, C.get); |
| C.set = 0; |
| Expect.equals(111, C.set); |
| } |