Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: tests/compiler/dart2js/constant_expression_test.dart

Issue 2669703003: Refactor ConstantExpression/ConstantConstructor to use entities. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 constant_expression_test; 5 library constant_expression_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/expressions.dart'; 10 import 'package:compiler/src/constants/expressions.dart';
11 import 'package:compiler/src/compiler.dart'; 11 import 'package:compiler/src/compiler.dart';
12 import 'package:compiler/src/elements/elements.dart'; 12 import 'package:compiler/src/elements/elements.dart';
13 import 'memory_compiler.dart'; 13 import 'memory_compiler.dart';
14 import 'constant_expression_evaluate_test.dart' show MemoryEnvironment;
14 15
15 class TestData { 16 class TestData {
16 /// Declarations needed for the [constants]. 17 /// Declarations needed for the [constants].
17 final String declarations; 18 final String declarations;
18 19
19 /// Tested constants. 20 /// Tested constants.
20 final List constants; 21 final List constants;
21 22
22 const TestData(this.declarations, this.constants); 23 const TestData(this.declarations, this.constants);
23 } 24 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 const ConstantData('1 == 2', ConstantExpressionKind.BINARY), 57 const ConstantData('1 == 2', ConstantExpressionKind.BINARY),
57 const ConstantData('1 != 2', ConstantExpressionKind.BINARY), 58 const ConstantData('1 != 2', ConstantExpressionKind.BINARY),
58 const ConstantData('1 ?? 2', ConstantExpressionKind.BINARY), 59 const ConstantData('1 ?? 2', ConstantExpressionKind.BINARY),
59 const ConstantData('-(1)', ConstantExpressionKind.UNARY, text: '-1'), 60 const ConstantData('-(1)', ConstantExpressionKind.UNARY, text: '-1'),
60 const ConstantData('"foo".length', ConstantExpressionKind.STRING_LENGTH), 61 const ConstantData('"foo".length', ConstantExpressionKind.STRING_LENGTH),
61 const ConstantData('identical(0, 1)', ConstantExpressionKind.IDENTICAL), 62 const ConstantData('identical(0, 1)', ConstantExpressionKind.IDENTICAL),
62 const ConstantData('"a" "b"', ConstantExpressionKind.CONCATENATE, 63 const ConstantData('"a" "b"', ConstantExpressionKind.CONCATENATE,
63 text: '"ab"'), 64 text: '"ab"'),
64 const ConstantData('identical', ConstantExpressionKind.FUNCTION), 65 const ConstantData('identical', ConstantExpressionKind.FUNCTION),
65 const ConstantData('true ? 0 : 1', ConstantExpressionKind.CONDITIONAL), 66 const ConstantData('true ? 0 : 1', ConstantExpressionKind.CONDITIONAL),
66 const ConstantData('proxy', ConstantExpressionKind.VARIABLE), 67 const ConstantData('proxy', ConstantExpressionKind.FIELD),
67 const ConstantData('Object', ConstantExpressionKind.TYPE), 68 const ConstantData('Object', ConstantExpressionKind.TYPE),
68 const ConstantData('#name', ConstantExpressionKind.SYMBOL), 69 const ConstantData('#name', ConstantExpressionKind.SYMBOL),
69 const ConstantData('const [0, 1]', ConstantExpressionKind.LIST), 70 const ConstantData('const [0, 1]', ConstantExpressionKind.LIST),
70 const ConstantData('const <int>[0, 1]', ConstantExpressionKind.LIST), 71 const ConstantData('const <int>[0, 1]', ConstantExpressionKind.LIST),
71 const ConstantData('const {0: 1, 2: 3}', ConstantExpressionKind.MAP), 72 const ConstantData('const {0: 1, 2: 3}', ConstantExpressionKind.MAP),
72 const ConstantData( 73 const ConstantData(
73 'const <int, int>{0: 1, 2: 3}', ConstantExpressionKind.MAP), 74 'const <int, int>{0: 1, 2: 3}', ConstantExpressionKind.MAP),
74 const ConstantData('const bool.fromEnvironment("foo", defaultValue: false)', 75 const ConstantData('const bool.fromEnvironment("foo", defaultValue: false)',
75 ConstantExpressionKind.BOOL_FROM_ENVIRONMENT), 76 ConstantExpressionKind.BOOL_FROM_ENVIRONMENT),
76 const ConstantData('const int.fromEnvironment("foo", defaultValue: 42)', 77 const ConstantData('const int.fromEnvironment("foo", defaultValue: 42)',
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 data.constants.forEach((ConstantData constantData) { 202 data.constants.forEach((ConstantData constantData) {
202 String name = 'c${constants.length}'; 203 String name = 'c${constants.length}';
203 sb.write('const $name = ${constantData.code};\n'); 204 sb.write('const $name = ${constantData.code};\n');
204 constants[name] = constantData; 205 constants[name] = constantData;
205 }); 206 });
206 sb.write('main() {}\n'); 207 sb.write('main() {}\n');
207 String source = sb.toString(); 208 String source = sb.toString();
208 CompilationResult result = await runCompiler( 209 CompilationResult result = await runCompiler(
209 memorySourceFiles: {'main.dart': source}, options: ['--analyze-all']); 210 memorySourceFiles: {'main.dart': source}, options: ['--analyze-all']);
210 Compiler compiler = result.compiler; 211 Compiler compiler = result.compiler;
212 MemoryEnvironment environment = new MemoryEnvironment(compiler);
211 var library = compiler.mainApp; 213 var library = compiler.mainApp;
212 constants.forEach((String name, ConstantData data) { 214 constants.forEach((String name, ConstantData data) {
213 FieldElement field = library.localLookup(name); 215 FieldElement field = library.localLookup(name);
214 var constant = field.constant; 216 var constant = field.constant;
215 Expect.equals( 217 Expect.equals(
216 data.kind, 218 data.kind,
217 constant.kind, 219 constant.kind,
218 "Unexpected kind '${constant.kind}' for contant " 220 "Unexpected kind '${constant.kind}' for contant "
219 "`${constant.toDartText()}`, expected '${data.kind}'."); 221 "`${constant.toDartText()}`, expected '${data.kind}'.");
220 Expect.equals( 222 Expect.equals(
221 data.text, 223 data.text,
222 constant.toDartText(), 224 constant.toDartText(),
223 "Unexpected text '${constant.toDartText()}' for contant, " 225 "Unexpected text '${constant.toDartText()}' for contant, "
224 "expected '${data.text}'."); 226 "expected '${data.text}'.");
225 if (data.type != null) { 227 if (data.type != null) {
226 String instanceType = constant.computeInstanceType().toString(); 228 String instanceType =
229 constant.computeInstanceType(environment).toString();
227 Expect.equals( 230 Expect.equals(
228 data.type, 231 data.type,
229 instanceType, 232 instanceType,
230 "Unexpected type '$instanceType' for contant " 233 "Unexpected type '$instanceType' for contant "
231 "`${constant.toDartText()}`, expected '${data.type}'."); 234 "`${constant.toDartText()}`, expected '${data.type}'.");
232 } 235 }
233 if (data.fields != null) { 236 if (data.fields != null) {
234 Map instanceFields = constant.computeInstanceFields(); 237 Map instanceFields = constant.computeInstanceFields(environment);
235 Expect.equals( 238 Expect.equals(
236 data.fields.length, 239 data.fields.length,
237 instanceFields.length, 240 instanceFields.length,
238 "Unexpected field count ${instanceFields.length} for contant " 241 "Unexpected field count ${instanceFields.length} for contant "
239 "`${constant.toDartText()}`, expected '${data.fields.length}'."); 242 "`${constant.toDartText()}`, expected '${data.fields.length}'.");
240 instanceFields.forEach((field, expression) { 243 instanceFields.forEach((field, expression) {
241 String name = '$field'; 244 String name = '$field';
242 String expression = instanceFields[field].toDartText(); 245 String expression = instanceFields[field].toDartText();
243 String expected = data.fields[name]; 246 String expected = data.fields[name];
244 Expect.equals( 247 Expect.equals(
245 expected, 248 expected,
246 expression, 249 expression,
247 "Unexpected field expression ${expression} for field '$name' in " 250 "Unexpected field expression ${expression} for field '$name' in "
248 "contant `${constant.toDartText()}`, expected '${expected}'."); 251 "contant `${constant.toDartText()}`, expected '${expected}'.");
249 }); 252 });
250 } 253 }
251 }); 254 });
252 } 255 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698