127 lines
3.8 KiB
EmacsLisp
127 lines
3.8 KiB
EmacsLisp
(require 'persist)
|
|
(require 'seq)
|
|
|
|
|
|
(defmacro with-local-temp-persist (&rest body)
|
|
(declare (debug body))
|
|
`(unwind-protect
|
|
(let ((persist--directory-location "./persist/")
|
|
(persist--symbols nil))
|
|
,@body)
|
|
(delete-directory "./persist" t)))
|
|
|
|
(ert-deftest test-persist-symbol ()
|
|
(should
|
|
(let ((persist--symbols nil)
|
|
(sym (cl-gensym)))
|
|
(persist-symbol sym 10)
|
|
(seq-contains persist--symbols sym))))
|
|
|
|
(ert-deftest test-persist-save-only-persistant ()
|
|
;; do not save not persist variables
|
|
(should-error
|
|
(with-local-temp-persist
|
|
(persist-save (cl-gensym)))
|
|
:type 'error
|
|
:exclude-subtypes t))
|
|
|
|
(ert-deftest test-persist-save ()
|
|
(with-local-temp-persist
|
|
(let ((sym (cl-gensym)))
|
|
;; precondition
|
|
(should-not (file-exists-p (persist--file-location sym)))
|
|
(set sym 10)
|
|
(persist-symbol sym 10)
|
|
(persist-save sym)
|
|
(should t)
|
|
(should-not (file-exists-p (persist--file-location sym)))
|
|
(set sym 20)
|
|
(persist-save sym)
|
|
(should (file-exists-p (persist--file-location sym)))
|
|
(should
|
|
(string-match-p
|
|
"20"
|
|
(with-temp-buffer
|
|
(insert-file-contents (persist--file-location sym))
|
|
(buffer-string))))
|
|
(should-error
|
|
(persist-save 'fred)))))
|
|
|
|
(ert-deftest test-persist-save-non-number ()
|
|
"Test saving something that is not a number.
|
|
|
|
`test-persist-save' missed "
|
|
(with-local-temp-persist
|
|
(let ((sym (cl-gensym)))
|
|
(set sym "fred")
|
|
(persist-symbol sym "fred")
|
|
(persist-save sym)
|
|
(should t)
|
|
(should-not (file-exists-p (persist--file-location sym)))
|
|
(set sym "george")
|
|
(persist-save sym)
|
|
(should (file-exists-p (persist--file-location sym)))
|
|
(should
|
|
(string-match-p
|
|
"george"
|
|
(with-temp-buffer
|
|
(insert-file-contents (persist--file-location sym))
|
|
(buffer-string)))))))
|
|
|
|
(ert-deftest test-persist-load ()
|
|
(with-local-temp-persist
|
|
(let ((sym (cl-gensym)))
|
|
(set sym 10)
|
|
;; set this different to force save
|
|
(persist-symbol sym 1)
|
|
(persist-save sym)
|
|
(should (equal 10 (symbol-value sym)))
|
|
(set sym 30)
|
|
(should (equal 30 (symbol-value sym)))
|
|
(persist-load sym)
|
|
(should (equal 10 (symbol-value sym))))))
|
|
|
|
(ert-deftest test-persist-remove ()
|
|
(with-local-temp-persist
|
|
(let ((sym (cl-gensym)))
|
|
(should-not (persist--persistant-p sym))
|
|
(persist-symbol sym 10)
|
|
(should (persist--persistant-p sym))
|
|
(persist-unpersist sym)
|
|
(should-not (persist--persistant-p sym)))))
|
|
|
|
(ert-deftest test-persist-defvar ()
|
|
(with-local-temp-persist
|
|
(defvar test-no-persist-variable 10 "docstring")
|
|
(persist-defvar test-persist-variable 20 "docstring")
|
|
(should-not (persist--persistant-p 'test-no-persist-variable))
|
|
(should (persist--persistant-p 'test-persist-variable))
|
|
(should (= 20
|
|
(persist-default 'test-persist-variable)))))
|
|
|
|
(ert-deftest test-persist-location ()
|
|
(unwind-protect
|
|
(let ((sym (cl-gensym)))
|
|
(delete-directory "./persist-defined-location" t)
|
|
(set sym 10)
|
|
(persist-symbol sym 10)
|
|
(persist-location sym "./persist-defined-location")
|
|
(should
|
|
(equal (expand-file-name
|
|
(symbol-name sym)
|
|
"./persist-defined-location/")
|
|
(persist--file-location sym)))
|
|
(persist-save sym)
|
|
(should-not (file-exists-p (persist--file-location sym)))
|
|
(set sym 20)
|
|
(persist-save sym)
|
|
(should (file-exists-p (persist--file-location sym)))
|
|
(should
|
|
(string-match-p
|
|
"20"
|
|
(with-temp-buffer
|
|
(insert-file-contents (persist--file-location sym))
|
|
(buffer-string))))
|
|
(should-error
|
|
(persist-save 'fred)))
|
|
(delete-directory "./persist-defined-location" t)))
|