File: RoutedComponentTrimmingTests.cs
Web Access
Project: src\tests\Aspire.Dashboard.Components.Tests\Aspire.Dashboard.Components.Tests.csproj (Aspire.Dashboard.Components.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.Diagnostics.CodeAnalysis;
using System.Reflection;
using Microsoft.AspNetCore.Components;
using Xunit;
 
namespace Aspire.Dashboard.Components.Tests;
 
public class RoutedComponentTrimmingTests
{
    [Fact]
    public void RoutedComponents_PreserveRuntimeActivatedMembers()
    {
        const DynamicallyAccessedMemberTypes requiredMembers =
            DynamicallyAccessedMemberTypes.PublicConstructors |
            DynamicallyAccessedMemberTypes.PublicProperties |
            DynamicallyAccessedMemberTypes.NonPublicProperties;
 
        var preservedTypes = typeof(DashboardWebApplication).GetConstructors()
            .SelectMany(constructor => constructor.GetCustomAttributes<DynamicDependencyAttribute>())
            .Where(dependency => (dependency.MemberTypes & requiredMembers) == requiredMembers)
            .Select(dependency => dependency.Type)
            .ToHashSet();
        var routedComponents = typeof(DashboardWebApplication).Assembly.GetTypes()
            .Where(type => type.IsDefined(typeof(RouteAttribute), inherit: false))
            .ToList();
 
        Assert.NotEmpty(routedComponents);
        Assert.All(routedComponents, component => Assert.Contains(component, preservedTypes));
    }
}