|
@@ -42,6 +42,13 @@
|
|
|
(mapc #'kill-buffer
|
|
|
(org-test-agenda--agenda-buffers)))
|
|
|
|
|
|
+(defmacro org-test-agenda-with-agenda (text &rest body)
|
|
|
+ (declare (indent 1))
|
|
|
+ `(org-test-with-temp-text-in-file ,text
|
|
|
+ (let ((org-agenda-files `(,buffer-file-name)))
|
|
|
+ ,@body
|
|
|
+ (org-test-agenda--kill-all-agendas))))
|
|
|
+
|
|
|
|
|
|
;; Test the Agenda
|
|
|
|
|
@@ -192,6 +199,67 @@
|
|
|
(should (search-forward "f0bcf0cd8bad93c1451bb6e1b2aaedef5cce7cbb" nil t))
|
|
|
(org-test-agenda--kill-all-agendas)))
|
|
|
|
|
|
+;; agenda bulk actions
|
|
|
+
|
|
|
+(ert-deftest test-org-agenda/bulk ()
|
|
|
+ "Bulk actions are applied to marked items."
|
|
|
+ (org-test-agenda-with-agenda "* TODO a\n* TODO b"
|
|
|
+ (org-todo-list)
|
|
|
+ (org-agenda-bulk-mark-all)
|
|
|
+ (cl-letf (((symbol-function 'read-char-exclusive)
|
|
|
+ (lambda () ?t))
|
|
|
+ ((symbol-function 'completing-read)
|
|
|
+ (lambda (&rest rest) "DONE")))
|
|
|
+ (org-agenda-bulk-action))
|
|
|
+ (org-agenda-previous-item 99)
|
|
|
+ (should (looking-at ".*DONE a"))
|
|
|
+ (org-agenda-next-item 1)
|
|
|
+ (should (looking-at ".*DONE b"))))
|
|
|
+
|
|
|
+(ert-deftest test-org-agenda/bulk-custom ()
|
|
|
+ "Custom bulk actions are applied to all marked items."
|
|
|
+ (org-test-agenda-with-agenda "* TODO a\n* TODO b"
|
|
|
+ (org-todo-list)
|
|
|
+ (org-agenda-bulk-mark-all)
|
|
|
+
|
|
|
+ ;; Mock read functions
|
|
|
+ (let* ((f-call-cnt 0)
|
|
|
+ (org-agenda-bulk-custom-functions
|
|
|
+ `((?P ,(lambda () (setq f-call-cnt (1+ f-call-cnt)))))))
|
|
|
+ (cl-letf* (((symbol-function 'read-char-exclusive)
|
|
|
+ (lambda () ?P)))
|
|
|
+ (org-agenda-bulk-action)
|
|
|
+ (should (= f-call-cnt 2))))))
|
|
|
+
|
|
|
+(ert-deftest test-org-agenda/bulk-custom-arg-func ()
|
|
|
+ "Argument collection functions can be specified for custom bulk
|
|
|
+functions."
|
|
|
+ (org-test-agenda-with-agenda "* TODO a\n* TODO b"
|
|
|
+ (org-todo-list)
|
|
|
+ (org-agenda-bulk-mark-all)
|
|
|
+ (let* ((f-called-cnt 0)
|
|
|
+ (arg-f-call-cnt 0)
|
|
|
+ (f-called-args nil)
|
|
|
+ (org-agenda-bulk-custom-functions
|
|
|
+ `((?P
|
|
|
+ ;; Custom bulk function
|
|
|
+ ,(lambda (&rest args)
|
|
|
+ (message "test" args)
|
|
|
+ (setq f-called-cnt (1+ f-called-cnt)
|
|
|
+
|
|
|
+ f-called-args args))
|
|
|
+ ;; Argument collection function
|
|
|
+ ,(lambda ()
|
|
|
+ (setq arg-f-call-cnt (1+ arg-f-call-cnt))
|
|
|
+ '(1 2 3))))))
|
|
|
+ (cl-letf (((symbol-function 'read-char-exclusive)
|
|
|
+ (lambda () ?P)))
|
|
|
+ (org-agenda-bulk-action))
|
|
|
+ (should (= f-called-cnt 2))
|
|
|
+ (should (= arg-f-call-cnt 1))
|
|
|
+ (should (equal f-called-args '(1 2 3))))))
|
|
|
+
|
|
|
+
|
|
|
|
|
|
(provide 'test-org-agenda)
|
|
|
|