fix(WebWorker): Add zone support to MessageBus

Closes #4053
This commit is contained in:
Jason Teplitz
2015-09-08 10:52:06 -07:00
parent 3b9c08676a
commit f3da37c92f
35 changed files with 628 additions and 365 deletions
@@ -19,5 +19,5 @@ void expectSinkSendsEncodedJson(SpyObject socket, MessageBusSink sink,
void expectMessageEquality(String message, Map expectedData, String channel) {
expect(JSON.decode(message))
.toEqual({'channel': channel, 'message': expectedData});
.toEqual([{'channel': channel, 'message': expectedData}]);
}
@@ -38,6 +38,7 @@ main() {
inject([AsyncTestCompleter], (async) {
const NUM_CLIENTS = 5;
var sink = new MultiClientServerMessageBusSink();
sink.initChannel(CHANNEL, false);
int numMessagesSent = 0;
// initialize all the sockets
var sockets = new List<WebSocketWrapper>(NUM_CLIENTS);
@@ -78,7 +79,7 @@ main() {
for (var i = 0; i < numMessages; i++) {
var message = {'value': random.nextInt(MAX)};
messageHistory
.add(JSON.encode({'channel': CHANNEL, 'message': message}));
.add(JSON.encode([{'channel': CHANNEL, 'message': message}]));
}
// copy the message history to ensure the test fails if the wrapper modifies the list
return new List.from(messageHistory);
@@ -136,7 +137,7 @@ main() {
});
void sendMessage(StreamController controller, dynamic message) {
controller.add(JSON.encode(message));
controller.add(JSON.encode([message]));
}
void testForwardingMessages(bool primary, bool events, Function done) {
@@ -146,10 +147,11 @@ main() {
new WebSocketWrapper(messageHistory, resultMarkers, result.socket);
socket.setPrimary(primary);
var source = new MultiClientServerMessageBusSource(null);
var source = new MultiClientServerMessageBusSource();
source.addConnection(socket);
var channel = events ? EVENT_CHANNEL : CHANNEL;
source.initChannel(channel, false);
source.from(channel).listen((message) {
expect(message).toEqual(MESSAGE);
done();
@@ -187,7 +189,9 @@ main() {
socket.setPrimary(true);
var source =
new MultiClientServerMessageBusSource(() => async.done());
new MultiClientServerMessageBusSource();
source.onResult.listen((result) => async.done());
source.initChannel(CHANNEL, false);
source.addConnection(socket);
var message = {
@@ -28,6 +28,8 @@ main() {
inject([AsyncTestCompleter], (async) {
var socket = new SpyWebSocket();
var sink = new SingleClientServerMessageBusSink();
sink.initChannel(CHANNEL, false);
sink.setConnection(socket);
expectSinkSendsEncodedJson(socket, sink, "add", async);
}));
@@ -36,6 +38,7 @@ main() {
"should buffer messages before connect",
inject([AsyncTestCompleter], (async) {
var sink = new SingleClientServerMessageBusSink();
sink.initChannel(CHANNEL, false);
sink.to(CHANNEL).add(MESSAGE);
var socket = new SpyWebSocket();
@@ -51,6 +54,8 @@ main() {
inject([AsyncTestCompleter], (async) {
var SECOND_MESSAGE = const {'test': 12, 'second': 'hi'};
var sink = new SingleClientServerMessageBusSink();
sink.initChannel(CHANNEL, false);
sink.to(CHANNEL).add(MESSAGE);
var socket = new SpyWebSocket();
@@ -78,20 +83,19 @@ main() {
it(
"should decode JSON messages and emit them",
inject([AsyncTestCompleter], (async) {
var socket = new SpyWebSocket();
StreamController<String> controller =
new StreamController.broadcast();
socket.spy("asBroadcastStream").andCallFake(() => controller.stream);
var source = new SingleClientServerMessageBusSource();
source.setConnectionFromWebSocket(socket);
source.initChannel(CHANNEL, false);
source.attachTo(controller.stream);
source.from(CHANNEL).listen((message) {
expect(message).toEqual(MESSAGE);
async.done();
});
controller
.add(JSON.encode({'channel': CHANNEL, 'message': MESSAGE}));
.add(JSON.encode([{'channel': CHANNEL, 'message': MESSAGE}]));
}));
});
}
@@ -28,6 +28,7 @@ main() {
inject([AsyncTestCompleter], (async) {
var socket = new SpyWebSocket();
var sink = new WebSocketMessageBusSink(socket);
sink.initChannel(CHANNEL, false);
expectSinkSendsEncodedJson(socket, sink, "send", async);
}));
});
@@ -41,6 +42,7 @@ main() {
new StreamController.broadcast();
socket.spy("get:onMessage").andCallFake(() => controller.stream);
var source = new WebSocketMessageBusSource(socket);
source.initChannel(CHANNEL, false);
source.from(CHANNEL).listen((message) {
expect(message).toEqual(MESSAGE);
@@ -49,7 +51,7 @@ main() {
var event = new SpyMessageEvent();
event.spy("get:data").andCallFake(
() => JSON.encode({'channel': CHANNEL, 'message': MESSAGE}));
() => JSON.encode([{'channel': CHANNEL, 'message': MESSAGE}]));
controller.add(event);
}));
});