| OLD | NEW | 
|---|
| 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 import "package:expect/expect.dart"; | 5 import "package:expect/expect.dart"; | 
| 6 import 'dart:_foreign_helper' show JS; | 6 import 'dart:_foreign_helper' show JS; | 
| 7 import 'dart:_js_helper' show Native, Creates, setNativeSubclassDispatchRecord; | 7 import 'dart:_js_helper' show Native, Creates, setNativeSubclassDispatchRecord; | 
| 8 import 'dart:_interceptors' show | 8 import 'dart:_interceptors' | 
| 9     findInterceptorForType, findConstructorForNativeSubclassType; | 9     show findInterceptorForType, findConstructorForNativeSubclassType; | 
| 10 | 10 | 
| 11 // Test for super access from classes that extend native classes. | 11 // Test for super access from classes that extend native classes. | 
| 12 | 12 | 
| 13 @Native("N1") | 13 @Native("N1") | 
| 14 class N1 { | 14 class N1 {} | 
| 15 } |  | 
| 16 | 15 | 
| 17 @Native("N2") | 16 @Native("N2") | 
| 18 class N2 extends N1 { | 17 class N2 extends N1 { | 
| 19   N2.init(); | 18   N2.init(); | 
| 20   String text; | 19   String text; | 
| 21   foo() native; | 20   foo() native ; | 
| 22 } | 21 } | 
| 23 | 22 | 
| 24 class AA extends N2 { | 23 class AA extends N2 { | 
| 25   AA.init() : super.init(); | 24   AA.init() : super.init(); | 
| 26   String afield; | 25   String afield; | 
| 27   afun() => 'afun:$afield'; | 26   afun() => 'afun:$afield'; | 
| 28 } | 27 } | 
| 29 | 28 | 
| 30 class BB extends AA  { | 29 class BB extends AA { | 
| 31   BB.init() : super.init(); | 30   BB.init() : super.init(); | 
| 32 | 31 | 
| 33   get text => super.text; | 32   get text => super.text; | 
| 34   set text(value) => super.text = value; | 33   set text(value) => super.text = value; | 
| 35   foo() => super.foo(); | 34   foo() => super.foo(); | 
| 36 | 35 | 
| 37   get afield => super.afield; | 36   get afield => super.afield; | 
| 38   set afield(value) => super.afield = value; | 37   set afield(value) => super.afield = value; | 
| 39   afun() => super.afun(); | 38   afun() => super.afun(); | 
| 40 } | 39 } | 
| 41 | 40 | 
| 42 BB makeBB() native; | 41 BB makeBB() native ; | 
| 43 | 42 | 
| 44 @Creates('=Object') | 43 @Creates('=Object') | 
| 45 getBBPrototype() native; | 44 getBBPrototype() native ; | 
| 46 | 45 | 
| 47 void setup() native r""" | 46 void setup() native r""" | 
| 48 function N2() {} | 47 function N2() {} | 
| 49 N2.prototype.foo = function() { return "foo:" + this.text; } | 48 N2.prototype.foo = function() { return "foo:" + this.text; } | 
| 50 function BB() {} | 49 function BB() {} | 
| 51 BB.prototype.__proto__ = N2.prototype; | 50 BB.prototype.__proto__ = N2.prototype; | 
| 52 makeBB = function(){return new BB;}; | 51 makeBB = function(){return new BB;}; | 
| 53 | 52 | 
| 54 getBBPrototype = function(){return BB.prototype;}; | 53 getBBPrototype = function(){return BB.prototype;}; | 
| 55 """; | 54 """; | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 107 | 106 | 
| 108   print('b1.afun() ${inscrutable(b1).afun()}'); | 107   print('b1.afun() ${inscrutable(b1).afun()}'); | 
| 109   print('b2.afun() ${inscrutable(b2).afun()}'); | 108   print('b2.afun() ${inscrutable(b2).afun()}'); | 
| 110 | 109 | 
| 111   Expect.equals('one', b1.afield); | 110   Expect.equals('one', b1.afield); | 
| 112   Expect.equals('two', b2.afield); | 111   Expect.equals('two', b2.afield); | 
| 113 | 112 | 
| 114   Expect.equals('afun:one', b1.afun()); | 113   Expect.equals('afun:one', b1.afun()); | 
| 115   Expect.equals('afun:two', b2.afun()); | 114   Expect.equals('afun:two', b2.afun()); | 
| 116 | 115 | 
| 117 |  | 
| 118   inscrutable(b1).afield = inscrutable('three'); | 116   inscrutable(b1).afield = inscrutable('three'); | 
| 119   inscrutable(b2).afield = inscrutable('four'); | 117   inscrutable(b2).afield = inscrutable('four'); | 
| 120 | 118 | 
| 121   Expect.equals('three', inscrutable(b1).afield); | 119   Expect.equals('three', inscrutable(b1).afield); | 
| 122   Expect.equals('four', inscrutable(b2).afield); | 120   Expect.equals('four', inscrutable(b2).afield); | 
| 123 | 121 | 
| 124   Expect.equals('afun:three', inscrutable(b1).afun()); | 122   Expect.equals('afun:three', inscrutable(b1).afun()); | 
| 125   Expect.equals('afun:four', inscrutable(b2).afun()); | 123   Expect.equals('afun:four', inscrutable(b2).afun()); | 
| 126 } | 124 } | 
| 127 | 125 | 
| 128 main() { | 126 main() { | 
| 129   setup(); | 127   setup(); | 
| 130   inscrutable = (x) => x; | 128   inscrutable = (x) => x; | 
| 131 | 129 | 
| 132   setNativeSubclassDispatchRecord(getBBPrototype(), findInterceptorForType(BB)); | 130   setNativeSubclassDispatchRecord(getBBPrototype(), findInterceptorForType(BB)); | 
| 133 | 131 | 
| 134   testSuperOnNative(); | 132   testSuperOnNative(); | 
| 135   testSuperOnSubclassOfNative(); | 133   testSuperOnSubclassOfNative(); | 
| 136 } | 134 } | 
| OLD | NEW | 
|---|