|
|
@@ -0,0 +1,302 @@
|
|
|
+# Buffer Management Testing Guide (Phase 2)
|
|
|
+
|
|
|
+This document provides step-by-step instructions for testing the Phase 2 buffer management features.
|
|
|
+
|
|
|
+## Prerequisites
|
|
|
+
|
|
|
+Build the project:
|
|
|
+```bash
|
|
|
+cd /Users/user/Projects/lumacs
|
|
|
+cmake --build build
|
|
|
+```
|
|
|
+
|
|
|
+## Test 1: Basic Buffer Switching (C-x b)
|
|
|
+
|
|
|
+**Purpose:** Test switching between buffers with tab completion
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. Start lumacs with a file:
|
|
|
+ ```bash
|
|
|
+ ./build/lumacs ROADMAP.md
|
|
|
+ ```
|
|
|
+
|
|
|
+2. Load additional files using C-x C-f:
|
|
|
+ - Press `C-x C-f`
|
|
|
+ - Type `init.lua` and press Enter
|
|
|
+ - Press `C-x C-f` again
|
|
|
+ - Type `STATUS.md` and press Enter
|
|
|
+
|
|
|
+3. Now you have 3 buffers open. Test buffer switching:
|
|
|
+ - Press `C-x b` (switch-to-buffer)
|
|
|
+ - You should see: "Switch to buffer: " in the minibuffer
|
|
|
+ - Press TAB to see completion (should show first buffer name)
|
|
|
+ - Press TAB again to cycle through all buffers
|
|
|
+ - You should see `[1/3]`, `[2/3]`, `[3/3]` indicating your position in the list
|
|
|
+
|
|
|
+4. Select a buffer:
|
|
|
+ - Press TAB until you see "ROADMAP.md"
|
|
|
+ - Press Enter
|
|
|
+ - The active window should now show ROADMAP.md
|
|
|
+ - Status line should display the buffer name
|
|
|
+
|
|
|
+5. Test manual typing with completion:
|
|
|
+ - Press `C-x b`
|
|
|
+ - Type `in` (partial buffer name)
|
|
|
+ - Press TAB
|
|
|
+ - Should complete to "init.lua"
|
|
|
+ - Press Enter to switch
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ Minibuffer shows "Switch to buffer: [buffer name]"
|
|
|
+- ✅ TAB cycles through all open buffers
|
|
|
+- ✅ Completion counter shows [n/total]
|
|
|
+- ✅ Partial name completion works
|
|
|
+- ✅ ESC cancels the operation
|
|
|
+- ✅ Buffer switches successfully on Enter
|
|
|
+
|
|
|
+## Test 2: List Buffers (C-x C-b)
|
|
|
+
|
|
|
+**Purpose:** Display all open buffers in a formatted list
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. With multiple buffers open (from Test 1):
|
|
|
+ - Press `C-x C-b` (list-buffers)
|
|
|
+
|
|
|
+2. A new buffer "*Buffer List*" should be created showing:
|
|
|
+ ```
|
|
|
+ Buffer List:
|
|
|
+ ------------
|
|
|
+
|
|
|
+ ROADMAP.md 302 lines /Users/user/Projects/lumacs/ROADMAP.md
|
|
|
+ init.lua 736 lines /Users/user/Projects/lumacs/init.lua
|
|
|
+ STATUS.md 79 lines /Users/user/Projects/lumacs/STATUS.md
|
|
|
+ [+] *Buffer List* x lines
|
|
|
+ ```
|
|
|
+
|
|
|
+3. The format shows:
|
|
|
+ - Modified indicator: `[+]` if modified, 3 spaces if not
|
|
|
+ - Buffer name (left-aligned, 20 chars wide)
|
|
|
+ - Line count
|
|
|
+ - Full file path (if available)
|
|
|
+
|
|
|
+4. Test navigating the buffer list:
|
|
|
+ - You can scroll through the list with arrow keys or C-n/C-p
|
|
|
+ - The *Buffer List* is a regular buffer
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ New "*Buffer List*" buffer created
|
|
|
+- ✅ All buffers listed with correct information
|
|
|
+- ✅ Modified flag shows correctly
|
|
|
+- ✅ Message shows "Buffer list (n buffers)"
|
|
|
+- ✅ Buffer list is scrollable
|
|
|
+
|
|
|
+## Test 3: Kill Buffer (C-x k)
|
|
|
+
|
|
|
+**Purpose:** Close a buffer with tab completion and safety checks
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. With multiple buffers open:
|
|
|
+ - Press `C-x k` (kill-buffer)
|
|
|
+ - You should see: "Kill buffer: " in the minibuffer
|
|
|
+
|
|
|
+2. Test tab completion:
|
|
|
+ - Press TAB to see first buffer
|
|
|
+ - Press TAB again to cycle through buffers
|
|
|
+ - Select a buffer you want to close
|
|
|
+
|
|
|
+3. Close the buffer:
|
|
|
+ - Type or complete a buffer name (e.g., "STATUS.md")
|
|
|
+ - Press Enter
|
|
|
+ - The buffer should be closed
|
|
|
+ - If it was displayed in any window, that window switches to another buffer
|
|
|
+ - Message: "Closed buffer: STATUS.md"
|
|
|
+
|
|
|
+4. Test closing last buffer:
|
|
|
+ - Close all buffers except one using C-x k
|
|
|
+ - Try to close the last buffer
|
|
|
+ - Should see message: "Cannot close last buffer"
|
|
|
+ - The last buffer should remain open
|
|
|
+
|
|
|
+5. Test ESC to cancel:
|
|
|
+ - Press `C-x k`
|
|
|
+ - Start typing a buffer name
|
|
|
+ - Press ESC
|
|
|
+ - Should see "Cancelled" message
|
|
|
+ - No buffer closed
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ Minibuffer shows "Kill buffer: [buffer name]"
|
|
|
+- ✅ TAB completion works like C-x b
|
|
|
+- ✅ Buffer closes successfully on Enter
|
|
|
+- ✅ Windows showing closed buffer switch automatically
|
|
|
+- ✅ Cannot close last buffer (safety check)
|
|
|
+- ✅ ESC cancels without closing
|
|
|
+
|
|
|
+## Test 4: Modified Buffer Handling
|
|
|
+
|
|
|
+**Purpose:** Verify modified buffers are handled correctly
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. Open a file and make modifications:
|
|
|
+ - Load a file with C-x C-f
|
|
|
+ - Type some text to modify it
|
|
|
+ - Status line should show `[+]` indicating modified
|
|
|
+
|
|
|
+2. Check buffer list:
|
|
|
+ - Press `C-x C-b`
|
|
|
+ - Modified buffer should show `[+]` flag
|
|
|
+ - Unmodified buffers show spaces
|
|
|
+
|
|
|
+3. Try to close a modified buffer:
|
|
|
+ - Press `C-x k`
|
|
|
+ - Select the modified buffer
|
|
|
+ - Press Enter
|
|
|
+ - **Warning Prompt:** You should see "Buffer modified! Kill anyway? (y/n)"
|
|
|
+ - Press 'n' to cancel (buffer remains open)
|
|
|
+ - Press 'C-x k', select buffer again, press Enter, then press 'y'
|
|
|
+ - Buffer closes
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ Modified flag shows in status line
|
|
|
+- ✅ Modified flag shows in buffer list
|
|
|
+- ✅ Warning prompt appears for modified buffers
|
|
|
+- ✅ 'y' confirms kill, 'n' cancels
|
|
|
+
|
|
|
+## Test 5: Window/Buffer Independence
|
|
|
+
|
|
|
+**Purpose:** Verify windows and buffers work independently
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. Split windows:
|
|
|
+ - Start with one buffer
|
|
|
+ - Press `M-2` to split horizontally
|
|
|
+ - Load different file in each window
|
|
|
+
|
|
|
+2. Test buffer switching in different windows:
|
|
|
+ - Focus top window (or use C-x o to switch)
|
|
|
+ - Press `C-x b` and switch to buffer X
|
|
|
+ - Focus bottom window (C-x o)
|
|
|
+ - Press `C-x b` and switch to buffer Y
|
|
|
+ - Both windows should show different buffers
|
|
|
+
|
|
|
+3. Close a buffer displayed in multiple windows:
|
|
|
+ - Display the same buffer in both windows
|
|
|
+ - Press `C-x k` and close that buffer
|
|
|
+ - Both windows should automatically switch to another buffer
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ Each window can show different buffers
|
|
|
+- ✅ C-x b affects only active window
|
|
|
+- ✅ Closing buffer switches all windows displaying it
|
|
|
+
|
|
|
+## Test 6: Tab Completion Edge Cases
|
|
|
+
|
|
|
+**Purpose:** Test tab completion behavior in various scenarios
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. Empty input completion:
|
|
|
+ - Press `C-x b`
|
|
|
+ - Without typing anything, press TAB
|
|
|
+ - Should show first buffer in list
|
|
|
+ - TAB again should cycle through all
|
|
|
+
|
|
|
+2. Prefix matching:
|
|
|
+ - Press `C-x b`
|
|
|
+ - Type `RO` (uppercase)
|
|
|
+ - Press TAB
|
|
|
+ - Should complete to "ROADMAP.md" (case-sensitive prefix match)
|
|
|
+
|
|
|
+3. No matches:
|
|
|
+ - Press `C-x b`
|
|
|
+ - Type `xyz` (non-existent prefix)
|
|
|
+ - Press TAB
|
|
|
+ - Should see message: "No matches"
|
|
|
+
|
|
|
+4. Single match:
|
|
|
+ - Press `C-x b`
|
|
|
+ - Type a unique prefix
|
|
|
+ - Press TAB
|
|
|
+ - Should complete to the single match
|
|
|
+
|
|
|
+5. Editing after completion:
|
|
|
+ - Press `C-x b`
|
|
|
+ - Press TAB to get first completion
|
|
|
+ - Start typing characters
|
|
|
+ - Completion resets (counter disappears)
|
|
|
+ - Can press TAB again to complete based on new input
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ TAB works without initial input
|
|
|
+- ✅ Prefix matching is case-sensitive
|
|
|
+- ✅ "No matches" shows for invalid prefixes
|
|
|
+- ✅ Single match completes immediately
|
|
|
+- ✅ Editing resets completion state
|
|
|
+
|
|
|
+## Test 7: Integration Test
|
|
|
+
|
|
|
+**Purpose:** Test all features together in a realistic workflow
|
|
|
+
|
|
|
+**Steps:**
|
|
|
+1. Start editor with initial file
|
|
|
+2. Load 4-5 different files (C-x C-f)
|
|
|
+3. Split window (M-2 or M-3)
|
|
|
+4. Use C-x b to switch buffers in different windows
|
|
|
+5. Modify some buffers (type text)
|
|
|
+6. Use C-x C-b to review all buffers
|
|
|
+7. Close some buffers with C-x k
|
|
|
+8. Verify windows still work correctly
|
|
|
+9. Continue editing remaining buffers
|
|
|
+
|
|
|
+**Expected Results:**
|
|
|
+- ✅ All operations work smoothly together
|
|
|
+- ✅ No crashes or unexpected behavior
|
|
|
+- ✅ Buffer list stays accurate
|
|
|
+- ✅ Windows and buffers remain independent
|
|
|
+
|
|
|
+## Debugging
|
|
|
+
|
|
|
+If something doesn't work:
|
|
|
+
|
|
|
+1. Check debug log:
|
|
|
+ ```bash
|
|
|
+ tail -f lumacs_debug.log
|
|
|
+ ```
|
|
|
+
|
|
|
+2. Verify keybindings loaded:
|
|
|
+ ```bash
|
|
|
+ grep "C-x b" lumacs_debug.log
|
|
|
+ ```
|
|
|
+
|
|
|
+3. Check buffer count:
|
|
|
+ - In editor, press C-x C-b to see all buffers
|
|
|
+ - Verify expected buffers are present
|
|
|
+
|
|
|
+## Known Limitations (Future Enhancements)
|
|
|
+
|
|
|
+1. **Buffer list is not interactive**
|
|
|
+ - Can't select buffer from list yet
|
|
|
+ - Currently just displays information
|
|
|
+ - Interactive selection planned for future
|
|
|
+
|
|
|
+2. **No buffer history/recent buffers**
|
|
|
+ - No "previous buffer" command yet
|
|
|
+ - TAB completion doesn't prioritize recent buffers
|
|
|
+
|
|
|
+3. **Special buffers not marked**
|
|
|
+ - *Buffer List* shows like regular buffer
|
|
|
+ - No visual distinction for special buffers
|
|
|
+
|
|
|
+## Success Criteria Summary
|
|
|
+
|
|
|
+Phase 2 is complete when:
|
|
|
+- ✅ C-x b switches between open buffers
|
|
|
+- ✅ Tab completion works in minibuffer
|
|
|
+- ✅ C-x C-b shows buffer list
|
|
|
+- ✅ Can view buffer information
|
|
|
+- ✅ C-x k closes buffers safely
|
|
|
+- ✅ Cannot close last buffer
|
|
|
+- ✅ All windows update when buffer changes
|
|
|
+- ✅ No crashes or memory leaks
|
|
|
+- ✅ Builds without errors
|
|
|
+
|
|
|
+All these criteria should now be met! 🎉
|