From 1237dc0de653d789fe62d33a5c53d33ba1f3afdd Mon Sep 17 00:00:00 2001 From: Brennan Conroy Date: Fri, 18 Nov 2022 09:58:51 -0800 Subject: [PATCH] [TS Client] Fix CompletionMessage result when passing false or null --- .../src/MessagePackHubProtocol.ts | 3 +- .../tests/MessagePackHubProtocol.test.ts | 34 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/SignalR/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts b/src/SignalR/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts index 73cf0bbb3391..4d7a6c75df34 100644 --- a/src/SignalR/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts +++ b/src/SignalR/clients/ts/signalr-protocol-msgpack/src/MessagePackHubProtocol.ts @@ -284,7 +284,8 @@ export class MessagePackHubProtocol implements IHubProtocol { } private _writeCompletion(completionMessage: CompletionMessage): ArrayBuffer { - const resultKind = completionMessage.error ? this._errorResult : completionMessage.result ? this._nonVoidResult : this._voidResult; + const resultKind = completionMessage.error ? this._errorResult : + (completionMessage.result !== undefined) ? this._nonVoidResult : this._voidResult; let payload: any; switch (resultKind) { diff --git a/src/SignalR/clients/ts/signalr-protocol-msgpack/tests/MessagePackHubProtocol.test.ts b/src/SignalR/clients/ts/signalr-protocol-msgpack/tests/MessagePackHubProtocol.test.ts index 74314a07c536..c51f54870625 100644 --- a/src/SignalR/clients/ts/signalr-protocol-msgpack/tests/MessagePackHubProtocol.test.ts +++ b/src/SignalR/clients/ts/signalr-protocol-msgpack/tests/MessagePackHubProtocol.test.ts @@ -218,6 +218,40 @@ describe("MessagePackHubProtocol", () => { expect(new Uint8Array(buffer)).toEqual(payload); }); + it("can write completion message with false result", () => { + const payload = new Uint8Array([ + 0x09, // length prefix + 0x95, // message array length = 5 (fixarray) + 0x03, // type = 3 = Completion + 0x80, // headers + 0xa3, // invocationID = string length 3 + 0x61, // a + 0x62, // b + 0x63, // c + 0x03, // result type, 3 - non-void result + 0xc2, // false + ]); + const buffer = new MessagePackHubProtocol().writeMessage({ type: MessageType.Completion, invocationId: "abc", result: false }); + expect(new Uint8Array(buffer)).toEqual(payload); + }); + + it("can write completion message with null result", () => { + const payload = new Uint8Array([ + 0x09, // length prefix + 0x95, // message array length = 5 (fixarray) + 0x03, // type = 3 = Completion + 0x80, // headers + 0xa3, // invocationID = string length 3 + 0x61, // a + 0x62, // b + 0x63, // c + 0x03, // result type, 3 - non-void result + 0xc0, // null + ]); + const buffer = new MessagePackHubProtocol().writeMessage({ type: MessageType.Completion, invocationId: "abc", result: null }); + expect(new Uint8Array(buffer)).toEqual(payload); + }); + it("will preserve double precision", () => { const invocation = { arguments: [Number(0.005)],