summaryrefslogtreecommitdiff
path: root/tests/test-integration-buffer-diff.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2025-11-14 02:31:16 -0600
committerCraig Jennings <c@cjennings.net>2025-11-14 02:31:16 -0600
commit9d55ed149e100b4fb3ef6f5a79d263dcb26ce835 (patch)
treeb02a77b84849f15b4302fda8f3f8e3942cb253ac /tests/test-integration-buffer-diff.el
parent7b982b1984dd37af42a2dfc9f4c3e52b27102860 (diff)
checking in modified/removed tests and other misc changes
Diffstat (limited to 'tests/test-integration-buffer-diff.el')
-rw-r--r--tests/test-integration-buffer-diff.el300
1 files changed, 0 insertions, 300 deletions
diff --git a/tests/test-integration-buffer-diff.el b/tests/test-integration-buffer-diff.el
deleted file mode 100644
index 678e4816..00000000
--- a/tests/test-integration-buffer-diff.el
+++ /dev/null
@@ -1,300 +0,0 @@
-;;; test-integration-buffer-diff.el --- Integration tests for buffer diff functionality -*- lexical-binding: t; -*-
-
-;;; Commentary:
-;; Integration tests covering the complete buffer diff workflow:
-;; - Comparing buffer contents with saved file version
-;; - Difftastic integration with fallback to regular diff
-;; - Output formatting and buffer display
-;; - Handling of no differences case
-;;
-;; Components integrated:
-;; - cj/executable-exists-p (program detection from system-lib)
-;; - cj/--diff-with-difftastic (difftastic execution and formatting)
-;; - cj/--diff-with-regular-diff (unified diff execution)
-;; - cj/diff-buffer-with-file (orchestration and user interaction)
-;; - File I/O (temp file creation/cleanup)
-;; - Buffer management (creating and displaying diff output)
-
-;;; Code:
-
-(require 'ert)
-(require 'system-lib)
-
-;; Stub out the keymap that custom-buffer-file requires
-(defvar cj/custom-keymap (make-sparse-keymap)
- "Stub keymap for testing.")
-
-(require 'custom-buffer-file)
-
-;;; Test Utilities
-
-(defun test-integration-buffer-diff--get-diff-buffer ()
- "Get the diff buffer created by cj/diff-buffer-with-file.
-Returns either *Diff (difftastic)* or *Diff (unified)* buffer."
- (or (get-buffer "*Diff (difftastic)*")
- (get-buffer "*Diff (unified)*")))
-
-(defun test-integration-buffer-diff--create-test-file (content)
- "Create a temporary test file with CONTENT.
-Returns the file path."
- (let ((file (make-temp-file "test-buffer-diff-" nil ".org")))
- (with-temp-file file
- (insert content))
- file))
-
-(defun test-integration-buffer-diff--cleanup-buffers ()
- "Clean up test buffers created during tests."
- (when (get-buffer "*Diff (difftastic)*")
- (kill-buffer "*Diff (difftastic)*"))
- (when (get-buffer "*Diff (unified)*")
- (kill-buffer "*Diff (unified)*"))
- ;; Also clean old name for compatibility
- (when (get-buffer "*Diff*")
- (kill-buffer "*Diff*")))
-
-;;; Setup and Teardown
-
-(defun test-integration-buffer-diff-setup ()
- "Setup for buffer diff integration tests."
- (test-integration-buffer-diff--cleanup-buffers))
-
-(defun test-integration-buffer-diff-teardown ()
- "Teardown for buffer diff integration tests."
- (test-integration-buffer-diff--cleanup-buffers))
-
-;;; Normal Cases - Diff Detection and Display
-
-(ert-deftest test-integration-buffer-diff-normal-detects-added-lines ()
- "Test that diff correctly shows added lines in buffer.
-
-Creates a file, opens it, adds content, and verifies diff shows the additions.
-
-Components integrated:
-- cj/diff-buffer-with-file (main orchestration)
-- cj/executable-exists-p (tool detection)
-- cj/--diff-with-difftastic OR cj/--diff-with-regular-diff (diff execution)
-- File I/O (temp file creation)
-- Buffer display (showing diff output)
-
-Validates:
-- Modified buffer is compared against saved file
-- Added lines are detected and displayed
-- Output buffer is created and shown"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (let* ((file (test-integration-buffer-diff--create-test-file
- "* TODO Original heading\nSome content.\n")))
- (unwind-protect
- (with-current-buffer (find-file-noselect file)
- ;; Add new content to buffer
- (goto-char (point-max))
- (insert "\n* NEXT New task added\n")
- ;; Run diff
- (cj/diff-buffer-with-file)
- ;; Verify diff buffer was created
- (should (test-integration-buffer-diff--get-diff-buffer))
- (with-current-buffer (test-integration-buffer-diff--get-diff-buffer)
- (let ((content (buffer-string)))
- ;; Should have some diff output
- (should (> (length content) 0))
- ;; Content should show either the added line or indicate differences
- ;; (format differs between difft and regular diff)
- (should (or (string-match-p "NEXT" content)
- (string-match-p "New task" content)
- ;; Difft shows file differences in header
- (> (length content) 100)))))
- (kill-buffer))
- (delete-file file)))
- (test-integration-buffer-diff-teardown)))
-
-(ert-deftest test-integration-buffer-diff-normal-detects-removed-lines ()
- "Test that diff correctly shows removed lines from buffer.
-
-Creates a file with multiple lines, removes content, verifies diff shows deletions.
-
-Components integrated:
-- cj/diff-buffer-with-file (orchestration)
-- Diff backend (difftastic or regular diff)
-- Buffer and file comparison logic
-
-Validates:
-- Removed lines are detected
-- Diff output indicates deletion"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (let* ((file (test-integration-buffer-diff--create-test-file
- "* TODO Heading\nLine to remove\nLine to keep\n")))
- (unwind-protect
- (with-current-buffer (find-file-noselect file)
- ;; Remove middle line
- (goto-char (point-min))
- (forward-line 1)
- (kill-line 1)
- ;; Run diff
- (cj/diff-buffer-with-file)
- ;; Verify diff shows removal
- (should (test-integration-buffer-diff--get-diff-buffer))
- (with-current-buffer (test-integration-buffer-diff--get-diff-buffer)
- (let ((content (buffer-string)))
- (should (> (length content) 0))))
- (kill-buffer))
- (delete-file file)))
- (test-integration-buffer-diff-teardown)))
-
-(ert-deftest test-integration-buffer-diff-normal-shows-modified-lines ()
- "Test that diff shows modified lines correctly.
-
-Modifies existing content and verifies both old and new content shown.
-
-Components integrated:
-- cj/diff-buffer-with-file
-- Diff backend selection logic
-- Content comparison
-
-Validates:
-- Modified lines are detected
-- Both old and new content visible in diff"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (let* ((file (test-integration-buffer-diff--create-test-file
- "* TODO Original text\n")))
- (unwind-protect
- (with-current-buffer (find-file-noselect file)
- ;; Modify the text
- (goto-char (point-min))
- (search-forward "Original")
- (replace-match "Modified")
- ;; Run diff
- (cj/diff-buffer-with-file)
- ;; Verify diff shows change
- (should (test-integration-buffer-diff--get-diff-buffer))
- (with-current-buffer (test-integration-buffer-diff--get-diff-buffer)
- (let ((content (buffer-string)))
- (should (> (length content) 0))))
- (kill-buffer))
- (delete-file file)))
- (test-integration-buffer-diff-teardown)))
-
-;;; Boundary Cases - No Differences
-
-(ert-deftest test-integration-buffer-diff-boundary-no-changes-shows-message ()
- "Test that no differences shows message instead of buffer.
-
-When buffer matches file exactly, should display message only.
-
-Components integrated:
-- cj/diff-buffer-with-file
-- diff -q (quick comparison)
-- Message display
-
-Validates:
-- No diff buffer created when no changes
-- User receives appropriate feedback"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (let* ((file (test-integration-buffer-diff--create-test-file
- "* TODO No changes\n")))
- (unwind-protect
- (with-current-buffer (find-file-noselect file)
- ;; No changes made
- ;; Run diff
- (cj/diff-buffer-with-file)
- ;; Should NOT create diff buffer for no changes
- ;; (implementation shows message only)
- (kill-buffer))
- (delete-file file)))
- (test-integration-buffer-diff-teardown)))
-
-;; NOTE: Removed boundary-empty-file-with-content test due to unreliable behavior
-;; in batch mode where find-file-noselect + insert doesn't consistently create
-;; a buffer/file mismatch. The other tests adequately cover diff functionality.
-
-(ert-deftest test-integration-buffer-diff-boundary-org-mode-special-chars ()
- "Test that org-mode special characters are handled correctly.
-
-Boundary case: org asterisks, priorities, TODO keywords.
-
-Components integrated:
-- cj/diff-buffer-with-file
-- Diff backend (must handle special chars)
-- Org-mode content
-
-Validates:
-- Special org syntax doesn't break diff
-- Output is readable and correct"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (let* ((file (test-integration-buffer-diff--create-test-file
- "* TODO [#A] Original :tag:\n** DONE Subtask\n")))
- (unwind-protect
- (with-current-buffer (find-file-noselect file)
- ;; Modify with more special chars
- (goto-char (point-max))
- (insert "*** NEXT [#B] New subtask :work:urgent:\n")
- ;; Run diff
- (cj/diff-buffer-with-file)
- ;; Verify diff handled special chars
- (should (test-integration-buffer-diff--get-diff-buffer))
- (with-current-buffer (test-integration-buffer-diff--get-diff-buffer)
- (let ((content (buffer-string)))
- ;; Should have diff output (format varies)
- (should (> (length content) 0))))
- (kill-buffer))
- (delete-file file)))
- (test-integration-buffer-diff-teardown)))
-
-;;; Error Cases
-
-(ert-deftest test-integration-buffer-diff-error-not-visiting-file-signals-error ()
- "Test that calling diff on buffer not visiting file signals error.
-
-Error case: buffer exists but isn't associated with a file.
-
-Components integrated:
-- cj/diff-buffer-with-file (error handling)
-
-Validates:
-- Appropriate error signaled
-- Function fails fast with clear feedback"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (with-temp-buffer
- ;; Buffer not visiting a file
- (should-error (cj/diff-buffer-with-file)))
- (test-integration-buffer-diff-teardown)))
-
-;;; Difftastic vs Regular Diff Backend Selection
-
-(ert-deftest test-integration-buffer-diff-normal-uses-available-backend ()
- "Test that diff uses difftastic if available, otherwise regular diff.
-
-Validates backend selection logic works correctly.
-
-Components integrated:
-- cj/executable-exists-p (backend detection)
-- cj/--diff-with-difftastic OR cj/--diff-with-regular-diff
-- cj/diff-buffer-with-file (backend selection)
-
-Validates:
-- Correct backend is chosen based on availability
-- Fallback mechanism works
-- Both backends produce usable output"
- (test-integration-buffer-diff-setup)
- (unwind-protect
- (let* ((file (test-integration-buffer-diff--create-test-file
- "* TODO Test\n")))
- (unwind-protect
- (with-current-buffer (find-file-noselect file)
- (insert "* NEXT Added\n")
- ;; Run diff (will use whatever backend is available)
- (cj/diff-buffer-with-file)
- ;; Just verify it worked with some backend
- (should (test-integration-buffer-diff--get-diff-buffer))
- (with-current-buffer (test-integration-buffer-diff--get-diff-buffer)
- (should (> (buffer-size) 0)))
- (kill-buffer))
- (delete-file file)))
- (test-integration-buffer-diff-teardown)))
-
-(provide 'test-integration-buffer-diff)
-;;; test-integration-buffer-diff.el ends here