emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 9d8fc3a: Use lexical-binding in help-mode.el and add tests


From: Simen Heggestøyl
Subject: master 9d8fc3a: Use lexical-binding in help-mode.el and add tests
Date: Sat, 9 May 2020 14:03:28 -0400 (EDT)

branch: master
commit 9d8fc3a598090da518fcdd5c0503ed0f7faa41a9
Author: Simen Heggestøyl <address@hidden>
Commit: Simen Heggestøyl <address@hidden>

    Use lexical-binding in help-mode.el and add tests
    
    * lisp/help-mode.el: Use lexical-binding.
    (help-mode-map, help-mode-menu, help-mode-setup)
    (help-mode-finish): Make spelling of "Help mode" consistent throughout
    the doc strings (also making it consistent with the spelling of "Help
    mode" used in the Elisp manual).
    (help-do-xref): Re-indent to make the else-branch easier to see.
    
    * test/lisp/help-mode-tests.el: New file with tests for help-mode.el.
---
 lisp/help-mode.el            |  13 ++--
 test/lisp/help-mode-tests.el | 169 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 176 insertions(+), 6 deletions(-)

diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index bae8281..9c2d1d7 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -1,4 +1,4 @@
-;;; help-mode.el --- `help-mode' used by *Help* buffers
+;;; help-mode.el --- `help-mode' used by *Help* buffers  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 1985-1986, 1993-1994, 1998-2020 Free Software
 ;; Foundation, Inc.
@@ -47,10 +47,10 @@
     (define-key map "\C-c\C-c" 'help-follow-symbol)
     (define-key map "\r" 'help-follow)
     map)
-  "Keymap for help mode.")
+  "Keymap for Help mode.")
 
 (easy-menu-define help-mode-menu help-mode-map
-  "Menu for Help Mode."
+  "Menu for Help mode."
   '("Help-Mode"
     ["Show Help for Symbol" help-follow-symbol
      :help "Show the docs for the symbol at point"]
@@ -327,13 +327,13 @@ Commands:
 
 ;;;###autoload
 (defun help-mode-setup ()
-  "Enter Help Mode in the current buffer."
+  "Enter Help mode in the current buffer."
   (help-mode)
   (setq buffer-read-only nil))
 
 ;;;###autoload
 (defun help-mode-finish ()
-  "Finalize Help Mode setup in current buffer."
+  "Finalize Help mode setup in current buffer."
   (when (derived-mode-p 'help-mode)
     (setq buffer-read-only t)
     (help-make-xrefs (current-buffer))))
@@ -719,7 +719,8 @@ a proper [back] button."
   ;; There is a reference at point.  Follow it.
   (let ((help-xref-following t))
     (apply function (if (eq function 'info)
-                       (append args (list (generate-new-buffer-name 
"*info*"))) args))))
+                        (append args (list (generate-new-buffer-name 
"*info*")))
+                      args))))
 
 ;; The doc string is meant to explain what buttons do.
 (defun help-follow-mouse ()
diff --git a/test/lisp/help-mode-tests.el b/test/lisp/help-mode-tests.el
new file mode 100644
index 0000000..2b9552a
--- /dev/null
+++ b/test/lisp/help-mode-tests.el
@@ -0,0 +1,169 @@
+;;; help-mode-tests.el --- Tests for help-mode.el    -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Simen Heggestøyl <address@hidden>
+;; Keywords:
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'help-mode)
+(require 'pp)
+
+(ert-deftest help-mode-tests-help-buffer ()
+  (let ((help-xref-following nil))
+    (should (equal "*Help*" (help-buffer)))))
+
+(ert-deftest help-mode-tests-help-buffer-current-buffer ()
+  (with-temp-buffer
+    (help-mode)
+    (let ((help-xref-following t))
+      (should (equal (buffer-name (current-buffer))
+                     (help-buffer))))))
+
+(ert-deftest help-mode-tests-help-buffer-current-buffer-error ()
+  (with-temp-buffer
+    (let ((help-xref-following t))
+      (should-error (help-buffer)))))
+
+(ert-deftest help-mode-tests-make-xrefs ()
+  (with-temp-buffer
+    (insert "car is a built-in function in ‘C source code’.
+
+(car LIST)
+
+  Probably introduced at or before Emacs version 1.2.
+  This function does not change global state, including the match data.
+
+Return the car of LIST.  If arg is nil, return nil.
+Error if arg is not nil and not a cons cell.  See also ‘car-safe’.
+
+See Info node ‘(elisp)Cons Cells’ for a discussion of related basic
+Lisp concepts such as car, cdr, cons cell and list.")
+    (help-mode)
+    (help-make-xrefs)
+    (let ((car-safe-button (button-at 298)))
+      (should (eq (button-type car-safe-button) 'help-symbol))
+      (should (eq (button-get car-safe-button 'help-function)
+                  #'describe-symbol)))
+    (let ((cons-cells-info-button (button-at 333)))
+      (should (eq (button-type cons-cells-info-button) 'help-info))
+      (should (eq (button-get cons-cells-info-button 'help-function)
+                  #'info)))))
+
+(ert-deftest help-mode-tests-xref-button ()
+  (with-temp-buffer
+    (insert "See also the function ‘interactive’.")
+    (string-match help-xref-symbol-regexp (buffer-string))
+    (help-xref-button 8 'help-function)
+    (should-not (button-at 22))
+    (should-not (button-at 35))
+    (let ((button (button-at 30)))
+      (should (eq (button-type button) 'help-function)))))
+
+(ert-deftest help-mode-tests-insert-xref-button ()
+  (with-temp-buffer
+    (help-insert-xref-button "[back]" 'help-back)
+    (goto-char (point-min))
+    (should (eq (button-type (button-at (point))) 'help-back))
+    (help-insert-xref-button "[forward]" 'help-forward)
+    ;; The back button should stay unchanged.
+    (should (eq (button-type (button-at (point))) 'help-back))))
+
+(ert-deftest help-mode-tests-xref-on-pp ()
+  (with-temp-buffer
+    (insert (pp '(cons fill-column)))
+    (help-xref-on-pp (point-min) (point-max))
+    (goto-char (point-min))
+    (search-forward "co")
+    (should (eq (button-type (button-at (point))) 'help-function))
+    (search-forward "-")
+    (should (eq (button-type (button-at (point))) 'help-variable))))
+
+(ert-deftest help-mode-tests-xref-go-back ()
+  (let ((help-xref-stack
+         `((2 ,(lambda () (erase-buffer) (insert "bar"))))))
+    (with-temp-buffer
+      (insert "foo")
+      (help-xref-go-back (current-buffer))
+      (should (= (point) 2))
+      (should (equal (buffer-string) "bar")))))
+
+(ert-deftest help-mode-tests-xref-go-forward ()
+  (let ((help-xref-forward-stack
+         `((2 ,(lambda () (erase-buffer) (insert "bar"))))))
+    (with-temp-buffer
+      (insert "foo")
+      (help-xref-go-forward (current-buffer))
+      (should (= (point) 2))
+      (should (equal (buffer-string) "bar")))))
+
+(ert-deftest help-mode-tests-go-back ()
+  (let ((help-xref-stack
+         `((2 ,(lambda () (erase-buffer) (insert "bar"))))))
+    (with-temp-buffer
+      (insert "foo")
+      (help-go-back)
+      (should (= (point) 2))
+      (should (equal (buffer-string) "bar")))))
+
+(ert-deftest help-mode-tests-go-back-no-stack ()
+  (let ((help-xref-stack '()))
+    (should-error (help-go-back))))
+
+(ert-deftest help-mode-tests-go-forward ()
+  (let ((help-xref-forward-stack
+         `((2 ,(lambda () (erase-buffer) (insert "bar"))))))
+    (with-temp-buffer
+      (insert "foo")
+      (help-go-forward)
+      (should (= (point) 2))
+      (should (equal (buffer-string) "bar")))))
+
+(ert-deftest help-mode-tests-go-forward-no-stack ()
+  (let ((help-xref-forward-stack '()))
+    (should-error (help-go-forward))))
+
+(ert-deftest help-mode-tests-do-xref ()
+  (with-temp-buffer
+    (help-mode)
+    (help-do-xref 0 #'describe-symbol '(car))
+    (should (looking-at-p "car is a"))
+    (should (string-match-p "[back]" (buffer-string)))))
+
+(ert-deftest help-mode-tests-follow-symbol ()
+  (with-temp-buffer
+    (insert "car")
+    (help-mode)
+    (help-follow-symbol 0)
+    (should (looking-at-p "car is a"))
+    (should (string-match-p "[back]" (buffer-string)))))
+
+(ert-deftest help-mode-tests-follow-symbol-no-symbol ()
+  (with-temp-buffer
+    (insert "fXYEWnRHI0B9w6VJqQIw")
+    (help-mode)
+    (should-error (help-follow-symbol 0))))
+
+(provide 'help-mode-tests)
+;;; help-mode-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]