| // Copyright (c) 2021, 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 |
| |
| // Tests the functionality of the JS$ prefix for escaping keywords in JS names. |
| // Currently only implemented in dart2js, expected to fail in ddc. |
| |
| @JS() |
| library js_prefix_test; |
| |
| import 'package:js/js.dart'; |
| import 'package:js/js_util.dart' as js_util; |
| import 'package:expect/minitest.dart'; |
| |
| @JS() |
| @anonymous |
| class ExampleTypedLiteral { |
| external factory ExampleTypedLiteral({JS$_c, JS$class}); |
| |
| external get JS$_c; |
| external set JS$_c(v); |
| // Identical to JS$_c but only accessible within the library. |
| external get _c; |
| external get JS$class; |
| external set JS$class(v); |
| } |
| |
| main() { |
| test('hasProperty', () { |
| var literal = new ExampleTypedLiteral(JS$_c: null, JS$class: true); |
| expect(js_util.hasProperty(literal, '_c'), isTrue); |
| expect(literal.JS$_c, isNull); |
| expect(js_util.hasProperty(literal, 'class'), isTrue); |
| // JS$_c escapes to _c so the property JS$_c will not exist on the object. |
| expect(js_util.hasProperty(literal, r'JS$_c'), isFalse); |
| expect(js_util.hasProperty(literal, r'JS$class'), isFalse); |
| expect(literal.JS$class, isTrue); |
| |
| literal = new ExampleTypedLiteral(); |
| expect(js_util.hasProperty(literal, '_c'), isFalse); |
| expect(js_util.hasProperty(literal, 'class'), isFalse); |
| |
| literal = new ExampleTypedLiteral(JS$_c: 74); |
| expect(js_util.hasProperty(literal, '_c'), isTrue); |
| expect(literal.JS$_c, equals(74)); |
| }); |
| |
| test('getProperty', () { |
| var literal = new ExampleTypedLiteral(JS$_c: 7, JS$class: true); |
| expect(js_util.getProperty(literal, '_c'), equals(7)); |
| expect(literal.JS$_c, equals(7)); |
| expect(js_util.getProperty(literal, 'class'), isTrue); |
| expect(js_util.getProperty(literal, r'JS$_c'), isNull); |
| expect(js_util.getProperty(literal, r'JS$class'), isNull); |
| }); |
| |
| test('setProperty', () { |
| var literal = new ExampleTypedLiteral(); |
| literal.JS$class = 42; |
| expect(literal.JS$class, equals(42)); |
| js_util.setProperty(literal, 'class', 100); |
| expect(literal.JS$class, equals(100)); |
| }); |
| } |