|  | // 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 native fields on classes are not renamed by the minifier. | 
|  | @Native("A") | 
|  | class A { | 
|  | void set myLongPropertyName(int unused) native; | 
|  | int get myLongPropertyName native; | 
|  | void set getValue(int unused) native; | 
|  | int get getValue native; | 
|  |  | 
|  | int method(int z) => myLongPropertyName; | 
|  | } | 
|  |  | 
|  | void setup() { | 
|  | JS('', r""" | 
|  | (function(){ | 
|  | function getter() { | 
|  | return ++this.getValue; | 
|  | } | 
|  |  | 
|  | function setter(x) { | 
|  | this.getValue += 10; | 
|  | } | 
|  |  | 
|  | function A(){ | 
|  | var a = Object.create( | 
|  | { constructor: A}, | 
|  | { myLongPropertyName: { get: getter, | 
|  | set: setter, | 
|  | configurable: false, | 
|  | writeable: false | 
|  | } | 
|  | }); | 
|  | a.getValue = 0; | 
|  | return a; | 
|  | } | 
|  |  | 
|  | makeA = function(){return new A()}; | 
|  | self.nativeConstructor(A); | 
|  | })()"""); | 
|  | applyTestExtensions(['A']); | 
|  | } | 
|  |  | 
|  | A makeA() native; | 
|  |  | 
|  | main() { | 
|  | nativeTesting(); | 
|  | setup(); | 
|  | var a = makeA(); | 
|  | a.myLongPropertyName = 21; | 
|  | int gotten = a.myLongPropertyName; | 
|  | Expect.equals(11, gotten); | 
|  |  | 
|  | // Force interceptor dispatch. | 
|  | confuse(a).myLongPropertyName = 99; | 
|  | gotten = confuse(a).myLongPropertyName; | 
|  | Expect.equals(22, gotten); | 
|  |  | 
|  | var a2 = makeA(); | 
|  | if (a2 is A) { | 
|  | // Inside this 'if' the compiler knows that a2 is an A, so it is tempted | 
|  | // to access myLongPropertyName directly, using its minified name.  But | 
|  | // renaming of native properties can only work using getters and setters | 
|  | // that access the original name. | 
|  | a2.myLongPropertyName = 21; | 
|  | int gotten = a2.myLongPropertyName; | 
|  | Expect.equals(11, gotten); | 
|  | } | 
|  | } |