test-ob-shell.el: Refactor test names and kill test buffers

* testing/lisp/test-ob-shell.el:
(ob-shell/generic-uses-no-arrays): Rename test from
`ob-shell/generic-uses-no-arrays' to
`test-ob-shell/generic-uses-no-arrays'.
(ob-shell/generic-uses-no-arrays): Move comments from
testing/examples/ob-shell-test.org to docstring.
(ob-shell/generic-uses-no-arrays): Remove dependency on
testing/examples/ob-shell-test.org.
(ob-shell/bash-uses-arrays): Rename `ob-shell/bash-uses-arrays' to
`test-ob-shell/bash-uses-arrays'.
(ob-shell/bash-uses-arrays): Move comments from
testing/examples/ob-shell-test.org to docstring.
(ob-shell/bash-uses-arrays): Remove dependency on
testing/examples/ob-shell-test.org.
(ob-shell/simple-list): Change test name from `ob-shell/simple-list'
to `test-ob-shell/simple-list'.
(ob-shell/remote-with-stdin-or-cmdline): Change test name from
`ob-shell/remote-with-stdin-or-cmdline' to
`test-ob-shell/remote-with-stdin-or-cmdline'.
(ob-shell/remote-with-stdin-or-cmdline): On pass, kill buffer created
by test.
(ob-shell/results-table): Rename `ob-shell/results-table' to
`test-ob-shell/results-table'.
(ob-shell/results-list): Rename `ob-shell/results-list' to
`test-ob-shell/results-list'.
 (ob-shell/standard-output-after-success): Rename
`ob-shell/standard-output-after-success' to
`test-ob-shell/standard-output-after-success'.
(ob-shell/standard-output-after-failure): Rename
`ob-shell/standard-output-after-failure' to
`test-ob-shell/standard-output-after-failure'.
(ob-shell/standard-output-after-failure): On pass, kill buffer created
during test.
(ob-shell/error-output-after-success): Rename
`ob-shell/error-output-after-success' to
`test-ob-shell/error-output-after-success'.
(ob-shell/error-output-after-success): On pass, kill buffer created by
test.
(ob-shell/error-output-after-failure): Rename
`ob-shell/error-output-after-failure' to
`test-ob-shell/error-output-after-failure'.
(ob-shell/error-output-after-failure): On pass, kill buffer created by
test.
(ob-shell/error-output-after-failure-multiple): Rename
`ob-shell/error-output-after-failure-multiple' to
`test-ob-shell/error-output-after-failure-multiple'.
(ob-shell/error-output-after-failure-multiple): On pass, kill buffer
created by test.
(ob-shell/exit-code): Rename `ob-shell/exit-code' to
`test-ob-shell/exit-code'.
(ob-shell/exit-code): On pass, kill buffer created by test.
(ob-shell/exit-code-multiple): Rename `ob-shell/exit-code-multiple' to
`test-ob-shell/exit-code-multiple'.
(ob-shell/exit-code-multiple): On pass, kill buffer created by test.
This commit is contained in:
Matt Trzcinski 2022-12-30 12:39:47 -05:00
parent 2a0f5a5153
commit 3dbc7849a3

View file

@ -18,21 +18,23 @@
;; You should have received a copy of the GNU General Public License ;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>. ;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Comment: ;;; Comment:
;; Template test file for Org tests ;;; Requirements:
;;; Code:
(org-test-for-executable "sh") (org-test-for-executable "sh")
(require 'ob-core) (require 'ob-core)
(unless (featurep 'ob-shell) (unless (featurep 'ob-shell)
(signal 'missing-test-dependency "Support for Shell code blocks")) (signal 'missing-test-dependency "Support for Shell code blocks"))
;;; Code:
(ert-deftest test-ob-shell/dont-insert-spaces-on-expanded-bodies () (ert-deftest test-ob-shell/dont-insert-spaces-on-expanded-bodies ()
"Expanded shell bodies should not start with a blank line "Expanded shell bodies should not start with a blank line unless
unless the body of the tangled block does." the body of the tangled block does."
(should-not (string-match "^[\n\r][\t ]*[\n\r]" (should-not (string-match "^[\n\r][\t ]*[\n\r]"
(org-babel-expand-body:generic "echo 2" '()))) (org-babel-expand-body:generic "echo 2" '())))
(should (string-match "^[\n\r][\t ]*[\n\r]" (should (string-match "^[\n\r][\t ]*[\n\r]"
(org-babel-expand-body:generic "\n\necho 2" '())))) (org-babel-expand-body:generic "\n\necho 2" '()))))
@ -68,16 +70,36 @@ unless the body of the tangled block does."
(if (should (equal '((1) (2)) result)) (if (should (equal '((1) (2)) result))
(kill-buffer session-name)))) (kill-buffer session-name))))
(ert-deftest ob-shell/generic-uses-no-arrays () (ert-deftest test-ob-shell/generic-uses-no-arrays ()
"No arrays for generic" "Test generic serialization of array into a single string."
(org-test-at-id "0ba56632-8dc1-405c-a083-c204bae477cf" (org-test-with-temp-text
(org-babel-next-src-block) " #+NAME: sample_array
| one |
| two |
| three |
#+begin_src sh :exports results :results output :var array=sample_array
echo ${array}
<point>
#+end_src"
(should (equal "one two three" (org-trim (org-babel-execute-src-block)))))) (should (equal "one two three" (org-trim (org-babel-execute-src-block))))))
(ert-deftest ob-shell/bash-uses-arrays () (ert-deftest test-ob-shell/bash-uses-arrays ()
"Bash arrays" "Bash sees named array as a simple indexed array.
(org-test-at-id "0ba56632-8dc1-405c-a083-c204bae477cf"
(org-babel-next-src-block 2) In this test, we check that the returned value is indeed only the
first item of the array, as opposed to the generic serialiation
that will return all elements of the array as a single string."
(org-test-with-temp-text
"#+NAME: sample_array
| one |
| two |
| three |
#+begin_src bash :exports results :results output :var array=sample_array
echo ${array}
<point>
#+end_src"
(should (equal "one" (org-trim (org-babel-execute-src-block)))))) (should (equal "one" (org-trim (org-babel-execute-src-block))))))
(ert-deftest test-ob-shell/generic-uses-no-assoc-arrays-simple-map () (ert-deftest test-ob-shell/generic-uses-no-assoc-arrays-simple-map ()
@ -157,22 +179,27 @@ echo ${table[spaghetti]}
(equal "20 cm" (equal "20 cm"
(org-trim (org-babel-execute-src-block)))))) (org-trim (org-babel-execute-src-block))))))
(ert-deftest ob-shell/simple-list () (ert-deftest test-ob-shell/simple-list ()
"Test list variables in shell." "Test list variables."
;; With bash, a list is turned into an array. ;; bash: a list is turned into an array
(should (should
(equal "2" (equal "2"
(org-test-with-temp-text (org-test-with-temp-text
"#+BEGIN_SRC bash :results output :var l='(1 2)\necho ${l[1]}\n#+END_SRC" "#+BEGIN_SRC bash :results output :var l='(1 2)
(org-trim (org-babel-execute-src-block))))) echo ${l[1]}
;; On sh, it is a string containing all values. #+END_SRC"
(org-trim (org-babel-execute-src-block)))))
;; sh: a list is a string containing all values
(should (should
(equal "1 2" (equal "1 2"
(org-test-with-temp-text (org-test-with-temp-text
"#+BEGIN_SRC sh :results output :var l='(1 2)\necho ${l}\n#+END_SRC" "#+BEGIN_SRC sh :results output :var l='(1 2)
(org-trim (org-babel-execute-src-block)))))) echo ${l}
#+END_SRC"
(org-trim (org-babel-execute-src-block))))))
(ert-deftest ob-shell/remote-with-stdin-or-cmdline () (ert-deftest test-ob-shell/remote-with-stdin-or-cmdline ()
"Test :stdin and :cmdline with a remote directory." "Test :stdin and :cmdline with a remote directory."
;; We assume `default-directory' is a local directory. ;; We assume `default-directory' is a local directory.
(skip-unless (not (memq system-type '(ms-dos windows-nt)))) (skip-unless (not (memq system-type '(ms-dos windows-nt))))
@ -219,20 +246,27 @@ echo ${table[spaghetti]}
(org-trim (org-babel-execute-src-block)))) (org-trim (org-babel-execute-src-block))))
(expected (concat "ARGS: --verbose 23 71" (expected (concat "ARGS: --verbose 23 71"
"\nhello tramp from " (file-local-name default-directory)))) "\nhello tramp from " (file-local-name default-directory))))
(should (equal result expected))))))) (if (should (equal result expected))
(kill-matching-buffers (format "\\*tramp/mock\\s-%s\\*" system-name) t t)))))))
(ert-deftest ob-shell/results-table () (ert-deftest test-ob-shell/results-table ()
"Test :results table." "Test :results table."
(should (should
(equal '(("I \"want\" it all")) (equal '(("I \"want\" it all"))
(org-test-with-temp-text (org-test-with-temp-text
"#+BEGIN_SRC sh :results table\necho 'I \"want\" it all'\n#+END_SRC" "#+BEGIN_SRC sh :results table
(org-babel-execute-src-block))))) echo 'I \"want\" it all'
#+END_SRC"
(org-babel-execute-src-block)))))
(ert-deftest ob-shell/results-list () (ert-deftest test-ob-shell/results-list ()
"Test :results list." "Test :results list."
(org-test-with-temp-text (org-test-with-temp-text
"#+BEGIN_SRC sh :results list\necho 1\necho 2\necho 3\n#+END_SRC" "#+BEGIN_SRC sh :results list
echo 1
echo 2
echo 3
#+END_SRC"
(should (should
(equal '((1) (2) (3)) (equal '((1) (2) (3))
(org-babel-execute-src-block))) (org-babel-execute-src-block)))
@ -245,86 +279,98 @@ echo ${table[spaghetti]}
;;; Standard output ;;; Standard output
(ert-deftest ob-shell/standard-output-after-success () (ert-deftest test-ob-shell/standard-output-after-success ()
"Test standard output after exiting with a zero code." "Test standard output after exiting with a zero code."
(should (= 1 (should (= 1
(org-babel-execute:sh (org-babel-execute:sh
"echo 1" nil)))) "echo 1" nil))))
(ert-deftest ob-shell/standard-output-after-failure () (ert-deftest test-ob-shell/standard-output-after-failure ()
"Test standard output after exiting with a non-zero code." "Test standard output after exiting with a non-zero code."
(should (= 1 (if
(org-babel-execute:sh (should (= 1
"echo 1; exit 2" nil)))) (org-babel-execute:sh
"echo 1; exit 2" nil)))
(kill-buffer "*Org-Babel Error Output*")))
;;; Standard error ;;; Standard error
(ert-deftest ob-shell/error-output-after-success () (ert-deftest test-ob-shell/error-output-after-success ()
"Test that standard error shows in the error buffer, alongside the "Test that standard error shows in the error buffer, alongside
exit code, after exiting with a zero code." the exit code, after exiting with a zero code."
(should (if
(string= "1 (should
(string= "1
[ Babel evaluation exited with code 0 ]" [ Babel evaluation exited with code 0 ]"
(progn (org-babel-eval-wipe-error-buffer) (progn (org-babel-eval-wipe-error-buffer)
(org-babel-execute:sh (org-babel-execute:sh
"echo 1 >&2" nil) "echo 1 >&2" nil)
(with-current-buffer org-babel-error-buffer-name (with-current-buffer org-babel-error-buffer-name
(buffer-string)))))) (buffer-string)))))
(kill-buffer "*Org-Babel Error Output*")))
(ert-deftest ob-shell/error-output-after-failure () (ert-deftest test-ob-shell/error-output-after-failure ()
"Test that standard error shows in the error buffer, alongside the "Test that standard error shows in the error buffer, alongside
exit code, after exiting with a non-zero code." the exit code, after exiting with a non-zero code."
(should (if
(string= "1 (should
(string= "1
[ Babel evaluation exited with code 2 ]" [ Babel evaluation exited with code 2 ]"
(progn (org-babel-eval-wipe-error-buffer) (progn (org-babel-eval-wipe-error-buffer)
(org-babel-execute:sh (org-babel-execute:sh
"echo 1 >&2; exit 2" nil) "echo 1 >&2; exit 2" nil)
(with-current-buffer org-babel-error-buffer-name (with-current-buffer org-babel-error-buffer-name
(buffer-string)))))) (buffer-string)))))
(kill-buffer "*Org-Babel Error Output*")))
(ert-deftest ob-shell/error-output-after-failure-multiple () (ert-deftest test-ob-shell/error-output-after-failure-multiple ()
"Test that multiple standard error strings show in the error "Test that multiple standard error strings show in the error
buffer, alongside multiple exit codes." buffer, alongside multiple exit codes."
(should (if
(string= "1 (should
(string= "1
[ Babel evaluation exited with code 2 ] [ Babel evaluation exited with code 2 ]
3 3
[ Babel evaluation exited with code 4 ]" [ Babel evaluation exited with code 4 ]"
(progn (org-babel-eval-wipe-error-buffer) (progn (org-babel-eval-wipe-error-buffer)
(org-babel-execute:sh (org-babel-execute:sh
"echo 1 >&2; exit 2" nil) "echo 1 >&2; exit 2" nil)
(org-babel-execute:sh (org-babel-execute:sh
"echo 3 >&2; exit 4" nil) "echo 3 >&2; exit 4" nil)
(with-current-buffer org-babel-error-buffer-name (with-current-buffer org-babel-error-buffer-name
(buffer-string)))))) (buffer-string)))))
(kill-buffer "*Org-Babel Error Output*")))
;;; Exit codes ;;; Exit codes
(ert-deftest ob-shell/exit-code () (ert-deftest test-ob-shell/exit-code ()
"Test that the exit code shows in the error buffer after exiting "Test that the exit code shows in the error buffer after exiting
with a non-zero return code." with a non-zero return code."
(should (if
(string= "[ Babel evaluation exited with code 1 ]" (should
(progn (org-babel-eval-wipe-error-buffer) (string= "[ Babel evaluation exited with code 1 ]"
(org-babel-execute:sh (progn (org-babel-eval-wipe-error-buffer)
"exit 1" nil) (org-babel-execute:sh
(with-current-buffer org-babel-error-buffer-name "exit 1" nil)
(buffer-string)))))) (with-current-buffer org-babel-error-buffer-name
(buffer-string)))))
(kill-buffer "*Org-Babel Error Output*")))
(ert-deftest ob-shell/exit-code-multiple () (ert-deftest test-ob-shell/exit-code-multiple ()
"Test that multiple exit codes show in the error buffer after "Test that multiple exit codes show in the error buffer after
exiting with a non-zero return code multiple times." exiting with a non-zero return code multiple times."
(should (if
(string= "[ Babel evaluation exited with code 1 ] (should
(string= "[ Babel evaluation exited with code 1 ]
[ Babel evaluation exited with code 2 ]" [ Babel evaluation exited with code 2 ]"
(progn (org-babel-eval-wipe-error-buffer) (progn (org-babel-eval-wipe-error-buffer)
(org-babel-execute:sh (org-babel-execute:sh
"exit 1" nil) "exit 1" nil)
(org-babel-execute:sh (org-babel-execute:sh
"exit 2" nil) "exit 2" nil)
(with-current-buffer org-babel-error-buffer-name (with-current-buffer org-babel-error-buffer-name
(buffer-string)))))) (buffer-string)))))
(kill-buffer "*Org-Babel Error Output*")))
(provide 'test-ob-shell) (provide 'test-ob-shell)