2017-06-14 20:26:17 +02:00
|
|
|
;; -*- no-byte-compile: t; -*-
|
|
|
|
;;; core/test/core-lib.el
|
|
|
|
|
2017-06-24 16:20:09 +02:00
|
|
|
;; --- Helpers ----------------------------
|
|
|
|
|
2017-09-27 01:21:48 +02:00
|
|
|
;; `doom--resolve-path-forms'
|
2017-09-27 01:39:50 +02:00
|
|
|
(def-test! resolve-path-forms
|
2017-06-24 16:20:09 +02:00
|
|
|
(should
|
2017-09-27 01:21:48 +02:00
|
|
|
(equal (doom--resolve-path-forms '(and "fileA" "fileB"))
|
2017-06-24 16:20:09 +02:00
|
|
|
'(and (file-exists-p (expand-file-name "fileA" (doom-project-root)))
|
|
|
|
(file-exists-p (expand-file-name "fileB" (doom-project-root)))))))
|
|
|
|
|
2017-09-27 01:21:48 +02:00
|
|
|
;; `doom--resolve-hook-forms'
|
2017-09-27 01:39:50 +02:00
|
|
|
(def-test! resolve-hook-forms
|
2017-09-27 01:21:48 +02:00
|
|
|
(should (equal (doom--resolve-hook-forms '(js2-mode haskell-mode))
|
2017-06-24 16:20:09 +02:00
|
|
|
'(js2-mode-hook haskell-mode-hook)))
|
2017-09-27 01:21:48 +02:00
|
|
|
(should (equal (doom--resolve-hook-forms '(quote (js2-mode-hook haskell-mode-hook)))
|
2017-06-24 16:20:09 +02:00
|
|
|
'(js2-mode-hook haskell-mode-hook))))
|
|
|
|
|
|
|
|
;; `doom-unquote'
|
|
|
|
(def-test! unquote
|
|
|
|
(should (equal (doom-unquote '(quote (a b c))) '(a b c)))
|
|
|
|
;; nested
|
|
|
|
(should (equal (doom-unquote '(quote (quote (a b c)))) '(a b c)))
|
|
|
|
;; sub-quote
|
|
|
|
(should (equal (doom-unquote '(quote (a (quote b) c))) '(a (quote b) c)))
|
|
|
|
;; function
|
|
|
|
(should (equal (doom-unquote '(function a)) 'a)))
|
|
|
|
|
|
|
|
;; `doom-enlist'
|
|
|
|
(def-test! enlist
|
|
|
|
(should (equal (doom-enlist 'a) '(a)))
|
|
|
|
(should (equal (doom-enlist '(a)) '(a))))
|
|
|
|
|
2017-09-27 01:39:50 +02:00
|
|
|
;; `doom-resolve-vim-path'
|
|
|
|
(def-test! resolve-vim-path
|
|
|
|
(cl-flet ((do-it #'doom-resolve-vim-path))
|
|
|
|
;; file modifiers
|
|
|
|
(let ((buffer-file-name "~/.emacs.d/test/modules/feature/test-evil.el")
|
|
|
|
(default-directory "~/.emacs.d/test/modules/"))
|
|
|
|
(should (equal (do-it "%") "feature/test-evil.el"))
|
|
|
|
(should (equal (do-it "%:r") "feature/test-evil"))
|
|
|
|
(should (equal (do-it "%:r.elc") "feature/test-evil.elc"))
|
|
|
|
(should (equal (do-it "%:e") "el"))
|
|
|
|
(should (equal (do-it "%:p") (expand-file-name buffer-file-name)))
|
|
|
|
(should (equal (do-it "%:h") "feature"))
|
|
|
|
(should (equal (do-it "%:t") "test-evil.el"))
|
|
|
|
(should (equal (do-it "%:.") "feature/test-evil.el"))
|
|
|
|
(should (equal (do-it "%:~") "~/.emacs.d/test/modules/feature/test-evil.el"))
|
|
|
|
(should (equal (file-truename (do-it "%:p"))
|
|
|
|
(file-truename buffer-file-name))))
|
|
|
|
;; nested file modifiers
|
|
|
|
(let ((buffer-file-name "~/vim/src/version.c")
|
|
|
|
(default-directory "~/vim/"))
|
|
|
|
(should (equal (do-it "%:p") (expand-file-name "~/vim/src/version.c")))
|
|
|
|
(should (equal (do-it "%:p:.") "src/version.c"))
|
|
|
|
(should (equal (do-it "%:p:~") "~/vim/src/version.c"))
|
|
|
|
(should (equal (do-it "%:h") "src"))
|
|
|
|
(should (equal (do-it "%:p:h") (expand-file-name "~/vim/src")))
|
|
|
|
(should (equal (do-it "%:p:h:h") (expand-file-name "~/vim")))
|
|
|
|
(should (equal (do-it "%:t") "version.c"))
|
|
|
|
(should (equal (do-it "%:p:t") "version.c"))
|
|
|
|
(should (equal (do-it "%:r") "src/version"))
|
|
|
|
(should (equal (do-it "%:p:r") (expand-file-name "~/vim/src/version")))
|
|
|
|
(should (equal (do-it "%:t:r") "version")))
|
|
|
|
;; empty file modifiers
|
|
|
|
(let (buffer-file-name default-directory)
|
|
|
|
(should (equal (do-it "%") ""))
|
|
|
|
(should (equal (do-it "%:r") ""))
|
|
|
|
(should (equal (do-it "%:e") ""))
|
|
|
|
(should (equal (do-it "%:h") ""))
|
|
|
|
(should (equal (do-it "%:t") ""))
|
|
|
|
(should (equal (do-it "%:.") ""))
|
|
|
|
(should (equal (do-it "%:~") ""))
|
|
|
|
(should (equal (do-it "%:P") "")))))
|
|
|
|
|
2017-06-24 16:20:09 +02:00
|
|
|
|
|
|
|
;; --- Macros -----------------------------
|
|
|
|
|
2017-06-14 20:26:17 +02:00
|
|
|
;; `add-hook!'
|
|
|
|
(def-test! add-one-to-one-hook
|
|
|
|
(let (hooks)
|
|
|
|
(add-hook! 'hooks 'a-hook)
|
|
|
|
(should (equal hooks '(a-hook)))))
|
|
|
|
|
|
|
|
(def-test! add-many-to-one-hook
|
|
|
|
(let (hooks)
|
|
|
|
(add-hook! 'hooks '(hook-a hook-b hook-c))
|
|
|
|
(should (equal hooks '(hook-c hook-b hook-a)))))
|
|
|
|
|
|
|
|
(def-test! add-one-to-many-hooks
|
|
|
|
(let (hooks-a hooks-b hooks-c)
|
|
|
|
(add-hook! '(hooks-a hooks-b hooks-c) 'a-hook)
|
|
|
|
(should (equal hooks-a '(a-hook)))
|
|
|
|
(should (equal hooks-b '(a-hook)))
|
|
|
|
(should (equal hooks-c '(a-hook)))))
|
|
|
|
|
|
|
|
(def-test! add-many-to-many-hooks
|
|
|
|
(let (hooks-a hooks-b hooks-c)
|
|
|
|
(add-hook! '(hooks-a hooks-b hooks-c) '(hook-a hook-b hook-c))
|
|
|
|
(should (equal hooks-a '(hook-c hook-b hook-a)))
|
|
|
|
(should (equal hooks-b '(hook-c hook-b hook-a)))
|
|
|
|
(should (equal hooks-c '(hook-c hook-b hook-a)))))
|
|
|
|
|
|
|
|
(def-test! add-non-literal-hooks
|
|
|
|
(let (some-mode-hook)
|
|
|
|
(add-hook! some-mode 'a-hook)
|
|
|
|
(should (equal some-mode-hook '(a-hook)))))
|
|
|
|
|
|
|
|
;; `remove-hook!'
|
|
|
|
(def-test! remove-hooks
|
|
|
|
(let ((hooks-a '(hook-c hook-b hook-a))
|
|
|
|
(hooks-b '(hook-c hook-b hook-a))
|
|
|
|
(hooks-c '(hook-c hook-b hook-a)))
|
|
|
|
(remove-hook! '(hooks-a hooks-b hooks-c) '(hook-a hook-b hook-c))
|
|
|
|
(should (null hooks-a))
|
|
|
|
(should (null hooks-b))
|
|
|
|
(should (null hooks-c))))
|
|
|
|
|
|
|
|
(def-test! remove-hook-forms
|
|
|
|
(let (hooks)
|
|
|
|
(add-hook! 'hooks (message "Hello world"))
|
|
|
|
(should hooks)
|
|
|
|
(remove-hook! 'hooks (message "Hello world"))
|
|
|
|
(should (null hooks))))
|
|
|
|
|
|
|
|
;; `add-transient-hook!'
|
|
|
|
(def-test! transient-hooks
|
|
|
|
(let (hooks value)
|
|
|
|
(add-transient-hook! 'hooks (setq value t))
|
|
|
|
(run-hooks 'hooks)
|
|
|
|
(should (eq value t))
|
|
|
|
(should (null hooks))))
|
|
|
|
|
|
|
|
(def-test! transient-function
|
|
|
|
(let (value)
|
|
|
|
(add-transient-hook! #'ignore (setq value (not value)))
|
|
|
|
(ignore t)
|
|
|
|
(should (eq value t))
|
|
|
|
;; repeat to ensure it was only run once
|
|
|
|
(ignore t)
|
|
|
|
(should (eq value t))))
|
|
|
|
|
|
|
|
|
2017-06-24 16:20:09 +02:00
|
|
|
;; TODO `associate!'
|
2017-06-14 20:26:17 +02:00
|
|
|
|
|
|
|
|
2017-06-24 16:20:09 +02:00
|
|
|
;; --- Settings ---------------------------
|
|
|
|
|
|
|
|
(def-setting! :-test-setting (x) x)
|
|
|
|
|
|
|
|
(def-test! set
|
|
|
|
(should (assq :-test-setting doom-settings))
|
|
|
|
(should (set! :-test-setting t))
|
2017-06-28 15:29:39 +02:00
|
|
|
(let ((inhibit-message t))
|
|
|
|
(should-not (set! :non-existant-setting (error "This shouldn't trigger")))))
|