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

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

Issue 1559233002: WIP: Compute constant expressions in resolution. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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 | « pkg/compiler/lib/src/use_unused_api.dart ('k') | tests/compiler/dart2js/serialization_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/constant_expression_evaluate_test.dart
diff --git a/tests/compiler/dart2js/constant_expression_evaluate_test.dart b/tests/compiler/dart2js/constant_expression_evaluate_test.dart
index 5fa34cc12c5088073032d3de26dc3378cf322798..fe65bf5ac3f721fb848007f16a6bb89defc0c770 100644
--- a/tests/compiler/dart2js/constant_expression_evaluate_test.dart
+++ b/tests/compiler/dart2js/constant_expression_evaluate_test.dart
@@ -11,8 +11,12 @@ import 'package:compiler/src/constants/evaluation.dart';
import 'package:compiler/src/constants/expressions.dart';
import 'package:compiler/src/constants/values.dart';
import 'package:compiler/src/constant_system_dart.dart';
+import 'package:compiler/src/core_types.dart';
import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/diagnostics/messages.dart';
+import 'package:compiler/src/diagnostics/spannable.dart';
import 'package:compiler/src/elements/elements.dart';
+import 'package:compiler/src/elements/modelx.dart';
import 'memory_compiler.dart';
class TestData {
@@ -24,71 +28,135 @@ class TestData {
const TestData(this.declarations, this.constants);
}
+class ConstantResult {
+ final String value;
+ final errors;
+
+ const ConstantResult(this.value, [this.errors]);
+}
+
class ConstantData {
/// Source code for the constant expression.
final String code;
- /// Map from environment to expected constant value as structured text.
- final Map<Map<String, String>, String> expectedValues;
+
+ /// Constant value as structured text for the empty environment or a map from
+ /// environment to either the expected constant value as structured text or
+ /// a [ConstantResult].
+ final expectedResults;
+
+ /// A [MessageKind] or a list of [MessageKind]s containing the error messages
+ /// expected as the result of evaluating the constant under the empty
+ /// environment.
+ final expectedErrors;
const ConstantData(this.code,
- this.expectedValues);
+ this.expectedResults,
+ [this.expectedErrors]);
+}
+
+class EvaluationError {
+ final MessageKind kind;
+ final Map arguments;
+
+ EvaluationError(this.kind, this.arguments);
}
class MemoryEnvironment implements Environment {
final Compiler compiler;
+ final Spannable spannable;
final Map<String, String> env;
+ final List<EvaluationError> errors = <EvaluationError>[];
MemoryEnvironment(this.compiler,
+ this.spannable,
[this.env = const <String, String>{}]);
@override
String readFromEnvironment(String name) => env[name];
+
+ @override
+ CoreTypes get coreTypes => compiler.coreTypes;
+
+ @override
+ void reportError(ConstantExpression expression,
+ MessageKind kind,
+ Map arguments) {
+ errors.add(new EvaluationError(kind, arguments));
+ compiler.reportError(spannable, kind, arguments);
+ }
+
+ @override
+ ConstantValue evaluateConstructor(
+ ConstructorElement constructor,
+ ConstantValue evaluate()) {
+ return evaluate();
+ }
+
+ @override
+ ConstantValue evaluateVariable(
+ VariableElement variable,
+ ConstantValue evaluate()) {
+ return evaluate();
+ }
}
const List<TestData> DATA = const [
const TestData('', const [
- const ConstantData('null', const { const {} : 'NullConstant' }),
- const ConstantData('false', const { const {} : 'BoolConstant(false)' }),
- const ConstantData('true', const { const {} : 'BoolConstant(true)' }),
- const ConstantData('0', const { const {} : 'IntConstant(0)' }),
- const ConstantData('0.0', const { const {} : 'DoubleConstant(0.0)' }),
- const ConstantData('"foo"', const { const {} : 'StringConstant("foo")' }),
- const ConstantData('1 + 2', const { const {} : 'IntConstant(3)' }),
- const ConstantData('-(1)', const { const {} : 'IntConstant(-1)' }),
- const ConstantData('"foo".length', const { const {} : 'IntConstant(3)' }),
- const ConstantData('identical(0, 1)',
- const { const {} : 'BoolConstant(false)' }),
- const ConstantData('"a" "b"', const { const {} : 'StringConstant("ab")' }),
- const ConstantData('identical',
- const { const {} : 'FunctionConstant(identical)' }),
- const ConstantData('true ? 0 : 1', const { const {} : 'IntConstant(0)' }),
- const ConstantData('proxy',
- const { const {} : 'ConstructedConstant(_Proxy())' }),
- const ConstantData('Object', const { const {} : 'TypeConstant(Object)' }),
+ const ConstantData('null', 'NullConstant'),
+ const ConstantData('false', 'BoolConstant(false)'),
+ const ConstantData('true', 'BoolConstant(true)'),
+ const ConstantData('0', 'IntConstant(0)'),
+ const ConstantData('0.0', 'DoubleConstant(0.0)'),
+ const ConstantData('"foo"', 'StringConstant("foo")'),
+ const ConstantData('1 + 2', 'IntConstant(3)'),
+ const ConstantData('-(1)', 'IntConstant(-1)'),
+ const ConstantData('"foo".length', 'IntConstant(3)'),
+ const ConstantData('identical(0, 1)', 'BoolConstant(false)'),
+ const ConstantData('"a" "b"', 'StringConstant("ab")'),
+ const ConstantData('identical', 'FunctionConstant(identical)'),
+ const ConstantData('true ? 0 : 1', 'IntConstant(0)'),
+ const ConstantData('true || false', 'BoolConstant(true)'),
+ const ConstantData('true && false', 'BoolConstant(false)'),
+ const ConstantData('proxy', 'ConstructedConstant(_Proxy())'),
+ //const ConstantData('Object', const { const {} : 'TypeConstant(Object)' }),
const ConstantData('const [0, 1]',
- const { const {} : 'ListConstant([IntConstant(0), IntConstant(1)])' }),
- const ConstantData('const <int>[0, 1]', const {
- const {} : 'ListConstant(<int>[IntConstant(0), IntConstant(1)])' }),
+ 'ListConstant([IntConstant(0), IntConstant(1)])'),
+ const ConstantData('const <int>[0, 1]',
+ 'ListConstant(<int>[IntConstant(0), IntConstant(1)])'),
const ConstantData('const {0: 1, 2: 3}',
- const { const {} :
- 'MapConstant({IntConstant(0): IntConstant(1), '
- 'IntConstant(2): IntConstant(3)})' }),
+ 'MapConstant({IntConstant(0): IntConstant(1), '
+ 'IntConstant(2): IntConstant(3)})'),
const ConstantData('const <int, int>{0: 1, 2: 3}',
- const { const {} :
- 'MapConstant(<int, int>{IntConstant(0): IntConstant(1), '
- 'IntConstant(2): IntConstant(3)})' }),
+ 'MapConstant(<int, int>{IntConstant(0): IntConstant(1), '
+ 'IntConstant(2): IntConstant(3)})'),
+ const ConstantData(
+ 'const bool.fromEnvironment("foo")',
+ const { const {} : 'BoolConstant(false)',
+ const {'foo': 'true'} : 'BoolConstant(true)'}),
const ConstantData(
'const bool.fromEnvironment("foo", defaultValue: false)',
const { const {} : 'BoolConstant(false)',
const {'foo': 'true'} : 'BoolConstant(true)'}),
const ConstantData(
+ 'const bool.fromEnvironment("foo", defaultValue: null)',
+ const { const {} : 'NullConstant',
+ const {'foo': 'false'} : 'BoolConstant(false)'}),
+ const ConstantData(
'const int.fromEnvironment("foo", defaultValue: 42)',
const { const {} : 'IntConstant(42)',
const {'foo': '87'} : 'IntConstant(87)'}),
const ConstantData(
+ 'const int.fromEnvironment("foo", defaultValue: null)',
+ const { const {} : 'NullConstant',
+ const {'foo': '87'} : 'IntConstant(87)'}),
+ const ConstantData(
'const String.fromEnvironment("foo", defaultValue: "bar")',
const { const {} : 'StringConstant("bar")',
const {'foo': 'foo'} : 'StringConstant("foo")'}),
+ const ConstantData(
+ 'const String.fromEnvironment("foo", defaultValue: null)',
+ const { const {} : 'NullConstant',
+ const {'foo': 'foo'} : 'StringConstant("foo")'}),
]),
const TestData('''
const a = const bool.fromEnvironment("foo", defaultValue: true);
@@ -108,36 +176,35 @@ class C extends B {
}
''', const [
const ConstantData('const Object()',
- const { const {} : 'ConstructedConstant(Object())' }),
+ 'ConstructedConstant(Object())'),
const ConstantData('const A()',
- const { const {} : 'ConstructedConstant(A())' }),
+ 'ConstructedConstant(A())'),
const ConstantData('const B(0)',
- const { const {} : 'ConstructedConstant(B(field1=IntConstant(0)))' }),
+ 'ConstructedConstant(B(field1=IntConstant(0)))'),
const ConstantData('const B(const A())',
- const { const {} :
- 'ConstructedConstant(B(field1=ConstructedConstant(A())))' }),
- const ConstantData('const C()', const { const {} :
- 'ConstructedConstant(C(field1=IntConstant(42),'
- 'field2=BoolConstant(false)))' }),
- const ConstantData('const C(field1: 87)', const { const {} :
- 'ConstructedConstant(C(field1=IntConstant(87),'
- 'field2=BoolConstant(false)))' }),
- const ConstantData('const C(field2: true)', const { const {} :
- 'ConstructedConstant(C(field1=IntConstant(42),'
- 'field2=BoolConstant(true)))' }),
- const ConstantData('const C.named()', const { const {} :
- 'ConstructedConstant(C(field1=BoolConstant(false),'
- 'field2=BoolConstant(false)))' }),
- const ConstantData('const C.named(87)', const { const {} :
- 'ConstructedConstant(C(field1=IntConstant(87),'
- 'field2=IntConstant(87)))' }),
+ 'ConstructedConstant(B(field1=ConstructedConstant(A())))'),
+ const ConstantData('const C()',
+ 'ConstructedConstant(C(field2=BoolConstant(false),'
+ 'field1=IntConstant(42)))'),
+ const ConstantData('const C(field1: 87)',
+ 'ConstructedConstant(C(field2=BoolConstant(false),'
+ 'field1=IntConstant(87)))'),
+ const ConstantData('const C(field2: true)',
+ 'ConstructedConstant(C(field2=BoolConstant(true),'
+ 'field1=IntConstant(42)))'),
+ const ConstantData('const C.named()',
+ 'ConstructedConstant(C(field2=BoolConstant(false),'
+ 'field1=BoolConstant(false)))'),
+ const ConstantData('const C.named(87)',
+ 'ConstructedConstant(C(field2=IntConstant(87),'
+ 'field1=IntConstant(87)))'),
const ConstantData('const C(field1: a, field2: b)', const {
const {} :
- 'ConstructedConstant(C(field1=BoolConstant(true),'
- 'field2=IntConstant(42)))',
+ 'ConstructedConstant(C(field2=IntConstant(42),'
+ 'field1=BoolConstant(true)))',
const {'foo': 'false', 'bar': '87'} :
- 'ConstructedConstant(C(field1=BoolConstant(false),'
- 'field2=IntConstant(87)))', }),
+ 'ConstructedConstant(C(field2=IntConstant(87),'
+ 'field1=BoolConstant(false)))', }),
]),
const TestData('''
class A<T> implements B {
@@ -153,26 +220,19 @@ class C<U> {
}
''', const [
const ConstantData('const A()',
- const { const {} :
- 'ConstructedConstant(A<dynamic>(field1=IntConstant(42)))' }),
+ 'ConstructedConstant(A<dynamic>(field1=IntConstant(42)))'),
const ConstantData('const A<int>(field1: 87)',
- const { const {} :
- 'ConstructedConstant(A<int>(field1=IntConstant(87)))' }),
+ 'ConstructedConstant(A<int>(field1=IntConstant(87)))'),
const ConstantData('const B()',
- const { const {} :
- 'ConstructedConstant(A<B<dynamic>>(field1=IntConstant(42)))' }),
+ 'ConstructedConstant(A<B<dynamic>>(field1=IntConstant(42)))'),
const ConstantData('const B<int>()',
- const { const {} :
- 'ConstructedConstant(A<B<int>>(field1=IntConstant(42)))' }),
+ 'ConstructedConstant(A<B<int>>(field1=IntConstant(42)))'),
const ConstantData('const B<int>(field1: 87)',
- const { const {} :
- 'ConstructedConstant(A<B<int>>(field1=IntConstant(87)))' }),
+ 'ConstructedConstant(A<B<int>>(field1=IntConstant(87)))'),
const ConstantData('const C<int>(field1: 87)',
- const { const {} :
- 'ConstructedConstant(A<B<double>>(field1=IntConstant(87)))' }),
+ 'ConstructedConstant(A<B<double>>(field1=IntConstant(87)))'),
const ConstantData('const B<int>.named()',
- const { const {} :
- 'ConstructedConstant(A<int>(field1=IntConstant(42)))' }),
+ 'ConstructedConstant(A<int>(field1=IntConstant(42)))'),
]),
const TestData('''
const c = const int.fromEnvironment("foo", defaultValue: 5);
@@ -198,6 +258,162 @@ class B extends A {
const {'bar': '42'} :
'ConstructedConstant(B(field=IntConstant(126)))', }),
]),
+ const TestData('''
+class A {
+ final x;
+ final y;
+ final z;
+ final t;
+ final u = 42;
+
+ const A(this.z, tt) : y = 499, t = tt, x = 3;
+ const A.named(z, this.t) : y = 400 + z, this.z = z, x = 3;
+ const A.named2(t, z, y, x) : x = t, y = z, z = y, t = x;
+}
+''', const [
+ const ConstantData(
+ 'const A.named(99, 100)',
+ 'ConstructedConstant(A(x=IntConstant(3),'
+ 'y=IntConstant(499),'
+ 'z=IntConstant(99),'
+ 't=IntConstant(100),'
+ 'u=IntConstant(42)))'),
+ const ConstantData(
+ 'const A(99, 100)',
+ 'ConstructedConstant(A(x=IntConstant(3),'
+ 'y=IntConstant(499),'
+ 'z=IntConstant(99),'
+ 't=IntConstant(100),'
+ 'u=IntConstant(42)))'),
+ ]),
+ const TestData('''
+const integer = const int.fromEnvironment("foo", defaultValue: 5);
+const string = const String.fromEnvironment("bar", defaultValue: "baz");
+const boolean = const bool.fromEnvironment("baz", defaultValue: false);
+''', const [
+ const ConstantData(
+ r'"$integer $string $boolean"',
+ 'StringConstant("5 baz false")'),
+ const ConstantData(
+ '0 ? true : false', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_CONDITIONAL_TYPE),
+
+ const ConstantData(
+ 'integer ? true : false',
+ 'NonConstant',
+ MessageKind.INVALID_CONSTANT_CONDITIONAL_TYPE),
+
+ const ConstantData(r'"${const []}"', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE),
+ const ConstantData(r'"${proxy}"', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE),
+ const ConstantData('0 + ""', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE),
+ const ConstantData('0 + string', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_NUM_ADD_TYPE),
+ const ConstantData('"" + 0', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE),
+ const ConstantData('string + 0', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE),
+ const ConstantData('true + ""', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE),
+ const ConstantData('boolean + string', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_STRING_ADD_TYPE),
+ const ConstantData('true + false', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_ADD_TYPES),
+ const ConstantData('boolean + false', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_ADD_TYPES),
+ const ConstantData('const [] == null', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_PRIMITIVE_TYPE),
+ const ConstantData('proxy == null', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_PRIMITIVE_TYPE),
+ const ConstantData('0 * ""', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE),
+ const ConstantData('0 * string', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE),
+ const ConstantData('0 % ""', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE),
+ const ConstantData('0 % string', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_NUM_TYPE),
+ const ConstantData('0 << ""', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE),
+ const ConstantData('0 << string', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_BINARY_INT_TYPE),
+ const ConstantData('null[0]', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_INDEX),
+ const ConstantData('null ?? 0', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_IF_NULL),
+ const ConstantData(
+ 'const bool.fromEnvironment(0)',
+ 'NonConstant',
+ MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE),
+ const ConstantData(
+ 'const bool.fromEnvironment(integer)',
+ 'NonConstant',
+ MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE),
+ const ConstantData(
+ 'const bool.fromEnvironment("baz", defaultValue: 0)',
+ 'NonConstant',
+ MessageKind.INVALID_BOOL_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE),
+ const ConstantData(
+ 'const bool.fromEnvironment("baz", defaultValue: integer)',
+ 'NonConstant',
+ MessageKind.INVALID_BOOL_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE),
+ const ConstantData(
+ 'const int.fromEnvironment(0)',
+ 'NonConstant',
+ MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE),
+ const ConstantData(
+ 'const int.fromEnvironment(integer)',
+ 'NonConstant',
+ MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE),
+ const ConstantData(
+ 'const int.fromEnvironment("baz", defaultValue: "")',
+ 'NonConstant',
+ MessageKind.INVALID_INT_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE),
+ const ConstantData(
+ 'const int.fromEnvironment("baz", defaultValue: string)',
+ 'NonConstant',
+ MessageKind.INVALID_INT_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE),
+ const ConstantData(
+ 'const String.fromEnvironment(0)',
+ 'NonConstant',
+ MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE),
+ const ConstantData(
+ 'const String.fromEnvironment(integer)',
+ 'NonConstant',
+ MessageKind.INVALID_FROM_ENVIRONMENT_NAME_TYPE),
+ const ConstantData(
+ 'const String.fromEnvironment("baz", defaultValue: 0)',
+ 'NonConstant',
+ MessageKind.INVALID_STRING_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE),
+ const ConstantData(
+ 'const String.fromEnvironment("baz", defaultValue: integer)',
+ 'NonConstant',
+ MessageKind.INVALID_STRING_FROM_ENVIRONMENT_DEFAULT_VALUE_TYPE),
+ const ConstantData('true || 0', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE),
+ const ConstantData('0 || true', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE),
+ const ConstantData('true || integer', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE),
+ const ConstantData('integer || true', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_OR_OPERAND_TYPE),
+ const ConstantData('true && 0', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_AND_OPERAND_TYPE),
+ const ConstantData('0 && true', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_AND_OPERAND_TYPE),
+ const ConstantData('integer && true', 'NonConstant',
+ MessageKind.INVALID_LOGICAL_AND_OPERAND_TYPE),
+ const ConstantData('!0', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_NOT_TYPE),
+ const ConstantData('!string', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_NOT_TYPE),
+ const ConstantData('-("")', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_NEGATE_TYPE),
+ const ConstantData('-(string)', 'NonConstant',
+ MessageKind.INVALID_CONSTANT_NEGATE_TYPE),
+ ]),
];
main() {
@@ -215,22 +431,70 @@ Future testData(TestData data) async {
});
sb.write('main() {}\n');
String source = sb.toString();
+ DiagnosticCollector collector = new DiagnosticCollector();
CompilationResult result = await runCompiler(
- memorySourceFiles: {'main.dart': source}, options: ['--analyze-all']);
+ memorySourceFiles: {'main.dart': source},
+ diagnosticHandler: collector,
+ options: ['--analyze-only']);
Compiler compiler = result.compiler;
+ Expect.isTrue(collector.errors.isEmpty,
+ "Unexpected errors: ${collector.errors}");
+ Expect.isTrue(collector.warnings.isEmpty,
+ "Unexpected warnings: ${collector.warnings}");
+ compiler.enqueuer.resolution.queueIsClosed = false;
var library = compiler.mainApp;
constants.forEach((String name, ConstantData data) {
- FieldElement field = library.localLookup(name);
+ collector.clear();
+ FieldElementX field = library.localLookup(name);
+ compiler.enqueuer.resolution.addToWorkList(field);
+ compiler.processEnqueuerQueue(compiler.enqueuer.resolution);
+
+ Expect.isNotNull(field.constantCache,
+ "Expected non-null constant for field "
+ "`$field = ${field.initializer}`.");
ConstantExpression constant = field.constant;
- data.expectedValues.forEach(
+ Expect.isNotNull(constant,
+ "Expected non-null constant for field "
+ "`$field = ${field.initializer}`.");
+ var expectedResults = data.expectedResults;
+ if (expectedResults is String) {
+ expectedResults = { const <String, String>{}: expectedResults};
+ }
+ expectedResults.forEach(
(Map<String, String> env, String expectedText) {
- Environment environment = new MemoryEnvironment(compiler, env);
+ Environment environment =
+ new MemoryEnvironment(
+ compiler, field/*.initializer*/, env);
ConstantValue value =
constant.evaluate(environment, DART_CONSTANT_SYSTEM);
+ Expect.isNotNull(value,
+ "Expected non-null value from evaluation of "
+ "`${constant.getText()}`.");
String valueText = value.toStructuredString();
Expect.equals(expectedText, valueText,
"Unexpected value '${valueText}' for contant "
"`${constant.getText()}`, expected '${expectedText}'.");
+ return;
+ List<MessageKind> errors =
+ collector.errors.map((m) => m.message.kind).
+ where((k) {
+ return k != MessageKind.NOT_ASSIGNABLE &&
+ k != MessageKind.NOT_A_COMPILE_TIME_CONSTANT;
+ }).toList();
+ var expectedErrors = data.expectedErrors;
+ if (expectedErrors != null) {
+ if (expectedErrors is! List) {
+ expectedErrors = [expectedErrors];
+ }
+ Expect.listEquals(expectedErrors, errors,
+ "Error mismatch for `$field = ${field.initializer}`:\n"
+ "Expected: ${data.expectedErrors},\n"
+ "Found: ${errors}.");
+ } else {
+ Expect.isTrue(errors.isEmpty,
+ "Unexpected errors for `$field = ${field.initializer}`:\n"
+ "Found: ${errors}.");
+ }
});
});
}
« no previous file with comments | « pkg/compiler/lib/src/use_unused_api.dart ('k') | tests/compiler/dart2js/serialization_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698