package internal import ( "testing" tea "charm.land/bubbletea/v2" ) // TestEditTitleViaRealKeyPress 用真实 tea.KeyPressMsg 走完整 Update 流程, // 验证运行时按键是否能真正写入编辑缓冲(用户反馈"界面未能输入名称")。 func TestEditTitleViaRealKeyPress(t *testing.T) { m := NewModel() m.history.Projects = []*ProjectDir{ {DirShort: "test", Sessions: []*Session{ {ID: "s1", AISummary: "旧标题"}, }}, } m.history.DirCursor = 2 m.history.SessCursor = 0 m.history.Loaded = true send := func(msg tea.Msg) tea.Model { var cmd tea.Cmd var model tea.Model = m model, cmd = m.Update(msg) _ = cmd return model } // 1. 真实按键 'e' 进入编辑模式(Code+Text 同 ultraviolet 实测构造) send(tea.KeyPressMsg{Code: 'e', Text: "e"}) if !m.editTitleMode { t.Fatal("真实 KeyPressMsg(e) 应进入编辑模式") } if m.editTitleBuf != "旧标题" { t.Fatalf("编辑缓冲应预填旧标题, got %q", m.editTitleBuf) } // 2. 真实按键 'a'(ASCII 字符) send(tea.KeyPressMsg{Code: 'a', Text: "a"}) if m.editTitleBuf != "旧标题a" { t.Fatalf("真实按键 a 应追加, got %q", m.editTitleBuf) } // 3. 真实空格键(Code=KeySpace, Text=" ") send(tea.KeyPressMsg{Code: tea.KeySpace, Text: " "}) if m.editTitleBuf != "旧标题a " { t.Fatalf("空格应插入, got %q", m.editTitleBuf) } // 4. 真实中文输入(多 rune,Code=KeyExtended) send(tea.KeyPressMsg{Code: tea.KeyExtended, Text: "新"}) if m.editTitleBuf != "旧标题a 新" { t.Fatalf("中文应追加, got %q", m.editTitleBuf) } // 5. 回车确认 send(tea.KeyPressMsg{Code: tea.KeyEnter, Text: ""}) if m.editTitleMode { t.Fatal("回车应退出编辑模式") } if m.launched != "rename: 旧标题a 新" { t.Fatalf("确认后 launched 应记录改名, got %q", m.launched) } }