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

Unified Diff: tests/compiler/dart2js/resolver_test.dart

Issue 1170673002: Begin to compute constant expressions in resolution. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix BinaryConstantExpression.getKnownType Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/compiler/dart2js/mock_compiler.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/resolver_test.dart
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index dd41c577fc8621d24c6810bfe916ef1477bb6180..f7981843e5baeb07ab86db21398c77daf026522d 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -2,18 +2,19 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import "package:expect/expect.dart";
import 'dart:async';
-import "package:async_helper/async_helper.dart";
import 'dart:collection';
-import "package:compiler/src/resolution/resolution.dart";
-import "compiler_helper.dart";
-import "parser_helper.dart";
-
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'package:compiler/src/constants/expressions.dart';
import 'package:compiler/src/dart_types.dart';
import 'package:compiler/src/elements/modelx.dart';
+import 'package:compiler/src/resolution/resolution.dart';
+
+import 'compiler_helper.dart';
import 'link_helper.dart';
+import 'parser_helper.dart';
Node buildIdentifier(String name) => new Identifier(scan(name));
@@ -40,17 +41,15 @@ Future testLocals(List variables) {
return MockCompiler.create((MockCompiler compiler) {
ResolverVisitor visitor = compiler.resolverVisitor();
ResolutionResult result = visitor.visit(createLocals(variables));
- Element element = result != null ? result.element : null;
// A VariableDefinitions does not have an element.
- Expect.equals(null, element);
+ Expect.equals(const NoneResult(), result);
Expect.equals(variables.length, map(visitor).length);
for (final variable in variables) {
final name = variable[0];
Identifier id = buildIdentifier(name);
ResolutionResult result = visitor.visit(id);
- final VariableElement variableElement =
- result != null ? result.element : null;
+ final VariableElement variableElement = result.element;
MethodScope scope = visitor.scope;
Expect.equals(variableElement, scope.elements[name]);
}
@@ -91,6 +90,7 @@ main() {
testCantAssignMethods,
testCantAssignFinalAndConsts,
testAwaitHint,
+ testConstantExpressions,
], (f) => f()));
}
@@ -318,8 +318,8 @@ Future testLocalsTwo() {
return MockCompiler.create((MockCompiler compiler) {
ResolverVisitor visitor = compiler.resolverVisitor();
Node tree = parseStatement("if (true) { var a = 1; var b = 2; }");
- ResolutionResult element = visitor.visit(tree);
- Expect.equals(null, element);
+ ResolutionResult result = visitor.visit(tree);
+ Expect.equals(const NoneResult(), result);
MethodScope scope = visitor.scope;
Expect.equals(0, scope.elements.length);
Expect.equals(2, map(visitor).length);
@@ -333,8 +333,8 @@ Future testLocalsThree() {
return MockCompiler.create((MockCompiler compiler) {
ResolverVisitor visitor = compiler.resolverVisitor();
Node tree = parseStatement("{ var a = 1; if (true) { a; } }");
- ResolutionResult element = visitor.visit(tree);
- Expect.equals(null, element);
+ ResolutionResult result = visitor.visit(tree);
+ Expect.equals(const NoneResult(), result);
MethodScope scope = visitor.scope;
Expect.equals(0, scope.elements.length);
Expect.equals(3, map(visitor).length);
@@ -347,8 +347,8 @@ Future testLocalsFour() {
return MockCompiler.create((MockCompiler compiler) {
ResolverVisitor visitor = compiler.resolverVisitor();
Node tree = parseStatement("{ var a = 1; if (true) { var a = 1; } }");
- ResolutionResult element = visitor.visit(tree);
- Expect.equals(null, element);
+ ResolutionResult result = visitor.visit(tree);
+ Expect.equals(const NoneResult(), result);
MethodScope scope = visitor.scope;
Expect.equals(0, scope.elements.length);
Expect.equals(2, map(visitor).length);
@@ -362,8 +362,8 @@ Future testLocalsFive() {
ResolverVisitor visitor = compiler.resolverVisitor();
If tree =
parseStatement("if (true) { var a = 1; a; } else { var a = 2; a;}");
- ResolutionResult element = visitor.visit(tree);
- Expect.equals(null, element);
+ ResolutionResult result = visitor.visit(tree);
+ Expect.equals(const NoneResult(), result);
MethodScope scope = visitor.scope;
Expect.equals(0, scope.elements.length);
Expect.equals(6, map(visitor).length);
@@ -999,6 +999,63 @@ Future testInitializers() {
], (f) => f());
}
+Future testConstantExpressions() {
+ const Map<String, List<String>> testedConstants = const {
+ 'null': const ['null'],
+ 'true': const ['true'],
+ '0': const ['0'],
+ '0.0': const ['0.0'],
+ '"foo"': const ['"foo"'],
+ '#a': const ['#a'],
+ '0 + 1': const ['0', '1', '0 + 1'],
+ '0 * 1': const ['0', '1', '0 * 1'],
+ '0 * 1 + 2': const ['0', '1', '0 * 1', '2', '0 * 1 + 2'],
+ '0 + 1 * 2': const ['0', '1', '2', '1 * 2', '0 + 1 * 2'],
+ '-(1)': const ['1', '-1'],
+ '-(1 * 4)': const ['1', '4', '1 * 4', '-(1 * 4)'],
+ 'true ? 0 : 1': const ['true', '0', '1', 'true ? 0 : 1'],
+ '"a" "b"': const ['"a"', '"b"', '"ab"'],
+ '"a" "b" "c"': const ['"a"', '"b"', '"c"', '"bc"', r'"a${"bc"}"'],
+ r'"a${0}b"': const ['"a"', '0', '"b"', r'"a${0}b"'],
+ r'"a${0}b${1}"': const ['"a"', '0', '"b"', '1', '""', r'"a${0}b${1}"'],
+ 'true || false': const ['true', 'false', 'true || false'],
+ 'true && false': const ['true', 'false', 'true && false'],
+ '!true': const ['true', '!true'],
+ 'const []': const ['const []'],
+ 'const <int>[]': const ['const <int>[]'],
+ 'const [0, 1, 2]': const ['0', '1', '2', 'const [0, 1, 2]'],
+ 'const <int>[0, 1, 2]': const ['0', '1', '2', 'const <int>[0, 1, 2]'],
+ 'const {}': const ['const {}'],
+ 'const <String, int>{}': const ['const <String, int>{}'],
+ 'const {"a": 0, "b": 1, "c": 2}':
+ const ['"a"', '0', '"b"', '1', '"c"', '2',
+ 'const {"a": 0, "b": 1, "c": 2}'],
+ 'const <String, int>{"a": 0, "b": 1, "c": 2}':
+ const ['"a"', '0', '"b"', '1', '"c"', '2',
+ 'const <String, int>{"a": 0, "b": 1, "c": 2}'],
+ };
+ return Future.forEach(testedConstants.keys, (String constant) {
+ return MockCompiler.create((MockCompiler compiler) {
+ CollectingTreeElements elements =
+ compiler.resolveStatement("main() => $constant;");
+ List<String> expectedConstants = testedConstants[constant];
+ Expect.equals(0, compiler.warnings.length);
+ Expect.equals(0, compiler.errors.length);
+ List<ConstantExpression> constants = elements.constants;
+ String constantsText =
+ '[${constants.map((c) => c.getText()).join(', ')}]';
+ Expect.equals(expectedConstants.length, constants.length,
+ "Expected ${expectedConstants.length} constants for `${constant}` "
+ "found $constantsText.");
+ for (int index = 0; index < expectedConstants.length; index++) {
+ Expect.equals(expectedConstants[index], constants[index].getText(),
+ "Expected ${expectedConstants} for `$constant`, "
+ "found $constantsText.");
+ }
+ });
+ });
+}
+
map(ResolverVisitor visitor) {
CollectingTreeElements elements = visitor.registry.mapping;
return elements.map;
« no previous file with comments | « tests/compiler/dart2js/mock_compiler.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698