diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-org-drill-persist-recovery.el | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/test-org-drill-persist-recovery.el b/tests/test-org-drill-persist-recovery.el new file mode 100644 index 0000000..eb0b572 --- /dev/null +++ b/tests/test-org-drill-persist-recovery.el @@ -0,0 +1,51 @@ +;;; test-org-drill-persist-recovery.el --- Regression test for corrupted persist file -*- lexical-binding: t; -*- + +;;; Commentary: +;; Upstream issue #45 (2021-10). `persist-load' raises "End of file +;; during parsing" at persist.el:413 in some configurations, likely +;; from a corrupted persist data file. Pre-fix, this propagated up +;; through the `(persist-defvar org-drill-sm5-optimal-factor-matrix +;; ...)' form at file-load time, breaking the entire package's load. +;; +;; Fix wraps the persist-defvar form in `condition-case' so a +;; corrupted file falls back to a fresh nil matrix instead of +;; preventing the package from loading. + +;;; Code: + +(require 'ert) +(require 'cl-lib) +(require 'persist) +(require 'org-drill) + +;;;; Regression — wrapping pattern + +(ert-deftest test-persist-defvar-error-falls-back-to-initial-value () + "When persist-load throws, the condition-case wrapper recovers and +binds the symbol to the supplied initial value. + +This verifies the same wrapping pattern used at top-level around the +real `org-drill-sm5-optimal-factor-matrix' definition." + (let ((sym (intern (format "org-drill-test-persist-sym-%d" (random 999999))))) + (unwind-protect + (progn + (cl-letf (((symbol-function 'persist-symbol) #'ignore) + ((symbol-function 'persist-load) + (lambda (_) (error "End of file during parsing")))) + (condition-case _err + (eval `(persist-defvar ,sym 'fallback-value "doc")) + (error + (set sym 'fallback-value)))) + (should (eq 'fallback-value (symbol-value sym)))) + ;; Clean up the test symbol. + (when (boundp sym) (makunbound sym))))) + +(ert-deftest test-org-drill-sm5-optimal-factor-matrix-bound () + "After loading org-drill, the SM5 matrix variable is bound — confirms +the at-load-time wrapping (or normal persist-defvar success) leaves +the package in a usable state." + (should (boundp 'org-drill-sm5-optimal-factor-matrix))) + +(provide 'test-org-drill-persist-recovery) + +;;; test-org-drill-persist-recovery.el ends here |
