/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Components/Endpoints/test/Routing/BasePathTest.cs
93 строки
3 KB
Ilona Tomkowicz
Blazor Web can use `BasePath` component instead of `<base href="">` (#64590)
03 дек 2025, 17:53
Не верифицирован
03 дек 2025, 17:53
c8d47d3
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.Test.Helpers; #nullable enable namespace Microsoft.AspNetCore.Components.Endpoints; public class BasePathTest { [Fact] public void PreservesCasingFromNavigationManagerBaseUri() { _ = CreateServices(out var renderer, "https://example.com/Dashboard/"); var componentId = RenderBasePath(renderer); Assert.Equal("/Dashboard/", GetHref(renderer, componentId)); } [Theory] [InlineData("https://example.com/a/b/", "/a/b/")] [InlineData("https://example.com/a/b", "/a/")] public void RendersBaseUriPathExactly(string baseUri, string expected) { _ = CreateServices(out var renderer, baseUri); var componentId = RenderBasePath(renderer); Assert.Equal(expected, GetHref(renderer, componentId)); } private static TestServiceProvider CreateServices(out TestRenderer renderer, string baseUri = "https://example.com/app/") { var services = new TestServiceProvider(); var uri = baseUri.EndsWith('/') ? baseUri + "dashboard" : baseUri + "/dashboard"; var navigationManager = new TestNavigationManager(baseUri, uri); services.AddService<NavigationManager>(navigationManager); services.AddService<IServiceProvider>(services); renderer = new TestRenderer(services); return services; } private static int RenderBasePath(TestRenderer renderer) { var component = (BasePath)renderer.InstantiateComponent<BasePath>(); var componentId = renderer.AssignRootComponentId(component); renderer.RenderRootComponent(componentId); return componentId; } private static string? GetHref(TestRenderer renderer, int componentId) { var frames = renderer.GetCurrentRenderTreeFrames(componentId); for (var i = 0; i < frames.Count; i++) { ref readonly var frame = ref frames.Array[i]; if (frame.FrameType == RenderTreeFrameType.Element && frame.ElementName == "base") { for (var j = i + 1; j < frames.Count; j++) { ref readonly var attribute = ref frames.Array[j]; if (attribute.FrameType == RenderTreeFrameType.Attribute && attribute.AttributeName == "href") { return attribute.AttributeValue?.ToString(); } if (attribute.FrameType != RenderTreeFrameType.Attribute) { break; } } } } return null; } private sealed class TestNavigationManager : NavigationManager { public TestNavigationManager(string baseUri, string uri) { Initialize(baseUri, uri); } protected override void NavigateToCore(string uri, bool forceLoad) { throw new NotImplementedException(); } } }