| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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.test.message_kind_helper; | 5 library dart2js.test.message_kind_helper; |
| 6 | 6 |
| 7 import 'package:expect/expect.dart'; | 7 import 'package:expect/expect.dart'; |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 | 9 |
| 10 import 'package:compiler/src/dart2jslib.dart' show | 10 import 'package:compiler/src/dart2jslib.dart' show |
| 11 Compiler, | 11 Compiler, |
| 12 MessageKind; | 12 MessageKind; |
| 13 import 'package:compiler/src/dart_backend/dart_backend.dart' show |
| 14 DartBackend; |
| 13 | 15 |
| 14 import 'memory_compiler.dart'; | 16 import 'memory_compiler.dart'; |
| 15 | 17 |
| 16 const String ESCAPE_REGEXP = r'[[\]{}()*+?.\\^$|]'; | 18 const String ESCAPE_REGEXP = r'[[\]{}()*+?.\\^$|]'; |
| 17 | 19 |
| 18 /// Most examples generate a single diagnostic. | 20 /// Most examples generate a single diagnostic. |
| 19 /// Add an exception here if a single diagnostic cannot be produced. | 21 /// Add an exception here if a single diagnostic cannot be produced. |
| 20 /// However, consider that a single concise diagnostic is easier to understand, | 22 /// However, consider that a single concise diagnostic is easier to understand, |
| 21 /// so try to change error reporting logic before adding an exception. | 23 /// so try to change error reporting logic before adding an exception. |
| 22 final Set<MessageKind> kindsWithExtraMessages = new Set<MessageKind>.from([ | 24 final Set<MessageKind> kindsWithExtraMessages = new Set<MessageKind>.from([ |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 "Example map must contain a 'main.dart' entry."); | 64 "Example map must contain a 'main.dart' entry."); |
| 63 } | 65 } |
| 64 List<String> messages = <String>[]; | 66 List<String> messages = <String>[]; |
| 65 void collect(Uri uri, int begin, int end, String message, kind) { | 67 void collect(Uri uri, int begin, int end, String message, kind) { |
| 66 if (kind.name == 'verbose info' || kind.name == 'info') { | 68 if (kind.name == 'verbose info' || kind.name == 'info') { |
| 67 return; | 69 return; |
| 68 } | 70 } |
| 69 messages.add(message); | 71 messages.add(message); |
| 70 } | 72 } |
| 71 | 73 |
| 74 bool oldBackendIsDart; |
| 75 if (cachedCompiler != null) { |
| 76 oldBackendIsDart = cachedCompiler.backend is DartBackend; |
| 77 } |
| 78 bool newBackendIsDart = kind.options.contains('--output-type=dart'); |
| 79 |
| 72 Compiler compiler = compilerFor( | 80 Compiler compiler = compilerFor( |
| 73 example, | 81 example, |
| 74 diagnosticHandler: collect, | 82 diagnosticHandler: collect, |
| 75 options: ['--analyze-only', | 83 options: ['--analyze-only', |
| 76 '--enable-experimental-mirrors']..addAll(kind.options), | 84 '--enable-experimental-mirrors']..addAll(kind.options), |
| 77 cachedCompiler: cachedCompiler); | 85 cachedCompiler: |
| 86 // TODO(johnniwinther): Remove this restriction when constant |
| 87 // values can be computed directly from the expressions. |
| 88 oldBackendIsDart == newBackendIsDart ? cachedCompiler : null); |
| 78 | 89 |
| 79 return compiler.run(Uri.parse('memory:main.dart')).then((_) { | 90 return compiler.run(Uri.parse('memory:main.dart')).then((_) { |
| 80 | 91 |
| 81 Expect.isFalse(messages.isEmpty, 'No messages in """$example"""'); | 92 Expect.isFalse(messages.isEmpty, 'No messages in """$example"""'); |
| 82 | 93 |
| 83 String expectedText = !kind.hasHowToFix | 94 String expectedText = !kind.hasHowToFix |
| 84 ? kind.template : '${kind.template}\n${kind.howToFix}'; | 95 ? kind.template : '${kind.template}\n${kind.howToFix}'; |
| 85 String pattern = expectedText.replaceAllMapped( | 96 String pattern = expectedText.replaceAllMapped( |
| 86 new RegExp(ESCAPE_REGEXP), (m) => '\\${m[0]}'); | 97 new RegExp(ESCAPE_REGEXP), (m) => '\\${m[0]}'); |
| 87 pattern = pattern.replaceAll(new RegExp(r'#\\\{[^}]*\\\}'), '.*'); | 98 pattern = pattern.replaceAll(new RegExp(r'#\\\{[^}]*\\\}'), '.*'); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 Expect.isTrue(!pendingStuff || kindsWithPendingClasses.contains(kind)); | 137 Expect.isTrue(!pendingStuff || kindsWithPendingClasses.contains(kind)); |
| 127 | 138 |
| 128 if (!pendingStuff) { | 139 if (!pendingStuff) { |
| 129 // If there is pending stuff, or the compiler was cancelled, we | 140 // If there is pending stuff, or the compiler was cancelled, we |
| 130 // shouldn't reuse the compiler. | 141 // shouldn't reuse the compiler. |
| 131 cachedCompiler = compiler; | 142 cachedCompiler = compiler; |
| 132 } | 143 } |
| 133 }); | 144 }); |
| 134 }).then((_) => cachedCompiler); | 145 }).then((_) => cachedCompiler); |
| 135 } | 146 } |
| OLD | NEW |