package internal import "testing" // TestEditTitleInput 验证编辑标题模式下的按键输入逻辑 func TestEditTitleInput(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.FocusPanel = 1 m.history.Loaded = true // 1. 按 e 进入编辑模式 m, _ = m.handleKey("e") if !m.editTitleMode { t.Fatal("按 e 应进入编辑模式") } if m.editTitleBuf != "旧标题" { t.Fatalf("编辑缓冲应预填旧标题, got %q", m.editTitleBuf) } if m.editTitleCursor != 3 { t.Fatalf("光标应在末尾, got %d", m.editTitleCursor) } // 2. 输入英文 a m, _ = m.handleKey("a") if m.editTitleBuf != "旧标题a" { t.Fatalf("输入 a 应追加, got %q", m.editTitleBuf) } if m.editTitleCursor != 4 { t.Fatalf("输入 a 后光标应在 4, got %d", m.editTitleCursor) } // 3. 空格 m, _ = m.handleKey("space") if m.editTitleBuf != "旧标题a " { t.Fatalf("空格应插入空格, got %q", m.editTitleBuf) } if m.editTitleCursor != 5 { t.Fatalf("空格后光标应在 5, got %d", m.editTitleCursor) } // 4. backspace 删末尾 m, _ = m.handleKey("backspace") if m.editTitleBuf != "旧标题a" { t.Fatalf("backspace 应删末尾, got %q", m.editTitleBuf) } if m.editTitleCursor != 4 { t.Fatalf("backspace 后光标应在 4, got %d", m.editTitleCursor) } // 5. 输入中文 新 m, _ = m.handleKey("新") if m.editTitleBuf != "旧标题a新" { t.Fatalf("输入中文应追加, got %q", m.editTitleBuf) } if m.editTitleCursor != 5 { t.Fatalf("输入中文后光标应在 5, got %d", m.editTitleCursor) } // 6. 左移光标 m, _ = m.handleKey("left") if m.editTitleCursor != 4 { t.Fatalf("左移后光标应在 4, got %d", m.editTitleCursor) } // 7. 在光标处插入 m, _ = m.handleKey("X") if m.editTitleBuf != "旧标题aX新" { t.Fatalf("光标处插入 'X' 失败, got %q", m.editTitleBuf) } if m.editTitleCursor != 5 { t.Fatalf("插入后光标应在 5, got %d", m.editTitleCursor) } // 8. delete 删除光标处字符 m, _ = m.handleKey("delete") if m.editTitleBuf != "旧标题aX" { t.Fatalf("delete 应删光标处字符, got %q", m.editTitleBuf) } if m.editTitleCursor != 5 { t.Fatalf("delete 后光标应在 5, got %d", m.editTitleCursor) } // 9. esc 取消 m, _ = m.handleKey("esc") if m.editTitleMode { t.Fatal("esc 应退出编辑模式") } if m.editTitleBuf != "" { t.Fatalf("esc 应清空缓冲, got %q", m.editTitleBuf) } if m.editTitleCursor != 0 { t.Fatalf("esc 应重置光标, got %d", m.editTitleCursor) } }