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

Side by Side Diff: pkg/front_end/lib/src/fasta/testing/kernel_chain.dart

Issue 2675593003: Enable running of fasta tests on build bot. (Closed)
Patch Set: Rebased on 17d8de6063e78eb14b7c1814626743164a4473d9. Created 3 years, 10 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
« no previous file with comments | « pkg/front_end/lib/src/fasta/run.dart ('k') | pkg/front_end/lib/src/fasta/testing/suite.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 // TODO(ahe): Copied from closure_conversion branch of kernel, remove this file 5 // TODO(ahe): Copied from closure_conversion branch of kernel, remove this file
6 // when closure_conversion is merged with master. 6 // when closure_conversion is merged with master.
7 7
8 library kernel.testing.kernel_chain; 8 library kernel.testing.kernel_chain;
9 9
10 import 'dart:async' show 10 import 'dart:async' show
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 StdioProcess, 70 StdioProcess,
71 Step, 71 Step,
72 TestDescription; 72 TestDescription;
73 73
74 import 'package:kernel/ast.dart' show 74 import 'package:kernel/ast.dart' show
75 Program; 75 Program;
76 76
77 import 'package:package_config/discovery.dart' show 77 import 'package:package_config/discovery.dart' show
78 loadPackagesFile; 78 loadPackagesFile;
79 79
80 import '../environment_variable.dart' show
81 EnvironmentVariable;
82
80 typedef Future<TestContext> TestContextConstructor( 83 typedef Future<TestContext> TestContextConstructor(
81 Chain suite, Map<String, String> environment, String sdk, Uri vm, 84 Chain suite, Map<String, String> environment, Uri sdk, Uri vm,
82 Uri packages, bool strongMode, DartSdk dartSdk, bool updateExpectations); 85 Uri packages, bool strongMode, DartSdk dartSdk, bool updateExpectations);
83 86
84 Future<bool> fileExists(Uri base, String path) async { 87 Future<bool> fileExists(Uri base, String path) async {
85 return await new File.fromUri(base.resolve(path)).exists(); 88 return await new File.fromUri(base.resolve(path)).exists();
86 } 89 }
87 90
91 final EnvironmentVariable testConfigVariable = new EnvironmentVariable(
92 "DART_CONFIGURATION",
93 "It should be something like 'ReleaseX64', depending on which"
94 " configuration you're testing.");
95
96 Future<Uri> computePatchedSdk() async {
97 String config = await testConfigVariable.value;
98 String path;
99 switch (Platform.operatingSystem) {
100 case "linux":
101 path = "out/$config/patched_sdk";
102 break;
103
104 case "macos":
105 path = "xcodebuild/$config/patched_sdk";
106 break;
107
108 case "windows":
109 path = "build/$config/patched_sdk";
110 break;
111
112 default:
113 throw "Unsupported operating system: '${Platform.operatingSystem}'.";
114 }
115 Uri sdk = Uri.base.resolve("$path/");
116 const String asyncDart = "lib/async/async.dart";
117 if (!await fileExists(sdk, asyncDart)) {
118 throw "Couldn't find '$asyncDart' in '$sdk'.";
119 }
120 const String asyncSources = "lib/async/async_sources.gypi";
121 if (await fileExists(sdk, asyncSources)) {
122 throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK.";
123 }
124 return sdk;
125 }
126
127 Uri computeDartVm(Uri patchedSdk) {
128 return patchedSdk.resolve(Platform.isWindows ? "../dart.exe" : "../dart");
129 }
130
88 abstract class TestContext extends ChainContext { 131 abstract class TestContext extends ChainContext {
89 final Uri vm; 132 final Uri vm;
90 133
91 final Uri packages; 134 final Uri packages;
92 135
93 final DartOptions options; 136 final DartOptions options;
94 137
95 final DartSdk dartSdk; 138 final DartSdk dartSdk;
96 139
97 TestContext(String sdk, this.vm, Uri packages, bool strongMode, this.dartSdk) 140 TestContext(Uri sdk, this.vm, Uri packages, bool strongMode, this.dartSdk)
98 : packages = packages, 141 : packages = packages,
99 options = new DartOptions(strongMode: strongMode, sdk: sdk, 142 options = new DartOptions(strongMode: strongMode, sdk: sdk.toFilePath(),
100 packagePath: packages.toFilePath()); 143 packagePath: packages.toFilePath());
101 144
102 Future<DartLoader> createLoader() async { 145 Future<DartLoader> createLoader() async {
103 Repository repository = new Repository(); 146 Repository repository = new Repository();
104 return new DartLoader(repository, options, await loadPackagesFile(packages), 147 return new DartLoader(repository, options, await loadPackagesFile(packages),
105 ignoreRedirectingFactories: false, dartSdk: dartSdk); 148 ignoreRedirectingFactories: false, dartSdk: dartSdk);
106 } 149 }
107 150
108 static Future<TestContext> create(Chain suite, 151 static Future<TestContext> create(Chain suite,
109 Map<String, String> environment, 152 Map<String, String> environment,
110 TestContextConstructor constructor) async { 153 TestContextConstructor constructor) async {
111 const String suggestion = 154 Uri sdk = await computePatchedSdk();
112 "Try checking the value of environment variable 'DART_AOT_SDK', " 155 Uri vm = computeDartVm(sdk);
113 "it should point to a patched SDK.";
114 String sdk = await getEnvironmentVariable(
115 "DART_AOT_SDK", Environment.directory,
116 "Please define environment variable 'DART_AOT_SDK' to point to a "
117 "patched SDK.",
118 (String n) => "Couldn't locate '$n'. $suggestion");
119 Uri sdkUri = Uri.base.resolve("$sdk/");
120 const String asyncDart = "lib/async/async.dart";
121 if (!await fileExists(sdkUri, asyncDart)) {
122 throw "Couldn't find '$asyncDart' in '$sdk'. $suggestion";
123 }
124 const String asyncSources = "lib/async/async_sources.gypi";
125 if (await fileExists(sdkUri, asyncSources)) {
126 throw "Found '$asyncSources' in '$sdk', so it isn't a patched SDK. "
127 "$suggestion";
128 }
129
130 String vmPath = await getEnvironmentVariable(
131 "DART_AOT_VM", Environment.file,
132 "Please define environment variable 'DART_AOT_VM' to point to a "
133 "Dart VM that reads .dill files.",
134 (String n) => "Couldn't locate '$n'. Please check the value of "
135 "environment variable 'DART_AOT_VM', it should point to a "
136 "Dart VM that reads .dill files.");
137 Uri vm = Uri.base.resolve(vmPath);
138
139 Uri packages = Uri.base.resolve(".packages"); 156 Uri packages = Uri.base.resolve(".packages");
140 bool strongMode = false; 157 bool strongMode = false;
141 bool updateExpectations = environment["updateExpectations"] != "false"; 158 bool updateExpectations = environment["updateExpectations"] != "false";
142 return constructor(suite, environment, sdk, vm, packages, strongMode, 159 return constructor(suite, environment, sdk, vm, packages, strongMode,
143 createDartSdk(sdk, strongMode: strongMode), updateExpectations); 160 createDartSdk(sdk.toFilePath(), strongMode: strongMode),
161 updateExpectations);
144 } 162 }
145 } 163 }
146 164
147 enum Environment {
148 directory,
149 file,
150 }
151
152 Future<String> getEnvironmentVariable(
153 String name, Environment kind, String undefined, notFound(String n)) async {
154 String result = Platform.environment[name];
155 if (result == null) {
156 throw undefined;
157 }
158 switch (kind) {
159 case Environment.directory:
160 if (!await new Directory(result).exists()) throw notFound(result);
161 break;
162
163 case Environment.file:
164 if (!await new File(result).exists()) throw notFound(result);
165 break;
166 }
167 return result;
168 }
169
170 class Kernel extends Step<TestDescription, Program, TestContext> { 165 class Kernel extends Step<TestDescription, Program, TestContext> {
171 const Kernel(); 166 const Kernel();
172 167
173 String get name => "kernel"; 168 String get name => "kernel";
174 169
175 Future<Result<Program>> run( 170 Future<Result<Program>> run(
176 TestDescription description, TestContext testContext) async { 171 TestDescription description, TestContext testContext) async {
177 try { 172 try {
178 DartLoader loader = await testContext.createLoader(); 173 DartLoader loader = await testContext.createLoader();
179 Target target = getTarget( 174 Target target = getTarget(
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 381
387 Future openWrite(Uri uri, f(IOSink sink)) async { 382 Future openWrite(Uri uri, f(IOSink sink)) async {
388 IOSink sink = new File.fromUri(uri).openWrite(); 383 IOSink sink = new File.fromUri(uri).openWrite();
389 try { 384 try {
390 await f(sink); 385 await f(sink);
391 } finally { 386 } finally {
392 await sink.close(); 387 await sink.close();
393 } 388 }
394 print("Wrote $uri"); 389 print("Wrote $uri");
395 } 390 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/run.dart ('k') | pkg/front_end/lib/src/fasta/testing/suite.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698