From: Martyn Jago <martyn.jago@btinternet.com>
To: emacs-orgmode@gnu.org
Subject: [patch][babel] `org-babel-result-end' bug fix and regression tests
Date: Fri, 06 Jan 2012 17:31:58 +0000 [thread overview]
Message-ID: <m2k454rb3l.fsf@btinternet.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 609 bytes --]
`org-babel-result-end' bug fix and `org-babel-remove-result' regression tests.
* lisp/ob.el:
The code block below will currently act as though :results prepend
is set. This is due to `org-babel-result-end' being unable to
find the correct end of a raw result. This patch fixes that.
#+begin_src emacs-lisp :results raw
"a line"
#+end_src
#+results:
a line
a line
* testing/lisp/test-ob.el:
Several regression tests that test the correct (multiple) execution of
code blocks in the various results formats. The tests also test that
'org-babel-remove-result' correctly removes the result.
Best, Martyn
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-babel-result-end-fix --]
[-- Type: text/x-patch, Size: 7441 bytes --]
From 5a3148fb1e3de288e5e3534ceb06eb64c20697aa Mon Sep 17 00:00:00 2001
From: Martyn Jago <martyn.jago@btinternet.com>
Date: Fri, 6 Jan 2012 17:10:00 +0000
Subject: [PATCH] `org-babel-result-end' bug fix and `org-babel-remove-result' regression tests.
* lisp/ob.el:
The code block below will currently act as though :results
prepend is set. This is due to `org-babel-result-end' being unable to
find the correct end of a raw result. This patch fixes that.
"a line"
* testing/lisp/test-ob.el:
Several regression tests that test the correct (multiple) execution of
code blocks in the various results formats. The tests also test that
'org-babel-remove-result' correctly removes the result.
---
lisp/ob.el | 2 +-
testing/lisp/test-ob.el | 218 +++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 212 insertions(+), 8 deletions(-)
diff --git a/lisp/ob.el b/lisp/ob.el
index 0288eb3..26792ea 100644
--- a/lisp/ob.el
+++ b/lisp/ob.el
@@ -1810,7 +1810,7 @@ code ---- the results are extracted in the syntax of the source
(if (looking-at (concat "[ \t]*#\\+begin_" blocks-re))
(progn (re-search-forward (concat "[ \t]*#\\+end_" blocks-re) nil t)
(forward-char 1))
- (while (looking-at "[ \t]*\\(: \\|\\[\\[\\)")
+ (while (not (looking-at "^\s*$"))
(forward-line 1))))
(point)))))
diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el
index dac6866..f616776 100644
--- a/testing/lisp/test-ob.el
+++ b/testing/lisp/test-ob.el
@@ -137,13 +137,7 @@
#+name: i-have-a-name
#+begin_src emacs-lisp
42
-#+end_src
-
-#+name:
-: 42
-
-#+name: i-have-a-name
-: 42"
+#+end_src"
(progn
(org-babel-next-src-block 1)
@@ -671,6 +665,216 @@ on two lines
(org-babel-balanced-split ":a 1 :b [2 3] :c (4 :d (5 6))"
'((32 9) . 58)))))
+(ert-deftest test-ob/commented-last-block-line-no-var ()
+ (org-test-with-temp-text-in-file "
+#+begin_src emacs-lisp
+;;
+#+end_src"
+ (progn
+ (org-babel-next-src-block)
+ (org-ctrl-c-ctrl-c)
+ (should (re-search-forward "\\#\\+results:" nil t))
+ (forward-line)
+ (should
+ (string=
+ ""
+ (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
+ (org-test-with-temp-text-in-file "
+#+begin_src emacs-lisp
+\"some text\";;
+#+end_src"
+
+ (progn
+ (org-babel-next-src-block)
+ (org-ctrl-c-ctrl-c)
+ (should (re-search-forward "\\#\\+results:" nil t))
+ (forward-line)
+ (should
+ (string=
+ ": some text"
+ (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))))
+
+(ert-deftest test-ob/commented-last-block-line-with-var ()
+ (org-test-with-temp-text-in-file "
+#+begin_src emacs-lisp :var a=1
+;;
+#+end_src"
+ (progn
+ (org-babel-next-src-block)
+ (org-ctrl-c-ctrl-c)
+ (re-search-forward "\\#\\+results:" nil t)
+ (forward-line)
+ (should (string=
+ ""
+ (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))
+ (org-test-with-temp-text-in-file "
+#+begin_src emacs-lisp :var a=2
+2;;
+#+end_src"
+ (progn
+ (org-babel-next-src-block)
+ (org-ctrl-c-ctrl-c)
+ (re-search-forward "\\#\\+results:" nil t)
+ (forward-line)
+ (should (string=
+ ": 2"
+ (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))))
+
+(defun test-ob-verify-result-and-removed-result (result buffer-text)
+ "Test helper function to test `org-babel-remove-result'.
+A temp buffer is populated with BUFFER-TEXT, the first block is executed,
+and the result of execution is verified against RESULT.
+
+The block is actually executed /twice/ to ensure result
+replacement happens correctly."
+ (org-test-with-temp-text
+ buffer-text
+ (progn
+ (org-babel-next-src-block) (org-ctrl-c-ctrl-c) (org-ctrl-c-ctrl-c)
+ (should (re-search-forward "\\#\\+results:" nil t))
+ (forward-line)
+ (should (string= result
+ (buffer-substring-no-properties
+ (point-at-bol)
+ (- (point-max) 16))))
+ (org-babel-previous-src-block) (org-babel-remove-result)
+ (should (string= buffer-text
+ (buffer-substring-no-properties
+ (point-min) (point-max)))))))
+
+(ert-deftest test-ob/org-babel-remove-result--results-default ()
+ "Test `org-babel-remove-result' with default :results."
+ (mapcar (lambda (language)
+ (test-ob-verify-result-and-removed-result
+ "\n"
+ (concat
+"* org-babel-remove-result
+#+begin_src " language "
+#+end_src
+
+* next heading")))
+ '("sh" "emacs-lisp")))
+
+(ert-deftest test-ob/org-babel-remove-result--results-raw ()
+ "Test `org-babel-remove-result' with :results raw."
+ (test-ob-verify-result-and-removed-result
+ "Hello
+There!"
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results raw
+(concat \"Hello
+\"\"There!\")
+#+end_src
+
+* next heading"))
+
+(ert-deftest test-ob/org-babel-remove-result--results-list ()
+ "Test `org-babel-remove-result' with :results list."
+ (test-ob-verify-result-and-removed-result
+ "- 1
+- 2
+- 3
+- (quote (4 5))"
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results list
+'(1 2 3 '(4 5))
+#+end_src
+
+* next heading"))
+
+;; TODO FIXME "wrap is inserting an extra newline following its result
+;; (ert-deftest test-ob/org-babel-remove-result--results-wrap ()
+;; (test-ob-verify-result-and-removed-result
+;; ":RESULTS:\nhello there\n:END:"
+;;
+;; "* org-babel-remove-result
+;;
+;; #+begin_src emacs-lisp :results wrap
+;; \"hello there\"
+;; #+end_src
+;;
+;; * next heading"))
+
+(ert-deftest test-ob/org-babel-remove-result--results-org ()
+ "Test `org-babel-remove-result' with :results org."
+ (test-ob-verify-result-and-removed-result
+ "#+BEGIN_ORG
+* heading
+** subheading
+content
+#+END_ORG"
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results org
+\"* heading
+** subheading
+content\"
+#+end_src
+
+* next heading"))
+
+(ert-deftest test-ob/org-babel-remove-result--results-html ()
+ "Test `org-babel-remove-result' with :results html."
+ (test-ob-verify-result-and-removed-result
+ "#+BEGIN_HTML
+<head><body></body></head>
+#+END_HTML"
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results html
+\"<head><body></body></head>\"
+#+end_src
+
+* next heading"))
+
+(ert-deftest test-ob/org-babel-remove-result--results-latex ()
+ "Test `org-babel-remove-result' with :results latex."
+ (test-ob-verify-result-and-removed-result
+ "#+BEGIN_LaTeX
+Line 1
+Line 2
+Line 3
+#+END_LaTeX"
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results latex
+\"Line 1
+Line 2
+Line 3\"
+#+end_src
+
+* next heading"))
+
+(ert-deftest test-ob/org-babel-remove-result--results-code ()
+ "Test `org-babel-remove-result' with :results code."
+
+ (test-ob-verify-result-and-removed-result
+ "#+BEGIN_SRC emacs-lisp
+\"I am working!\"
+#+END_SRC"
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results code
+(message \"I am working!\")
+#+end_src
+
+* next heading"))
+
+;; TODO Check pp works with emacs-lisp - according to the manual it does
+(ert-deftest test-ob/org-babel-remove-result--results-pp ()
+ "Test `org-babel-remove-result' with :results pp."
+ (test-ob-verify-result-and-removed-result
+ ": \"I /am/ working!\""
+
+"* org-babel-remove-result
+#+begin_src emacs-lisp :results pp
+\"I /am/ working!\")
+#+end_src
+
+* next heading"))
+
(provide 'test-ob)
;;; test-ob ends here
--
1.7.3.4
next reply other threads:[~2012-01-06 17:32 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-06 17:31 Martyn Jago [this message]
2012-01-06 17:47 ` [patch][babel] `org-babel-result-end' bug fix and regression tests Eric Schulte
2012-01-06 18:37 ` Martyn Jago
2012-01-06 18:52 ` Eric Schulte
2012-01-06 19:41 ` Martyn Jago
2012-01-06 20:11 ` Eric Schulte
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2k454rb3l.fsf@btinternet.com \
--to=martyn.jago@btinternet.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).