fix(theme): null/whitespace-safe NavRailSection slug + edge tests
This commit is contained in:
@@ -31,8 +31,9 @@
|
|||||||
|
|
||||||
private string ResolvedKey => string.IsNullOrWhiteSpace(Key) ? Slug(Title) : Key!;
|
private string ResolvedKey => string.IsNullOrWhiteSpace(Key) ? Slug(Title) : Key!;
|
||||||
|
|
||||||
private static string Slug(string s)
|
private static string Slug(string? s)
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(s)) return string.Empty;
|
||||||
var chars = s.Trim().ToLowerInvariant()
|
var chars = s.Trim().ToLowerInvariant()
|
||||||
.Select(c => char.IsLetterOrDigit(c) ? c : '-').ToArray();
|
.Select(c => char.IsLetterOrDigit(c) ? c : '-').ToArray();
|
||||||
return string.Join('-', new string(chars).Split('-', StringSplitOptions.RemoveEmptyEntries));
|
return string.Join('-', new string(chars).Split('-', StringSplitOptions.RemoveEmptyEntries));
|
||||||
|
|||||||
@@ -73,4 +73,22 @@ public class NavRailTests : TestContext
|
|||||||
.AddChildContent("<a class='rail-link'>X</a>"));
|
.AddChildContent("<a class='rail-link'>X</a>"));
|
||||||
Assert.Equal("nav", cut.Find("details.rail-section").GetAttribute("data-nav-key"));
|
Assert.Equal("nav", cut.Find("details.rail-section").GetAttribute("data-nav-key"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void NavRailSection_whitespace_only_title_yields_empty_data_nav_key()
|
||||||
|
{
|
||||||
|
var cut = RenderComponent<NavRailSection>(p => p
|
||||||
|
.Add(x => x.Title, " ")
|
||||||
|
.AddChildContent("<a class='rail-link'>X</a>"));
|
||||||
|
Assert.Equal("", cut.Find("details.rail-section").GetAttribute("data-nav-key"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void NavRailSection_slug_preserves_unicode_letters()
|
||||||
|
{
|
||||||
|
var cut = RenderComponent<NavRailSection>(p => p
|
||||||
|
.Add(x => x.Title, "Café")
|
||||||
|
.AddChildContent("<a class='rail-link'>X</a>"));
|
||||||
|
Assert.Equal("café", cut.Find("details.rail-section").GetAttribute("data-nav-key"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user