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:analyzer/src/summary/format.dart'; | |
8 import 'package:front_end/compiler_options.dart'; | 7 import 'package:front_end/compiler_options.dart'; |
9 import 'package:front_end/memory_file_system.dart'; | 8 import 'package:front_end/memory_file_system.dart'; |
10 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; |
| 11 import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter; |
| 12 import 'package:kernel/kernel.dart' show Program, Library; |
| 13 |
11 import 'package:test/test.dart'; | 14 import 'package:test/test.dart'; |
12 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 15 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
13 | 16 |
14 main() { | 17 main() { |
15 defineReflectiveSuite(() { | 18 defineReflectiveSuite(() { |
16 defineReflectiveTests(ProcessedOptionsTest); | 19 defineReflectiveTests(ProcessedOptionsTest); |
17 }); | 20 }); |
18 } | 21 } |
19 | 22 |
20 @reflectiveTest | 23 @reflectiveTest |
21 class ProcessedOptionsTest { | 24 class ProcessedOptionsTest { |
22 final fileSystem = new MemoryFileSystem(Uri.parse('file:///')); | 25 final fileSystem = new MemoryFileSystem(Uri.parse('file:///')); |
23 | 26 |
24 PackageBundleBuilder _mockSdkSummary; | 27 Program _mockOutline; |
25 | 28 |
26 PackageBundleBuilder get mockSdkSummary => _mockSdkSummary ??= | 29 Program get mockSummary => _mockOutline ??= |
27 new PackageBundleBuilder(apiSignature: 'mock summary signature'); | 30 new Program(libraries: [new Library(Uri.parse('file:///a/b.dart'))]); |
28 | |
29 Future<Null> checkMockSummary(CompilerOptions raw) async { | |
30 var processed = new ProcessedOptions(raw); | |
31 var sdkSummary = await processed.getSdkSummary(); | |
32 expect(sdkSummary.apiSignature, mockSdkSummary.apiSignature); | |
33 } | |
34 | 31 |
35 test_compileSdk_false() { | 32 test_compileSdk_false() { |
36 for (var value in [false, true]) { | 33 for (var value in [false, true]) { |
37 var raw = new CompilerOptions()..compileSdk = value; | 34 var raw = new CompilerOptions()..compileSdk = value; |
38 var processed = new ProcessedOptions(raw); | 35 var processed = new ProcessedOptions(raw); |
39 expect(processed.compileSdk, value); | 36 expect(processed.compileSdk, value); |
40 } | 37 } |
41 } | 38 } |
42 | 39 |
43 test_fileSystem_noBazelRoots() { | 40 test_fileSystem_noBazelRoots() { |
44 // When no bazel roots are specified, the filesystem should be passed | 41 // When no bazel roots are specified, the filesystem should be passed |
45 // through unmodified. | 42 // through unmodified. |
46 var raw = new CompilerOptions()..fileSystem = fileSystem; | 43 var raw = new CompilerOptions()..fileSystem = fileSystem; |
47 var processed = new ProcessedOptions(raw); | 44 var processed = new ProcessedOptions(raw); |
48 expect(processed.fileSystem, same(fileSystem)); | 45 expect(processed.fileSystem, same(fileSystem)); |
49 } | 46 } |
50 | 47 |
51 test_getSdkSummary_sdkLocationProvided_noTrailingSlash() async { | |
52 var uri = Uri.parse('file:///sdk'); | |
53 writeMockSummaryTo(Uri.parse('$uri/lib/_internal/strong.sum')); | |
54 checkMockSummary(new CompilerOptions() | |
55 ..fileSystem = fileSystem | |
56 ..sdkRoot = uri); | |
57 } | |
58 | |
59 test_getSdkSummary_sdkLocationProvided_spec() async { | |
60 var uri = Uri.parse('file:///sdk'); | |
61 writeMockSummaryTo(Uri.parse('$uri/lib/_internal/spec.sum')); | |
62 checkMockSummary(new CompilerOptions() | |
63 ..fileSystem = fileSystem | |
64 ..strongMode = false | |
65 ..sdkRoot = uri); | |
66 } | |
67 | |
68 test_getSdkSummary_sdkLocationProvided_trailingSlash() async { | |
69 var uri = Uri.parse('file:///sdk'); | |
70 writeMockSummaryTo(Uri.parse('$uri/lib/_internal/strong.sum')); | |
71 checkMockSummary(new CompilerOptions() | |
72 ..fileSystem = fileSystem | |
73 ..sdkRoot = Uri.parse('$uri/')); | |
74 } | |
75 | |
76 test_getSdkSummary_summaryLocationProvided() async { | 48 test_getSdkSummary_summaryLocationProvided() async { |
77 var uri = Uri.parse('file:///sdkSummary'); | 49 var uri = Uri.parse('file:///sdkSummary'); |
78 writeMockSummaryTo(uri); | 50 writeMockSummaryTo(uri); |
79 checkMockSummary(new CompilerOptions() | 51 checkMockSummary(new CompilerOptions() |
80 ..fileSystem = fileSystem | 52 ..fileSystem = fileSystem |
81 ..sdkSummary = uri); | 53 ..sdkSummary = uri); |
82 } | 54 } |
83 | 55 |
| 56 void writeMockSummaryTo(Uri uri) { |
| 57 var sink = new ByteSink(); |
| 58 new BinaryPrinter(sink).writeProgramFile(mockSummary); |
| 59 fileSystem.entityForUri(uri).writeAsBytesSync(sink.builder.takeBytes()); |
| 60 } |
| 61 |
| 62 Future<Null> checkMockSummary(CompilerOptions raw) async { |
| 63 var processed = new ProcessedOptions(raw); |
| 64 var sdkSummary = await processed.sdkSummaryProgram; |
| 65 expect(sdkSummary.libraries.single.importUri, |
| 66 mockSummary.libraries.single.importUri); |
| 67 } |
| 68 |
84 test_getUriTranslator_explicitPackagesFile() async { | 69 test_getUriTranslator_explicitPackagesFile() async { |
85 // This .packages file should be ignored. | 70 // This .packages file should be ignored. |
86 fileSystem | 71 fileSystem |
87 .entityForUri(Uri.parse('file:///.packages')) | 72 .entityForUri(Uri.parse('file:///.packages')) |
88 .writeAsStringSync('foo:bar\n'); | 73 .writeAsStringSync('foo:bar\n'); |
89 // This one should be used. | 74 // This one should be used. |
90 fileSystem | 75 fileSystem |
91 .entityForUri(Uri.parse('file:///explicit.packages')) | 76 .entityForUri(Uri.parse('file:///explicit.packages')) |
92 .writeAsStringSync('foo:baz\n'); | 77 .writeAsStringSync('foo:baz\n'); |
93 var raw = new CompilerOptions() | 78 var raw = new CompilerOptions() |
(...skipping 27 matching lines...) Expand all Loading... |
121 fileSystem | 106 fileSystem |
122 .entityForUri(Uri.parse('file:///.packages')) | 107 .entityForUri(Uri.parse('file:///.packages')) |
123 .writeAsStringSync('foo:bar\n'); | 108 .writeAsStringSync('foo:bar\n'); |
124 var raw = new CompilerOptions() | 109 var raw = new CompilerOptions() |
125 ..fileSystem = fileSystem | 110 ..fileSystem = fileSystem |
126 ..packagesFileUri = new Uri(); | 111 ..packagesFileUri = new Uri(); |
127 var processed = new ProcessedOptions(raw); | 112 var processed = new ProcessedOptions(raw); |
128 var uriTranslator = await processed.getUriTranslator(); | 113 var uriTranslator = await processed.getUriTranslator(); |
129 expect(uriTranslator.packages, isEmpty); | 114 expect(uriTranslator.packages, isEmpty); |
130 } | 115 } |
131 | |
132 void writeMockSummaryTo(Uri uri) { | |
133 fileSystem.entityForUri(uri).writeAsBytesSync(mockSdkSummary.toBuffer()); | |
134 } | |
135 } | 116 } |
OLD | NEW |