OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 mock_compiler; | 5 library mock_compiler; |
6 | 6 |
7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'dart:collection'; | 9 import 'dart:collection'; |
10 | 10 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 class WarningMessage { | 43 class WarningMessage { |
44 Spannable node; | 44 Spannable node; |
45 Message message; | 45 Message message; |
46 WarningMessage(this.node, this.message); | 46 WarningMessage(this.node, this.message); |
47 | 47 |
48 toString() => message.kind.toString(); | 48 toString() => message.kind.toString(); |
49 } | 49 } |
50 | 50 |
51 final Uri PATCH_CORE = new Uri(scheme: 'patch', path: 'core'); | 51 final Uri PATCH_CORE = new Uri(scheme: 'patch', path: 'core'); |
52 | 52 |
| 53 typedef String LibrarySourceProvider(Uri uri); |
| 54 |
53 class MockCompiler extends Compiler { | 55 class MockCompiler extends Compiler { |
54 api.DiagnosticHandler diagnosticHandler; | 56 api.DiagnosticHandler diagnosticHandler; |
55 List<WarningMessage> warnings; | 57 List<WarningMessage> warnings; |
56 List<WarningMessage> errors; | 58 List<WarningMessage> errors; |
57 List<WarningMessage> hints; | 59 List<WarningMessage> hints; |
58 List<WarningMessage> infos; | 60 List<WarningMessage> infos; |
59 List<WarningMessage> crashes; | 61 List<WarningMessage> crashes; |
60 /// Expected number of warnings. If `null`, the number of warnings is | 62 /// Expected number of warnings. If `null`, the number of warnings is |
61 /// not checked. | 63 /// not checked. |
62 final int expectedWarnings; | 64 final int expectedWarnings; |
63 /// Expected number of errors. If `null`, the number of errors is not checked. | 65 /// Expected number of errors. If `null`, the number of errors is not checked. |
64 final int expectedErrors; | 66 final int expectedErrors; |
65 final Map<String, SourceFile> sourceFiles; | 67 final Map<String, SourceFile> sourceFiles; |
66 Node parsedTree; | 68 Node parsedTree; |
67 final String testedPatchVersion; | 69 final String testedPatchVersion; |
| 70 final LibrarySourceProvider librariesOverride; |
68 | 71 |
69 MockCompiler.internal( | 72 MockCompiler.internal( |
70 {Map<String, String> coreSource, | 73 {Map<String, String> coreSource, |
71 bool enableTypeAssertions: false, | 74 bool enableTypeAssertions: false, |
72 bool enableMinification: false, | 75 bool enableMinification: false, |
73 bool enableConcreteTypeInference: false, | 76 bool enableConcreteTypeInference: false, |
74 int maxConcreteTypeSize: 5, | 77 int maxConcreteTypeSize: 5, |
75 bool disableTypeInference: false, | 78 bool disableTypeInference: false, |
76 bool analyzeAll: false, | 79 bool analyzeAll: false, |
77 bool analyzeOnly: false, | 80 bool analyzeOnly: false, |
78 bool emitJavaScript: true, | 81 bool emitJavaScript: true, |
79 bool preserveComments: false, | 82 bool preserveComments: false, |
80 // Our unit tests check code generation output that is | 83 // Our unit tests check code generation output that is |
81 // affected by inlining support. | 84 // affected by inlining support. |
82 bool disableInlining: true, | 85 bool disableInlining: true, |
83 bool trustTypeAnnotations: false, | 86 bool trustTypeAnnotations: false, |
84 bool enableAsyncAwait: false, | 87 bool enableAsyncAwait: false, |
85 int this.expectedWarnings, | 88 int this.expectedWarnings, |
86 int this.expectedErrors, | 89 int this.expectedErrors, |
87 api.CompilerOutputProvider outputProvider, | 90 api.CompilerOutputProvider outputProvider, |
88 String patchVersion}) | 91 String patchVersion, |
| 92 LibrarySourceProvider this.librariesOverride}) |
89 : sourceFiles = new Map<String, SourceFile>(), | 93 : sourceFiles = new Map<String, SourceFile>(), |
90 testedPatchVersion = patchVersion, | 94 testedPatchVersion = patchVersion, |
91 super(enableTypeAssertions: enableTypeAssertions, | 95 super(enableTypeAssertions: enableTypeAssertions, |
92 enableMinification: enableMinification, | 96 enableMinification: enableMinification, |
93 enableConcreteTypeInference: enableConcreteTypeInference, | 97 enableConcreteTypeInference: enableConcreteTypeInference, |
94 maxConcreteTypeSize: maxConcreteTypeSize, | 98 maxConcreteTypeSize: maxConcreteTypeSize, |
95 disableTypeInferenceFlag: disableTypeInference, | 99 disableTypeInferenceFlag: disableTypeInference, |
96 analyzeAllFlag: analyzeAll, | 100 analyzeAllFlag: analyzeAll, |
97 analyzeOnly: analyzeOnly, | 101 analyzeOnly: analyzeOnly, |
98 emitJavaScript: emitJavaScript, | 102 emitJavaScript: emitJavaScript, |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 expectedWarnings != warnings.length) { | 164 expectedWarnings != warnings.length) { |
161 throw "unexpected warnings during compilation ${warnings}"; | 165 throw "unexpected warnings during compilation ${warnings}"; |
162 } else { | 166 } else { |
163 return result; | 167 return result; |
164 } | 168 } |
165 }); | 169 }); |
166 } | 170 } |
167 | 171 |
168 /** | 172 /** |
169 * Registers the [source] with [uri] making it possible load [source] as a | 173 * Registers the [source] with [uri] making it possible load [source] as a |
170 * library. | 174 * library. If an override has been provided in [librariesOverride], that |
| 175 * is used instead. |
171 */ | 176 */ |
172 void registerSource(Uri uri, String source) { | 177 void registerSource(Uri uri, String source) { |
| 178 if (librariesOverride != null) { |
| 179 String override = librariesOverride(uri); |
| 180 if (override != null) { |
| 181 source = override; |
| 182 } |
| 183 } |
173 sourceFiles[uri.toString()] = new MockFile(source); | 184 sourceFiles[uri.toString()] = new MockFile(source); |
174 } | 185 } |
175 | 186 |
176 // TODO(johnniwinther): Remove this when we don't filter certain type checker | 187 // TODO(johnniwinther): Remove this when we don't filter certain type checker |
177 // warnings. | 188 // warnings. |
178 void reportWarning(Spannable node, MessageKind messageKind, | 189 void reportWarning(Spannable node, MessageKind messageKind, |
179 [Map arguments = const {}]) { | 190 [Map arguments = const {}]) { |
180 MessageTemplate template = MessageTemplate.TEMPLATES[messageKind]; | 191 MessageTemplate template = MessageTemplate.TEMPLATES[messageKind]; |
181 reportDiagnostic(node, | 192 reportDiagnostic(node, |
182 template.message(arguments, terseDiagnostics), | 193 template.message(arguments, terseDiagnostics), |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 MockElement(Element enclosingElement) | 424 MockElement(Element enclosingElement) |
414 : super('', ElementKind.FUNCTION, Modifiers.EMPTY, | 425 : super('', ElementKind.FUNCTION, Modifiers.EMPTY, |
415 enclosingElement); | 426 enclosingElement); |
416 | 427 |
417 get node => null; | 428 get node => null; |
418 | 429 |
419 parseNode(_) => null; | 430 parseNode(_) => null; |
420 | 431 |
421 bool get hasNode => false; | 432 bool get hasNode => false; |
422 } | 433 } |
OLD | NEW |