File: HubReflectionHelperTests.cs
Web Access
Project: src\src\SignalR\server\SignalR\test\Microsoft.AspNetCore.SignalR.Tests\Microsoft.AspNetCore.SignalR.Tests.csproj (Microsoft.AspNetCore.SignalR.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Linq;
using Microsoft.AspNetCore.SignalR.Internal;
using Xunit;
 
namespace Microsoft.AspNetCore.SignalR.Tests;
 
public class HubReflectionHelperTests
{
    [Fact]
    public void EmptyHubHasNoHubMethods()
    {
        var hubMethods = HubReflectionHelper.GetHubMethods(typeof(EmptyHub));
 
        Assert.Empty(hubMethods);
    }
 
    [Fact]
    public void HubWithMethodsHasHubMethods()
    {
        var hubType = typeof(BaseMethodHub);
        var hubMethods = HubReflectionHelper.GetHubMethods(hubType);
 
        Assert.Equal(3, hubMethods.Count());
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("VoidMethod"));
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("IntMethod"));
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("ArgMethod"));
    }
 
    [Fact]
    public void InheritedHubHasBaseHubMethodsAndOwnMethods()
    {
        var hubType = typeof(InheritedMethodHub);
        var hubMethods = HubReflectionHelper.GetHubMethods(hubType);
 
        Assert.Equal(4, hubMethods.Count());
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("ExtraMethod"));
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("VoidMethod"));
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("IntMethod"));
        Assert.Contains(hubMethods, m => m == hubType.GetMethod("ArgMethod"));
    }
 
    private class EmptyHub : Hub
    {
    }
 
    private class BaseMethodHub : Hub
    {
        public void VoidMethod()
        {
        }
 
        public int IntMethod()
        {
            return 0;
        }
 
        public void ArgMethod(string str)
        {
        }
 
        // static is not supported as a Hub method
        public static void StaticMethod()
        {
        }
 
        // internal is not a Hub method
        internal void InternalMethod()
        {
        }
 
        // private is not a Hub method
        private void PrivateMethod()
        {
        }
    }
 
    private class InheritedMethodHub : BaseMethodHub
    {
        public int ExtraMethod(bool b)
        {
            return 2;
        }
    }
}