diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-org-config--org-follow-link-same-window.el | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/test-org-config--org-follow-link-same-window.el b/tests/test-org-config--org-follow-link-same-window.el new file mode 100644 index 00000000..57caf691 --- /dev/null +++ b/tests/test-org-config--org-follow-link-same-window.el @@ -0,0 +1,72 @@ +;;; test-org-config--org-follow-link-same-window.el --- same-window link follow -*- lexical-binding: t; -*- + +;;; Commentary: +;; `cj/--org-follow-link-same-window' follows the Org link at point, opening +;; file: links in the *current* window instead of org's default other-window +;; (`org-link-frame-setup' file entry). It is the kernel behind the S-mouse-1 +;; and mouse-3 bindings (`cj/org-follow-link-at-mouse-same-window'). Off a +;; link it does nothing, so a right-click in empty space is a silent no-op +;; rather than org's "No link found" user-error. +;; +;; `org-open-at-point' (the visit boundary) is stubbed to record whether it +;; was called and what the file entry of `org-link-frame-setup' resolved to at +;; call time; real temp Org buffers place point on / off a link. + +;;; Code: + +(require 'ert) +(require 'cl-lib) +(require 'org) + +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(require 'org-config) + +(ert-deftest test-org-config-follow-link-same-window-file-link () + "Normal: on a file link, follow it with the file frame-setup as find-file." + (with-temp-buffer + (let ((org-mode-hook nil) + (frame-file nil) + (called nil)) + (insert "see [[file:/tmp/notes.org][notes]] here") + (org-mode) + (goto-char (point-min)) + (search-forward "notes]") + (backward-char 2) ; land inside the link's description + (cl-letf (((symbol-function 'org-open-at-point) + (lambda (&rest _) + (setq called t + frame-file (cdr (assq 'file org-link-frame-setup)))))) + (cj/--org-follow-link-same-window)) + (should called) + (should (eq frame-file 'find-file))))) + +(ert-deftest test-org-config-follow-link-same-window-off-link-noop () + "Boundary: off any link, do nothing (no error, no visit)." + (with-temp-buffer + (let ((org-mode-hook nil) + (called nil)) + (insert "plain text, no link at all") + (org-mode) + (goto-char (point-min)) + (cl-letf (((symbol-function 'org-open-at-point) + (lambda (&rest _) (setq called t)))) + (cj/--org-follow-link-same-window)) + (should-not called)))) + +(ert-deftest test-org-config-follow-link-same-window-http-link () + "Boundary: on a non-file link, still follow it (frame-setup is harmless)." + (with-temp-buffer + (let ((org-mode-hook nil) + (called nil)) + (insert "site [[https://example.com][example]] end") + (org-mode) + (goto-char (point-min)) + (search-forward "example]") + (backward-char 2) + (cl-letf (((symbol-function 'org-open-at-point) + (lambda (&rest _) (setq called t)))) + (cj/--org-follow-link-same-window)) + (should called)))) + +(provide 'test-org-config--org-follow-link-same-window) +;;; test-org-config--org-follow-link-same-window.el ends here |
