aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-05 14:19:09 -0500
committerCraig Jennings <c@cjennings.net>2026-05-05 14:19:09 -0500
commitc159b236b8fe4dc0b2454475c2ca3f699e42ab07 (patch)
tree2338f614f491a62c8d2e7e4e1dac71826ccbca46
parent657f494c2ae157fe11bcab1fab0d787dc1fa9752 (diff)
downloadorg-drill-c159b236b8fe4dc0b2454475c2ca3f699e42ab07.tar.gz
org-drill-c159b236b8fe4dc0b2454475c2ca3f699e42ab07.zip
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%.
-rw-r--r--tests/test-org-drill-display-state.el50
-rw-r--r--tests/test-org-drill-orchestration-helpers.el22
-rw-r--r--tests/test-org-drill-queue-and-misc.el32
3 files changed, 104 insertions, 0 deletions
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