From 9d55ed149e100b4fb3ef6f5a79d263dcb26ce835 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 14 Nov 2025 02:31:16 -0600 Subject: checking in modified/removed tests and other misc changes --- tests/test-integration-buffer-diff.el | 300 ---------------------------------- 1 file changed, 300 deletions(-) delete mode 100644 tests/test-integration-buffer-diff.el (limited to 'tests/test-integration-buffer-diff.el') 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 -- cgit v1.2.3