Index: tests/standalone/src/EchoServerStreamTest.dart |
diff --git a/tests/standalone/src/EchoServerStreamTest.dart b/tests/standalone/src/EchoServerStreamTest.dart |
index 7bddbc177f020b204b6bf7def0031e9302779d38..5151be88f304e2f5ec6b051f00225034bff7f978 100644 |
--- a/tests/standalone/src/EchoServerStreamTest.dart |
+++ b/tests/standalone/src/EchoServerStreamTest.dart |
@@ -54,29 +54,40 @@ class EchoServerGame { |
SocketOutputStream stream = _socket.outputStream; |
void dataSent() { |
- // Reset buffer |
- for (int i = 0; i < MSGSIZE; i++) { |
- _buffer[i] = 1; |
- } |
- SocketInputStream stream = _socket.inputStream; |
+ InputStream inputStream = _socket.inputStream; |
+ int offset = 0; |
+ List<int> data; |
void dataReceived() { |
- for (int i = 0; i < MSGSIZE; i++) { |
- Expect.equals(FIRSTCHAR + i, _buffer[i]); |
- } |
- _messages++; |
- _socket.close(); |
- if (_messages < MESSAGES) { |
- sendData(); |
+ // Test both read and readInto. |
+ int bytesRead = 0; |
+ if (_messages % 2 == 0) { |
+ bytesRead = inputStream.readInto(data, offset, MSGSIZE - offset); |
+ for (int i = 0; i < offset + bytesRead; i++) { |
+ Expect.equals(FIRSTCHAR + i, data[i]); |
+ } |
} else { |
- shutdown(); |
+ data = inputStream.read(); |
+ bytesRead = data.length; |
+ for (int i = 0; i < data.length; i++) { |
+ Expect.equals(FIRSTCHAR + i + offset, data[i]); |
+ } |
} |
- } |
- bool read = stream.read(_buffer, 0, MSGSIZE, dataReceived); |
- if (read) { |
- dataReceived(); |
+ offset += bytesRead; |
+ if (offset == MSGSIZE) { |
+ _messages++; |
+ _socket.close(); |
+ if (_messages < MESSAGES) { |
+ sendData(); |
+ } else { |
+ shutdown(); |
+ } |
+ } |
} |
+ |
+ if (_messages % 2 == 0) data = new List<int>(MSGSIZE); |
+ inputStream.dataHandler = dataReceived; |
} |
_socket.setCloseHandler(closeHandler); |
@@ -125,25 +136,21 @@ class EchoServer extends Isolate { |
void connectionHandler() { |
Socket _client; |
- |
- void messageHandler() { |
- |
- List<int> buffer = new List<int>(MSGSIZE); |
- |
- void dataReceived() { |
- |
- SocketOutputStream outputStream = _client.outputStream; |
- |
- for (int i = 0; i < MSGSIZE; i++) { |
+ InputStream inputStream; |
+ List<int> buffer = new List<int>(MSGSIZE); |
+ int offset = 0; |
+ |
+ void dataReceived() { |
+ SocketOutputStream outputStream = _client.outputStream; |
+ int bytesRead = inputStream.readInto(buffer, offset, MSGSIZE - offset); |
+ if (bytesRead > 0) { |
+ offset += bytesRead; |
+ for (int i = 0; i < offset; i++) { |
Expect.equals(EchoServerGame.FIRSTCHAR + i, buffer[i]); |
} |
- outputStream.write(buffer, 0, MSGSIZE, null); |
- } |
- |
- SocketInputStream inputStream = _client.inputStream; |
- bool read = inputStream.read(buffer, 0, MSGSIZE, dataReceived); |
- if (read) { |
- dataReceived(); |
+ if (offset == MSGSIZE) { |
+ outputStream.write(buffer, 0, buffer.length, null); |
+ } |
} |
} |
@@ -157,7 +164,8 @@ class EchoServer extends Isolate { |
} |
_client = _server.accept(); |
- _client.setDataHandler(messageHandler); |
+ inputStream = _client.inputStream; |
+ inputStream.dataHandler = dataReceived; |
_client.setCloseHandler(closeHandler); |
_client.setErrorHandler(errorHandler); |
} |