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

Unified Diff: tools/testing/dart/test_runner.dart

Issue 9538009: test.dart sometimes associates the wrong stderr with a task. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: : Adds a method to drain stderr Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/dart/test_runner.dart
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index fe5a2ea8933db1b5e19d109e42798f082badf437..3310fbeed86678f2fbe77f399923eabf151cdb20 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -166,23 +166,22 @@ class BrowserTestCase extends TestCase {
* [TestCase] this is the output of.
*/
class TestOutput {
- TestCase testCase;
- int exitCode;
- bool timedOut;
+ final TestCase testCase;
+ final int exitCode;
+ final bool timedOut;
+ final List<String> stdout;
+ final List<String> stderr;
+ final Duration time;
bool failed = false;
- List<String> stdout;
- List<String> stderr;
- Duration time;
/**
* Set to true if we encounter a condition in the output that indicates we
* need to rerun this test.
*/
- bool requestRetry;
+ bool requestRetry = false;
TestOutput(this.testCase, this.exitCode, this.timedOut, this.stdout,
this.stderr, this.time) {
testCase.output = this;
- requestRetry = false;
}
String get result() =>
@@ -272,7 +271,7 @@ class RunningProcess {
[this.allowRetries, this.processQueue]);
/**
- * Called when all commands are executed. [exitCode] is 0 if all command
+ * Called when all commands are executed. [exitCode] is 0 if all commands
* succeded, otherwise it will have the exit code of the first failing
* command.
*/
@@ -345,8 +344,8 @@ class RunningProcess {
void start() {
Expect.isFalse(testCase.expectedOutcomes.contains(SKIP));
- stdout = new List<String>();
- stderr = new List<String>();
+ stdout = [];
+ stderr = [];
currentStep = 0;
runCommand(testCase.commands[currentStep++], stepExitHandler);
}
@@ -452,10 +451,10 @@ class BatchRunnerProcess {
void doStartTest(TestCase testCase) {
_startTime = new Date.now();
- _testStdout = new List<String>();
- _testStderr = new List<String>();
- _stdoutStream.lineHandler = _readOutput(_stdoutStream, _testStdout);
- _stderrStream.lineHandler = _readOutput(_stderrStream, _testStderr);
+ _testStdout = [];
+ _testStderr = [];
+ _stdoutStream.lineHandler = _readStdout(_stdoutStream, _testStdout);
+ _stderrStream.lineHandler = _readStderr(_stderrStream, _testStderr);
_timer = new Timer(_timeoutHandler, testCase.timeout * 1000);
var line = _createArgumentsLine(testCase.batchTestArguments);
_process.stdin.write(line.charCodes());
@@ -465,7 +464,39 @@ class BatchRunnerProcess {
return Strings.join(arguments, ' ') + '\n';
}
+ // This removes the line handler from stderr and reads all
+ // remaining bytes from it.
+ // TODO(zundel): This is pretty bad - streams need flush()
Emily Fortuna 2012/02/29 19:59:03 Add issue id # (1407) in comment (also possibly le
zundel 2012/02/29 20:19:08 Done.
+ _drainStderr() {
+ _stderrStream.lineHandler = null;
+ while(true) {
+ var available = 0;
+ try {
+ available = _process.stderr.available();
+ } catch (SocketIOException ex) {
+ break;
+ }
+ if (available <= 0) break;
+ String result = _stderrStream.readLine();
+ if (result == null) {
+ // This is intended to catch the last line, but might foul up
+ // if more bytes immediately come available after read() and before
+ // the test for available()
+ result = _stderrStream.read();
Emily Fortuna 2012/02/29 19:59:03 Perhaps I'm misunderstanding the API, but would th
zundel 2012/02/29 20:19:08 (see next comment).
+ if (result == null) {
+ var buf = new List<int>(available);
+ _process.stderr.readInto(buf, 0, available);;
Siggi Cherem (dart-lang) 2012/02/29 19:13:32 extra ;
Emily Fortuna 2012/02/29 19:59:03 _stderrStream was instantiated from new StringInpu
zundel 2012/02/29 20:19:08 I didn't know about 1407 and filed this bug to try
+ result = new String.fromCharCodes(buf);
+ _testStderr.add(result);
+ break;
+ }
+ }
+ _testStderr.add(result);
+ }
+ }
+
int _reportResult(String output) {
+ _drainStderr();
var test = _currentTest;
_currentTest = null;
@@ -479,7 +510,7 @@ class BatchRunnerProcess {
test.completed();
}
- Function _readOutput(StringInputStream stream, List<String> buffer) {
+ Function _readStdout(StringInputStream stream, List<String> buffer) {
return () {
var status;
var line = stream.readLine();
@@ -505,33 +536,40 @@ class BatchRunnerProcess {
}
};
}
+
+ Function _readStderr(StringInputStream stream, List<String> buffer) {
+ return () {
Emily Fortuna 2012/02/29 19:59:03 Check out makeReadHandler on line 334. whesse als
zundel 2012/02/29 20:19:08 I just got rid of _readStdout() and replaced it wi
+ var line;
+ while ((line = stream.readLine()) != null) {
+ buffer.add(line);
+ }
+ };
+ }
void _exitHandler(exitCode) {
if (_timer != null) _timer.cancel();
+ _reportResult(">>> TEST CRASH");
_process.close();
- _startProcess(() {
- _reportResult(">>> TEST CRASH");
- });
+ _startProcess();
}
void _timeoutHandler(ignore) {
- _process.exitHandler = (exitCode) {
+ _process.exitHandler = (exitCode) {_
+ reportResult(">>> TEST TIMEOUT");
_process.close();
- _startProcess(() {
- _reportResult(">>> TEST TIMEOUT");
- });
+ _startProcess();
};
_process.kill();
}
- void _startProcess(then) {
+ void _startProcess([Function then = null]) {
_process = new Process.start(_executable, _batchArguments);
_stdoutStream = new StringInputStream(_process.stdout);
_stderrStream = new StringInputStream(_process.stderr);
- _testStdout = new List<String>();
- _testStderr = new List<String>();
- _stdoutStream.lineHandler = _readOutput(_stdoutStream, _testStdout);
- _stderrStream.lineHandler = _readOutput(_stderrStream, _testStderr);
+ _testStdout = [];
+ _testStderr = [];
+ _stdoutStream.lineHandler = _readStdout(_stdoutStream, _testStdout);
+ _stderrStream.lineHandler = _readStderr(_stderrStream, _testStderr);
_process.exitHandler = _exitHandler;
_process.startHandler = then;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698