// Copyright (c) 2011, 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 "native_testing.dart"; // Verify that we can have fields with names that start with g and s even // though those names are reserved for getters and setters in minified mode. // Note: this works because end and send are both in the list of // reservedNativeProperties. In general we don't check arbitrary // names for clashes because it's hard - subclasses can force superclasses // to rename getters, and that can force unrelated classes to change their // getters too if they have a property that has the same name. @Native("A") class A { void set bar(int unused) native; int get bar native; void set g(int unused) native; int get g native; void set s(int unused) native; int get s native; void set end(int unused) native; int get end native; void set gend(int unused) native; int get gend native; void set send(int unused) native; int get send native; void set gettersCalled(int unused) native; int get gettersCalled native; void set settersCalled(int unused) native; int get settersCalled native; } void setup() { JS('', r""" (function(){ function getter() { this.gettersCalled++; return 42; } function setter(x) { this.settersCalled++; return 314; } var descriptor = { get: getter, set: setter, configurable: false, writeable: false }; function A(){ var a = Object.create( { constructor: A }, { bar: descriptor, g: descriptor, s: descriptor, end: descriptor, gend: descriptor, send: descriptor }); a.gettersCalled = 0; a.settersCalled = 0; return a; } self.makeA = function() { return new A(); }; self.nativeConstructor(A); })()"""); applyTestExtensions(['A']); } A makeA() native; class B {} main() { nativeTesting(); setup(); confuse(new B()); var a = makeA(); Expect.equals(42, confuse(a).bar); Expect.equals(42, confuse(a).g); Expect.equals(42, confuse(a).s); Expect.equals(42, confuse(a).end); Expect.equals(42, confuse(a).gend); Expect.equals(42, confuse(a).send); Expect.equals(271, confuse(a).bar = 271); Expect.equals(271, confuse(a).g = 271); Expect.equals(271, confuse(a).s = 271); Expect.equals(271, confuse(a).end = 271); Expect.equals(271, confuse(a).gend = 271); Expect.equals(271, confuse(a).send = 271); Expect.equals(6, confuse(a).gettersCalled); Expect.equals(6, confuse(a).settersCalled); Expect.equals(42, a.bar); Expect.equals(42, a.g); Expect.equals(42, a.s); Expect.equals(42, a.end); Expect.equals(42, a.gend); Expect.equals(42, a.send); Expect.equals(271, a.bar = 271); Expect.equals(271, a.g = 271); Expect.equals(271, a.s = 271); Expect.equals(271, a.end = 271); Expect.equals(271, a.gend = 271); Expect.equals(271, a.send = 271); Expect.equals(12, a.gettersCalled); Expect.equals(12, a.settersCalled); }