1 ;;; test-ob.el --- tests for ob.el
3 ;; Copyright (c) 2010-2012 Eric Schulte
4 ;; Authors: Eric Schulte, Martyn Jago
6 ;; Released under the GNU General Public License version 3
7 ;; see: http://www.gnu.org/licenses/gpl-3.0.html
8 (ert-deftest test-org-babel
/multi-line-header-regexp
()
9 (should(equal "^[ \t]*#\\+headers?:[ \t]*\\([^\n]*\\)$"
10 org-babel-multi-line-header-regexp
))
11 ;;TODO can be optimised - and what about blah4 blah5 blah6?
13 org-babel-multi-line-header-regexp
14 " \t #+headers: blah1 blah2 blah3 \t\n\t\n blah4 blah5 blah6 \n"))
17 "blah1 blah2 blah3 \t"
20 " \t #+headers: blah1 blah2 blah3 \t\n\t\n blah4 blah5 blah6 \n")))
22 ;;TODO Check - should this fail?
24 (not (org-test-string-exact-match
25 org-babel-multi-line-header-regexp
26 " \t #+headers : blah1 blah2 blah3 \t\n\t\n blah4 blah5 blah6 \n"))))
28 (ert-deftest test-org-babel
/src-block-regexp
()
31 "#+begin_src language -n-r-a-b -c :argument-1 yes :argument-2 no\n"
32 "echo this is a test\n"
33 "echo Currently in ' $PWD\n"
36 (flags "-n-r-a-b -c ")
37 (arguments ":argument-1 yes :argument-2 no")
38 (body "echo this is a test\necho Currently in ' $PWD\n"))
39 (should (string-match org-babel-src-block-regexp test-block
))
40 (should (string-match org-babel-src-block-regexp
(upcase test-block
)))
41 (should (equal language
(match-string 2 test-block
)))
42 ;;TODO Consider refactoring
43 (should (equal flags
(match-string 3 test-block
)))
44 (should (equal arguments
(match-string 4 test-block
)))
45 (should (equal body
(match-string 5 test-block
)))
47 (should (org-test-string-exact-match
48 org-babel-src-block-regexp
49 (replace-regexp-in-string flags
"" test-block
)))
51 (should (org-test-string-exact-match
52 org-babel-src-block-regexp
53 (replace-regexp-in-string arguments
"" test-block
)))
54 ;; should be valid with no body
55 (should (org-test-string-exact-match
56 org-babel-src-block-regexp
57 (replace-regexp-in-string body
"" test-block
)))))
59 (ert-deftest test-org-babel
/get-header
()
60 (should (not (org-babel-get-header
61 org-babel-default-header-args
:doesnt-exist
)))
62 (should(equal '((:session .
"none"))
64 org-babel-default-header-args
:session
)))
65 (should(equal '((:session .
"none"))
67 org-babel-default-header-args
:session nil
)))
68 (should (not (org-babel-get-header
69 org-babel-default-header-args
:SESSION
)))
70 (should (equal '((:tangle .
"no"))
72 org-babel-default-header-args
:tangle
)))
74 (should (equal org-babel-default-header-args
76 org-babel-default-header-args
:doesnt-exist
'others
)))
77 (should (equal org-babel-default-header-args
79 org-babel-default-header-args nil
'others
)))
83 org-babel-default-header-args
:noweb
'others
)))))
85 (ert-deftest test-org-babel
/default-inline-header-args
()
87 '((:session .
"none") (:results .
"replace") (:exports .
"results"))
88 org-babel-default-inline-header-args
)))
90 ;;; ob-get-src-block-info
91 (ert-deftest test-org-babel
/get-src-block-info-language
()
92 (org-test-at-marker nil org-test-file-ob-anchor
93 (let ((info (org-babel-get-src-block-info)))
94 (should (string= "emacs-lisp" (nth 0 info
))))))
96 (ert-deftest test-org-babel
/get-src-block-info-body
()
97 (org-test-at-marker nil org-test-file-ob-anchor
98 (let ((info (org-babel-get-src-block-info)))
99 (should (string-match (regexp-quote org-test-file-ob-anchor
)
102 (ert-deftest test-org-babel
/get-src-block-info-tangle
()
103 (org-test-at-marker nil org-test-file-ob-anchor
104 (let ((info (org-babel-get-src-block-info)))
105 (should (string= "no" (cdr (assoc :tangle
(nth 2 info
))))))))
107 (ert-deftest test-org-babel
/elisp-in-header-arguments
()
108 "Test execution of elisp forms in header arguments."
109 (org-test-with-temp-text-in-file "
111 * elisp forms in header arguments
115 #+begin_src emacs-lisp
120 (goto-char (point-min))
121 (org-babel-next-src-block)
122 (let ((info (org-babel-get-src-block-info)))
123 (should (= 42 (org-babel-execute-src-block)))))))
125 (ert-deftest test-org-babel
/simple-named-code-block
()
126 "Test that simple named code blocks can be evaluated."
127 (org-test-with-temp-text-in-file "
129 #+name: i-have-a-name
130 #+begin_src emacs-lisp
135 (org-babel-next-src-block 1)
136 (should (= 42 (org-babel-execute-src-block))))))
138 (ert-deftest test-org-babel
/simple-variable-resolution
()
139 "Test that simple variable resolution is working."
140 (org-test-with-temp-text-in-file "
143 #+begin_src emacs-lisp
147 #+begin_src emacs-lisp :var four=four
152 (org-babel-next-src-block 2)
153 (should (= 4 (org-babel-execute-src-block)))
155 (should (string= ": 4" (buffer-substring
159 (ert-deftest test-org-babel
/multi-line-header-arguments
()
160 "Test that multi-line header arguments and can be read."
161 (org-test-with-temp-text-in-file "
163 #+headers: :var letters='(a b c d e f g)
164 #+begin_src emacs-lisp :var numbers='(1 2 3 4 5 6 7)
165 (map 'list #'list numbers letters)
169 (org-babel-next-src-block)
170 (let ((results (org-babel-execute-src-block)))
171 (should(equal 'a
(cadr (assoc 1 results
))))
172 (should(equal 'd
(cadr (assoc 4 results
))))))))
174 (ert-deftest test-org-babel
/parse-header-args
()
175 (org-test-with-temp-text-in-file "
177 #+begin_src example-lang :session :results output :var num=9
182 (org-babel-next-src-block)
183 (let* ((info (org-babel-get-src-block-info))
184 (params (nth 2 info
)))
185 (message "%S" params
)
186 (should(equal "example-lang" (nth 0 info
)))
187 (should(string= "the body" (org-babel-trim (nth 1 info
))))
188 (should-not (member '(:session\ \ \ \
) params
))
189 (should(equal '(:session
) (assoc :session params
)))
190 (should(equal '(:result-type . output
) (assoc :result-type params
)))
191 (should(equal '(num .
9) (cdr (assoc :var params
))))))))
193 (ert-deftest test-org-babel
/parse-header-args2
()
194 (org-test-with-temp-text-in-file "
196 * resolving sub-trees as references
198 #+begin_src emacs-lisp :var text=d4faa7b3-072b-4dcf-813c-dd7141c633f3
202 #+begin_src org :noweb yes
204 <<d4faa7b3-072b-4dcf-813c-dd7141c633f3>>
207 ** simple subtree with custom ID
209 :CUSTOM_ID: simple-subtree
214 (should (string-match (regexp-quote "this is simple")
215 (org-babel-ref-resolve "simple-subtree")))
216 (org-babel-next-src-block)
217 (should (= 14 (org-babel-execute-src-block))))))
219 (ert-deftest test-org-babel
/inline-src-blocks
()
220 (org-test-at-id "54cb8dc3-298c-4883-a933-029b3c9d4b18"
221 (macrolet ((at-next (&rest body
)
224 (re-search-forward org-babel-inline-src-block-regexp nil t
)
225 (goto-char (match-beginning 1))
226 (save-match-data ,@body
))))
227 (at-next (should (equal 1 (org-babel-execute-src-block))))
228 (at-next (should (equal 2 (org-babel-execute-src-block))))
229 (at-next (should (equal 3 (org-babel-execute-src-block)))))))
231 (ert-deftest test-org-babel
/org-babel-get-inline-src-block-matches
()
232 (org-test-at-id "0D0983D4-DE33-400A-8A05-A225A567BC74"
233 (let ((test-point (point)))
234 (should (fboundp 'org-babel-get-inline-src-block-matches
))
235 (should (re-search-forward "src_" nil t
)) ;; 1
236 (should (org-babel-get-inline-src-block-matches))
237 (should (re-search-forward "}" nil
(point-at-bol))) ;; 1
238 (should-not (org-babel-get-inline-src-block-matches))
239 (should (re-search-forward "in" nil t
)) ;; 2
240 (should-not (org-babel-get-inline-src-block-matches))
241 (should (re-search-forward "echo" nil t
)) ;; 2
242 (should (org-babel-get-inline-src-block-matches))
243 (should (re-search-forward "blocks" nil t
)) ;; 3
244 (backward-char 8) ;; 3
245 (should (org-babel-get-inline-src-block-matches))
247 (should-not (org-babel-get-inline-src-block-matches))
248 (should (re-search-forward ":results" nil t
)) ;; 4
249 (should (org-babel-get-inline-src-block-matches))
251 (should-not (org-babel-get-inline-src-block-matches)))))
253 (ert-deftest test-org-babel
/inline-src_blk-default-results-replace-line-1
()
254 (let ((test-line "src_sh{echo 1}"))
255 ;; src_ at bol line 1...
256 (org-test-with-temp-text
258 (goto-char (point-min)) (org-ctrl-c-ctrl-c)
260 (concat test-line
" =1=")
261 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
262 (forward-char) (org-ctrl-c-ctrl-c)
264 (concat test-line
" =1= =1=")
265 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
266 (re-search-forward "1}")
267 (should-error (org-ctrl-c-ctrl-c))
268 (backward-char) ;; last char of block body
271 (concat test-line
" =1= =1= =1=")
272 (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))
273 ;; src_ follows space line 1...
274 (let ((test-line " src_emacs-lisp{ 1 }"))
275 (org-test-with-temp-text
277 (should-error (org-ctrl-c-ctrl-c))
278 (forward-char) (org-ctrl-c-ctrl-c)
280 (concat test-line
" =1=")
281 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
282 (re-search-forward "{ 1 ") (org-ctrl-c-ctrl-c)
284 (concat test-line
" =1= =1=")
285 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
287 (should-error (org-ctrl-c-ctrl-c)))))
289 (ert-deftest test-org-babel
/inline-src_blk-default-results-replace-line-2
()
290 ;; src_ at bol line 2...
291 (let ((test-line " src_emacs-lisp{ \"x\" }"))
292 (org-test-with-temp-text
293 (concat "\n" test-line
)
294 (should-error (org-ctrl-c-ctrl-c))
295 (goto-char (point-min))
296 (should-error (org-ctrl-c-ctrl-c))
298 (should-error (org-ctrl-c-ctrl-c))
299 (forward-char) (org-ctrl-c-ctrl-c)
301 (concat test-line
" =x=")
302 (buffer-substring-no-properties
303 (point-at-bol) (point-at-eol))))))
305 (let ((test-line "Some text prior to block src_emacs-lisp{ \"y\" }"))
306 (org-test-with-temp-text
308 (goto-char (point-max))
309 (insert (concat "\n" test-line
" end"))
310 (re-search-backward "src") (org-ctrl-c-ctrl-c)
312 (concat test-line
" =y= end")
313 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
314 (re-search-forward "\" ") (org-ctrl-c-ctrl-c)
316 (concat test-line
" =y= =y= end")
317 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
319 (should-error (org-ctrl-c-ctrl-c))))))
321 (ert-deftest test-org-babel
/inline-src_blk-manual-results-replace
()
322 (let ((test-line " src_emacs-lisp[:results replace]{ \"x\" }"))
323 (org-test-with-temp-text
324 (concat "\n" test-line
)
325 (should-error (org-ctrl-c-ctrl-c))
326 (goto-char (point-max))
327 (should-error (org-ctrl-c-ctrl-c))
329 (should-error (org-ctrl-c-ctrl-c))
330 (forward-char) (org-ctrl-c-ctrl-c)
332 (concat test-line
" =x=")
333 (buffer-substring-no-properties
334 (point-at-bol) (point-at-eol))))))
336 (let ((test-line (concat " Some text prior to block "
337 "src_emacs-lisp[:results replace]{ \"y\" }")))
338 (org-test-with-temp-text test-line
339 (goto-char (point-max))
340 (insert (concat "\n" test-line
" end"))
341 (re-search-backward "src") (org-ctrl-c-ctrl-c)
343 (concat test-line
" =y= end")
344 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
345 (re-search-forward "\" ") (org-ctrl-c-ctrl-c)
347 (concat test-line
" =y= =y= end")
348 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
350 (should-error (org-ctrl-c-ctrl-c)))))
352 (ert-deftest test-org-babel
/inline-src_blk-results-silent
()
353 (let ((test-line "src_emacs-lisp[ :results silent ]{ \"x\" }"))
354 (org-test-with-temp-text test-line
356 (should (string= test-line
357 (buffer-substring-no-properties
358 (point-at-bol) (point-at-eol))))
360 (should-error (org-ctrl-c-ctrl-c))))
361 (let ((test-line (concat " Some text prior to block src_emacs-lisp"
362 "[ :results silent ]{ \"y\" }")))
363 (org-test-with-temp-text
365 (goto-char (point-max))
366 (insert (concat "\n" test-line
" end"))
367 (re-search-backward "src_") (org-ctrl-c-ctrl-c)
368 (should (string= (concat test-line
" end")
369 (buffer-substring-no-properties
370 (point-at-bol) (point-at-eol))))
371 (re-search-forward "\" ") (org-ctrl-c-ctrl-c)
372 (should (string= (concat test-line
" end")
373 (buffer-substring-no-properties
374 (point-at-bol) (point-at-eol))))
376 (should-error (org-ctrl-c-ctrl-c)))))
378 (ert-deftest test-org-babel
/inline-src_blk-results-raw
()
379 (let ((test-line "src_emacs-lisp[ :results raw ]{ \"x\" }"))
380 (org-test-with-temp-text test-line
382 (should (string= (concat test-line
" x")
384 (let ((test-line (concat " Some text prior to block "
385 "src_emacs-lisp[ :results raw ]{ \"the\" }")))
386 (org-test-with-temp-text (concat test-line
" end")
387 (re-search-forward "src_") (org-ctrl-c-ctrl-c)
388 (should (string= (concat test-line
" the end")
389 (buffer-substring-no-properties
390 (point-at-bol) (point-at-eol))))
391 (re-search-forward "\" ") (org-ctrl-c-ctrl-c)
392 (should (string= (concat test-line
" the the end")
393 (buffer-substring-no-properties
394 (point-at-bol) (point-at-eol))))
396 (should-error (org-ctrl-c-ctrl-c)))))
398 (ert-deftest test-org-babel
/inline-src_blk-results-file
()
399 (let ((test-line "src_emacs-lisp[ :results file ]{ \"~/test-file\" }"))
400 (org-test-with-temp-text
403 (should (string= (concat test-line
" [[file:~/test-file]]")
404 (buffer-substring-no-properties
405 (point-min) (point-max)))))))
407 (ert-deftest test-org-babel
/inline-src_blk-results-scalar
()
408 (let ((test-line "src_emacs-lisp[ :results scalar ]{ \"x\" }"))
409 (org-test-with-temp-text
412 (should (string= (concat test-line
" =\"x\"=")
413 (buffer-substring-no-properties
414 (point-min) (point-max)))))))
416 (ert-deftest test-org-babel
/inline-src_blk-results-verbatim
()
417 (let ((test-line "src_emacs-lisp[ :results verbatim ]{ \"x\" }"))
418 (org-test-with-temp-text
421 (should (string= (concat test-line
" =\"x\"=")
422 (buffer-substring-no-properties
423 (point-min) (point-max)))))))
425 (ert-deftest test-org-babel
/combining-scalar-and-raw-result-types
()
426 (org-test-with-temp-text-in-file "
428 #+begin_src sh :results scalar
429 echo \"[[file:./cv.cls]]\"
435 #+begin_src sh :results raw scalar
436 echo \"[[file:./cv.cls]]\"
439 (flet ((next-result ()
440 (org-babel-next-src-block)
441 (org-babel-execute-src-block)
442 (goto-char (org-babel-where-is-src-block-result))
444 (goto-char (point-min))
446 (should (org-babel-in-example-or-verbatim))
448 (should (not (org-babel-in-example-or-verbatim))))))
450 (ert-deftest test-org-babel
/no-defaut-value-for-var
()
451 "Test that the absence of a default value for a variable DOES THROW
453 (org-test-at-id "f2df5ba6-75fa-4e6b-8441-65ed84963627"
454 (org-babel-next-src-block)
456 (should-error (org-babel-execute-src-block) :type
'error
)))
460 "variable \"x\" in block \"carre\" must be assigned a default value")
463 (ert-deftest test-org-babel
/just-one-results-block
()
464 "Test that evaluating two times the same code block does not result in a
465 duplicate results block."
466 (org-test-with-temp-text "#+begin_src sh\necho Hello\n#+end_src\n"
467 (org-babel-execute-src-block)
468 (org-babel-execute-src-block) ; second code block execution
469 (should (search-forward "Hello")) ; the string inside the source code block
470 (should (search-forward "Hello")) ; the same string in the results block
471 (should-error (search-forward "Hello"))))
473 (ert-deftest test-org-babel
/nested-code-block
()
474 "Test nested code blocks inside code blocks don't cause problems."
475 (org-test-with-temp-text "#+begin_src org :results silent
476 ,#+begin_src emacs-lisp
480 (should (string= (org-babel-execute-src-block)
481 "#+begin_src emacs-lisp\n 'foo\n#+end_src"))))
483 (ert-deftest test-org-babel
/partial-nested-code-block
()
484 "Test nested code blocks inside code blocks don't cause problems."
485 (org-test-with-temp-text "#+begin_src org :results silent
486 ,#+begin_src emacs-lisp
488 (should (string= "#+begin_src emacs-lisp" (org-babel-execute-src-block)))))
490 (ert-deftest test-ob
/does-not-replace-a-block-with-the-results
()
491 (org-test-with-temp-text "#+NAME: foo
492 #+BEGIN_SRC emacs-lisp
495 (org-babel-next-src-block 1)
496 (should (eq 'foo
(org-babel-execute-src-block)))
497 (goto-char (point-min))
498 (org-babel-next-src-block 1)
499 (should (looking-at org-babel-src-block-regexp
))))
501 (ert-deftest test-ob
/catches-all-references
()
502 (org-test-with-temp-text "
503 #+NAME: literal-example
509 #+NAME: read-literal-example
510 #+BEGIN_SRC emacs-lisp :var x=literal-example
511 (concatenate 'string x \" for me.\")
513 (org-babel-next-src-block 1)
514 (should (string= (org-babel-execute-src-block)
515 "A literal example\non two lines for me."))))
517 (ert-deftest test-ob
/resolve-code-blocks-before-data-blocks
()
518 (org-test-with-temp-text "
523 #+begin_src emacs-lisp
527 #+begin_src emacs-lisp :var foo=foo
530 (org-babel-next-src-block 2)
531 (should (string= (org-babel-execute-src-block) "baz"))))
533 (ert-deftest test-ob
/do-not-resolve-to-partial-names-data
()
534 (org-test-with-temp-text "
543 #+begin_src emacs-lisp :var x=base
546 (org-babel-next-src-block 1)
547 (should (equal (org-babel-execute-src-block) '((3) (4))))))
549 (ert-deftest test-ob
/do-not-resolve-to-partial-names-code
()
550 (org-test-with-temp-text "
552 #+begin_src emacs-lisp
557 #+begin_src emacs-lisp
561 #+begin_src emacs-lisp :var x=base
564 (org-babel-next-src-block 3)
565 (should (equal (org-babel-execute-src-block) "foo"))))
567 (ert-deftest test-ob
/allow-spaces-around-
=-in-var-specs
()
568 (org-test-with-temp-text "#+begin_src emacs-lisp :var a = 1 b = 2 c= 3 d =4
572 (should (= 10 (org-babel-execute-src-block)))))
574 (ert-deftest test-ob
/org-babel-update-intermediate
()
575 (org-test-with-temp-text "#+name: foo
576 #+begin_src emacs-lisp
583 #+begin_src emacs-lisp :var it=foo
586 (let ((org-babel-update-intermediate nil
))
587 (goto-char (point-min))
588 (org-babel-next-src-block 2)
589 (should (= 3 (org-babel-execute-src-block)))
590 (goto-char (point-min))
592 (should (looking-at ": 4")))
593 (let ((org-babel-update-intermediate t
))
594 (goto-char (point-min))
595 (org-babel-next-src-block 2)
596 (should (= 3 (org-babel-execute-src-block)))
597 (goto-char (point-min))
599 (should (looking-at ": 2")))))
601 (ert-deftest test-ob
/eval-header-argument
()
602 (flet ((check-eval (eval runp
)
603 (org-test-with-temp-text (format "#+begin_src emacs-lisp :eval %s
606 (let ((foo :not-run
))
608 (progn (should (org-babel-execute-src-block))
609 (should (eq foo
:evald
)))
610 (progn (should-not (org-babel-execute-src-block))
611 (should-not (eq foo
:evald
))))))))
612 (check-eval "never" nil
)
613 (check-eval "no" nil
)
614 (check-eval "never-export" t
)
615 (check-eval "no-export" t
)
616 (let ((org-current-export-file "something"))
617 (check-eval "never" nil
)
618 (check-eval "no" nil
)
619 (check-eval "never-export" nil
)
620 (check-eval "no-export" nil
))))
622 (ert-deftest test-ob
/noweb-expansion-1
()
623 (org-test-with-temp-text "#+begin_src sh :results output :tangle yes
631 (should (string= (org-babel-expand-noweb-references) "bar"))))
633 (ert-deftest test-ob
/noweb-expansion-2
()
634 (org-test-with-temp-text "#+begin_src sh :results output :tangle yes
639 #+begin_src sh :noweb-sep \"\"
643 #+begin_src sh :noweb-ref foo :noweb-sep \"\"
646 (should (string= (org-babel-expand-noweb-references) "barbaz"))))
648 (ert-deftest test-ob
/splitting-variable-lists-in-references
()
649 (org-test-with-temp-text ""
650 (should (= 1 (length (org-babel-ref-split-args
651 "a=\"this, no work\""))))
652 (should (= 2 (length (org-babel-ref-split-args
653 "a=\"this, no work\", b=1"))))))
655 (ert-deftest test-ob
/org-babel-balanced-split
()
657 '(":a 1" "b [2 3]" "c (4 :d (5 6))")
658 (org-babel-balanced-split ":a 1 :b [2 3] :c (4 :d (5 6))"
661 (ert-deftest test-ob
/commented-last-block-line-no-var
()
662 (org-test-with-temp-text-in-file "
663 #+begin_src emacs-lisp
667 (org-babel-next-src-block)
669 (should (re-search-forward "\\#\\+results:" nil t
))
674 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
675 (org-test-with-temp-text-in-file "
676 #+begin_src emacs-lisp
681 (org-babel-next-src-block)
683 (should (re-search-forward "\\#\\+results:" nil t
))
688 (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))))
690 (ert-deftest test-ob
/commented-last-block-line-with-var
()
691 (org-test-with-temp-text-in-file "
692 #+begin_src emacs-lisp :var a=1
696 (org-babel-next-src-block)
698 (re-search-forward "\\#\\+results:" nil t
)
702 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
703 (org-test-with-temp-text-in-file "
704 #+begin_src emacs-lisp :var a=2
708 (org-babel-next-src-block)
710 (re-search-forward "\\#\\+results:" nil t
)
714 (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))))
716 (defun test-ob-verify-result-and-removed-result (result buffer-text
)
717 "Test helper function to test `org-babel-remove-result'.
718 A temp buffer is populated with BUFFER-TEXT, the first block is executed,
719 and the result of execution is verified against RESULT.
721 The block is actually executed /twice/ to ensure result
722 replacement happens correctly."
723 (org-test-with-temp-text
726 (org-babel-next-src-block) (org-ctrl-c-ctrl-c) (org-ctrl-c-ctrl-c)
727 (should (re-search-forward "\\#\\+results:" nil t
))
729 (should (string= result
730 (buffer-substring-no-properties
732 (- (point-max) 16))))
733 (org-babel-previous-src-block) (org-babel-remove-result)
734 (should (string= buffer-text
735 (buffer-substring-no-properties
736 (point-min) (point-max)))))))
738 (ert-deftest test-ob
/org-babel-remove-result--results-default
()
739 "Test `org-babel-remove-result' with default :results."
740 (mapcar (lambda (language)
741 (test-ob-verify-result-and-removed-result
744 "* org-babel-remove-result
745 #+begin_src " language
"
749 '("sh" "emacs-lisp")))
751 (ert-deftest test-ob
/org-babel-remove-result--results-list
()
752 "Test `org-babel-remove-result' with :results list."
753 (test-ob-verify-result-and-removed-result
759 "* org-babel-remove-result
760 #+begin_src emacs-lisp :results list
766 (ert-deftest test-ob
/org-babel-results-indented-wrap
()
767 "Ensure that wrapped results are inserted correction when indented.
768 If not inserted correctly then the second evaluation will fail
769 trying to find the :END: marker."
770 (org-test-with-temp-text
772 #+begin_src sh :results file wrap
775 (org-babel-next-src-block 1)
776 (org-babel-execute-src-block)
777 (org-babel-execute-src-block)))
779 (ert-deftest test-ob
/file-desc-header-argument
()
780 "Test that the :file-desc header argument is used."
781 (org-test-with-temp-text "#+begin_src emacs-lisp :results file :file-desc bar
785 #+begin_src emacs-lisp :results file :file-desc
788 (org-babel-execute-src-block)
789 (org-babel-next-src-block 1)
790 (org-babel-execute-src-block)
791 (goto-char (point-min))
792 (should (search-forward "[[file:foo][bar]]" nil t
))
793 (should (search-forward "[[file:foo][foo]]" nil t
))))
795 (ert-deftest test-ob
/org-babel-remove-result--results-wrap
()
796 "Test `org-babel-remove-result' with :results wrap."
797 (test-ob-verify-result-and-removed-result
802 "* org-babel-remove-result
804 #+begin_src emacs-lisp :results wrap
810 (ert-deftest test-ob
/org-babel-remove-result--results-org
()
811 "Test `org-babel-remove-result' with :results org."
812 (test-ob-verify-result-and-removed-result
819 "* org-babel-remove-result
820 #+begin_src emacs-lisp :results org
828 (ert-deftest test-ob
/org-babel-remove-result--results-html
()
829 "Test `org-babel-remove-result' with :results html."
830 (test-ob-verify-result-and-removed-result
832 <head><body></body></head>
835 "* org-babel-remove-result
836 #+begin_src emacs-lisp :results html
837 \"<head><body></body></head>\"
842 (ert-deftest test-ob
/org-babel-remove-result--results-latex
()
843 "Test `org-babel-remove-result' with :results latex."
844 (test-ob-verify-result-and-removed-result
851 "* org-babel-remove-result
852 #+begin_src emacs-lisp :results latex
860 (ert-deftest test-ob
/org-babel-remove-result--results-code
()
861 "Test `org-babel-remove-result' with :results code."
863 (test-ob-verify-result-and-removed-result
864 "#+BEGIN_SRC emacs-lisp
868 "* org-babel-remove-result
869 #+begin_src emacs-lisp :results code
870 (message \"I am working!\")
875 (ert-deftest test-ob
/org-babel-remove-result--results-pp
()
876 "Test `org-babel-remove-result' with :results pp."
877 (test-ob-verify-result-and-removed-result
878 ": \"I /am/ working!\""
880 "* org-babel-remove-result
881 #+begin_src emacs-lisp :results pp
887 (ert-deftest test-org-babel
/inline-src_blk-preceded-punct-preceded-by-point
()
888 (let ((test-line ".src_emacs-lisp[ :results verbatim ]{ \"x\" }"))
889 (org-test-with-temp-text
893 (should (re-search-forward "=\"x\"=" nil t
))
896 (ert-deftest test-ob
/commented-last-block-line-with-var
()
897 (org-test-with-temp-text-in-file "
898 #+begin_src emacs-lisp :var a=1
902 (org-babel-next-src-block)
904 (re-search-forward "\\#\\+results:" nil t
)
908 (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
909 (org-test-with-temp-text-in-file "
910 #+begin_src emacs-lisp :var a=2
914 (org-babel-next-src-block)
916 (re-search-forward "\\#\\+results:" nil t
)
920 (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))))
922 (defun test-ob-verify-result-and-removed-result (result buffer-text
)
923 "Test helper function to test `org-babel-remove-result'.
924 A temp buffer is populated with BUFFER-TEXT, the first block is executed,
925 and the result of execution is verified against RESULT.
927 The block is actually executed /twice/ to ensure result
928 replacement happens correctly."
929 (org-test-with-temp-text
932 (org-babel-next-src-block) (org-ctrl-c-ctrl-c) (org-ctrl-c-ctrl-c)
933 (should (re-search-forward "\\#\\+results:" nil t
))
935 (should (string= result
936 (buffer-substring-no-properties
938 (- (point-max) 16))))
939 (org-babel-previous-src-block) (org-babel-remove-result)
940 (should (string= buffer-text
941 (buffer-substring-no-properties
942 (point-min) (point-max)))))))
944 (ert-deftest test-ob
/org-babel-remove-result--results-default
()
945 "Test `org-babel-remove-result' with default :results."
946 (mapcar (lambda (language)
947 (test-ob-verify-result-and-removed-result
950 "* org-babel-remove-result
951 #+begin_src " language
"
955 '("sh" "emacs-lisp")))
957 (ert-deftest test-ob
/org-babel-remove-result--results-list
()
958 "Test `org-babel-remove-result' with :results list."
959 (test-ob-verify-result-and-removed-result
965 "* org-babel-remove-result
966 #+begin_src emacs-lisp :results list
972 (ert-deftest test-ob
/org-babel-remove-result--results-wrap
()
973 "Test `org-babel-remove-result' with :results wrap."
974 (test-ob-verify-result-and-removed-result
979 "* org-babel-remove-result
981 #+begin_src emacs-lisp :results wrap
987 (ert-deftest test-ob
/org-babel-remove-result--results-org
()
988 "Test `org-babel-remove-result' with :results org."
989 (test-ob-verify-result-and-removed-result
996 "* org-babel-remove-result
997 #+begin_src emacs-lisp :results org
1005 (ert-deftest test-ob
/org-babel-remove-result--results-html
()
1006 "Test `org-babel-remove-result' with :results html."
1007 (test-ob-verify-result-and-removed-result
1009 <head><body></body></head>
1012 "* org-babel-remove-result
1013 #+begin_src emacs-lisp :results html
1014 \"<head><body></body></head>\"
1019 (ert-deftest test-ob
/org-babel-remove-result--results-latex
()
1020 "Test `org-babel-remove-result' with :results latex."
1021 (test-ob-verify-result-and-removed-result
1028 "* org-babel-remove-result
1029 #+begin_src emacs-lisp :results latex
1037 (ert-deftest test-ob
/org-babel-remove-result--results-code
()
1038 "Test `org-babel-remove-result' with :results code."
1040 (test-ob-verify-result-and-removed-result
1041 "#+BEGIN_SRC emacs-lisp
1045 "* org-babel-remove-result
1046 #+begin_src emacs-lisp :results code
1047 (message \"I am working!\")
1052 (ert-deftest test-ob
/org-babel-remove-result--results-pp
()
1053 "Test `org-babel-remove-result' with :results pp."
1054 (test-ob-verify-result-and-removed-result
1055 ": \"I /am/ working!\""
1057 "* org-babel-remove-result
1058 #+begin_src emacs-lisp :results pp
1059 \"I /am/ working!\")
1064 (ert-deftest test-ob
/results-do-not-replace-code-blocks
()
1065 (org-test-with-temp-text "Block two has a space after the name.
1068 #+begin_src emacs-lisp
1070 #+end_src emacs-lisp
1073 #+begin_src emacs-lisp
1078 #+begin_src emacs-lisp
1085 (dolist (num '(1 2 3))
1086 ;; execute the block
1087 (goto-char (point-min))
1088 (org-babel-next-src-block num
) (org-babel-execute-src-block)
1089 ;; check the results
1090 (goto-char (point-max))
1091 (move-beginning-of-line 0)
1092 (should (looking-at (format ": %d" num
))))))
1096 ;;; test-ob ends here