From c159b236b8fe4dc0b2454475c2ca3f699e42ab07 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 5 May 2026 14:19:09 -0500 Subject: test: cover marker end-pos, variable-pitch restore, young/overdue queue branches I extended three existing test files with cases that hit branches the suite was missing: `org-drill--show-end-message' with a live-marker end-pos (jumps to the marker), `org-drill--restore-display' for the variable-pitch-on / variable-pitch-off / text-scale paths, and `org-drill-pop-next-pending-entry' for the young-mature and overdue branches in the queue priority cond. Coverage moved from 87.0% to 87.8%. --- tests/test-org-drill-display-state.el | 50 +++++++++++++++++++++++++++ tests/test-org-drill-orchestration-helpers.el | 22 ++++++++++++ tests/test-org-drill-queue-and-misc.el | 32 +++++++++++++++++ 3 files changed, 104 insertions(+) diff --git a/tests/test-org-drill-display-state.el b/tests/test-org-drill-display-state.el index baad0a3..000a007 100644 --- a/tests/test-org-drill-display-state.el +++ b/tests/test-org-drill-display-state.el @@ -84,6 +84,56 @@ (org-drill--restore-display) (should (null org-drill--saved-display-buffer))))) +(ert-deftest test-restore-display-restores-variable-pitch-mode () + "Restore turns variable-pitch-mode back on in the saved-display-buffer +when it was active at session start." + (with-temp-buffer + (let ((toggled nil)) + (cl-letf (((symbol-function 'variable-pitch-mode) + (lambda (arg) (setq toggled arg)))) + (let ((org-drill-text-size-during-session nil) + (org-drill-use-variable-pitch t) + (org-drill-hide-modeline-during-session nil) + (org-drill--saved-display-buffer (current-buffer)) + (org-drill--saved-text-scale nil) + (org-drill--saved-variable-pitch-mode t) + (org-drill--saved-modeline-format nil)) + (org-drill--restore-display) + (should (= 1 toggled)) + (should (null org-drill--saved-variable-pitch-mode))))))) + +(ert-deftest test-restore-display-disables-variable-pitch-when-it-was-off () + "Restore turns variable-pitch-mode off when it was off at session start." + (with-temp-buffer + (let ((toggled nil)) + (cl-letf (((symbol-function 'variable-pitch-mode) + (lambda (arg) (setq toggled arg)))) + (let ((org-drill-text-size-during-session nil) + (org-drill-use-variable-pitch t) + (org-drill-hide-modeline-during-session nil) + (org-drill--saved-display-buffer (current-buffer)) + (org-drill--saved-text-scale nil) + (org-drill--saved-variable-pitch-mode nil) + (org-drill--saved-modeline-format nil)) + (org-drill--restore-display) + (should (= -1 toggled))))))) + +(ert-deftest test-restore-display-restores-text-scale () + "Restore puts the default face's :height back to the saved value." + (let ((set-args nil)) + (cl-letf (((symbol-function 'set-face-attribute) + (lambda (&rest args) (push args set-args)))) + (let ((org-drill-text-size-during-session 14) + (org-drill-use-variable-pitch nil) + (org-drill-hide-modeline-during-session nil) + (org-drill--saved-display-buffer (current-buffer)) + (org-drill--saved-text-scale 100) + (org-drill--saved-variable-pitch-mode 'unbound) + (org-drill--saved-modeline-format nil)) + (org-drill--restore-display) + (should (cl-some (lambda (a) (memq 100 a)) set-args)) + (should (null org-drill--saved-text-scale)))))) + ;;;; org-drill-current-scope (directory branch) (ert-deftest test-org-drill-current-scope-directory-returns-org-files-list () diff --git a/tests/test-org-drill-orchestration-helpers.el b/tests/test-org-drill-orchestration-helpers.el index 920487c..5589fa7 100644 --- a/tests/test-org-drill-orchestration-helpers.el +++ b/tests/test-org-drill-orchestration-helpers.el @@ -153,6 +153,28 @@ (should final-report-shown) (should-not resume-hint-shown)))) +(ert-deftest test-show-end-message-marker-end-pos-jumps-to-marker () + "When end-pos is a live marker, dispatcher navigates to it before showing +the resume hint." + (let ((tmpfile (make-temp-file "org-drill-end-pos-" nil ".org"))) + (unwind-protect + (let ((session (org-drill-session)) + (jumped-to nil)) + (with-current-buffer (find-file-noselect tmpfile) + (insert "* First :drill:\n* Second :drill:\nbody\n") + (org-mode) + (goto-char (point-max)) + (let ((m (point-marker))) + (oset session end-pos m) + (cl-letf (((symbol-function 'org-drill-goto-entry) + (lambda (mk) (setq jumped-to mk))) + ((symbol-function 'org-reveal) #'ignore) + ((symbol-function 'org-fold-show-entry) #'ignore) + ((symbol-function 'org-drill--show-resume-hint) #'ignore)) + (org-drill--show-end-message session) + (should (eq jumped-to m)))))) + (when (file-exists-p tmpfile) (delete-file tmpfile))))) + ;;;; org-drill--build-dest-id-table (ert-deftest test-build-dest-id-table-populates-id-marker-pairs () diff --git a/tests/test-org-drill-queue-and-misc.el b/tests/test-org-drill-queue-and-misc.el index 51923e9..d8cc3fa 100644 --- a/tests/test-org-drill-queue-and-misc.el +++ b/tests/test-org-drill-queue-and-misc.el @@ -63,6 +63,38 @@ ;; failed-entries is now empty. (should (null (oref session failed-entries)))))))) +(ert-deftest test-org-drill-pop-next-pending-entry-young-mature-branch () + "When failed and overdue are empty but young-mature has items, pops from there." + (with-fixed-now + (with-temp-buffer + (insert "* Young :drill:\n") + (org-mode) + (let* ((session (org-drill-session)) + (m (save-excursion (goto-char (point-min)) (point-marker)))) + (oset session start-time (float-time (current-time))) + (oset session young-mature-entries (list m)) + (let ((popped (org-drill-pop-next-pending-entry session))) + (should (eq m popped)) + (should (null (oref session young-mature-entries)))))))) + +(ert-deftest test-org-drill-pop-next-pending-entry-overdue-branch () + "When failed is empty and overdue has items, pops the head of the overdue list." + (with-fixed-now + (with-temp-buffer + (insert "* Over1 :drill:\n* Over2 :drill:\n") + (org-mode) + (let* ((session (org-drill-session)) + (m1 (save-excursion (goto-char (point-min)) (point-marker))) + (m2 (save-excursion (goto-char (point-min)) + (re-search-forward "^\\* Over2" nil t) + (line-beginning-position) + (point-marker)))) + (oset session start-time (float-time (current-time))) + (oset session overdue-entries (list m1 m2)) + (let ((popped (org-drill-pop-next-pending-entry session))) + (should (eq m1 popped)) + (should (equal (list m2) (oref session overdue-entries)))))))) + (ert-deftest test-org-drill-pop-next-pending-entry-falls-through-to-again () "When all primary queues are empty but again-entries has items, pops from again." (with-fixed-now -- cgit v1.2.3