]> git.eshelyaron.com Git - emacs.git/commitdiff
Use lexical-binding in browse-url.el and add tests
authorSimen Heggestøyl <simenheg@gmail.com>
Tue, 16 Jun 2020 19:32:58 +0000 (21:32 +0200)
committerSimen Heggestøyl <simenheg@gmail.com>
Fri, 7 Aug 2020 15:37:06 +0000 (17:37 +0200)
* lisp/net/browse-url.el: Turn on lexical-binding.
(browse-url--mailto, browse-url--man, browse-url--browser): Use
imperative form in docstrings.
(browse-url-delete-temp-file): Turn comment into a proper docstring.

* test/lisp/net/browse-url-tests.el: New file with tests for
browse-url.el.

lisp/net/browse-url.el
test/lisp/net/browse-url-tests.el [new file with mode: 0644]

index 7c2fde98cc7a897966b894bdc437a4097a0b89f5..2b8d4d0ce625771e01d8998690e1a0ae8bfcf13f 100644 (file)
@@ -1,4 +1,4 @@
-;;; browse-url.el --- pass a URL to a WWW browser
+;;; browse-url.el --- pass a URL to a WWW browser  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1995-2020 Free Software Foundation, Inc.
 
@@ -587,7 +587,7 @@ process), or nil (we don't know)."
       kind)))
 
 (defun browse-url--mailto (url &rest args)
-  "Calls `browse-url-mailto-function' with URL and ARGS."
+  "Call `browse-url-mailto-function' with URL and ARGS."
   (funcall browse-url-mailto-function url args))
 
 (defun browse-url--browser-kind-mailto (url)
@@ -596,7 +596,7 @@ process), or nil (we don't know)."
               #'browse-url--browser-kind-mailto)
 
 (defun browse-url--man (url &rest args)
-  "Calls `browse-url-man-function' with URL and ARGS."
+  "Call `browse-url-man-function' with URL and ARGS."
   (funcall browse-url-man-function url args))
 
 (defun browse-url--browser-kind-man (url)
@@ -605,7 +605,7 @@ process), or nil (we don't know)."
               #'browse-url--browser-kind-man)
 
 (defun browse-url--browser (url &rest args)
-  "Calls `browse-url-browser-function' with URL and ARGS."
+  "Call `browse-url-browser-function' with URL and ARGS."
   (funcall browse-url-browser-function url args))
 
 (defun browse-url--browser-kind-browser (url)
@@ -819,8 +819,8 @@ narrowed."
       (browse-url-of-file file-name))))
 
 (defun browse-url-delete-temp-file (&optional temp-file-name)
-  ;; Delete browse-url-temp-file-name from the file system
-  ;; If optional arg TEMP-FILE-NAME is non-nil, delete it instead
+  "Delete `browse-url-temp-file-name' from the file system.
+If optional arg TEMP-FILE-NAME is non-nil, delete it instead."
   (let ((file-name (or temp-file-name browse-url-temp-file-name)))
     (if (and file-name (file-exists-p file-name))
        (delete-file file-name))))
diff --git a/test/lisp/net/browse-url-tests.el b/test/lisp/net/browse-url-tests.el
new file mode 100644 (file)
index 0000000..b2b27d2
--- /dev/null
@@ -0,0 +1,119 @@
+;;; browse-url-tests.el --- Tests for browse-url.el  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 Free Software Foundation, Inc.
+
+;; Author: Simen Heggestøyl <simenheg@gmail.com>
+;; 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 'browse-url)
+(require 'ert)
+
+(ert-deftest browse-url-tests-browser-kind ()
+  (should (eq (browse-url--browser-kind #'browse-url-w3 "gnu.org")
+              'internal))
+  (should
+   (eq (browse-url--browser-kind #'browse-url-firefox "gnu.org")
+       'external)))
+
+(ert-deftest browse-url-tests-non-html-file-url-p ()
+  (should (browse-url--non-html-file-url-p "file://foo.txt"))
+  (should-not (browse-url--non-html-file-url-p "file://foo.html")))
+
+(ert-deftest browse-url-tests-select-handler-mailto ()
+  (should (eq (browse-url-select-handler "mailto:foo@bar.org")
+              'browse-url--mailto))
+  (should (eq (browse-url-select-handler "mailto:foo@bar.org"
+                                         'internal)
+              'browse-url--mailto))
+  (should-not (browse-url-select-handler "mailto:foo@bar.org"
+                                         'external)))
+
+(ert-deftest browse-url-tests-select-handler-man ()
+  (should (eq (browse-url-select-handler "man:ls") 'browse-url--man))
+  (should (eq (browse-url-select-handler "man:ls" 'internal)
+              'browse-url--man))
+  (should-not (browse-url-select-handler "man:ls" 'external)))
+
+(ert-deftest browse-url-tests-select-handler-file ()
+  (should (eq (browse-url-select-handler "file://foo.txt")
+              'browse-url-emacs))
+  (should (eq (browse-url-select-handler "file://foo.txt" 'internal)
+              'browse-url-emacs))
+  (should-not (browse-url-select-handler "file://foo.txt" 'external)))
+
+(ert-deftest browse-url-tests-url-encode-chars ()
+  (should (equal (browse-url-url-encode-chars "foobar" "[ob]")
+                 "f%6F%6F%62ar")))
+
+(ert-deftest browse-url-tests-encode-url ()
+  (should (equal (browse-url-encode-url "") ""))
+  (should (equal (browse-url-encode-url "a b c") "a b c"))
+  (should (equal (browse-url-encode-url "\"a\" \"b\"")
+                 "\"a%22\"b\""))
+  (should (equal (browse-url-encode-url "(a) (b)") "(a%29(b)"))
+  (should (equal (browse-url-encode-url "a$ b$") "a%24b$")))
+
+(ert-deftest browse-url-tests-url-at-point ()
+  (with-temp-buffer
+    (insert "gnu.org")
+    (should (equal (browse-url-url-at-point) "http://gnu.org"))))
+
+(ert-deftest browse-url-tests-file-url ()
+  (should (equal (browse-url-file-url "/foo") "file:///foo"))
+  (should (equal (browse-url-file-url "/foo:") "ftp://foo/"))
+  (should (equal (browse-url-file-url "/ftp@foo:") "ftp://foo/"))
+  (should (equal (browse-url-file-url "/anonymous@foo:")
+                 "ftp://foo/")))
+
+(ert-deftest browse-url-tests-delete-temp-file ()
+  (let ((browse-url-temp-file-name
+         (make-temp-file "browse-url-tests-")))
+    (browse-url-delete-temp-file)
+    (should-not (file-exists-p browse-url-temp-file-name)))
+  (let ((file (make-temp-file "browse-url-tests-")))
+    (browse-url-delete-temp-file file)
+    (should-not (file-exists-p file))))
+
+(ert-deftest browse-url-tests-add-buttons ()
+  (with-temp-buffer
+    (insert "Visit https://gnu.org")
+    (goto-char (point-min))
+    (browse-url-add-buttons)
+    (goto-char (- (point-max) 1))
+    (should (eq (get-text-property (point) 'face)
+                'browse-url-button))
+    (should (get-text-property (point) 'browse-url-data))))
+
+(ert-deftest browse-url-tests-button-copy ()
+  (with-temp-buffer
+    (insert "Visit https://gnu.org")
+    (goto-char (point-min))
+    (browse-url-add-buttons)
+    (should-error (browse-url-button-copy))
+    (goto-char (- (point-max) 1))
+    (browse-url-button-copy)
+    (should (equal (car kill-ring) "https://gnu.org"))))
+
+(provide 'browse-url-tests)
+;;; browse-url-tests.el ends here