修复: 技能面板视口按行收口与截断尾部乱码
- 技能列表视口改按行数切片(含描述行),修复变长条目撑爆面板 - 大文件截断改按 rune 边界回退,修复中文内容尾部乱码 - 补视口与截断边界测试
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestSkillsListLinesViewportByLines 验证技能列表视口按行数(含描述行)收口,
|
||||
// 返回行数不超过 listH,避免变长行撑爆面板
|
||||
func TestSkillsListLinesViewportByLines(t *testing.T) {
|
||||
m := NewModel()
|
||||
m.Skills.Loaded = true
|
||||
for i := 0; i < 3; i++ {
|
||||
m.Skills.Skills = append(m.Skills.Skills, &SkillInfo{
|
||||
Name: "skill-" + strings.Repeat("x", i),
|
||||
Description: "描述行 " + string(rune('A'+i)),
|
||||
})
|
||||
}
|
||||
m.Skills.SkillCur = 0
|
||||
m.Skills.FocusPanel = 0
|
||||
|
||||
listH := 3 // 足够只显示部分(总共 6 行:3 技能 × 2 行)
|
||||
lines := m.skillsListLines(30, listH)
|
||||
if len(lines) > listH {
|
||||
t.Fatalf("skillsListLines 应返回 ≤ %d 行, got %d", listH, len(lines))
|
||||
}
|
||||
|
||||
// 光标在首个技能时,视口应从头开始且光标行可见
|
||||
if !strings.Contains(lines[0], "▸") {
|
||||
t.Fatalf("首行应含光标标记, got %q", lines[0])
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user