fixup tests

This commit is contained in:
Aran Donohue 2025-02-14 08:59:05 -08:00
parent 16dbabd7c6
commit b39a6ff62d
No known key found for this signature in database
GPG Key ID: EA98761C2C20A998
2 changed files with 32 additions and 27 deletions

View File

@ -31,7 +31,7 @@ import 'web_streams.dart';
const _contentTypeKey = 'Content-Type';
class XhrTransportStream implements GrpcTransportStream {
final XMLHttpRequest _request;
final IXMLHttpRequest _request;
final ErrorHandler _onError;
final Function(XhrTransportStream stream) _onDone;
bool _headersReceived = false;
@ -163,6 +163,7 @@ abstract interface class IXMLHttpRequest {
set responseType(String responseType);
set withCredentials(bool withCredentials);
void abort();
void open(
String method,
String url, [
@ -212,6 +213,11 @@ class XMLHttpRequestImpl implements IXMLHttpRequest {
_xhr.withCredentials = withCredentials;
}
@override
void abort() {
_xhr.abort();
}
@override
void open(
String method,
@ -301,8 +307,7 @@ class XhrClientConnection implements ClientConnection {
XhrTransportStream _createXhrTransportStream(IXMLHttpRequest request,
ErrorHandler onError, void Function(XhrTransportStream stream) onDone) {
return XhrTransportStream(request.toXMLHttpRequest(),
onError: onError, onDone: onDone);
return XhrTransportStream(request, onError: onError, onDone: onDone);
}
void _removeStream(XhrTransportStream stream) {

View File

@ -18,7 +18,7 @@ library;
import 'dart:async';
import 'dart:js_interop';
import 'dart:typed_data';
import 'package:async/async.dart';
import 'package:grpc/src/client/call.dart';
import 'package:grpc/src/client/transport/xhr_transport.dart';
@ -54,9 +54,9 @@ class MockHttpRequest extends Mock implements IXMLHttpRequest {
@override
final int status;
// Some test code expects to call this
set readyState(int state);
set responseText(String text);
@override
String get responseText =>
super.noSuchMethod(Invocation.getter(#responseText), returnValue: '');
@override
int get readyState =>
@ -214,7 +214,8 @@ void main() {
await stream.terminate();
final expectedData = frame(data);
verify(connection.latestRequest.send(expectedData.toJSBox));
verify(
connection.latestRequest.send(Uint8List.fromList(expectedData).toJS));
});
test('Stream handles headers properly', () async {
@ -230,16 +231,15 @@ void main() {
(error, _) => fail(error.toString()));
when(transport.latestRequest.responseHeaders).thenReturn(responseHeaders);
when(transport.latestRequest.response)
.thenReturn(String.fromCharCodes(frame(<int>[])).toJS);
when(transport.latestRequest.responseText)
.thenReturn(String.fromCharCodes(frame(<int>[])));
// Set expectation for request readyState and generate two readyStateChange
// events, so that incomingMessages stream completes.
final readyStates = [XMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.DONE];
transport.latestRequest.readyState = readyStates[0];
when(transport.latestRequest.readyState).thenReturnInOrder(readyStates);
transport.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
transport.latestRequest.readyState = readyStates[1];
transport.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
@ -272,15 +272,15 @@ void main() {
final encodedString = String.fromCharCodes(encodedTrailers);
when(connection.latestRequest.responseHeaders).thenReturn(requestHeaders);
when(connection.latestRequest.response).thenReturn(encodedString.toJS);
when(connection.latestRequest.responseText).thenReturn(encodedString);
// Set expectation for request readyState and generate events so that
// incomingMessages stream completes.
connection.latestRequest.readyState = XMLHttpRequest.HEADERS_RECEIVED;
when(connection.latestRequest.readyState).thenReturnInOrder(
[XMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.DONE]);
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
connection.latestRequest.progressController.add(progressEvent);
connection.latestRequest.readyState = XMLHttpRequest.DONE;
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
@ -307,14 +307,14 @@ void main() {
final encodedString = String.fromCharCodes(encoded);
when(connection.latestRequest.responseHeaders).thenReturn(requestHeaders);
when(connection.latestRequest.response).thenReturn(encodedString.toJS);
when(connection.latestRequest.responseText).thenReturn(encodedString);
// Set expectation for request readyState and generate events so that
// incomingMessages stream completes.
connection.latestRequest.readyState = XMLHttpRequest.HEADERS_RECEIVED;
when(connection.latestRequest.readyState).thenReturnInOrder(
[XMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.DONE]);
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
connection.latestRequest.progressController.add(progressEvent);
connection.latestRequest.readyState = XMLHttpRequest.DONE;
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
@ -339,16 +339,16 @@ void main() {
requestHeaders, (error, _) => fail(error.toString()));
final data = List<int>.filled(10, 224);
when(connection.latestRequest.responseHeaders).thenReturn(requestHeaders);
when(connection.latestRequest.response)
.thenReturn(String.fromCharCodes(frame(data)).toJS);
when(connection.latestRequest.responseText)
.thenReturn(String.fromCharCodes(frame(data)));
// Set expectation for request readyState and generate events, so that
// incomingMessages stream completes.
connection.latestRequest.readyState = XMLHttpRequest.HEADERS_RECEIVED;
when(connection.latestRequest.readyState).thenReturnInOrder(
[XMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.DONE]);
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
connection.latestRequest.progressController.add(progressEvent);
connection.latestRequest.readyState = XMLHttpRequest.DONE;
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
@ -370,8 +370,8 @@ void main() {
const errorDetails = 'error details';
when(connection.latestRequest.responseHeaders)
.thenReturn({'content-type': 'application/grpc+proto'});
connection.latestRequest.readyState = XMLHttpRequest.DONE;
connection.latestRequest.responseText = errorDetails;
when(connection.latestRequest.readyState).thenReturn(XMLHttpRequest.DONE);
when(connection.latestRequest.responseText).thenReturn(errorDetails);
connection.latestRequest.readyStateChangeController
.add(readyStateChangeEvent);
await errorReceived.future;
@ -404,12 +404,12 @@ void main() {
// At first invocation the response should be the the first message, after
// that first + last messages.
var first = true;
when(connection.latestRequest.response).thenAnswer((_) {
when(connection.latestRequest.responseText).thenAnswer((_) {
if (first) {
first = false;
return encodedStrings[0].toJS;
return encodedStrings[0];
}
return (encodedStrings[0] + encodedStrings[1]).toJS;
return encodedStrings[0] + encodedStrings[1];
});
final readyStates = [XMLHttpRequest.HEADERS_RECEIVED, XMLHttpRequest.DONE];