Forge
csharpdeeb25a2
1using CascadeIDE.Views.SkiaKit;
2using SkiaSharp;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class SkiaPopupListScrollTests
8{
9 [Fact]
10 public void EnsureSelectionVisible_scrolls_down_when_selection_below_viewport()
11 {
12 const int rows = 12;
13 var scroll = SkiaPopupList.EnsureSelectionVisible(0, 0, rows);
14 Assert.Equal(0, scroll);
15
16 scroll = SkiaPopupList.EnsureSelectionVisible(8, scroll, rows);
17 Assert.Equal(3, scroll);
18 Assert.Equal(8, scroll + SkiaPopupList.ViewportRowCount(rows) - 1);
19 }
20
21 [Fact]
22 public void EnsureSelectionVisible_scrolls_up_when_selection_above_viewport()
23 {
24 const int rows = 12;
25 var scroll = SkiaPopupList.EnsureSelectionVisible(10, 0, rows);
26 Assert.Equal(5, scroll);
27
28 scroll = SkiaPopupList.EnsureSelectionVisible(2, scroll, rows);
29 Assert.Equal(2, scroll);
30 }
31
32 [Fact]
33 public void HitTestRow_respects_scroll_offset()
34 {
35 var bounds = new SKRect(0, 0, 200, SkiaPopupList.MeasureHeight(12));
36 const int rows = 12;
37 const int scroll = 4;
38
39 var firstVisible = SkiaPopupList.HitTestRow(
40 bounds,
41 10,
42 bounds.Top + SkiaPopupList.HorizontalPadding + 2,
43 rows,
44 scroll);
45 Assert.Equal(4, firstVisible);
46
47 var secondVisible = SkiaPopupList.HitTestRow(
48 bounds,
49 10,
50 bounds.Top + SkiaPopupList.HorizontalPadding + SkiaPopupList.RowHeight + 2,
51 rows,
52 scroll);
53 Assert.Equal(5, secondVisible);
54 }
55
56 [Fact]
57 public void MeasureHeight_caps_at_viewport()
58 {
59 Assert.Equal(
60 SkiaPopupList.ViewportRowCount(3) * SkiaPopupList.RowHeight + SkiaPopupList.HorizontalPadding * 2,
61 SkiaPopupList.MeasureHeight(3));
62 Assert.Equal(
63 SkiaPopupList.ViewportRowCount(20) * SkiaPopupList.RowHeight + SkiaPopupList.HorizontalPadding * 2,
64 SkiaPopupList.MeasureHeight(20));
65 }
66
67 [Fact]
68 public void MeasureHeight_includes_hierarchy_header_when_requested()
69 {
70 var without = SkiaPopupList.MeasureHeight(2, showHierarchyHeader: false);
71 var withHeader = SkiaPopupList.MeasureHeight(2, showHierarchyHeader: true);
72 Assert.Equal(without + SkiaPopupList.HierarchyHeaderHeight, withHeader);
73 }
74}
75
View only · write via MCP/CIDE