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 |