OLD | NEW |
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/metadata.dart'; |
19 import '../../backend/suite.dart'; | 19 import '../../backend/suite.dart'; |
20 import '../../backend/test_platform.dart'; | 20 import '../../backend/test_platform.dart'; |
21 import '../../util/io.dart'; | 21 import '../../util/io.dart'; |
22 import '../../util/path_handler.dart'; | 22 import '../../util/path_handler.dart'; |
23 import '../../util/one_off_handler.dart'; | 23 import '../../util/one_off_handler.dart'; |
24 import '../../utils.dart'; | 24 import '../../utils.dart'; |
| 25 import '../application_exception.dart'; |
25 import '../load_exception.dart'; | 26 import '../load_exception.dart'; |
26 import 'browser.dart'; | 27 import 'browser.dart'; |
27 import 'browser_manager.dart'; | 28 import 'browser_manager.dart'; |
28 import 'compiler_pool.dart'; | 29 import 'compiler_pool.dart'; |
29 import 'chrome.dart'; | 30 import 'chrome.dart'; |
30 import 'dartium.dart'; | 31 import 'dartium.dart'; |
31 import 'content_shell.dart'; | 32 import 'content_shell.dart'; |
32 import 'firefox.dart'; | 33 import 'firefox.dart'; |
33 import 'phantom_js.dart'; | 34 import 'phantom_js.dart'; |
34 import 'safari.dart'; | 35 import 'safari.dart'; |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 }), platform); | 351 }), platform); |
351 _browsers[platform] = browser; | 352 _browsers[platform] = browser; |
352 | 353 |
353 // TODO(nweiz): Gracefully handle the browser being killed before the | 354 // TODO(nweiz): Gracefully handle the browser being killed before the |
354 // tests complete. | 355 // tests complete. |
355 browser.onExit.catchError((error, stackTrace) { | 356 browser.onExit.catchError((error, stackTrace) { |
356 if (completer.isCompleted) return; | 357 if (completer.isCompleted) return; |
357 completer.completeError(error, stackTrace); | 358 completer.completeError(error, stackTrace); |
358 }); | 359 }); |
359 | 360 |
360 return completer.future; | 361 return completer.future.timeout(new Duration(seconds: 7), onTimeout: () { |
| 362 throw new ApplicationException( |
| 363 "Timed out waiting for ${platform.name} to connect."); |
| 364 }); |
361 } | 365 } |
362 | 366 |
363 /// Starts the browser identified by [browser] and has it load [url]. | 367 /// Starts the browser identified by [browser] and has it load [url]. |
364 Browser _newBrowser(Uri url, TestPlatform browser) { | 368 Browser _newBrowser(Uri url, TestPlatform browser) { |
365 switch (browser) { | 369 switch (browser) { |
366 case TestPlatform.dartium: return new Dartium(url); | 370 case TestPlatform.dartium: return new Dartium(url); |
367 case TestPlatform.contentShell: return new ContentShell(url); | 371 case TestPlatform.contentShell: return new ContentShell(url); |
368 case TestPlatform.chrome: return new Chrome(url); | 372 case TestPlatform.chrome: return new Chrome(url); |
369 case TestPlatform.phantomJS: return new PhantomJS(url); | 373 case TestPlatform.phantomJS: return new PhantomJS(url); |
370 case TestPlatform.firefox: return new Firefox(url); | 374 case TestPlatform.firefox: return new Firefox(url); |
(...skipping 24 matching lines...) Expand all Loading... |
395 if (_pubServeUrl == null) { | 399 if (_pubServeUrl == null) { |
396 new Directory(_compiledDir).deleteSync(recursive: true); | 400 new Directory(_compiledDir).deleteSync(recursive: true); |
397 } else { | 401 } else { |
398 _http.close(); | 402 _http.close(); |
399 } | 403 } |
400 | 404 |
401 _closeCompleter.complete(); | 405 _closeCompleter.complete(); |
402 }).catchError(_closeCompleter.completeError); | 406 }).catchError(_closeCompleter.completeError); |
403 } | 407 } |
404 } | 408 } |
OLD | NEW |