From 46bcf53e970e05f6c58b08040a72cc61cc476fb4 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 5 May 2026 14:32:33 -0500 Subject: test: cover --route-rating-result quit/edit/skip/next branches MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I added tests for `org-drill--route-rating-result' covering all four return values: nil → 'quit (end-pos becomes :quit), 'edit → 'edit (end-pos becomes a marker), 'skip → 'skip (current-item cleared), quality 0 → 'next (pushes to again-entries) and quality 5 → 'next (pushes to done-entries). Also a case where again-entries is non-empty so the shuffle branch runs. Coverage moved from 91.6% to 91.7%. --- tests/test-org-drill-route-rating-result.el | 71 +++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tests/test-org-drill-route-rating-result.el (limited to 'tests') diff --git a/tests/test-org-drill-route-rating-result.el b/tests/test-org-drill-route-rating-result.el new file mode 100644 index 0000000..5469bc8 --- /dev/null +++ b/tests/test-org-drill-route-rating-result.el @@ -0,0 +1,71 @@ +;;; test-org-drill-route-rating-result.el --- Tests for --route-rating-result -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for `org-drill--route-rating-result', which translates the return +;; value of `org-drill-entry' into one of `quit', `edit', `skip', `next' +;; while updating the session queues. + +;;; Code: + +(require 'ert) +(require 'cl-lib) +(require 'org) +(require 'org-drill) + +(defun make-marker-for-test () + (let ((m (make-marker))) (set-marker m 1) m)) + +(ert-deftest test-route-rating-result-nil-returns-quit-and-stashes-end-pos () + "When the entry returned nil (user quit), result is `quit' and end-pos is :quit." + (let ((session (org-drill-session)) + (m (make-marker-for-test))) + (cl-letf (((symbol-function 'message) #'ignore)) + (should (eq 'quit (org-drill--route-rating-result session m nil)))) + (should (eq :quit (oref session end-pos))))) + +(ert-deftest test-route-rating-result-edit-stashes-marker-end-pos () + "When the entry returned `edit', end-pos becomes a marker and result is `edit'." + (let ((session (org-drill-session)) + (m (make-marker-for-test))) + (with-temp-buffer + (insert "x") + (goto-char (point-min)) + (should (eq 'edit (org-drill--route-rating-result session m 'edit)))) + (should (markerp (oref session end-pos))))) + +(ert-deftest test-route-rating-result-skip-clears-current-item () + "Skip result drops the current-item slot to nil and returns `skip'." + (let ((session (org-drill-session)) + (m (make-marker-for-test))) + (oset session current-item m) + (should (eq 'skip (org-drill--route-rating-result session m 'skip))) + (should (null (oref session current-item))))) + +(ert-deftest test-route-rating-result-failure-pushes-onto-again-entries () + "A failed-quality result puts the marker on again-entries and returns `next'." + (let ((session (org-drill-session)) + (m (make-marker-for-test))) + (should (eq 'next (org-drill--route-rating-result session m 0))) + (should (member m (oref session again-entries))))) + +(ert-deftest test-route-rating-result-success-pushes-onto-done-entries () + "A passing-quality result puts the marker on done-entries and returns `next'." + (let ((session (org-drill-session)) + (m (make-marker-for-test))) + (should (eq 'next (org-drill--route-rating-result session m 5))) + (should (member m (oref session done-entries))))) + +(ert-deftest test-route-rating-result-failure-with-existing-again-shuffles-it () + "When again-entries already has items, the failure path re-shuffles the list." + (let* ((session (org-drill-session)) + (m1 (let ((mk (make-marker))) (set-marker mk 1) mk)) + (m2 (let ((mk (make-marker))) (set-marker mk 2) mk)) + (shuffle-called nil)) + (oset session again-entries (list m1 m2)) + (cl-letf (((symbol-function 'org-drill-shuffle) + (lambda (lst) (setq shuffle-called t) lst))) + (org-drill--route-rating-result session m1 0)) + (should shuffle-called))) + +(provide 'test-org-drill-route-rating-result) +;;; test-org-drill-route-rating-result.el ends here -- cgit v1.2.3