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

Side by Side Diff: lib/src/testing.dart

Issue 988483006: Add widget to display errors, and report dependency_graph errors correctly (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 9 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 dev_compiler.src.testing; 5 library dev_compiler.src.testing;
6 6
7 import 'package:analyzer/src/generated/ast.dart'; 7 import 'package:analyzer/src/generated/ast.dart';
8 import 'package:analyzer/src/generated/element.dart'; 8 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/engine.dart' show TimestampedData; 9 import 'package:analyzer/src/generated/engine.dart' show TimestampedData;
10 import 'package:analyzer/src/generated/source.dart'; 10 import 'package:analyzer/src/generated/source.dart';
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 for (var unit in lib.units) { 90 for (var unit in lib.units) {
91 unit.unit.accept(visitor); 91 unit.unit.accept(visitor);
92 } 92 }
93 } 93 }
94 94
95 if (!checkExpectations) return results; 95 if (!checkExpectations) return results;
96 96
97 var total = expectedErrors.values.fold(0, (p, l) => p + l.length); 97 var total = expectedErrors.values.fold(0, (p, l) => p + l.length);
98 // Check that all errors we emit are included in the expected map. 98 // Check that all errors we emit are included in the expected map.
99 for (var lib in results.libraries) { 99 for (var lib in results.libraries) {
100 (reporter as TestReporter).infoMap[lib].forEach((node, actual) { 100 var uri = lib.library.source.uri;
101 (reporter as TestReporter).infoMap[uri].forEach((node, actual) {
101 var expected = expectedErrors[node]; 102 var expected = expectedErrors[node];
102 var expectedTotal = expected == null ? 0 : expected.length; 103 var expectedTotal = expected == null ? 0 : expected.length;
103 if (actual.length != expectedTotal) { 104 if (actual.length != expectedTotal) {
104 expect(actual.length, expectedTotal, 105 expect(actual.length, expectedTotal,
105 reason: 'The checker found ${actual.length} errors on the ' 106 reason: 'The checker found ${actual.length} errors on the '
106 'expression `$node`, but we expected $expectedTotal. These are the ' 107 'expression `$node`, but we expected $expectedTotal. These are the '
107 'errors the checker found:\n\n ${_unexpectedErrors(node, actual)}'); 108 'errors the checker found:\n\n ${_unexpectedErrors(node, actual)}');
108 } 109 }
109 110
110 for (int i = 0; i < expected.length; i++) { 111 for (int i = 0; i < expected.length; i++) {
(...skipping 17 matching lines...) Expand all
128 ' ${total - newTotal} out of $total expected errors were reported.\n' 129 ' ${total - newTotal} out of $total expected errors were reported.\n'
129 'The following errors were not reported:\n' 130 'The following errors were not reported:\n'
130 '${_unreportedErrors(expectedErrors)}'); 131 '${_unreportedErrors(expectedErrors)}');
131 } 132 }
132 } 133 }
133 134
134 return results; 135 return results;
135 } 136 }
136 137
137 class TestReporter extends SummaryReporter { 138 class TestReporter extends SummaryReporter {
138 Map<LibraryInfo, Map<AstNode, List<StaticInfo>>> infoMap = {}; 139 Map<Uri, Map<AstNode, List<StaticInfo>>> infoMap = {};
139 LibraryInfo _current; 140 Uri _current;
140 141
141 void enterLibrary(LibraryInfo info) { 142 void enterLibrary(Uri uri) {
142 super.enterLibrary(info); 143 super.enterLibrary(uri);
143 infoMap[info] = {}; 144 infoMap[uri] = {};
144 _current = info; 145 _current = uri;
145 } 146 }
146 147
147 void log(StaticInfo info) { 148 void log(Message info) {
148 super.log(info); 149 super.log(info);
150 if (info is! StaticInfo) return;
149 infoMap[_current].putIfAbsent(info.node, () => []).add(info); 151 infoMap[_current].putIfAbsent(info.node, () => []).add(info);
150 } 152 }
151 } 153 }
152 154
153 /// Create an error explanation for errors that were not expected, but that the 155 /// Create an error explanation for errors that were not expected, but that the
154 /// checker produced. 156 /// checker produced.
155 String _unexpectedErrors(AstNode node, List errors) { 157 String _unexpectedErrors(AstNode node, List errors) {
156 final span = _spanFor(node); 158 final span = _spanFor(node);
157 return errors.map((e) { 159 return errors.map((e) {
158 var level = e.level.name.toLowerCase(); 160 var level = e.level.name.toLowerCase();
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 323
322 SourceSpan spanFor(AstNode node) { 324 SourceSpan spanFor(AstNode node) {
323 final begin = node is AnnotatedNode 325 final begin = node is AnnotatedNode
324 ? node.firstTokenAfterCommentAndMetadata.offset 326 ? node.firstTokenAfterCommentAndMetadata.offset
325 : node.offset; 327 : node.offset;
326 return _file.span(begin, node.end); 328 return _file.span(begin, node.end);
327 } 329 }
328 330
329 String toString() => '[$runtimeType: $uri]'; 331 String toString() => '[$runtimeType: $uri]';
330 } 332 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698