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

View File

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