Forge
csharpdeeb25a2
1using CascadeIDE.Features.Chat;
2using CascadeIDE.Services;
3using CascadeIDE.Views.Chat;
4using CascadeIDE.Views.Chat.Skia;
5using SkiaSharp;
6using Xunit;
7
8namespace CascadeIDE.Tests;
9
10public sealed class SkiaIntercomNavigationChromeTests
11{
12 [Fact]
13 public void ResolveNavigationHeight_DetailMode_IncludesSpineAndTabs()
14 {
15 var h = SkiaIntercomNavigationChrome.ResolveNavigationHeight(forwardHost: true, overviewMode: false, topicCount: 2);
16 Assert.Equal(SkiaIntercomNavigationChrome.SpineRowHeight + SkiaIntercomNavigationChrome.TabBarHeight, h);
17 }
18
19 [Fact]
20 public void ResolveNavigationHeight_OverviewMode_OnlySpine()
21 {
22 var h = SkiaIntercomNavigationChrome.ResolveNavigationHeight(forwardHost: true, overviewMode: true, topicCount: 2);
23 Assert.Equal(SkiaIntercomNavigationChrome.SpineRowHeight, h);
24 }
25
26 [Fact]
27 public void DrawTopicTabBar_Overflow_ReportsHiddenCount()
28 {
29 var overview = Enumerable.Range(0, 10)
30 .Select(i => new ChatThreadOverviewItem(
31 Guid.NewGuid(),
32 $"Topic{i}",
33 "",
34 IsActive: i == 0,
35 IsMainThread: i == 0,
36 Depth: 0,
37 ItemCount: 1))
38 .ToList();
39
40 using var bitmap = new SKBitmap(800, 80);
41 using var canvas = new SKCanvas(bitmap);
42 var layout = SkiaIntercomNavigationChrome.DrawTopicTabBar(
43 canvas,
44 800,
45 0,
46 SkiaChatTheme.DarkFallback,
47 overview,
48 overview[0].ThreadId,
49 SettingsDefaultsLoader.CreateDefault().Fonts.Intercom,
50 maxVisibleTabs: 5);
51
52 Assert.True(layout.OverflowHiddenCount > 0);
53 Assert.NotEmpty(layout.TabHits);
54 Assert.True(layout.CreateButtonBounds.Width > 0);
55 }
56}
57
View only · write via MCP/CIDE