Adding Java Client Overloads up to T8. (#2660)

This commit is contained in:
Mikael Mengistu 2018-07-25 22:09:03 -07:00 committed by GitHub
parent daed55be36
commit 2a48a9a2c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 189 additions and 3 deletions

View File

@ -0,0 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
public interface Action6<T1, T2, T3, T4, T5, T6> {
void invoke(T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6);
}

View File

@ -0,0 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
public interface Action7<T1, T2, T3, T4, T5, T6, T7> {
void invoke(T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7);
}

View File

@ -0,0 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
public interface Action8<T1, T2, T3, T4, T5, T6, T7, T8> {
void invoke(T1 param1, T2 param2, T3 param3, T4 param4, T5 param5, T6 param6, T7 param7, T8 param8);
}

View File

@ -128,7 +128,8 @@ public class HubConnection {
return new Subscription(handlers, action, target);
}
public <T1, T2, T3> Subscription on(String target, Action3<T1, T2, T3> callback, Class<T1> param1, Class<T2> param2, Class<T3> param3) {
public <T1, T2, T3> Subscription on(String target, Action3<T1, T2, T3> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]));
};
@ -136,7 +137,8 @@ public class HubConnection {
return new Subscription(handlers, action, target);
}
public <T1, T2, T3, T4> Subscription on(String target, Action4<T1, T2, T3, T4> callback, Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4) {
public <T1, T2, T3, T4> Subscription on(String target, Action4<T1, T2, T3, T4> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]));
};
@ -144,7 +146,8 @@ public class HubConnection {
return new Subscription(handlers, action, target);
}
public <T1, T2, T3, T4, T5> Subscription on(String target, Action5<T1, T2, T3, T4, T5> callback, Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5) {
public <T1, T2, T3, T4, T5> Subscription on(String target, Action5<T1, T2, T3, T4, T5> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]));
@ -153,6 +156,36 @@ public class HubConnection {
return new Subscription(handlers, action, target);
}
public <T1, T2, T3, T4, T5, T6> Subscription on(String target, Action6<T1, T2, T3, T4, T5, T6> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5, Class<T6> param6) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]) ,param6.cast(params[5]));
};
handlers.put(target, action);
return new Subscription(handlers, action, target);
}
public <T1, T2, T3, T4, T5, T6, T7> Subscription on(String target, Action7<T1, T2, T3, T4, T5, T6, T7> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5, Class<T6> param6, Class<T7> param7) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]) ,param6.cast(params[5]), param7.cast(params[6]));
};
handlers.put(target, action);
return new Subscription(handlers, action, target);
}
public <T1, T2, T3, T4, T5, T6, T7, T8> Subscription on(String target, Action8<T1, T2, T3, T4, T5, T6, T7, T8> callback,
Class<T1> param1, Class<T2> param2, Class<T3> param3, Class<T4> param4, Class<T5> param5, Class<T6> param6, Class<T7> param7, Class<T8> param8) {
ActionBase action = params -> {
callback.invoke(param1.cast(params[0]), param2.cast(params[1]), param3.cast(params[2]), param4.cast(params[3]),
param5.cast(params[4]) ,param6.cast(params[5]), param7.cast(params[6]), param8.cast(params[7]));
};
handlers.put(target, action);
return new Subscription(handlers, action, target);
}
public void remove(String name) {
handlers.remove(name);
}

View File

@ -426,6 +426,140 @@ public class HubConnectionTest {
assertEquals(12, value5.get(), 0);
}
@Test
public void SendWithSixParamsTriggersOnHandler() throws Exception {
AtomicReference<String> value1 = new AtomicReference<>();
AtomicReference<String> value2 = new AtomicReference<>();
AtomicReference<String> value3 = new AtomicReference<>();
AtomicReference<Boolean> value4 = new AtomicReference<>();
AtomicReference<Double> value5 = new AtomicReference<>();
AtomicReference<String> value6 = new AtomicReference<>();
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = new HubConnection("http://example.com", mockTransport);
hubConnection.on("inc", (param1, param2, param3, param4, param5, param6) -> {
assertNull(value1.get());
assertNull(value2.get());
assertNull(value3.get());
assertNull(value4.get());
assertNull(value5.get());
assertNull(value6.get());
value1.set(param1);
value2.set(param2);
value3.set(param3);
value4.set(param4);
value5.set(param5);
value6.set(param6);
}, String.class, String.class, String.class, Boolean.class, Double.class, String.class);
hubConnection.start();
mockTransport.receiveMessage("{}" + RECORD_SEPARATOR);
mockTransport.receiveMessage("{\"type\":1,\"target\":\"inc\",\"arguments\":[\"A\", \"B\", \"C\",true,12,\"D\"]}" + RECORD_SEPARATOR);
// Confirming that our handler was called and the correct message was passed in.
assertEquals("A", value1.get());
assertEquals("B", value2.get());
assertEquals("C", value3.get());
assertTrue(value4.get());
assertEquals(12, value5.get(), 0);
assertEquals("D", value6.get());
}
@Test
public void SendWithSevenParamsTriggersOnHandler() throws Exception {
AtomicReference<String> value1 = new AtomicReference<>();
AtomicReference<String> value2 = new AtomicReference<>();
AtomicReference<String> value3 = new AtomicReference<>();
AtomicReference<Boolean> value4 = new AtomicReference<>();
AtomicReference<Double> value5 = new AtomicReference<>();
AtomicReference<String> value6 = new AtomicReference<>();
AtomicReference<String> value7 = new AtomicReference<>();
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = new HubConnection("http://example.com", mockTransport);
hubConnection.on("inc", (param1, param2, param3, param4, param5, param6, param7) -> {
assertNull(value1.get());
assertNull(value2.get());
assertNull(value3.get());
assertNull(value4.get());
assertNull(value5.get());
assertNull(value6.get());
assertNull(value7.get());
value1.set(param1);
value2.set(param2);
value3.set(param3);
value4.set(param4);
value5.set(param5);
value6.set(param6);
value7.set(param7);
}, String.class, String.class, String.class, Boolean.class, Double.class, String.class, String.class);
hubConnection.start();
mockTransport.receiveMessage("{}" + RECORD_SEPARATOR);
mockTransport.receiveMessage("{\"type\":1,\"target\":\"inc\",\"arguments\":[\"A\", \"B\", \"C\",true,12,\"D\",\"E\"]}" + RECORD_SEPARATOR);
// Confirming that our handler was called and the correct message was passed in.
assertEquals("A", value1.get());
assertEquals("B", value2.get());
assertEquals("C", value3.get());
assertTrue(value4.get());
assertEquals(12, value5.get(), 0);
assertEquals("D", value6.get());
assertEquals("E", value7.get());
}
@Test
public void SendWithEightParamsTriggersOnHandler() throws Exception {
AtomicReference<String> value1 = new AtomicReference<>();
AtomicReference<String> value2 = new AtomicReference<>();
AtomicReference<String> value3 = new AtomicReference<>();
AtomicReference<Boolean> value4 = new AtomicReference<>();
AtomicReference<Double> value5 = new AtomicReference<>();
AtomicReference<String> value6 = new AtomicReference<>();
AtomicReference<String> value7 = new AtomicReference<>();
AtomicReference<String> value8 = new AtomicReference<>();
MockTransport mockTransport = new MockTransport();
HubConnection hubConnection = new HubConnection("http://example.com", mockTransport);
hubConnection.on("inc", (param1, param2, param3, param4, param5, param6, param7, param8) -> {
assertNull(value1.get());
assertNull(value2.get());
assertNull(value3.get());
assertNull(value4.get());
assertNull(value5.get());
assertNull(value6.get());
assertNull(value7.get());
assertNull(value8.get());
value1.set(param1);
value2.set(param2);
value3.set(param3);
value4.set(param4);
value5.set(param5);
value6.set(param6);
value7.set(param7);
value8.set(param8);
}, String.class, String.class, String.class, Boolean.class, Double.class, String.class, String.class, String.class);
hubConnection.start();
mockTransport.receiveMessage("{}" + RECORD_SEPARATOR);
mockTransport.receiveMessage("{\"type\":1,\"target\":\"inc\",\"arguments\":[\"A\", \"B\", \"C\",true,12,\"D\",\"E\",\"F\"]}" + RECORD_SEPARATOR);
// Confirming that our handler was called and the correct message was passed in.
assertEquals("A", value1.get());
assertEquals("B", value2.get());
assertEquals("C", value3.get());
assertTrue(value4.get());
assertEquals(12, value5.get(), 0);
assertEquals("D", value6.get());
assertEquals("E", value7.get());
assertEquals("F", value8.get());
}
@Test
public void ReceiveHandshakeResponseAndMessage() throws Exception {
AtomicReference<Double> value = new AtomicReference<Double>(0.0);
@ -448,6 +582,7 @@ public class HubConnectionTest {
assertEquals(1, value.get(), 0);
}
private class MockTransport implements Transport {
private OnReceiveCallBack onReceiveCallBack;
private ArrayList<String> sentMessages = new ArrayList<>();