From 7235bf0306d12f6644838ad8542ac8822bcde258 Mon Sep 17 00:00:00 2001 From: Evgenii Klimov Date: Fri, 21 Jul 2023 22:40:06 +0100 Subject: [PATCH v3 1/2] testing/lisp/test-ob-tangle.el: Test block collection into groups for tangling * testing/lisp/test-ob-tangle.el (ob-tangle/collect-blocks): Test block collection into groups for tangling. (ob-tangle/collect-blocks-with-target-file): The same but with TARGET-FILE. --- testing/examples/babel.org | 75 ++++++++++++++++++++++++++++++++++ testing/lisp/test-ob-tangle.el | 60 +++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) diff --git a/testing/examples/babel.org b/testing/examples/babel.org index d46afeb5e..2d7b39d4e 100644 --- a/testing/examples/babel.org +++ b/testing/examples/babel.org @@ -490,3 +490,78 @@ The =[[= causes a false positive which ~org-babel-detangle~ should handle proper :END: #+begin_src emacs-lisp :tangle yes :comments link #+end_src +* tangle collect blocks +:PROPERTIES: +:ID: fae6bb5b-555a-4d68-9658-a30ac5d1b2ba +:END: +** with :tangle in properties +:PROPERTIES: +:ID: b2021d51-253c-4b26-9988-dac9193eb00b +:header-args: :tangle relative.el +:END: +#+begin_src emacs-lisp +"H1: no :tangle, but :tangle relative.el in properties" +#+end_src + +#+begin_src emacs-lisp :tangle yes +"H1: :tangle yes (to babel.el)" +#+end_src + +#+begin_src emacs-lisp :tangle no +"H1: should be ignored" +#+end_src + +#+begin_src emacs-lisp :tangle ./babel.el +"H1: :tangle ./babel.el" +#+end_src + +#+begin_src emacs-lisp :tangle relative.el +"H1: :tangle relative.el" +#+end_src + +#+begin_src emacs-lisp :tangle ./relative.el +"H1: :tangle ./relative.el" +#+end_src + +#+begin_src emacs-lisp :tangle /tmp/absolute.el +"H1: :tangle /tmp/absolute.el" +#+end_src + +#+begin_src emacs-lisp :tangle ~/../../tmp/absolute.el +"H1: :tangle ~/../../tmp/absolute.el" +#+end_src +** without :tangle in properties +:PROPERTIES: +:ID: 9f9afb0e-ba6d-4f63-9735-71af48ecd4e6 +:END: +#+begin_src emacs-lisp +"H2: no :tangle" +#+end_src + +#+begin_src emacs-lisp :tangle yes +"H2: :tangle yes (to babel.el)" +#+end_src + +#+begin_src emacs-lisp :tangle no +"H2: should be ignored" +#+end_src + +#+begin_src emacs-lisp :tangle babel.el +"H2: :tangle babel.el" +#+end_src + +#+begin_src emacs-lisp :tangle relative.el +"H2: :tangle relative.el" +#+end_src + +#+begin_src emacs-lisp :tangle ./relative.el +"H2: :tangle ./relative.el" +#+end_src + +#+begin_src emacs-lisp :tangle /tmp/absolute.el +"H2: :tangle /tmp/absolute.el" +#+end_src + +#+begin_src emacs-lisp :tangle ~/../../tmp/absolute.el +"H2: :tangle ~/../../tmp/absolute.el" +#+end_src diff --git a/testing/lisp/test-ob-tangle.el b/testing/lisp/test-ob-tangle.el index 07e75f4d3..09eeffed7 100644 --- a/testing/lisp/test-ob-tangle.el +++ b/testing/lisp/test-ob-tangle.el @@ -569,6 +569,66 @@ another block (set-buffer-modified-p nil)) (kill-buffer buffer)))) +(ert-deftest ob-tangle/collect-blocks () + "Test block collection into groups for tangling." + (org-test-at-id "fae6bb5b-555a-4d68-9658-a30ac5d1b2ba" + (org-narrow-to-subtree) + (let ((expected-targets (cons '("/tmp/absolute.el" . 4) + (map-apply + (lambda (file numblocks) + (cons (expand-file-name file + org-test-example-dir) + numblocks)) + '(("relative.el" . 5) ("babel.el" . 4))))) + (collected-blocks (org-babel-tangle-collect-blocks))) + (should (= (length expected-targets) + (length (map-keys collected-blocks)))) + (let ((collected-targets (map-apply (lambda (file blocks) ; full blocks itself + (cons (expand-file-name file + org-test-example-dir) + (length blocks))) + collected-blocks))) + (should (equal (length expected-targets) + (length (map-filter + (lambda (file numblocks) + (= numblocks + (cdr (assoc-string file collected-targets)))) + expected-targets)))))))) + +(ert-deftest ob-tangle/collect-blocks-with-target-file () + "Test block collection into groups for tangling with TARGET-FILE +as `org-babel-tangle' would do." + (org-test-at-id "fae6bb5b-555a-4d68-9658-a30ac5d1b2ba" + (org-narrow-to-subtree) + (let* ((expected-targets (cons '("/tmp/absolute.el" . 4) + (map-apply + (lambda (file numblocks) + (cons (expand-file-name file + org-test-example-dir) + numblocks)) + '(("relative.el" . 5) ("babel.el" . 5))))) + ;; simulate `org-babel-tangle' and `org-babel-load-file' + ;; TARGET-FILE + (org-babel-default-header-args + (org-babel-merge-params + org-babel-default-header-args + (list (cons :tangle + (expand-file-name "babel.el" org-test-example-dir))))) + (collected-blocks (org-babel-tangle-collect-blocks))) + (should (= (length expected-targets) + (length (map-keys collected-blocks)))) + (let ((collected-targets (map-apply (lambda (file blocks) ; full blocks itself + (cons (expand-file-name file + org-test-example-dir) + (length blocks))) + collected-blocks))) + (should (equal (length expected-targets) + (length (map-filter + (lambda (file numblocks) + (= numblocks + (cdr (assoc-string file collected-targets)))) + expected-targets)))))))) + (provide 'test-ob-tangle) ;;; test-ob-tangle.el ends here -- 2.34.1