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

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

Issue 1086213002: Support a @Timeout annotation. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: CHANGELOG + README Created 5 years, 8 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/iframe_listener.dart ('k') | lib/src/runner/loader.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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 test.runner.browser.server; 5 library test.runner.browser.server;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 10
11 import 'package:path/path.dart' as p; 11 import 'package:path/path.dart' as p;
12 import 'package:pool/pool.dart'; 12 import 'package:pool/pool.dart';
13 import 'package:shelf/shelf.dart' as shelf; 13 import 'package:shelf/shelf.dart' as shelf;
14 import 'package:shelf/shelf_io.dart' as shelf_io; 14 import 'package:shelf/shelf_io.dart' as shelf_io;
15 import 'package:shelf_static/shelf_static.dart'; 15 import 'package:shelf_static/shelf_static.dart';
16 import 'package:shelf_web_socket/shelf_web_socket.dart'; 16 import 'package:shelf_web_socket/shelf_web_socket.dart';
17 17
18 import '../../backend/metadata.dart';
18 import '../../backend/suite.dart'; 19 import '../../backend/suite.dart';
19 import '../../backend/test_platform.dart'; 20 import '../../backend/test_platform.dart';
20 import '../../util/io.dart'; 21 import '../../util/io.dart';
21 import '../../util/path_handler.dart'; 22 import '../../util/path_handler.dart';
22 import '../../util/one_off_handler.dart'; 23 import '../../util/one_off_handler.dart';
23 import '../../utils.dart'; 24 import '../../utils.dart';
24 import '../load_exception.dart'; 25 import '../load_exception.dart';
25 import 'browser.dart'; 26 import 'browser.dart';
26 import 'browser_manager.dart'; 27 import 'browser_manager.dart';
27 import 'compiler_pool.dart'; 28 import 'compiler_pool.dart';
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 ''', headers: {'Content-Type': 'text/html'}); 217 ''', headers: {'Content-Type': 'text/html'});
217 } 218 }
218 219
219 return new shelf.Response.notFound('Not found.'); 220 return new shelf.Response.notFound('Not found.');
220 } 221 }
221 222
222 /// Loads the test suite at [path] on the browser [browser]. 223 /// Loads the test suite at [path] on the browser [browser].
223 /// 224 ///
224 /// This will start a browser to load the suite if one isn't already running. 225 /// This will start a browser to load the suite if one isn't already running.
225 /// Throws an [ArgumentError] if [browser] isn't a browser platform. 226 /// Throws an [ArgumentError] if [browser] isn't a browser platform.
226 Future<Suite> loadSuite(String path, TestPlatform browser) { 227 Future<Suite> loadSuite(String path, TestPlatform browser,
228 Metadata metadata) {
227 if (!browser.isBrowser) { 229 if (!browser.isBrowser) {
228 throw new ArgumentError("$browser is not a browser."); 230 throw new ArgumentError("$browser is not a browser.");
229 } 231 }
230 232
231 return new Future.sync(() { 233 return new Future.sync(() {
232 if (_pubServeUrl != null) { 234 if (_pubServeUrl != null) {
233 var suitePrefix = p.relative(path, from: p.join(_root, 'test')) + 235 var suitePrefix = p.relative(path, from: p.join(_root, 'test')) +
234 '.browser_test'; 236 '.browser_test';
235 var jsUrl = _pubServeUrl.resolve('$suitePrefix.dart.js'); 237 var jsUrl = _pubServeUrl.resolve('$suitePrefix.dart.js');
236 return _pubServeSuite(path, jsUrl).then((_) => 238 return _pubServeSuite(path, jsUrl).then((_) =>
237 _pubServeUrl.resolve('$suitePrefix.html')); 239 _pubServeUrl.resolve('$suitePrefix.html'));
238 } 240 }
239 241
240 return new Future.sync(() => browser.isJS ? _compileSuite(path) : null) 242 return new Future.sync(() => browser.isJS ? _compileSuite(path) : null)
241 .then((_) { 243 .then((_) {
242 if (_closed) return null; 244 if (_closed) return null;
243 return url.resolveUri( 245 return url.resolveUri(
244 p.toUri(p.relative(path, from: _root) + ".browser_test.html")); 246 p.toUri(p.relative(path, from: _root) + ".browser_test.html"));
245 }); 247 });
246 }).then((suiteUrl) { 248 }).then((suiteUrl) {
247 if (_closed) return null; 249 if (_closed) return null;
248 250
249 // TODO(nweiz): Don't start the browser until all the suites are compiled. 251 // TODO(nweiz): Don't start the browser until all the suites are compiled.
250 return _browserManagerFor(browser).then((browserManager) { 252 return _browserManagerFor(browser).then((browserManager) {
251 if (_closed) return null; 253 if (_closed) return null;
252 return browserManager.loadSuite(path, suiteUrl); 254 return browserManager.loadSuite(path, suiteUrl, metadata);
253 }).then((suite) { 255 }).then((suite) {
254 if (_closed) return null; 256 if (_closed) return null;
255 if (suite != null) return suite.change(platform: browser.name); 257 if (suite != null) return suite.change(platform: browser.name);
256 258
257 // If the browser manager fails to load a suite and the server isn't 259 // If the browser manager fails to load a suite and the server isn't
258 // closed, it's probably because the browser failed. We emit the failure 260 // closed, it's probably because the browser failed. We emit the failure
259 // here to ensure that it gets surfaced. 261 // here to ensure that it gets surfaced.
260 return _browsers[browser].onExit; 262 return _browsers[browser].onExit;
261 }); 263 });
262 }); 264 });
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 if (_pubServeUrl == null) { 393 if (_pubServeUrl == null) {
392 new Directory(_compiledDir).deleteSync(recursive: true); 394 new Directory(_compiledDir).deleteSync(recursive: true);
393 } else { 395 } else {
394 _http.close(); 396 _http.close();
395 } 397 }
396 398
397 _closeCompleter.complete(); 399 _closeCompleter.complete();
398 }).catchError(_closeCompleter.completeError); 400 }).catchError(_closeCompleter.completeError);
399 } 401 }
400 } 402 }
OLDNEW
« no previous file with comments | « lib/src/runner/browser/iframe_listener.dart ('k') | lib/src/runner/loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698