| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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.integration.analysis; | 5 library test.integration.analysis; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 import 'dart:io'; | 10 import 'dart:io'; |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 } | 452 } |
| 453 | 453 |
| 454 /** | 454 /** |
| 455 * Instances of the class [Server] manage a connection to a server process, and | 455 * Instances of the class [Server] manage a connection to a server process, and |
| 456 * facilitate communication to and from the server. | 456 * facilitate communication to and from the server. |
| 457 */ | 457 */ |
| 458 class Server { | 458 class Server { |
| 459 /** | 459 /** |
| 460 * Server process object, or null if server hasn't been started yet. | 460 * Server process object, or null if server hasn't been started yet. |
| 461 */ | 461 */ |
| 462 Process _process = null; | 462 Process _process; |
| 463 | 463 |
| 464 /** | 464 /** |
| 465 * Commands that have been sent to the server but not yet acknowledged, and | 465 * Commands that have been sent to the server but not yet acknowledged, and |
| 466 * the [Completer] objects which should be completed when acknowledgement is | 466 * the [Completer] objects which should be completed when acknowledgement is |
| 467 * received. | 467 * received. |
| 468 */ | 468 */ |
| 469 final Map<String, Completer> _pendingCommands = <String, Completer>{}; | 469 final Map<String, Completer> _pendingCommands = <String, Completer>{}; |
| 470 | 470 |
| 471 /** | 471 /** |
| 472 * Number which should be used to compute the 'id' to send in the next command | 472 * Number which should be used to compute the 'id' to send in the next command |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 _recordStdio('SEND: $line'); | 647 _recordStdio('SEND: $line'); |
| 648 _process.stdin.add(UTF8.encoder.convert("$line\n")); | 648 _process.stdin.add(UTF8.encoder.convert("$line\n")); |
| 649 return completer.future; | 649 return completer.future; |
| 650 } | 650 } |
| 651 | 651 |
| 652 /** | 652 /** |
| 653 * Start the server. If [profileServer] is `true`, the server will be started | 653 * Start the server. If [profileServer] is `true`, the server will be started |
| 654 * with "--observe" and "--pause-isolates-on-exit", allowing the observatory | 654 * with "--observe" and "--pause-isolates-on-exit", allowing the observatory |
| 655 * to be used. | 655 * to be used. |
| 656 */ | 656 */ |
| 657 Future start( | 657 Future start({ |
| 658 {bool checked: true, | 658 bool checked: true, |
| 659 int diagnosticPort, | 659 int diagnosticPort, |
| 660 bool enableNewAnalysisDriver: false, | 660 bool enableNewAnalysisDriver: false, |
| 661 bool profileServer: false, | 661 bool profileServer: false, |
| 662 String sdkPath, | 662 String sdkPath, |
| 663 int servicesPort, | 663 int servicesPort, |
| 664 bool useAnalysisHighlight2: false}) { | 664 bool useAnalysisHighlight2: false, |
| 665 }) async { |
| 665 if (_process != null) { | 666 if (_process != null) { |
| 666 throw new Exception('Process already started'); | 667 throw new Exception('Process already started'); |
| 667 } | 668 } |
| 668 _time.start(); | 669 _time.start(); |
| 669 String dartBinary = Platform.executable; | 670 String dartBinary = Platform.executable; |
| 670 String rootDir = | 671 String rootDir = |
| 671 findRoot(Platform.script.toFilePath(windows: Platform.isWindows)); | 672 findRoot(Platform.script.toFilePath(windows: Platform.isWindows)); |
| 672 String serverPath = normalize(join(rootDir, 'bin', 'server.dart')); | 673 String serverPath = normalize(join(rootDir, 'bin', 'server.dart')); |
| 673 List<String> arguments = []; | 674 List<String> arguments = []; |
| 674 // | 675 // |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 if (useAnalysisHighlight2) { | 711 if (useAnalysisHighlight2) { |
| 711 arguments.add('--useAnalysisHighlight2'); | 712 arguments.add('--useAnalysisHighlight2'); |
| 712 } | 713 } |
| 713 if (!enableNewAnalysisDriver) { | 714 if (!enableNewAnalysisDriver) { |
| 714 arguments.add('--disable-new-analysis-driver'); | 715 arguments.add('--disable-new-analysis-driver'); |
| 715 } | 716 } |
| 716 // print('Launching $serverPath'); | 717 // print('Launching $serverPath'); |
| 717 // print('$dartBinary ${arguments.join(' ')}'); | 718 // print('$dartBinary ${arguments.join(' ')}'); |
| 718 // TODO(devoncarew): We could experiment with instead launching the analysis | 719 // TODO(devoncarew): We could experiment with instead launching the analysis |
| 719 // server in a separate isolate. This would make it easier to debug the | 720 // server in a separate isolate. This would make it easier to debug the |
| 720 // integration tests, and would like speed the tests up as well. | 721 // integration tests, and would likely speed the tests up as well. |
| 721 return Process.start(dartBinary, arguments).then((Process process) { | 722 _process = await Process.start(dartBinary, arguments); |
| 722 _process = process; | 723 _process.exitCode.then((int code) { |
| 723 process.exitCode.then((int code) { | 724 if (code != 0) { |
| 724 if (code != 0) { | 725 _badDataFromServer('server terminated with exit code $code'); |
| 725 _badDataFromServer('server terminated with exit code $code'); | 726 } |
| 726 } | |
| 727 }); | |
| 728 }); | 727 }); |
| 729 } | 728 } |
| 730 | 729 |
| 731 /** | 730 /** |
| 732 * Deal with bad data received from the server. | 731 * Deal with bad data received from the server. |
| 733 */ | 732 */ |
| 734 void _badDataFromServer(String details, {bool silent: false}) { | 733 void _badDataFromServer(String details, {bool silent: false}) { |
| 735 if (!silent) { | 734 if (!silent) { |
| 736 _recordStdio('BAD DATA FROM SERVER: $details'); | 735 _recordStdio('BAD DATA FROM SERVER: $details'); |
| 737 } | 736 } |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 990 void populateMismatches(item, List<MismatchDescriber> mismatches); | 989 void populateMismatches(item, List<MismatchDescriber> mismatches); |
| 991 | 990 |
| 992 /** | 991 /** |
| 993 * Create a [MismatchDescriber] describing a mismatch with a simple string. | 992 * Create a [MismatchDescriber] describing a mismatch with a simple string. |
| 994 */ | 993 */ |
| 995 MismatchDescriber simpleDescription(String description) => | 994 MismatchDescriber simpleDescription(String description) => |
| 996 (Description mismatchDescription) { | 995 (Description mismatchDescription) { |
| 997 mismatchDescription.add(description); | 996 mismatchDescription.add(description); |
| 998 }; | 997 }; |
| 999 } | 998 } |
| OLD | NEW |