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

Side by Side Diff: lib/src/runner/browser/platform.dart

Issue 2184543002: Use the package_resolver package. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 4 years, 4 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 | « lib/src/runner/browser/compiler_pool.dart ('k') | lib/src/runner/configuration.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 file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:convert'; 6 import 'dart:convert';
7 import 'dart:io'; 7 import 'dart:io';
8 8
9 import 'package:async/async.dart'; 9 import 'package:async/async.dart';
10 import 'package:http_multi_server/http_multi_server.dart'; 10 import 'package:http_multi_server/http_multi_server.dart';
11 import 'package:package_resolver/package_resolver.dart';
11 import 'package:path/path.dart' as p; 12 import 'package:path/path.dart' as p;
12 import 'package:pool/pool.dart'; 13 import 'package:pool/pool.dart';
13 import 'package:shelf/shelf.dart' as shelf; 14 import 'package:shelf/shelf.dart' as shelf;
14 import 'package:shelf/shelf_io.dart' as shelf_io; 15 import 'package:shelf/shelf_io.dart' as shelf_io;
15 import 'package:shelf_static/shelf_static.dart'; 16 import 'package:shelf_static/shelf_static.dart';
16 import 'package:shelf_web_socket/shelf_web_socket.dart'; 17 import 'package:shelf_web_socket/shelf_web_socket.dart';
18 import 'package:shelf_packages_handler/shelf_packages_handler.dart';
17 import 'package:stream_channel/stream_channel.dart'; 19 import 'package:stream_channel/stream_channel.dart';
18 import 'package:web_socket_channel/web_socket_channel.dart'; 20 import 'package:web_socket_channel/web_socket_channel.dart';
19 21
20 import '../../backend/metadata.dart'; 22 import '../../backend/metadata.dart';
21 import '../../backend/test_platform.dart'; 23 import '../../backend/test_platform.dart';
22 import '../../util/io.dart'; 24 import '../../util/io.dart';
23 import '../../util/one_off_handler.dart'; 25 import '../../util/one_off_handler.dart';
24 import '../../util/path_handler.dart'; 26 import '../../util/path_handler.dart';
25 import '../../util/stack_trace_mapper.dart'; 27 import '../../util/stack_trace_mapper.dart';
26 import '../../utils.dart'; 28 import '../../utils.dart';
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 : _root = root == null ? p.current : root, 115 : _root = root == null ? p.current : root,
114 _config = config, 116 _config = config,
115 _compiledDir = config.pubServeUrl == null ? createTempDir() : null, 117 _compiledDir = config.pubServeUrl == null ? createTempDir() : null,
116 _http = config.pubServeUrl == null ? null : new HttpClient(), 118 _http = config.pubServeUrl == null ? null : new HttpClient(),
117 _compilers = new CompilerPool(config) { 119 _compilers = new CompilerPool(config) {
118 var cascade = new shelf.Cascade() 120 var cascade = new shelf.Cascade()
119 .add(_webSocketHandler.handler); 121 .add(_webSocketHandler.handler);
120 122
121 if (_config.pubServeUrl == null) { 123 if (_config.pubServeUrl == null) {
122 cascade = cascade 124 cascade = cascade
123 .add(_createPackagesHandler()) 125 .add(packagesDirHandler())
124 .add(_jsHandler.handler) 126 .add(_jsHandler.handler)
125 .add(createStaticHandler(_root)) 127 .add(createStaticHandler(_root))
126 .add(_wrapperHandler); 128 .add(_wrapperHandler);
127 129
128 if (config.precompiledPath != null) { 130 if (config.precompiledPath != null) {
129 cascade = cascade.add(createStaticHandler(config.precompiledPath)); 131 cascade = cascade.add(createStaticHandler(config.precompiledPath));
130 } 132 }
131 } 133 }
132 134
133 var pipeline = new shelf.Pipeline() 135 var pipeline = new shelf.Pipeline()
134 .addMiddleware(nestingMiddleware(_secret)) 136 .addMiddleware(nestingMiddleware(_secret))
135 .addHandler(cascade.handler); 137 .addHandler(cascade.handler);
136 138
137 _server.mount(pipeline); 139 _server.mount(pipeline);
138 } 140 }
139 141
140 /// Returns a handler that serves the contents of the "packages/" directory
141 /// for any URL that contains "packages/".
142 ///
143 /// This is a factory so it can wrap a static handler.
144 shelf.Handler _createPackagesHandler() {
145 var staticHandler =
146 createStaticHandler(_config.packageRoot, serveFilesOutsidePath: true);
147
148 return (request) {
149 var segments = p.url.split(request.url.path);
150
151 for (var i = 0; i < segments.length; i++) {
152 if (segments[i] != "packages") continue;
153 return staticHandler(
154 request.change(path: p.url.joinAll(segments.take(i + 1))));
155 }
156
157 return new shelf.Response.notFound("Not found.");
158 };
159 }
160
161 /// A handler that serves wrapper files used to bootstrap tests. 142 /// A handler that serves wrapper files used to bootstrap tests.
162 shelf.Response _wrapperHandler(shelf.Request request) { 143 shelf.Response _wrapperHandler(shelf.Request request) {
163 var path = p.fromUri(request.url); 144 var path = p.fromUri(request.url);
164 145
165 if (path.endsWith(".browser_test.dart")) { 146 if (path.endsWith(".browser_test.dart")) {
166 var testPath = p.basename(p.withoutExtension(p.withoutExtension(path))); 147 var testPath = p.basename(p.withoutExtension(p.withoutExtension(path)));
167 return new shelf.Response.ok(''' 148 return new shelf.Response.ok('''
168 import "package:stream_channel/stream_channel.dart"; 149 import "package:stream_channel/stream_channel.dart";
169 150
170 import "package:test/src/runner/plugin/remote_platform_helpers.dart"; 151 import "package:test/src/runner/plugin/remote_platform_helpers.dart";
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 throw new LoadException(path, 291 throw new LoadException(path,
311 "Error getting $url: ${response.statusCode} " 292 "Error getting $url: ${response.statusCode} "
312 "${response.reasonPhrase}\n" 293 "${response.reasonPhrase}\n"
313 'Make sure "pub serve" is serving the test/ directory.'); 294 'Make sure "pub serve" is serving the test/ directory.');
314 } 295 }
315 296
316 if (getSourceMap && !_config.jsTrace) { 297 if (getSourceMap && !_config.jsTrace) {
317 _mappers[path] = new StackTraceMapper( 298 _mappers[path] = new StackTraceMapper(
318 await UTF8.decodeStream(response), 299 await UTF8.decodeStream(response),
319 mapUrl: url, 300 mapUrl: url,
320 packageRoot: _config.pubServeUrl.resolve('packages'), 301 packageResolver: new SyncPackageResolver.root(
302 _config.pubServeUrl.resolve('packages')),
321 sdkRoot: _config.pubServeUrl.resolve('packages/\$sdk')); 303 sdkRoot: _config.pubServeUrl.resolve('packages/\$sdk'));
322 return; 304 return;
323 } 305 }
324 306
325 // Drain the response stream. 307 // Drain the response stream.
326 response.listen((_) {}); 308 response.listen((_) {});
327 } on IOException catch (error) { 309 } on IOException catch (error) {
328 var message = getErrorMessage(error); 310 var message = getErrorMessage(error);
329 if (error is SocketException) { 311 if (error is SocketException) {
330 message = "${error.osError.message} " 312 message = "${error.osError.message} "
(...skipping 11 matching lines...) Expand all
342 324
343 /// Compile the test suite at [dartPath] to JavaScript. 325 /// Compile the test suite at [dartPath] to JavaScript.
344 /// 326 ///
345 /// Once the suite has been compiled, it's added to [_jsHandler] so it can be 327 /// Once the suite has been compiled, it's added to [_jsHandler] so it can be
346 /// served. 328 /// served.
347 Future _compileSuite(String dartPath) { 329 Future _compileSuite(String dartPath) {
348 return _compileFutures.putIfAbsent(dartPath, () async { 330 return _compileFutures.putIfAbsent(dartPath, () async {
349 var dir = new Directory(_compiledDir).createTempSync('test_').path; 331 var dir = new Directory(_compiledDir).createTempSync('test_').path;
350 var jsPath = p.join(dir, p.basename(dartPath) + ".browser_test.dart.js"); 332 var jsPath = p.join(dir, p.basename(dartPath) + ".browser_test.dart.js");
351 333
352 await _compilers.compile(dartPath, jsPath, 334 await _compilers.compile(dartPath, jsPath);
353 packageRoot: _config.packageRoot);
354 if (_closed) return; 335 if (_closed) return;
355 336
356 var jsUrl = p.toUri(p.relative(dartPath, from: _root)).path + 337 var jsUrl = p.toUri(p.relative(dartPath, from: _root)).path +
357 '.browser_test.dart.js'; 338 '.browser_test.dart.js';
358 _jsHandler.add(jsUrl, (request) { 339 _jsHandler.add(jsUrl, (request) {
359 return new shelf.Response.ok(new File(jsPath).readAsStringSync(), 340 return new shelf.Response.ok(new File(jsPath).readAsStringSync(),
360 headers: {'Content-Type': 'application/javascript'}); 341 headers: {'Content-Type': 'application/javascript'});
361 }); 342 });
362 343
363 var mapUrl = p.toUri(p.relative(dartPath, from: _root)).path + 344 var mapUrl = p.toUri(p.relative(dartPath, from: _root)).path +
364 '.browser_test.dart.js.map'; 345 '.browser_test.dart.js.map';
365 _jsHandler.add(mapUrl, (request) { 346 _jsHandler.add(mapUrl, (request) {
366 return new shelf.Response.ok( 347 return new shelf.Response.ok(
367 new File(jsPath + '.map').readAsStringSync(), 348 new File(jsPath + '.map').readAsStringSync(),
368 headers: {'Content-Type': 'application/json'}); 349 headers: {'Content-Type': 'application/json'});
369 }); 350 });
370 351
371 if (_config.jsTrace) return; 352 if (_config.jsTrace) return;
372 var mapPath = jsPath + '.map'; 353 var mapPath = jsPath + '.map';
373 _mappers[dartPath] = new StackTraceMapper( 354 _mappers[dartPath] = new StackTraceMapper(
374 new File(mapPath).readAsStringSync(), 355 new File(mapPath).readAsStringSync(),
375 mapUrl: p.toUri(mapPath), 356 mapUrl: p.toUri(mapPath),
376 packageRoot: p.toUri(_config.packageRoot), 357 packageResolver: await PackageResolver.current.asSync,
377 sdkRoot: p.toUri(sdkDir)); 358 sdkRoot: p.toUri(sdkDir));
378 }); 359 });
379 } 360 }
380 361
381 /// Returns the [BrowserManager] for [platform], which should be a browser. 362 /// Returns the [BrowserManager] for [platform], which should be a browser.
382 /// 363 ///
383 /// If no browser manager is running yet, starts one. 364 /// If no browser manager is running yet, starts one.
384 Future<BrowserManager> _browserManagerFor(TestPlatform platform) { 365 Future<BrowserManager> _browserManagerFor(TestPlatform platform) {
385 var manager = _browserManagers[platform]; 366 var manager = _browserManagers[platform];
386 if (manager != null) return Result.release(manager); 367 if (manager != null) return Result.release(manager);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 await Future.wait(futures); 418 await Future.wait(futures);
438 419
439 if (_config.pubServeUrl == null) { 420 if (_config.pubServeUrl == null) {
440 new Directory(_compiledDir).deleteSync(recursive: true); 421 new Directory(_compiledDir).deleteSync(recursive: true);
441 } else { 422 } else {
442 _http.close(); 423 _http.close();
443 } 424 }
444 }); 425 });
445 final _closeMemo = new AsyncMemoizer(); 426 final _closeMemo = new AsyncMemoizer();
446 } 427 }
OLDNEW
« no previous file with comments | « lib/src/runner/browser/compiler_pool.dart ('k') | lib/src/runner/configuration.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698