[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org 2bbb92a72d 2/5: test-ol: tests for insert-descripti
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org 2bbb92a72d 2/5: test-ol: tests for insert-description param when inserting links |
Date: |
Sat, 6 Aug 2022 02:57:50 -0400 (EDT) |
branch: externals/org
commit 2bbb92a72d4a1be8e56acd41a9c94f5f0023fb28
Author: Hugo Heagren <hugo@heagren.com>
Commit: Ihor Radchenko <yantar92@gmail.com>
test-ol: tests for insert-description param when inserting links
* test-ol (test-ol-with-link-parameters-as): Convenience macro for
testing.
(test-ol-insert-link-get-desc): Convenience macro for testing.
(test-ol/return-foobar): Convenience function for testing.
(test-ol/insert-link-insert-description): Test for various values of
`:insert-description' in `org-link-parameters' (including
`test-ol/return-foobar').
---
testing/lisp/test-ol.el | 93 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/testing/lisp/test-ol.el b/testing/lisp/test-ol.el
index 76881885d3..5f2cca5381 100644
--- a/testing/lisp/test-ol.el
+++ b/testing/lisp/test-ol.el
@@ -19,6 +19,8 @@
;;; Code:
+(require 'cl-lib)
+
;;; Decode and Encode Links
@@ -625,5 +627,96 @@ See https://github.com/yantar92/org/issues/4."
(test-ol-parse-link-in-text
"The <point>http://foo.com/(something)?after=parens link"))))
+;;; Insert Links
+
+(defmacro test-ol-with-link-parameters-as (type parameters &rest body)
+ "Pass TYPE/PARAMETERS to `org-link-parameters' and execute BODY.
+
+Save the original value of `org-link-parameters', execute
+`org-link-set-parameters' with the relevant args, execute BODY
+and restore `org-link-parameters'.
+
+TYPE is as in `org-link-set-parameters'. PARAMETERS is a plist to
+be passed to `org-link-set-parameters'."
+ (declare (indent 2))
+ (let (orig-parameters)
+ ;; Copy all keys in `parameters' and their original values to
+ ;; `orig-parameters'.
+ (cl-loop for param in parameters by 'cddr
+ do (setq orig-parameters
+ (plist-put orig-parameters param (org-link-get-parameter
type param))))
+ `(unwind-protect
+ ;; Set `parameters' values and execute body.
+ (progn (org-link-set-parameters ,type ,@parameters) ,@body)
+ ;; Restore original values.
+ (apply 'org-link-set-parameters ,type ',orig-parameters))))
+
+(defun test-ol-insert-link-get-desc (&optional link-location description)
+ "Insert link in temp buffer, return description.
+
+LINK-LOCATION and DESCRIPTION are passed to
+`org-insert-link' (COMPLETE-FILE is always nil)."
+ (org-test-with-temp-text ""
+ (org-insert-link nil link-location description)
+ (save-match-data
+ (when (and
+ (org-in-regexp org-link-bracket-re 1)
+ (match-end 2))
+ (match-string-no-properties 2)))))
+
+(defun test-ol/return-foobar (_link-test _desc)
+ "Return string \"foobar\".
+
+Take (and ignore) arguments conforming to `:insert-description'
+API in `org-link-parameters'. Used in test
+`test-ol/insert-link-insert-description', for the case where
+`:insert-description' is a function symbol."
+ "foobar-from-function")
+
+(ert-deftest test-ol/insert-link-insert-description ()
+ "Test `:insert-description' parameter handling."
+ ;; String case.
+ (should
+ (string=
+ "foobar-string"
+ (test-ol-with-link-parameters-as
+ "id" (:insert-description "foobar-string")
+ (test-ol-insert-link-get-desc "id:foo-bar"))))
+ ;; Lambda case.
+ (should
+ (string=
+ "foobar-lambda"
+ (test-ol-with-link-parameters-as
+ "id" (:insert-description (lambda (_link-test _desc) "foobar-lambda"))
+ (test-ol-insert-link-get-desc "id:foo-bar"))))
+ ;; Function symbol case.
+ (should
+ (string=
+ "foobar-from-function"
+ (test-ol-with-link-parameters-as
+ "id" (:insert-description #'test-ol/return-foobar)
+ (test-ol-insert-link-get-desc "id:foo-bar"))))
+ ;; `:insert-description' parameter is defined, but doesn't return a
+ ;; string.
+ (should
+ (null
+ (test-ol-with-link-parameters-as
+ "id" (:insert-description #'ignore)
+ (test-ol-insert-link-get-desc "id:foo-bar"))))
+ ;; Description argument should override `:insert-description'.
+ (should
+ (string=
+ "foobar-desc-arg"
+ (test-ol-with-link-parameters-as
+ "id" (:insert-description "foobar")
+ (test-ol-insert-link-get-desc "id:foo-bar" "foobar-desc-arg"))))
+ ;; When neither `:insert-description' nor
+ ;; `org-link-make-description-function' is defined, there should be
+ ;; no description
+ (should
+ (null
+ (let ((org-link-make-description-function nil))
+ (test-ol-insert-link-get-desc "fake-link-type:foo-bar")))))
+
(provide 'test-ol)
;;; test-ol.el ends here