Add some tests to find-func.el

This commit is contained in:
Daniel Martín 2020-12-31 04:31:22 +01:00 committed by Lars Ingebrigtsen
parent 0eef70aea8
commit aba77849cd

View file

@ -27,6 +27,7 @@
;;; Code:
(require 'ert-x) ;For `ert-run-keys'.
(require 'find-func)
(ert-deftest find-func-tests--library-completion () ;bug#43393
;; FIXME: How can we make this work in batch (see also
@ -43,6 +44,68 @@
(concat data-directory (kbd "n x / TAB RET"))
(read-library-name)))))
(ert-deftest find-func-tests--locate-symbols ()
(should (cdr
(find-function-search-for-symbol
#'goto-line nil "simple")))
(should (cdr
(find-function-search-for-symbol
'minibuffer-history 'defvar "simple")))
(should (cdr
(find-function-search-for-symbol
'with-current-buffer nil "subr")))
(should (cdr
(find-function-search-for-symbol
'font-lock-warning-face 'defface "font-lock")))
(should-not (cdr
(find-function-search-for-symbol
'wrong-variable 'defvar "simple")))
(should-not (cdr
(find-function-search-for-symbol
'wrong-function nil "simple")))
(should (cdr (find-function-noselect #'goto-line)))
(should (cdr (find-function-noselect #'goto-char)))
;; Setting LISP-ONLY and passing a primitive should error.
(should-error (find-function-noselect #'goto-char t))
(should-error (find-function-noselect 'wrong-function)))
(defun test-locate-helper (func &optional expected-result)
"Assert on the result of `find-function-library' for FUNC.
EXPECTED-RESULT is an alist (FUNC . LIBRARY) with the
expected function symbol and function library, respectively."
(cl-destructuring-bind (orig-function . library)
(find-function-library func)
(cl-destructuring-bind (expected-func . expected-library)
expected-result
(should (eq orig-function expected-func))
(should (and
(not (string-empty-p expected-library))
(string-match-p expected-library library))))))
(ert-deftest find-func-tests--locate-library ()
(test-locate-helper #'goto-line '(goto-line . "simple"))
(test-locate-helper #'forward-char '(forward-char . "cmds.c"))
(should-error (test-locate-helper 'wrong-function)))
(ert-deftest find-func-tests--locate-adviced-symbols ()
(defun my-message ()
(message "Hello!"))
(advice-add #'mark-sexp :around 'my-message)
(test-locate-helper #'mark-sexp '(mark-sexp . "lisp"))
(advice-remove #'mark-sexp 'my-message))
(ert-deftest find-func-tests--find-library-verbose ()
(find-function-library #'join-line nil t)
(with-current-buffer "*Messages*"
(save-excursion
(goto-char (point-max))
(skip-chars-backward "\n")
(should (string-match-p
".join-line. is an alias for .delete-indentation."
(buffer-substring
(line-beginning-position)
(point)))))))
;; Avoid a byte-compilation warning that may confuse people reading
;; the result of the following test.
(declare-function compilation--message->loc nil "compile")