Move link tests to a dedicated file
* testing/lisp/test-org.el: Move test to the... * testing/lisp/test-ol.el: ... new file.
This commit is contained in:
parent
944c62a794
commit
8ffe341989
|
@ -0,0 +1,253 @@
|
|||
;;; test-ol.el --- Tests for Org Links library -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2019 Nicolas Goaziou
|
||||
|
||||
;; Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
|
||||
|
||||
;; This program 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.
|
||||
|
||||
;; This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
|
||||
;;; (Un)Escape links
|
||||
|
||||
(ert-deftest test-ol/escape-ascii-character ()
|
||||
"Escape an ascii character."
|
||||
(should
|
||||
(string=
|
||||
"%5B"
|
||||
(org-link-escape "["))))
|
||||
|
||||
(ert-deftest test-ol/escape-ascii-ctrl-character ()
|
||||
"Escape an ascii control character."
|
||||
(should
|
||||
(string=
|
||||
"%09"
|
||||
(org-link-escape "\t"))))
|
||||
|
||||
(ert-deftest test-ol/escape-multibyte-character ()
|
||||
"Escape an unicode multibyte character."
|
||||
(should
|
||||
(string=
|
||||
"%E2%82%AC"
|
||||
(org-link-escape "€"))))
|
||||
|
||||
(ert-deftest test-ol/escape-custom-table ()
|
||||
"Escape string with custom character table."
|
||||
(should
|
||||
(string=
|
||||
"Foo%3A%42ar%0A"
|
||||
(org-link-escape "Foo:Bar\n" '(?\: ?\B)))))
|
||||
|
||||
(ert-deftest test-ol/escape-custom-table-merge ()
|
||||
"Escape string with custom table merged with default table."
|
||||
(should
|
||||
(string=
|
||||
"%5BF%6F%6F%3A%42ar%0A%5D"
|
||||
(org-link-escape "[Foo:Bar\n]" '(?\: ?\B ?\o) t))))
|
||||
|
||||
(ert-deftest test-ol/unescape-ascii-character ()
|
||||
"Unescape an ascii character."
|
||||
(should
|
||||
(string=
|
||||
"["
|
||||
(org-link-unescape "%5B"))))
|
||||
|
||||
(ert-deftest test-ol/unescape-ascii-ctrl-character ()
|
||||
"Unescpae an ascii control character."
|
||||
(should
|
||||
(string=
|
||||
"\n"
|
||||
(org-link-unescape "%0A"))))
|
||||
|
||||
(ert-deftest test-ol/unescape-multibyte-character ()
|
||||
"Unescape unicode multibyte character."
|
||||
(should
|
||||
(string=
|
||||
"€"
|
||||
(org-link-unescape "%E2%82%AC"))))
|
||||
|
||||
(ert-deftest test-ol/unescape-ascii-extended-char ()
|
||||
"Unescape old style percent escaped character."
|
||||
(should
|
||||
(string=
|
||||
"àâçèéêîôùû"
|
||||
(decode-coding-string
|
||||
(org-link-unescape "%E0%E2%E7%E8%E9%EA%EE%F4%F9%FB") 'latin-1))))
|
||||
|
||||
(ert-deftest test-ol/escape-url-with-escaped-char ()
|
||||
"Escape and unescape a URL that includes an escaped char.
|
||||
http://article.gmane.org/gmane.emacs.orgmode/21459/"
|
||||
(should
|
||||
(string=
|
||||
"http://some.host.com/form?&id=blah%2Bblah25"
|
||||
(org-link-unescape
|
||||
(org-link-escape "http://some.host.com/form?&id=blah%2Bblah25")))))
|
||||
|
||||
|
||||
;;; Store links
|
||||
|
||||
(ert-deftest test-ol/store-link ()
|
||||
"Test `org-store-link' specifications."
|
||||
;; On a headline, link to that headline. Use heading as the
|
||||
;; description of the link.
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* H1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*H1][H1]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; On a headline, remove any link from description.
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* [[#l][d]]"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*%s][d]]"
|
||||
file
|
||||
(org-link-escape "[[#l][d]]"))
|
||||
(org-store-link nil))))))
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* [[l]]"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*%s][l]]" file (org-link-escape "[[l]]"))
|
||||
(org-store-link nil))))))
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* [[l1][d1]] [[l2][d2]]"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*%s][d1 d2]]"
|
||||
file
|
||||
(org-link-escape "[[l1][d1]] [[l2][d2]]"))
|
||||
(org-store-link nil))))))
|
||||
;; On a named element, link to that element.
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "#+NAME: foo\nParagraph"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::foo][foo]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; Store link to Org buffer, with context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links t))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*h1][h1]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; Store link to Org buffer, without context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link nil))))))
|
||||
;; C-u prefix reverses `org-context-in-file-links' in Org buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*h1][h1]]" file)
|
||||
(org-store-link '(4)))))))
|
||||
;; A C-u C-u does *not* reverse `org-context-in-file-links' in Org
|
||||
;; buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link '(16)))))))
|
||||
;; Store file link to non-Org buffer, with context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links t))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::one]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; Store file link to non-Org buffer, without context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link nil))))))
|
||||
;; C-u prefix reverses `org-context-in-file-links' in non-Org
|
||||
;; buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::one]]" file)
|
||||
(org-store-link '(4)))))))
|
||||
;; A C-u C-u does *not* reverse `org-context-in-file-links' in
|
||||
;; non-Org buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link '(16))))))))
|
||||
|
||||
|
||||
;;; Radio Targets
|
||||
|
||||
(ert-deftest test-ol/update-radio-target-regexp ()
|
||||
"Test `org-update-radio-target-regexp' specifications."
|
||||
;; Properly update cache with no previous radio target regexp.
|
||||
(should
|
||||
(eq 'link
|
||||
(org-test-with-temp-text "radio\n\nParagraph\n\nradio"
|
||||
(save-excursion (goto-char (point-max)) (org-element-context))
|
||||
(insert "<<<")
|
||||
(search-forward "o")
|
||||
(insert ">>>")
|
||||
(org-update-radio-target-regexp)
|
||||
(goto-char (point-max))
|
||||
(org-element-type (org-element-context)))))
|
||||
;; Properly update cache with previous radio target regexp.
|
||||
(should
|
||||
(eq 'link
|
||||
(org-test-with-temp-text "radio\n\nParagraph\n\nradio"
|
||||
(save-excursion (goto-char (point-max)) (org-element-context))
|
||||
(insert "<<<")
|
||||
(search-forward "o")
|
||||
(insert ">>>")
|
||||
(org-update-radio-target-regexp)
|
||||
(search-backward "r")
|
||||
(delete-char 5)
|
||||
(insert "new")
|
||||
(org-update-radio-target-regexp)
|
||||
(goto-char (point-max))
|
||||
(delete-region (line-beginning-position) (point))
|
||||
(insert "new")
|
||||
(org-element-type (org-element-context))))))
|
||||
|
||||
|
||||
(provide 'test-ol)
|
||||
;;; test-ol.el ends here
|
|
@ -2455,81 +2455,6 @@ Foo Bar
|
|||
(org-open-at-point 0))
|
||||
(looking-at-p "line1")))))
|
||||
|
||||
;;;; Link Escaping
|
||||
|
||||
(ert-deftest test-org/org-link-escape-ascii-character ()
|
||||
"Escape an ascii character."
|
||||
(should
|
||||
(string=
|
||||
"%5B"
|
||||
(org-link-escape "["))))
|
||||
|
||||
(ert-deftest test-org/org-link-escape-ascii-ctrl-character ()
|
||||
"Escape an ascii control character."
|
||||
(should
|
||||
(string=
|
||||
"%09"
|
||||
(org-link-escape "\t"))))
|
||||
|
||||
(ert-deftest test-org/org-link-escape-multibyte-character ()
|
||||
"Escape an unicode multibyte character."
|
||||
(should
|
||||
(string=
|
||||
"%E2%82%AC"
|
||||
(org-link-escape "€"))))
|
||||
|
||||
(ert-deftest test-org/org-link-escape-custom-table ()
|
||||
"Escape string with custom character table."
|
||||
(should
|
||||
(string=
|
||||
"Foo%3A%42ar%0A"
|
||||
(org-link-escape "Foo:Bar\n" '(?\: ?\B)))))
|
||||
|
||||
(ert-deftest test-org/org-link-escape-custom-table-merge ()
|
||||
"Escape string with custom table merged with default table."
|
||||
(should
|
||||
(string=
|
||||
"%5BF%6F%6F%3A%42ar%0A%5D"
|
||||
(org-link-escape "[Foo:Bar\n]" '(?\: ?\B ?\o) t))))
|
||||
|
||||
(ert-deftest test-org/org-link-unescape-ascii-character ()
|
||||
"Unescape an ascii character."
|
||||
(should
|
||||
(string=
|
||||
"["
|
||||
(org-link-unescape "%5B"))))
|
||||
|
||||
(ert-deftest test-org/org-link-unescape-ascii-ctrl-character ()
|
||||
"Unescpae an ascii control character."
|
||||
(should
|
||||
(string=
|
||||
"\n"
|
||||
(org-link-unescape "%0A"))))
|
||||
|
||||
(ert-deftest test-org/org-link-unescape-multibyte-character ()
|
||||
"Unescape unicode multibyte character."
|
||||
(should
|
||||
(string=
|
||||
"€"
|
||||
(org-link-unescape "%E2%82%AC"))))
|
||||
|
||||
(ert-deftest test-org/org-link-unescape-ascii-extended-char ()
|
||||
"Unescape old style percent escaped character."
|
||||
(should
|
||||
(string=
|
||||
"àâçèéêîôùû"
|
||||
(decode-coding-string
|
||||
(org-link-unescape "%E0%E2%E7%E8%E9%EA%EE%F4%F9%FB") 'latin-1))))
|
||||
|
||||
(ert-deftest test-org/org-link-escape-url-with-escaped-char ()
|
||||
"Escape and unescape a URL that includes an escaped char.
|
||||
http://article.gmane.org/gmane.emacs.orgmode/21459/"
|
||||
(should
|
||||
(string=
|
||||
"http://some.host.com/form?&id=blah%2Bblah25"
|
||||
(org-link-unescape
|
||||
(org-link-escape "http://some.host.com/form?&id=blah%2Bblah25")))))
|
||||
|
||||
;;;; Open at point
|
||||
|
||||
(ert-deftest test-org/open-at-point/keyword ()
|
||||
|
@ -2596,124 +2521,6 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/"
|
|||
(org-open-at-point)
|
||||
nil)))))
|
||||
|
||||
;;;; Stored links
|
||||
|
||||
(ert-deftest test-org/store-link ()
|
||||
"Test `org-store-link' specifications."
|
||||
;; On a headline, link to that headline. Use heading as the
|
||||
;; description of the link.
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* H1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*H1][H1]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; On a headline, remove any link from description.
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* [[#l][d]]"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*%s][d]]"
|
||||
file
|
||||
(org-link-escape "[[#l][d]]"))
|
||||
(org-store-link nil))))))
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* [[l]]"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*%s][l]]" file (org-link-escape "[[l]]"))
|
||||
(org-store-link nil))))))
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "* [[l1][d1]] [[l2][d2]]"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*%s][d1 d2]]"
|
||||
file
|
||||
(org-link-escape "[[l1][d1]] [[l2][d2]]"))
|
||||
(org-store-link nil))))))
|
||||
;; On a named element, link to that element.
|
||||
(should
|
||||
(let (org-store-link-props org-stored-links)
|
||||
(org-test-with-temp-text-in-file "#+NAME: foo\nParagraph"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::foo][foo]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; Store link to Org buffer, with context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links t))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*h1][h1]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; Store link to Org buffer, without context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link nil))))))
|
||||
;; C-u prefix reverses `org-context-in-file-links' in Org buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::*h1][h1]]" file)
|
||||
(org-store-link '(4)))))))
|
||||
;; A C-u C-u does *not* reverse `org-context-in-file-links' in Org
|
||||
;; buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-id-link-to-org-use-id nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "* h1"
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link '(16)))))))
|
||||
;; Store file link to non-Org buffer, with context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links t))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::one]]" file)
|
||||
(org-store-link nil))))))
|
||||
;; Store file link to non-Org buffer, without context.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link nil))))))
|
||||
;; C-u prefix reverses `org-context-in-file-links' in non-Org
|
||||
;; buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s::one]]" file)
|
||||
(org-store-link '(4)))))))
|
||||
;; A C-u C-u does *not* reverse `org-context-in-file-links' in
|
||||
;; non-Org buffer.
|
||||
(should
|
||||
(let ((org-stored-links nil)
|
||||
(org-context-in-file-links nil))
|
||||
(org-test-with-temp-text-in-file "one\n<point>two"
|
||||
(fundamental-mode)
|
||||
(let ((file (buffer-file-name)))
|
||||
(equal (format "[[file:%s][file:%s]]" file file)
|
||||
(org-store-link '(16))))))))
|
||||
|
||||
|
||||
;;; Node Properties
|
||||
|
||||
|
@ -5634,40 +5441,6 @@ Paragraph<point>"
|
|||
(org-refresh-properties "A" 'org-test))
|
||||
(get-text-property (point) 'org-test)))))
|
||||
|
||||
|
||||
;;; Radio Targets
|
||||
|
||||
(ert-deftest test-org/update-radio-target-regexp ()
|
||||
"Test `org-update-radio-target-regexp' specifications."
|
||||
;; Properly update cache with no previous radio target regexp.
|
||||
(should
|
||||
(eq 'link
|
||||
(org-test-with-temp-text "radio\n\nParagraph\n\nradio"
|
||||
(save-excursion (goto-char (point-max)) (org-element-context))
|
||||
(insert "<<<")
|
||||
(search-forward "o")
|
||||
(insert ">>>")
|
||||
(org-update-radio-target-regexp)
|
||||
(goto-char (point-max))
|
||||
(org-element-type (org-element-context)))))
|
||||
;; Properly update cache with previous radio target regexp.
|
||||
(should
|
||||
(eq 'link
|
||||
(org-test-with-temp-text "radio\n\nParagraph\n\nradio"
|
||||
(save-excursion (goto-char (point-max)) (org-element-context))
|
||||
(insert "<<<")
|
||||
(search-forward "o")
|
||||
(insert ">>>")
|
||||
(org-update-radio-target-regexp)
|
||||
(search-backward "r")
|
||||
(delete-char 5)
|
||||
(insert "new")
|
||||
(org-update-radio-target-regexp)
|
||||
(goto-char (point-max))
|
||||
(delete-region (line-beginning-position) (point))
|
||||
(insert "new")
|
||||
(org-element-type (org-element-context))))))
|
||||
|
||||
|
||||
;;; Refile
|
||||
|
||||
|
|
Loading…
Reference in New Issue