| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 "dart:_js_helper"; | 5 import "dart:_js_helper"; |
| 6 import "package:expect/expect.dart"; | 6 import "package:expect/expect.dart"; |
| 7 | 7 |
| 8 // Additional Dart code may be 'placed on' hidden native classes. With | 8 // Additional Dart code may be 'placed on' hidden native classes. With |
| 9 // inheritance, the superclass method must not be reached by a call on the | 9 // inheritance, the superclass method must not be reached by a call on the |
| 10 // subclass. | 10 // subclass. |
| 11 | 11 |
| 12 @Native("A") | 12 @Native("A") |
| 13 class A { | 13 class A { |
| 14 var _field; | 14 var _field; |
| 15 | 15 |
| 16 int get X => _field; | 16 int get X => _field; |
| 17 void set X(int x) { _field = x; } | 17 void set X(int x) { |
| 18 _field = x; |
| 19 } |
| 18 | 20 |
| 19 int method(int z) => _field + z; | 21 int method(int z) => _field + z; |
| 20 } | 22 } |
| 21 | 23 |
| 22 @Native("B") | 24 @Native("B") |
| 23 class B extends A { | 25 class B extends A { |
| 24 var _field2; | 26 var _field2; |
| 25 | 27 |
| 26 int get X => _field2; | 28 int get X => _field2; |
| 27 void set X(int x) { _field2 = x; } | 29 void set X(int x) { |
| 30 _field2 = x; |
| 31 } |
| 28 | 32 |
| 29 int method(int z) => _field2 + z; | 33 int method(int z) => _field2 + z; |
| 30 } | 34 } |
| 31 | 35 |
| 32 A makeA() native; | 36 A makeA() native ; |
| 33 B makeB() native; | 37 B makeB() native ; |
| 34 | 38 |
| 35 void setup() native r""" | 39 void setup() native r""" |
| 36 function inherits(child, parent) { | 40 function inherits(child, parent) { |
| 37 if (child.prototype.__proto__) { | 41 if (child.prototype.__proto__) { |
| 38 child.prototype.__proto__ = parent.prototype; | 42 child.prototype.__proto__ = parent.prototype; |
| 39 } else { | 43 } else { |
| 40 function tmp() {}; | 44 function tmp() {}; |
| 41 tmp.prototype = parent.prototype; | 45 tmp.prototype = parent.prototype; |
| 42 child.prototype = new tmp(); | 46 child.prototype = new tmp(); |
| 43 child.prototype.constructor = child; | 47 child.prototype.constructor = child; |
| 44 } | 48 } |
| 45 } | 49 } |
| 46 | 50 |
| 47 function A(){} | 51 function A(){} |
| 48 function B(){} | 52 function B(){} |
| 49 inherits(B, A); | 53 inherits(B, A); |
| 50 makeA = function(){return new A;}; | 54 makeA = function(){return new A;}; |
| 51 makeB = function(){return new B;}; | 55 makeB = function(){return new B;}; |
| 52 """; | 56 """; |
| 53 | 57 |
| 54 testBasicA_dynamic() { | 58 testBasicA_dynamic() { |
| 55 setup(); // Fresh constructors. | 59 setup(); // Fresh constructors. |
| 56 | 60 |
| 57 var a = [makeA()][0]; | 61 var a = [makeA()][0]; |
| 58 | 62 |
| 59 a.X = 100; | 63 a.X = 100; |
| 60 Expect.equals(100, a._field); | 64 Expect.equals(100, a._field); |
| 61 Expect.equals(100, a.X); | 65 Expect.equals(100, a.X); |
| 62 Expect.equals(150, a.method(50)); | 66 Expect.equals(150, a.method(50)); |
| 63 } | 67 } |
| 64 | 68 |
| 65 testBasicA_typed() { | 69 testBasicA_typed() { |
| 66 setup(); // Fresh constructors. | 70 setup(); // Fresh constructors. |
| 67 | 71 |
| 68 A a = makeA(); | 72 A a = makeA(); |
| 69 | 73 |
| 70 a.X = 100; | 74 a.X = 100; |
| 71 Expect.equals(100, a._field); | 75 Expect.equals(100, a._field); |
| 72 Expect.equals(100, a.X); | 76 Expect.equals(100, a.X); |
| 73 Expect.equals(150, a.method(50)); | 77 Expect.equals(150, a.method(50)); |
| 74 } | 78 } |
| 75 | 79 |
| 76 testBasicB_dynamic() { | 80 testBasicB_dynamic() { |
| 77 setup(); // Fresh constructors. | 81 setup(); // Fresh constructors. |
| 78 | 82 |
| 79 var b = [makeB()][0]; | 83 var b = [makeB()][0]; |
| 80 | 84 |
| 81 b._field = 1; | 85 b._field = 1; |
| 82 b.X = 123; | 86 b.X = 123; |
| 83 Expect.equals(1, b._field); | 87 Expect.equals(1, b._field); |
| 84 Expect.equals(123, b._field2); | 88 Expect.equals(123, b._field2); |
| 85 Expect.equals(123, b.X); | 89 Expect.equals(123, b.X); |
| 86 Expect.equals(200, b.method(77)); | 90 Expect.equals(200, b.method(77)); |
| 87 } | 91 } |
| 88 | 92 |
| 89 testBasicB_typed() { | 93 testBasicB_typed() { |
| 90 setup(); // Fresh constructors. | 94 setup(); // Fresh constructors. |
| 91 | 95 |
| 92 B b = makeB(); | 96 B b = makeB(); |
| 93 | 97 |
| 94 b._field = 1; | 98 b._field = 1; |
| 95 b.X = 123; | 99 b.X = 123; |
| 96 Expect.equals(1, b._field); | 100 Expect.equals(1, b._field); |
| 97 Expect.equals(123, b._field2); | 101 Expect.equals(123, b._field2); |
| 98 Expect.equals(123, b.X); | 102 Expect.equals(123, b.X); |
| 99 Expect.equals(200, b.method(77)); | 103 Expect.equals(200, b.method(77)); |
| 100 } | 104 } |
| 101 | 105 |
| 102 testAB_dynamic() { | 106 testAB_dynamic() { |
| 103 setup(); // Fresh constructors. | 107 setup(); // Fresh constructors. |
| 104 | 108 |
| 105 var things = [makeA(), makeB()]; | 109 var things = [makeA(), makeB()]; |
| 106 var a = things[0]; | 110 var a = things[0]; |
| 107 var b = things[1]; | 111 var b = things[1]; |
| 108 | 112 |
| 109 a.X = 100; | 113 a.X = 100; |
| 110 Expect.equals(100, a._field); | 114 Expect.equals(100, a._field); |
| 111 Expect.equals(100, a.X); | 115 Expect.equals(100, a.X); |
| 112 Expect.equals(150, a.method(50)); | 116 Expect.equals(150, a.method(50)); |
| 113 | 117 |
| 114 b._field = 1; | 118 b._field = 1; |
| 115 b._field2 = 2; | 119 b._field2 = 2; |
| 116 b.X = 123; | 120 b.X = 123; |
| 117 Expect.equals(1, b._field); | 121 Expect.equals(1, b._field); |
| 118 Expect.equals(123, b._field2); | 122 Expect.equals(123, b._field2); |
| 119 Expect.equals(123, b.X); | 123 Expect.equals(123, b.X); |
| 120 Expect.equals(200, b.method(77)); | 124 Expect.equals(200, b.method(77)); |
| 121 } | 125 } |
| 122 | 126 |
| 123 testAB_typed() { | 127 testAB_typed() { |
| 124 setup(); // Fresh constructors. | 128 setup(); // Fresh constructors. |
| 125 | 129 |
| 126 A a = makeA(); | 130 A a = makeA(); |
| 127 B b = makeB(); | 131 B b = makeB(); |
| 128 | 132 |
| 129 a.X = 100; | 133 a.X = 100; |
| 130 Expect.equals(100, a._field); | 134 Expect.equals(100, a._field); |
| 131 Expect.equals(100, a.X); | 135 Expect.equals(100, a.X); |
| 132 Expect.equals(150, a.method(50)); | 136 Expect.equals(150, a.method(50)); |
| 133 | 137 |
| 134 b._field = 1; | 138 b._field = 1; |
| 135 b._field2 = 2; | 139 b._field2 = 2; |
| 136 b.X = 123; | 140 b.X = 123; |
| 137 Expect.equals(1, b._field); | 141 Expect.equals(1, b._field); |
| 138 Expect.equals(123, b._field2); | 142 Expect.equals(123, b._field2); |
| 139 Expect.equals(123, b.X); | 143 Expect.equals(123, b.X); |
| 140 Expect.equals(200, b.method(77)); | 144 Expect.equals(200, b.method(77)); |
| 141 } | 145 } |
| 142 | 146 |
| 143 main() { | 147 main() { |
| 144 testBasicA_dynamic(); | 148 testBasicA_dynamic(); |
| 145 testBasicA_typed(); | 149 testBasicA_typed(); |
| 146 testBasicB_dynamic(); | 150 testBasicB_dynamic(); |
| 147 testBasicB_typed(); | 151 testBasicB_typed(); |
| 148 testAB_dynamic(); | 152 testAB_dynamic(); |
| 149 testAB_typed(); | 153 testAB_typed(); |
| 150 } | 154 } |
| OLD | NEW |