OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library dart2js.constants.expressions.evaluate_test; | 5 library dart2js.constants.expressions.evaluate_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'package:async_helper/async_helper.dart'; | 8 import 'package:async_helper/async_helper.dart'; |
9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
10 import 'package:compiler/src/constants/constructors.dart'; | 10 import 'package:compiler/src/constants/constructors.dart'; |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 'const int.fromEnvironment("foo", defaultValue: 42)', const { | 121 'const int.fromEnvironment("foo", defaultValue: 42)', const { |
122 const {}: 'IntConstant(42)', | 122 const {}: 'IntConstant(42)', |
123 const {'foo': '87'}: 'IntConstant(87)' | 123 const {'foo': '87'}: 'IntConstant(87)' |
124 }), | 124 }), |
125 const ConstantData( | 125 const ConstantData( |
126 'const String.fromEnvironment("foo", defaultValue: "bar")', const { | 126 'const String.fromEnvironment("foo", defaultValue: "bar")', const { |
127 const {}: 'StringConstant("bar")', | 127 const {}: 'StringConstant("bar")', |
128 const {'foo': 'foo'}: 'StringConstant("foo")' | 128 const {'foo': 'foo'}: 'StringConstant("foo")' |
129 }), | 129 }), |
130 ]), | 130 ]), |
131 const TestData( | 131 const TestData(''' |
132 ''' | |
133 const a = const bool.fromEnvironment("foo", defaultValue: true); | 132 const a = const bool.fromEnvironment("foo", defaultValue: true); |
134 const b = const int.fromEnvironment("bar", defaultValue: 42); | 133 const b = const int.fromEnvironment("bar", defaultValue: 42); |
135 | 134 |
136 class A { | 135 class A { |
137 const A(); | 136 const A(); |
138 } | 137 } |
139 class B { | 138 class B { |
140 final field1; | 139 final field1; |
141 const B(this.field1); | 140 const B(this.field1); |
142 } | 141 } |
143 class C extends B { | 142 class C extends B { |
144 final field2; | 143 final field2; |
145 const C({field1: 42, this.field2: false}) : super(field1); | 144 const C({field1: 42, this.field2: false}) : super(field1); |
146 const C.named([field = false]) : this(field1: field, field2: field); | 145 const C.named([field = false]) : this(field1: field, field2: field); |
147 } | 146 } |
148 class D extends C { | 147 class D extends C { |
149 final field3 = 99; | 148 final field3 = 99; |
150 const D(a, b) : super(field2: a, field1: b); | 149 const D(a, b) : super(field2: a, field1: b); |
151 } | 150 } |
152 ''', | 151 ''', const [ |
153 const [ | 152 const ConstantData( |
154 const ConstantData('const Object()', | 153 'const Object()', const {const {}: 'ConstructedConstant(Object())'}), |
155 const {const {}: 'ConstructedConstant(Object())'}), | 154 const ConstantData( |
156 const ConstantData( | 155 'const A()', const {const {}: 'ConstructedConstant(A())'}), |
157 'const A()', const {const {}: 'ConstructedConstant(A())'}), | 156 const ConstantData('const B(0)', |
158 const ConstantData('const B(0)', | 157 const {const {}: 'ConstructedConstant(B(field1=IntConstant(0)))'}), |
159 const {const {}: 'ConstructedConstant(B(field1=IntConstant(0)))'}), | 158 const ConstantData('const B(const A())', const { |
160 const ConstantData('const B(const A())', const { | 159 const {}: 'ConstructedConstant(B(field1=ConstructedConstant(A())))' |
161 const {}: 'ConstructedConstant(B(field1=ConstructedConstant(A())))' | 160 }), |
162 }), | 161 const ConstantData('const C()', const { |
163 const ConstantData('const C()', const { | 162 const {}: 'ConstructedConstant(C(field1=IntConstant(42),' |
164 const {}: 'ConstructedConstant(C(field1=IntConstant(42),' | 163 'field2=BoolConstant(false)))' |
165 'field2=BoolConstant(false)))' | 164 }), |
166 }), | 165 const ConstantData('const C(field1: 87)', const { |
167 const ConstantData('const C(field1: 87)', const { | 166 const {}: 'ConstructedConstant(C(field1=IntConstant(87),' |
168 const {}: 'ConstructedConstant(C(field1=IntConstant(87),' | 167 'field2=BoolConstant(false)))' |
169 'field2=BoolConstant(false)))' | 168 }), |
170 }), | 169 const ConstantData('const C(field2: true)', const { |
171 const ConstantData('const C(field2: true)', const { | 170 const {}: 'ConstructedConstant(C(field1=IntConstant(42),' |
172 const {}: 'ConstructedConstant(C(field1=IntConstant(42),' | 171 'field2=BoolConstant(true)))' |
173 'field2=BoolConstant(true)))' | 172 }), |
174 }), | 173 const ConstantData('const C.named()', const { |
175 const ConstantData('const C.named()', const { | 174 const {}: 'ConstructedConstant(C(field1=BoolConstant(false),' |
176 const {}: 'ConstructedConstant(C(field1=BoolConstant(false),' | 175 'field2=BoolConstant(false)))' |
177 'field2=BoolConstant(false)))' | 176 }), |
178 }), | 177 const ConstantData('const C.named(87)', const { |
179 const ConstantData('const C.named(87)', const { | 178 const {}: 'ConstructedConstant(C(field1=IntConstant(87),' |
180 const {}: 'ConstructedConstant(C(field1=IntConstant(87),' | 179 'field2=IntConstant(87)))' |
181 'field2=IntConstant(87)))' | 180 }), |
182 }), | 181 const ConstantData('const C(field1: a, field2: b)', const { |
183 const ConstantData('const C(field1: a, field2: b)', const { | 182 const {}: 'ConstructedConstant(C(field1=BoolConstant(true),' |
184 const {}: 'ConstructedConstant(C(field1=BoolConstant(true),' | 183 'field2=IntConstant(42)))', |
185 'field2=IntConstant(42)))', | 184 const {'foo': 'false', 'bar': '87'}: |
186 const {'foo': 'false', 'bar': '87'}: | 185 'ConstructedConstant(C(field1=BoolConstant(false),' |
187 'ConstructedConstant(C(field1=BoolConstant(false),' | 186 'field2=IntConstant(87)))', |
188 'field2=IntConstant(87)))', | 187 }), |
189 }), | 188 const ConstantData('const D(42, 87)', const { |
190 const ConstantData('const D(42, 87)', const { | 189 const {}: 'ConstructedConstant(D(field1=IntConstant(87),' |
191 const {}: 'ConstructedConstant(D(field1=IntConstant(87),' | 190 'field2=IntConstant(42),' |
192 'field2=IntConstant(42),' | 191 'field3=IntConstant(99)))' |
193 'field3=IntConstant(99)))' | 192 }), |
194 }), | 193 ]), |
195 ]), | 194 const TestData(''' |
196 const TestData( | |
197 ''' | |
198 class A<T> implements B { | 195 class A<T> implements B { |
199 final field1; | 196 final field1; |
200 const A({this.field1:42}); | 197 const A({this.field1:42}); |
201 } | 198 } |
202 class B<S> implements C { | 199 class B<S> implements C { |
203 const factory B({field1}) = A<B<S>>; | 200 const factory B({field1}) = A<B<S>>; |
204 const factory B.named() = A<S>; | 201 const factory B.named() = A<S>; |
205 } | 202 } |
206 class C<U> { | 203 class C<U> { |
207 const factory C({field1}) = A<B<double>>; | 204 const factory C({field1}) = A<B<double>>; |
208 } | 205 } |
209 ''', | 206 ''', const [ |
210 const [ | 207 const ConstantData('const A()', const { |
211 const ConstantData('const A()', const { | 208 const {}: 'ConstructedConstant(A<dynamic>(field1=IntConstant(42)))' |
212 const {}: 'ConstructedConstant(A<dynamic>(field1=IntConstant(42)))' | 209 }), |
213 }), | 210 const ConstantData('const A<int>(field1: 87)', const { |
214 const ConstantData('const A<int>(field1: 87)', const { | 211 const {}: 'ConstructedConstant(A<int>(field1=IntConstant(87)))' |
215 const {}: 'ConstructedConstant(A<int>(field1=IntConstant(87)))' | 212 }), |
216 }), | 213 const ConstantData('const B()', const { |
217 const ConstantData('const B()', const { | 214 const {}: 'ConstructedConstant(A<B<dynamic>>(field1=IntConstant(42)))' |
218 const {}: 'ConstructedConstant(A<B<dynamic>>(field1=IntConstant(42)))' | 215 }), |
219 }), | 216 const ConstantData('const B<int>()', const { |
220 const ConstantData('const B<int>()', const { | 217 const {}: 'ConstructedConstant(A<B<int>>(field1=IntConstant(42)))' |
221 const {}: 'ConstructedConstant(A<B<int>>(field1=IntConstant(42)))' | 218 }), |
222 }), | 219 const ConstantData('const B<int>(field1: 87)', const { |
223 const ConstantData('const B<int>(field1: 87)', const { | 220 const {}: 'ConstructedConstant(A<B<int>>(field1=IntConstant(87)))' |
224 const {}: 'ConstructedConstant(A<B<int>>(field1=IntConstant(87)))' | 221 }), |
225 }), | 222 const ConstantData('const C<int>(field1: 87)', const { |
226 const ConstantData('const C<int>(field1: 87)', const { | 223 const {}: 'ConstructedConstant(A<B<double>>(field1=IntConstant(87)))' |
227 const {}: 'ConstructedConstant(A<B<double>>(field1=IntConstant(87)))' | 224 }), |
228 }), | 225 const ConstantData('const B<int>.named()', const { |
229 const ConstantData('const B<int>.named()', const { | 226 const {}: 'ConstructedConstant(A<int>(field1=IntConstant(42)))' |
230 const {}: 'ConstructedConstant(A<int>(field1=IntConstant(42)))' | 227 }), |
231 }), | 228 ]), |
232 ]), | 229 const TestData(''' |
233 const TestData( | |
234 ''' | |
235 const c = const int.fromEnvironment("foo", defaultValue: 5); | 230 const c = const int.fromEnvironment("foo", defaultValue: 5); |
236 const d = const int.fromEnvironment("bar", defaultValue: 10); | 231 const d = const int.fromEnvironment("bar", defaultValue: 10); |
237 | 232 |
238 class A { | 233 class A { |
239 final field; | 234 final field; |
240 const A(a, b) : field = a + b; | 235 const A(a, b) : field = a + b; |
241 } | 236 } |
242 | 237 |
243 class B extends A { | 238 class B extends A { |
244 const B(a) : super(a, a * 2); | 239 const B(a) : super(a, a * 2); |
245 } | 240 } |
246 ''', | 241 ''', const [ |
247 const [ | 242 const ConstantData('const A(c, d)', const { |
248 const ConstantData('const A(c, d)', const { | 243 const {}: 'ConstructedConstant(A(field=IntConstant(15)))', |
249 const {}: 'ConstructedConstant(A(field=IntConstant(15)))', | 244 const {'foo': '7', 'bar': '11'}: |
250 const {'foo': '7', 'bar': '11'}: | 245 'ConstructedConstant(A(field=IntConstant(18)))', |
251 'ConstructedConstant(A(field=IntConstant(18)))', | 246 }), |
252 }), | 247 const ConstantData('const B(d)', const { |
253 const ConstantData('const B(d)', const { | 248 const {}: 'ConstructedConstant(B(field=IntConstant(30)))', |
254 const {}: 'ConstructedConstant(B(field=IntConstant(30)))', | 249 const {'bar': '42'}: 'ConstructedConstant(B(field=IntConstant(126)))', |
255 const {'bar': '42'}: 'ConstructedConstant(B(field=IntConstant(126)))', | 250 }), |
256 }), | 251 ]), |
257 ]), | |
258 ]; | 252 ]; |
259 | 253 |
260 main() { | 254 main() { |
261 asyncTest(() => Future.forEach(DATA, testData)); | 255 asyncTest(() => Future.forEach(DATA, testData)); |
262 } | 256 } |
263 | 257 |
264 Future testData(TestData data) async { | 258 Future testData(TestData data) async { |
265 StringBuffer sb = new StringBuffer(); | 259 StringBuffer sb = new StringBuffer(); |
266 sb.write('${data.declarations}\n'); | 260 sb.write('${data.declarations}\n'); |
267 Map constants = {}; | 261 Map constants = {}; |
(...skipping 17 matching lines...) Expand all Loading... |
285 constant.evaluate(environment, DART_CONSTANT_SYSTEM); | 279 constant.evaluate(environment, DART_CONSTANT_SYSTEM); |
286 String valueText = value.toStructuredText(); | 280 String valueText = value.toStructuredText(); |
287 Expect.equals( | 281 Expect.equals( |
288 expectedText, | 282 expectedText, |
289 valueText, | 283 valueText, |
290 "Unexpected value '${valueText}' for constant " | 284 "Unexpected value '${valueText}' for constant " |
291 "`${constant.toDartText()}`, expected '${expectedText}'."); | 285 "`${constant.toDartText()}`, expected '${expectedText}'."); |
292 }); | 286 }); |
293 }); | 287 }); |
294 } | 288 } |
OLD | NEW |