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 Creates, setNativeSubclassDispatchRecord; | 7 import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord; |
8 import 'dart:_interceptors' show | 8 import 'dart:_interceptors' show |
9 findInterceptorForType, findConstructorForWebComponentType; | 9 findInterceptorForType, findConstructorForNativeSubclassType; |
10 | 10 |
11 // Test that subclasses of native classes can be initialized by calling the | 11 // Test that subclasses of native classes can be initialized by calling the |
12 // 'upgrade' constructor. | 12 // 'upgrade' constructor. |
13 | 13 |
14 var trace = []; | 14 var trace = []; |
15 | 15 |
16 var log; | 16 var log; |
17 | 17 |
18 class A native "A" { | 18 class A native "A" { |
19 final a1 = log(101); // Only initialized IF named constructor called. | 19 final a1 = log(101); // Only initialized IF named constructor called. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 function B() { this.a2 = 102; } | 62 function B() { this.a2 = 102; } |
63 | 63 |
64 makeB = function(){return new B;}; | 64 makeB = function(){return new B;}; |
65 | 65 |
66 getBPrototype = function(){return B.prototype;}; | 66 getBPrototype = function(){return B.prototype;}; |
67 """; | 67 """; |
68 | 68 |
69 | 69 |
70 test_one() { | 70 test_one() { |
71 trace = []; | 71 trace = []; |
72 var constructor = findConstructorForWebComponentType(B, 'one'); | 72 var constructor = findConstructorForNativeSubclassType(B, 'one'); |
73 Expect.isNotNull(constructor); | 73 Expect.isNotNull(constructor); |
74 Expect.isNull(findConstructorForWebComponentType(B, 'Missing')); | 74 Expect.isNull(findConstructorForNativeSubclassType(B, 'Missing')); |
75 | 75 |
76 var b = makeB(); | 76 var b = makeB(); |
77 Expect.isTrue(b is B); | 77 Expect.isTrue(b is B); |
78 // Call constructor to initialize native object. | 78 // Call constructor to initialize native object. |
79 var b2 = JS('', '#(#)', constructor, b); | 79 var b2 = JS('', '#(#)', constructor, b); |
80 Expect.identical(b, b2); | 80 Expect.identical(b, b2); |
81 Expect.isTrue(b is B); | 81 Expect.isTrue(b is B); |
82 | 82 |
83 Expect.equals(101, b.a1); | 83 Expect.equals(101, b.a1); |
84 Expect.equals(102, b.a2); | 84 Expect.equals(102, b.a2); |
85 Expect.equals(null, b.a3); | 85 Expect.equals(null, b.a3); |
86 Expect.equals(104, b.a4); | 86 Expect.equals(104, b.a4); |
87 Expect.equals(null, b.b1); | 87 Expect.equals(null, b.b1); |
88 Expect.equals(202, b.b2); | 88 Expect.equals(202, b.b2); |
89 Expect.equals(null, b.b3); | 89 Expect.equals(null, b.b3); |
90 | 90 |
91 Expect.equals('[202, 101, 104]', '$trace'); | 91 Expect.equals('[202, 101, 104]', '$trace'); |
92 } | 92 } |
93 | 93 |
94 test_two() { | 94 test_two() { |
95 trace = []; | 95 trace = []; |
96 var constructor = findConstructorForWebComponentType(B, 'two'); | 96 var constructor = findConstructorForNativeSubclassType(B, 'two'); |
97 Expect.isNotNull(constructor); | 97 Expect.isNotNull(constructor); |
98 | 98 |
99 var b = makeB(); | 99 var b = makeB(); |
100 Expect.isTrue(b is B); | 100 Expect.isTrue(b is B); |
101 // Call constructor to initialize native object. | 101 // Call constructor to initialize native object. |
102 JS('', '#(#)', constructor, b); | 102 JS('', '#(#)', constructor, b); |
103 Expect.isTrue(b is B); | 103 Expect.isTrue(b is B); |
104 | 104 |
105 Expect.equals(101, b.a1); | 105 Expect.equals(101, b.a1); |
106 Expect.equals(102, b.a2); | 106 Expect.equals(102, b.a2); |
107 Expect.equals(103, b.a3); | 107 Expect.equals(103, b.a3); |
108 Expect.equals(124, b.a4); | 108 Expect.equals(124, b.a4); |
109 Expect.equals(201, b.b1); | 109 Expect.equals(201, b.b1); |
110 Expect.equals(202, b.b2); | 110 Expect.equals(202, b.b2); |
111 Expect.equals(203, b.b3); | 111 Expect.equals(203, b.b3); |
112 | 112 |
113 Expect.equals( | 113 Expect.equals( |
114 '[202, 201, 101, 104, 103, 203, body(A.two), 124, body(B.two)]', | 114 '[202, 201, 101, 104, 103, 203, body(A.two), 124, body(B.two)]', |
115 '$trace'); | 115 '$trace'); |
116 } | 116 } |
117 | 117 |
118 test_three() { | 118 test_three() { |
119 trace = []; | 119 trace = []; |
120 var constructor = findConstructorForWebComponentType(B, 'three'); | 120 var constructor = findConstructorForNativeSubclassType(B, 'three'); |
121 Expect.isNotNull(constructor); | 121 Expect.isNotNull(constructor); |
122 | 122 |
123 var b = makeB(); | 123 var b = makeB(); |
124 Expect.isTrue(b is B); | 124 Expect.isTrue(b is B); |
125 // Call constructor to initialize native object. | 125 // Call constructor to initialize native object. |
126 // | 126 // |
127 // Since the constructor takes some optional arguments that are not passed, it | 127 // Since the constructor takes some optional arguments that are not passed, it |
128 // is as though the web components runtime explicitly passed `null` for all | 128 // is as though the web components runtime explicitly passed `null` for all |
129 // parameters. | 129 // parameters. |
130 // | 130 // |
131 // TODO(sra): The constructor returned by findConstructorForWebComponentType | 131 // TODO(sra): The constructor returned by findConstructorForNativeSubclassType |
132 // should be a function that fills in the default values. | 132 // should be a function that fills in the default values. |
133 JS('', '#(#)', constructor, b); | 133 JS('', '#(#)', constructor, b); |
134 Expect.isTrue(b is B); | 134 Expect.isTrue(b is B); |
135 | 135 |
136 Expect.equals(101, b.a1); | 136 Expect.equals(101, b.a1); |
137 Expect.equals(102, b.a2); | 137 Expect.equals(102, b.a2); |
138 Expect.equals(null, b.a3); | 138 Expect.equals(null, b.a3); |
139 Expect.equals('(null, 205)', b.a4); | 139 Expect.equals('(null, 205)', b.a4); |
140 Expect.equals(null, b.b1); | 140 Expect.equals(null, b.b1); |
141 Expect.equals(202, b.b2); | 141 Expect.equals(202, b.b2); |
(...skipping 25 matching lines...) Expand all Loading... |
167 return message; | 167 return message; |
168 }; | 168 }; |
169 | 169 |
170 setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B)); | 170 setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B)); |
171 | 171 |
172 test_one(); | 172 test_one(); |
173 test_two(); | 173 test_two(); |
174 test_three(); | 174 test_three(); |
175 test_new(); | 175 test_new(); |
176 } | 176 } |
OLD | NEW |