Skip to content

Commit

Permalink
Update tests after update to newer Eldoc
Browse files Browse the repository at this point in the history
It's likely that these will fail until the very latest Emacs master is
available in travis.

* eglot-tests.el (eglot--eldoc-on-demand)
(eglot--tests-force-full-eldoc): New helpers.
(rls-hover-after-edit): Use new helpers.
(hover-multiline-doc-locus): Remove.
(hover-after-completions): Remove
(eglot-single-line-eldoc, eglot-multiline-eldoc)
(egnnlot-eldoc-after-completions): New tests.
  • Loading branch information
joaotavora committed Jul 9, 2020
1 parent a044dec commit a04b826
Showing 1 changed file with 53 additions and 33 deletions.
86 changes: 53 additions & 33 deletions eglot-tests.el
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,27 @@ Pass TIMEOUT to `eglot--with-timeout'."
(flymake-goto-next-error 1 '() t)
(should (eq 'flymake-error (face-at-point)))))))

(defun eglot--eldoc-on-demand ()
;; Trick Eldoc 1.1.0 into accepting on-demand calls.
(let ((this-command nil) (last-command 'forward-char))
(should (eldoc-display-message-p))
(eldoc)))

(defun eglot--tests-force-full-eldoc ()
(let ((origin (current-buffer)))
(with-current-buffer (eldoc-doc-buffer)
(let ((inhibit-read-only t))
(erase-buffer)
(with-current-buffer origin
(eglot--eldoc-on-demand))
(cl-loop
repeat 10
while (zerop (length (buffer-string)))
do (sit-for 0.1))
(should (cl-plusp (length (buffer-string))))
(message "returning %s" (buffer-string))
(buffer-string)))))

(ert-deftest rls-hover-after-edit ()
"Hover and highlightChanges are tricky in RLS."
(skip-unless (executable-find "rls"))
Expand All @@ -444,7 +465,7 @@ Pass TIMEOUT to `eglot--with-timeout'."
;; simulate these two which don't happen when buffer isn't
;; visible in a window.
(eglot--signal-textDocument/didChange)
(eglot-eldoc-function))
(eglot--eldoc-on-demand))
(let (pending-id)
(eglot--wait-for (c-reqs 2)
(&key id method &allow-other-keys)
Expand Down Expand Up @@ -542,49 +563,48 @@ def foobazquuz(d, e, f): pass
;; pyls will change the representation of this candidate
(should (member "foobazquuz(d, e, f)" company-candidates)))))

(ert-deftest hover-after-completions ()
(ert-deftest eglot-eldoc-after-completions ()
"Test documentation echo in a python LSP"
(skip-unless (executable-find "pyls"))
;; JT@19/06/21: We check with `eldoc-last-message' because it's
;; practical, which forces us to use
;; `eglot-put-doc-in-help-buffer' to nil.
(let ((eglot-put-doc-in-help-buffer nil))
(eglot--with-fixture
`(("project" . (("something.py" . "import sys\nsys.exi"))))
(with-current-buffer
(eglot--find-file-noselect "project/something.py")
(should (eglot--tests-connect))
(goto-char (point-max))
(setq eldoc-last-message nil)
(completion-at-point)
(should (looking-back "sys.exit"))
(while (not eldoc-last-message) (accept-process-output nil 0.1))
(should (string-match "^exit" eldoc-last-message))))))
(eglot--with-fixture
`(("project" . (("something.py" . "import sys\nsys.exi"))))
(with-current-buffer
(eglot--find-file-noselect "project/something.py")
(should (eglot--tests-connect))
(goto-char (point-max))
(completion-at-point)
(should (looking-back "sys.exit"))
(should (string-match "^exit" (eglot--tests-force-full-eldoc))))))

(ert-deftest eglot-multiline-eldoc ()
"Test if suitable amount of lines of hover info are shown."
(skip-unless (executable-find "pyls"))
(eglot--with-fixture
`(("project" . (("hover-first.py" . "from datetime import datetime"))))
(with-current-buffer
(eglot--find-file-noselect "project/hover-first.py")
(should (eglot--tests-connect))
(goto-char (point-max))
;; one-line
(let* ((eldoc-echo-area-use-multiline-p t)
(captured-message (eglot--tests-force-full-eldoc)))
(should (string-match "datetim" captured-message))
(should (cl-find ?\n eldoc-last-message))))))

(ert-deftest hover-multiline-doc-locus ()
(ert-deftest eglot-single-line-eldoc ()
"Test if suitable amount of lines of hover info are shown."
(skip-unless (executable-find "pyls"))
(eglot--with-fixture
`(("project" . (("hover-first.py" . "from datetime import datetime")))
(eglot-put-doc-in-help-buffer nil))
`(("project" . (("hover-first.py" . "from datetime import datetime"))))
(with-current-buffer
(eglot--find-file-noselect "project/hover-first.py")
(should (eglot--tests-connect))
(goto-char (point-max))
;; one-line
(setq eldoc-last-message nil)
(setq-local eldoc-echo-area-use-multiline-p nil)
(eglot-eldoc-function)
(while (not eldoc-last-message) (accept-process-output nil 0.1))
(should (string-match "datetim" eldoc-last-message))
(should (not (cl-find ?\n eldoc-last-message)))
;; multi-line
(setq eldoc-last-message nil)
(setq-local eldoc-echo-area-use-multiline-p t)
(eglot-eldoc-function)
(while (not eldoc-last-message) (accept-process-output nil 0.1))
(should (string-match "datetim" eldoc-last-message))
(should (cl-find ?\n eldoc-last-message)))))
(let* ((eldoc-echo-area-use-multiline-p nil)
(captured-message (eglot--tests-force-full-eldoc)))
(should (string-match "datetim" captured-message))
(should (not (cl-find ?\n eldoc-last-message)))))))

(ert-deftest python-autopep-formatting ()
"Test formatting in the pyls python LSP.
Expand Down

0 comments on commit a04b826

Please sign in to comment.