|
2 | 2 | // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
3 | 3 |
|
4 | 4 | import com.google.gson.JsonArray;
|
| 5 | +import org.junit.Rule; |
5 | 6 | import org.junit.Test;
|
| 7 | +import org.junit.rules.ExpectedException; |
6 | 8 |
|
7 | 9 | import static org.junit.Assert.*;
|
8 | 10 |
|
@@ -33,68 +35,108 @@ public void VerifyWriteMessage() {
|
33 | 35 | assertEquals(expectedResult, result);
|
34 | 36 | }
|
35 | 37 |
|
| 38 | + @Test |
| 39 | + public void ParsePingMessage() { |
| 40 | + String stringifiedMessage = "{\"type\":6}\u001E"; |
| 41 | + HubMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
| 42 | + |
| 43 | + //We know it's only one message |
| 44 | + assertEquals(1, messages.length); |
| 45 | + assertEquals(HubMessageType.PING, messages[0].getMessageType()); |
| 46 | + } |
| 47 | + |
36 | 48 | @Test
|
37 | 49 | public void ParseSingleMessage() {
|
38 | 50 | String stringifiedMessage = "{\"type\":1,\"target\":\"test\",\"arguments\":[42]}\u001E";
|
39 |
| - InvocationMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
| 51 | + HubMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
40 | 52 |
|
41 | 53 | //We know it's only one message
|
42 | 54 | assertEquals(1, messages.length);
|
43 |
| - InvocationMessage message = messages[0]; |
44 |
| - assertEquals("test", message.target); |
45 |
| - assertEquals(null, message.invocationId); |
46 |
| - assertEquals(1, message.type); |
47 |
| - JsonArray messageResult = (JsonArray) message.arguments[0]; |
| 55 | + |
| 56 | + assertEquals(HubMessageType.INVOCATION, messages[0].getMessageType()); |
| 57 | + |
| 58 | + //We can safely cast here because we know that it's an invocation message. |
| 59 | + InvocationMessage invocationMessage = (InvocationMessage) messages[0]; |
| 60 | + |
| 61 | + assertEquals("test", invocationMessage.target); |
| 62 | + assertEquals(null, invocationMessage.invocationId); |
| 63 | + |
| 64 | + JsonArray messageResult = (JsonArray) invocationMessage.arguments[0]; |
48 | 65 | assertEquals(42, messageResult.getAsInt());
|
49 | 66 | }
|
50 | 67 |
|
| 68 | + @Rule |
| 69 | + public ExpectedException exceptionRule = ExpectedException.none(); |
| 70 | + |
| 71 | + @Test |
| 72 | + public void ParseSingleUnsupportedStreamItemMessage() { |
| 73 | + exceptionRule.expect(UnsupportedOperationException.class); |
| 74 | + exceptionRule.expectMessage("Support for streaming is not yet available"); |
| 75 | + String stringifiedMessage = "{\"type\":2,\"Id\":1,\"Item\":42}\u001E"; |
| 76 | + HubMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
| 77 | + } |
| 78 | + |
| 79 | + @Test |
| 80 | + public void ParseSingleUnsupportedStreamInvocationMessage() { |
| 81 | + exceptionRule.expect(UnsupportedOperationException.class); |
| 82 | + exceptionRule.expectMessage("Support for streaming is not yet available"); |
| 83 | + String stringifiedMessage = "{\"type\":4,\"Id\":1,\"target\":\"test\",\"arguments\":[42]}\u001E"; |
| 84 | + HubMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
| 85 | + } |
| 86 | + |
51 | 87 | @Test
|
52 | 88 | public void ParseHandshakeResponsePlusMessage() {
|
53 | 89 | String twoMessages = "{}\u001E{\"type\":1,\"target\":\"test\",\"arguments\":[42]}\u001E";
|
54 |
| - InvocationMessage[] messages = jsonHubProtocol.parseMessages(twoMessages); |
| 90 | + HubMessage[] messages = jsonHubProtocol.parseMessages(twoMessages); |
| 91 | + assertEquals(HubMessageType.INVOCATION, messages[0].getMessageType()); |
55 | 92 |
|
56 |
| - //We ignore the Handshake response for now |
57 |
| - InvocationMessage message = messages[0]; |
| 93 | + //We ignore the Handshake response for now and we can cast because we know we have in invocation message. |
| 94 | + InvocationMessage message = (InvocationMessage) messages[0]; |
58 | 95 | assertEquals("test", message.target);
|
59 |
| - assertEquals(null, message.invocationId); |
60 |
| - assertEquals(1, message.type); |
61 | 96 | JsonArray messageResult = (JsonArray) message.arguments[0];
|
62 | 97 | assertEquals(42, messageResult.getAsInt());
|
63 | 98 | }
|
64 | 99 |
|
65 | 100 | @Test
|
66 | 101 | public void ParseTwoMessages() {
|
67 | 102 | String twoMessages = "{\"type\":1,\"target\":\"one\",\"arguments\":[42]}\u001E{\"type\":1,\"target\":\"two\",\"arguments\":[43]}\u001E";
|
68 |
| - InvocationMessage[] messages = jsonHubProtocol.parseMessages(twoMessages); |
| 103 | + HubMessage[] messages = jsonHubProtocol.parseMessages(twoMessages); |
69 | 104 | assertEquals(2, messages.length);
|
70 | 105 |
|
71 | 106 | // Check the first message
|
72 |
| - InvocationMessage message = messages[0]; |
73 |
| - assertEquals("one", message.target); |
74 |
| - assertEquals(null, message.invocationId); |
75 |
| - assertEquals(1, message.type); |
76 |
| - JsonArray messageResult = (JsonArray) message.arguments[0]; |
| 107 | + assertEquals(HubMessageType.INVOCATION, messages[0].getMessageType()); |
| 108 | + |
| 109 | + //Now that we know we have an invocation message we can cast the hubMessage. |
| 110 | + InvocationMessage invocationMessage = (InvocationMessage) messages[0]; |
| 111 | + |
| 112 | + assertEquals("one", invocationMessage.target); |
| 113 | + assertEquals(null, invocationMessage.invocationId); |
| 114 | + JsonArray messageResult = (JsonArray) invocationMessage.arguments[0]; |
77 | 115 | assertEquals(42, messageResult.getAsInt());
|
78 | 116 |
|
79 | 117 | // Check the second message
|
80 |
| - InvocationMessage secondMessage = messages[1]; |
81 |
| - assertEquals("two", secondMessage.target); |
82 |
| - assertEquals(null, secondMessage.invocationId); |
83 |
| - assertEquals(1, secondMessage.type); |
84 |
| - JsonArray secondMessageResult = (JsonArray) secondMessage.arguments[0]; |
| 118 | + assertEquals(HubMessageType.INVOCATION, messages[1].getMessageType()); |
| 119 | + |
| 120 | + //Now that we know we have an invocation message we can cast the hubMessage. |
| 121 | + InvocationMessage invocationMessage2 = (InvocationMessage) messages[1]; |
| 122 | + |
| 123 | + assertEquals("two", invocationMessage2.target); |
| 124 | + assertEquals(null, invocationMessage2.invocationId); |
| 125 | + JsonArray secondMessageResult = (JsonArray) invocationMessage2.arguments[0]; |
85 | 126 | assertEquals(43, secondMessageResult.getAsInt());
|
86 | 127 | }
|
87 | 128 |
|
88 | 129 | @Test
|
89 | 130 | public void ParseSingleMessageMutipleArgs() {
|
90 | 131 | String stringifiedMessage = "{\"type\":1,\"target\":\"test\",\"arguments\":[42, 24]}\u001E";
|
91 |
| - InvocationMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
| 132 | + HubMessage[] messages = jsonHubProtocol.parseMessages(stringifiedMessage); |
92 | 133 |
|
93 | 134 | //We know it's only one message
|
94 |
| - InvocationMessage message = messages[0]; |
| 135 | + assertEquals(HubMessageType.INVOCATION, messages[0].getMessageType()); |
| 136 | + |
| 137 | + InvocationMessage message = (InvocationMessage)messages[0]; |
95 | 138 | assertEquals("test", message.target);
|
96 | 139 | assertEquals(null, message.invocationId);
|
97 |
| - assertEquals(1, message.type); |
98 | 140 | JsonArray messageResult = ((JsonArray) message.arguments[0]);
|
99 | 141 | assertEquals(42, messageResult.get(0).getAsInt());
|
100 | 142 | assertEquals(24, messageResult.get(1).getAsInt());
|
|
0 commit comments