OLD | NEW |
---|---|
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 | 6 |
7 import 'package:front_end/compiler_options.dart'; | 7 import 'package:front_end/compiler_options.dart'; |
8 import 'package:front_end/memory_file_system.dart'; | 8 import 'package:front_end/memory_file_system.dart'; |
9 import 'package:front_end/src/base/processed_options.dart'; | 9 import 'package:front_end/src/base/processed_options.dart'; |
10 import 'package:front_end/src/fasta/fasta.dart' show ByteSink; | 10 import 'package:front_end/src/fasta/fasta.dart' show ByteSink; |
11 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter; | 11 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter; |
12 import 'package:kernel/kernel.dart' show Program, Library; | 12 import 'package:kernel/kernel.dart' show Program, Library, CanonicalName; |
13 | 13 |
14 import 'package:test/test.dart'; | 14 import 'package:test/test.dart'; |
15 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 15 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
ahe
2017/07/06 13:12:22
Not a big fan of this.
| |
16 | 16 |
17 main() { | 17 main() { |
18 defineReflectiveSuite(() { | 18 defineReflectiveSuite(() { |
19 defineReflectiveTests(ProcessedOptionsTest); | 19 defineReflectiveTests(ProcessedOptionsTest); |
20 }); | 20 }); |
21 } | 21 } |
22 | 22 |
23 @reflectiveTest | 23 @reflectiveTest |
24 class ProcessedOptionsTest { | 24 class ProcessedOptionsTest { |
25 final fileSystem = new MemoryFileSystem(Uri.parse('file:///')); | 25 final fileSystem = new MemoryFileSystem(Uri.parse('file:///')); |
26 | 26 |
27 Program _mockOutline; | 27 Program _mockOutline; |
28 | 28 |
29 Program get mockSummary => _mockOutline ??= | 29 Program get mockSummary => _mockOutline ??= |
30 new Program(libraries: [new Library(Uri.parse('file:///a/b.dart'))]); | 30 new Program(libraries: [new Library(Uri.parse('file:///a/b.dart'))]); |
ahe
2017/07/06 13:12:22
As far as I can tell, this file relies heavily on
Paul Berry
2017/07/06 14:20:05
Actually it doesn't matter what directories exist
Siggi Cherem (dart-lang)
2017/07/06 19:05:28
exactly.
Note however that new test files I added
ahe
2017/07/11 09:34:26
I think it matters for the same reason as this is
Siggi Cherem (dart-lang)
2017/07/11 23:16:32
Next time we see each other we can discuss more ab
| |
31 | 31 |
32 test_compileSdk_false() { | 32 test_compileSdk_false() { |
33 for (var value in [false, true]) { | 33 for (var value in [false, true]) { |
34 var raw = new CompilerOptions()..compileSdk = value; | 34 var raw = new CompilerOptions()..compileSdk = value; |
35 var processed = new ProcessedOptions(raw); | 35 var processed = new ProcessedOptions(raw); |
36 expect(processed.compileSdk, value); | 36 expect(processed.compileSdk, value); |
37 } | 37 } |
38 } | 38 } |
39 | 39 |
40 test_sdk_summary_inferred() { | |
41 // The sdk-summary is inferred by default form sdk-root, when compile-sdk is | |
42 // false | |
43 var raw = new CompilerOptions() | |
44 ..sdkRoot = Uri.parse('file:///sdk/dir/') | |
45 ..compileSdk = false; | |
46 expect(new ProcessedOptions(raw).sdkSummary, | |
47 Uri.parse('file:///sdk/dir/outline.dill')); | |
48 | |
49 // But it is left null when compile-sdk is true | |
50 raw = new CompilerOptions() | |
51 ..sdkRoot = Uri.parse('file:///sdk/dir/') | |
52 ..compileSdk = true; | |
53 expect(new ProcessedOptions(raw).sdkSummary, null); | |
54 } | |
55 | |
40 test_fileSystem_noBazelRoots() { | 56 test_fileSystem_noBazelRoots() { |
41 // When no bazel roots are specified, the filesystem should be passed | 57 // When no bazel roots are specified, the filesystem should be passed |
42 // through unmodified. | 58 // through unmodified. |
43 var raw = new CompilerOptions()..fileSystem = fileSystem; | 59 var raw = new CompilerOptions()..fileSystem = fileSystem; |
44 var processed = new ProcessedOptions(raw); | 60 var processed = new ProcessedOptions(raw); |
45 expect(processed.fileSystem, same(fileSystem)); | 61 expect(processed.fileSystem, same(fileSystem)); |
46 } | 62 } |
47 | 63 |
48 test_getSdkSummary_summaryLocationProvided() async { | 64 test_getSdkSummary_summaryLocationProvided() async { |
49 var uri = Uri.parse('file:///sdkSummary'); | 65 var uri = Uri.parse('file:///sdkSummary'); |
50 writeMockSummaryTo(uri); | 66 writeMockSummaryTo(uri); |
51 checkMockSummary(new CompilerOptions() | 67 checkMockSummary(new CompilerOptions() |
52 ..fileSystem = fileSystem | 68 ..fileSystem = fileSystem |
53 ..sdkSummary = uri); | 69 ..sdkSummary = uri); |
54 } | 70 } |
55 | 71 |
56 void writeMockSummaryTo(Uri uri) { | 72 void writeMockSummaryTo(Uri uri) { |
57 var sink = new ByteSink(); | 73 var sink = new ByteSink(); |
58 new BinaryPrinter(sink).writeProgramFile(mockSummary); | 74 new BinaryPrinter(sink).writeProgramFile(mockSummary); |
59 fileSystem.entityForUri(uri).writeAsBytesSync(sink.builder.takeBytes()); | 75 fileSystem.entityForUri(uri).writeAsBytesSync(sink.builder.takeBytes()); |
60 } | 76 } |
61 | 77 |
62 Future<Null> checkMockSummary(CompilerOptions raw) async { | 78 Future<Null> checkMockSummary(CompilerOptions raw) async { |
63 var processed = new ProcessedOptions(raw); | 79 var processed = new ProcessedOptions(raw); |
64 var sdkSummary = await processed.sdkSummaryProgram; | 80 var sdkSummary = await processed.loadSdkSummary(new CanonicalName.root()); |
65 expect(sdkSummary.libraries.single.importUri, | 81 expect(sdkSummary.libraries.single.importUri, |
66 mockSummary.libraries.single.importUri); | 82 mockSummary.libraries.single.importUri); |
67 } | 83 } |
68 | 84 |
69 test_getUriTranslator_explicitPackagesFile() async { | 85 test_getUriTranslator_explicitPackagesFile() async { |
70 // This .packages file should be ignored. | 86 // This .packages file should be ignored. |
71 fileSystem | 87 fileSystem |
72 .entityForUri(Uri.parse('file:///.packages')) | 88 .entityForUri(Uri.parse('file:///.packages')) |
73 .writeAsStringSync('foo:bar\n'); | 89 .writeAsStringSync('foo:bar\n'); |
74 // This one should be used. | 90 // This one should be used. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
106 fileSystem | 122 fileSystem |
107 .entityForUri(Uri.parse('file:///.packages')) | 123 .entityForUri(Uri.parse('file:///.packages')) |
108 .writeAsStringSync('foo:bar\n'); | 124 .writeAsStringSync('foo:bar\n'); |
109 var raw = new CompilerOptions() | 125 var raw = new CompilerOptions() |
110 ..fileSystem = fileSystem | 126 ..fileSystem = fileSystem |
111 ..packagesFileUri = new Uri(); | 127 ..packagesFileUri = new Uri(); |
112 var processed = new ProcessedOptions(raw); | 128 var processed = new ProcessedOptions(raw); |
113 var uriTranslator = await processed.getUriTranslator(); | 129 var uriTranslator = await processed.getUriTranslator(); |
114 expect(uriTranslator.packages, isEmpty); | 130 expect(uriTranslator.packages, isEmpty); |
115 } | 131 } |
132 | |
133 test_validateOptions_root_exists() async { | |
134 var sdkRoot = Uri.parse('file:///sdk/root/'); | |
135 fileSystem | |
136 // Note: this test is a bit hackish because the memory file system | |
137 // doesn't have the notion of directories. | |
138 .entityForUri(sdkRoot) | |
139 .writeAsStringSync('\n'); | |
140 fileSystem | |
141 .entityForUri(sdkRoot.resolve('outline.dill')) | |
142 .writeAsStringSync('\n'); | |
143 | |
144 var errors = []; | |
145 var raw = new CompilerOptions() | |
146 ..sdkRoot = sdkRoot | |
147 ..fileSystem = fileSystem | |
148 ..onError = (e) => errors.add(e); | |
149 var options = new ProcessedOptions(raw); | |
150 var result = await options.validateOptions(); | |
151 // Note: we check this first so test failures show the cause directly. | |
152 expect(errors, isEmpty); | |
153 expect(result, isTrue); | |
154 } | |
155 | |
156 test_validateOptions_root_doesnt_exists() async { | |
157 var sdkRoot = Uri.parse('file:///sdk/root'); | |
158 var errors = []; | |
159 var raw = new CompilerOptions() | |
160 ..sdkRoot = sdkRoot | |
161 ..fileSystem = fileSystem | |
162 ..onError = (e) => errors.add(e); | |
163 var options = new ProcessedOptions(raw); | |
164 expect(await options.validateOptions(), isFalse); | |
165 expect('${errors.first}', contains("SDK root directory not found")); | |
166 } | |
167 | |
168 test_validateOptions_summary_exists() async { | |
169 var sdkSummary = Uri.parse('file:///sdk/root/outline.dill'); | |
170 fileSystem.entityForUri(sdkSummary).writeAsStringSync('\n'); | |
171 | |
172 var errors = []; | |
173 var raw = new CompilerOptions() | |
174 ..sdkSummary = sdkSummary | |
175 ..fileSystem = fileSystem | |
176 ..onError = (e) => errors.add(e); | |
177 var options = new ProcessedOptions(raw); | |
178 var result = await options.validateOptions(); | |
179 expect(errors, isEmpty); | |
180 expect(result, isTrue); | |
181 } | |
182 | |
183 test_validateOptions_summary_doesnt_exists() async { | |
184 var sdkSummary = Uri.parse('file:///sdk/root/outline.dill'); | |
185 var errors = []; | |
186 var raw = new CompilerOptions() | |
187 ..sdkSummary = sdkSummary | |
188 ..fileSystem = fileSystem | |
189 ..onError = (e) => errors.add(e); | |
190 var options = new ProcessedOptions(raw); | |
191 expect(await options.validateOptions(), isFalse); | |
192 expect('${errors.first}', contains("SDK summary not found")); | |
193 } | |
194 | |
195 test_validateOptions_inferred_summary_exists() async { | |
196 var sdkRoot = Uri.parse('file:///sdk/root/'); | |
197 var sdkSummary = Uri.parse('file:///sdk/root/outline.dill'); | |
198 fileSystem.entityForUri(sdkRoot).writeAsStringSync('\n'); | |
199 fileSystem.entityForUri(sdkSummary).writeAsStringSync('\n'); | |
200 | |
201 var errors = []; | |
202 var raw = new CompilerOptions() | |
203 ..sdkRoot = sdkRoot | |
204 ..fileSystem = fileSystem | |
205 ..onError = (e) => errors.add(e); | |
206 var options = new ProcessedOptions(raw); | |
207 var result = await options.validateOptions(); | |
208 expect(errors, isEmpty); | |
209 expect(result, isTrue); | |
210 } | |
211 | |
212 test_validateOptions_inferred_summary_doesnt_exists() async { | |
213 var sdkRoot = Uri.parse('file:///sdk/root/'); | |
214 var sdkSummary = Uri.parse('file:///sdk/root/outline.dill'); | |
215 fileSystem.entityForUri(sdkRoot).writeAsStringSync('\n'); | |
216 var errors = []; | |
217 var raw = new CompilerOptions() | |
218 ..sdkSummary = sdkSummary | |
219 ..fileSystem = fileSystem | |
220 ..onError = (e) => errors.add(e); | |
221 var options = new ProcessedOptions(raw); | |
222 expect(await options.validateOptions(), isFalse); | |
223 expect('${errors.first}', contains("SDK summary not found")); | |
224 } | |
116 } | 225 } |
OLD | NEW |