// 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. using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Moq; using Xunit; namespace Microsoft.AspNetCore.SignalR.Tests { public class ClientHubProxyTests { public class FakeHub : Hub { } [Fact] public async Task UserProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendUserAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Callback((userId, methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new UserProxy(o.Object, string.Empty); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[]) Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task MultipleUserProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendUsersAsync(It.IsAny>(), It.IsAny(), It.IsAny())) .Callback, string, object[]>((userIds, methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new MultipleUserProxy(o.Object, new List()); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task GroupProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendGroupAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Callback((groupName, methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new GroupProxy(o.Object, string.Empty); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task MultipleGroupProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendGroupsAsync(It.IsAny>(), It.IsAny(), It.IsAny())) .Callback, string, object[]>((groupNames, methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new MultipleGroupProxy(o.Object, new List()); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task GroupExceptProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendGroupExceptAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny>())) .Callback>((groupName, methodName, args, excludedIds) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new GroupExceptProxy(o.Object, string.Empty, new List()); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task AllClientProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendAllAsync(It.IsAny(), It.IsAny())) .Callback((methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new AllClientProxy(o.Object); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task AllClientsExceptProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendAllExceptAsync(It.IsAny(), It.IsAny(), It.IsAny>())) .Callback>((methodName, args, excludedIds) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new AllClientsExceptProxy(o.Object, new List()); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task SingleClientProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendConnectionAsync(It.IsAny(), It.IsAny(), It.IsAny())) .Callback((connectionId, methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new SingleClientProxy(o.Object, string.Empty); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } [Fact] public async Task MultipleClientProxy_SendAsync_ArrayArgumentNotExpanded() { object[] resultArgs = null; var o = new Mock>(); o.Setup(m => m.SendConnectionsAsync(It.IsAny>(), It.IsAny(), It.IsAny())) .Callback, string, object[]>((connectionIds, methodName, args) => { resultArgs = args; }) .Returns(Task.CompletedTask); var proxy = new MultipleClientProxy(o.Object, new List()); var data = Encoding.UTF8.GetBytes("Hello world"); await proxy.SendAsync("Method", data); Assert.NotNull(resultArgs); var arg = (byte[])Assert.Single(resultArgs); Assert.Same(data, arg); } } }