test-ob-R.el 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. ;;; test-ob-R.el --- tests for ob-R.el
  2. ;; Copyright (c) 2011-2014, 2019 Eric Schulte
  3. ;; Authors: Eric Schulte
  4. ;; This file is not part of GNU Emacs.
  5. ;; This program is free software; you can redistribute it and/or modify
  6. ;; it under the terms of the GNU General Public License as published by
  7. ;; the Free Software Foundation, either version 3 of the License, or
  8. ;; (at your option) any later version.
  9. ;; This program is distributed in the hope that it will be useful,
  10. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. ;; GNU General Public License for more details.
  13. ;; You should have received a copy of the GNU General Public License
  14. ;; along with this program. If not, see <https://www.gnu.org/licenses/>.
  15. ;;; Code:
  16. (org-test-for-executable "R")
  17. (unless (featurep 'ess)
  18. (signal 'missing-test-dependency "ESS"))
  19. (unless (featurep 'ob-R)
  20. (signal 'missing-test-dependency "Support for R code blocks"))
  21. (ert-deftest test-ob-R/simple-session ()
  22. (let (ess-ask-for-ess-directory ess-history-file)
  23. (org-test-with-temp-text
  24. "#+begin_src R :session R\n paste(\"Yep!\")\n#+end_src\n"
  25. (should (string= "Yep!" (org-babel-execute-src-block))))))
  26. (ert-deftest test-ob-R/colnames-yes-header-argument ()
  27. (org-test-with-temp-text "#+name: eg
  28. | col |
  29. |-----|
  30. | a |
  31. | b |
  32. #+header: :colnames yes
  33. #+header: :var x = eg
  34. #+begin_src R
  35. x
  36. #+end_src"
  37. (org-babel-next-src-block)
  38. (should (equal '(("col") hline ("a") ("b"))
  39. (org-babel-execute-src-block)))))
  40. (ert-deftest test-ob-R/colnames-nil-header-argument ()
  41. (org-test-with-temp-text "#+name: eg
  42. | col |
  43. |-----|
  44. | a |
  45. | b |
  46. #+header: :colnames nil
  47. #+header: :var x = eg
  48. #+begin_src R
  49. x
  50. #+end_src"
  51. (org-babel-next-src-block)
  52. (should (equal '(("col") hline ("a") ("b"))
  53. (org-babel-execute-src-block)))))
  54. (ert-deftest test-ob-R/colnames-no-header-argument ()
  55. (org-test-with-temp-text "#+name: eg
  56. | col |
  57. |-----|
  58. | a |
  59. | b |
  60. #+header: :colnames no
  61. #+header: :var x = eg
  62. #+begin_src R
  63. x
  64. #+end_src"
  65. (org-babel-next-src-block)
  66. (should (equal '(("col") ("a") ("b"))
  67. (org-babel-execute-src-block)))))
  68. (ert-deftest test-ob-R/results-file ()
  69. (let (ess-ask-for-ess-directory ess-history-file)
  70. (org-test-with-temp-text
  71. "#+NAME: TESTSRC
  72. #+BEGIN_SRC R :results file
  73. a <- file.path(\"junk\", \"test.org\")
  74. a
  75. #+END_SRC"
  76. (goto-char (point-min)) (org-babel-execute-maybe)
  77. (org-babel-goto-named-result "TESTSRC") (forward-line 1)
  78. (should (string= "[[file:junk/test.org]]"
  79. (buffer-substring-no-properties (point-at-bol) (point-at-eol))))
  80. (goto-char (point-min)) (forward-line 1)
  81. (insert "#+header: :session\n")
  82. (goto-char (point-min)) (org-babel-execute-maybe)
  83. (org-babel-goto-named-result "TESTSRC") (forward-line 1)
  84. (should (string= "[[file:junk/test.org]]"
  85. (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))))
  86. (ert-deftest test-ob-r/output-with-<> ()
  87. "make sure angle brackets are well formatted"
  88. (let (ess-ask-for-ess-directory ess-history-file)
  89. (should (string="[1] \"<X> <Y> <!>\"
  90. [1] \"one <two> three\"
  91. [1] \"end35\"
  92. "
  93. (org-test-with-temp-text "#+begin_src R :results output
  94. print(\"<X> <Y> <!>\")
  95. print(\"one <two> three\")
  96. print(\"end35\")
  97. #+end_src
  98. "
  99. (org-babel-execute-src-block))
  100. ))))
  101. ;; (ert-deftest test-ob-r/output-with-error ()
  102. ;; "make sure angle brackets are well formatted"
  103. ;; (let (ess-ask-for-ess-directory ess-history-file)
  104. ;; (should (string="Error in print(1/a) : object 'a' not found"
  105. ;; (org-test-with-temp-text "#+begin_src R :results output
  106. ;; print(1/a)
  107. ;; #+end_src
  108. ;; "
  109. ;; (org-babel-execute-src-block))
  110. ;; ))))
  111. (ert-deftest test-ob-R/output-nonprinted ()
  112. (let (ess-ask-for-ess-directory ess-history-file)
  113. (org-test-with-temp-text
  114. "#+begin_src R :results output
  115. 4.0 * 3.5
  116. log(10)
  117. log10(10)
  118. (3 + 1) * 5
  119. 3^-1
  120. 1/0
  121. #+end_src"
  122. (should (string= "[1] 14\n[1] 2.302585\n[1] 1\n[1] 20\n[1] 0.3333333\n[1] Inf\n" (org-babel-execute-src-block))))))
  123. (ert-deftest test-ob-r/NA-blank ()
  124. "For :results value, NAs should be empty"
  125. (let (ess-ask-for-ess-directory ess-history-file)
  126. (should (equal '(("A" "B") hline ("" 1) (1 2) (1 "") (1 4) (1 4))
  127. (org-test-with-temp-text "#+BEGIN_SRC R :results value :colnames yes
  128. data.frame(A=c(NA,1,1,1,1),B=c(1,2,NA,4,4))
  129. #+end_src"
  130. (org-babel-execute-src-block))))))
  131. (ert-deftest ob-session-async-R-simple-session-async-value ()
  132. (let (ess-ask-for-ess-directory
  133. ess-history-file
  134. (org-babel-temporary-directory "/tmp")
  135. (org-confirm-babel-evaluate nil))
  136. (org-test-with-temp-text
  137. "#+begin_src R :session R :async yes\n Sys.sleep(.1)\n paste(\"Yep!\")\n#+end_src\n"
  138. (should (let ((expected "Yep!"))
  139. (and (not (string= expected (org-babel-execute-src-block)))
  140. (string= expected
  141. (progn
  142. (sleep-for 0 200)
  143. (goto-char (org-babel-where-is-src-block-result))
  144. (org-babel-read-result)))))))))
  145. (ert-deftest ob-session-async-R-simple-session-async-output ()
  146. (let (ess-ask-for-ess-directory
  147. ess-history-file
  148. (org-babel-temporary-directory "/tmp")
  149. (org-confirm-babel-evaluate nil))
  150. (org-test-with-temp-text
  151. "#+begin_src R :session R :results output :async yes\n Sys.sleep(.1)\n 1:5\n#+end_src\n"
  152. (should (let ((expected "[1] 1 2 3 4 5"))
  153. (and (not (string= expected (org-babel-execute-src-block)))
  154. (string= expected
  155. (progn
  156. (sleep-for 0 200)
  157. (goto-char (org-babel-where-is-src-block-result))
  158. (org-babel-read-result)))))))))
  159. (ert-deftest ob-session-async-R-named-output ()
  160. (let (ess-ask-for-ess-directory
  161. ess-history-file
  162. (org-babel-temporary-directory "/tmp")
  163. org-confirm-babel-evaluate
  164. (src-block "#+begin_src R :async :session R :results output\n 1:5\n#+end_src")
  165. (results-before "\n\n#+NAME: foobar\n#+RESULTS:\n: [1] 1")
  166. (results-after "\n\n#+NAME: foobar\n#+RESULTS:\n: [1] 1 2 3 4 5\n"))
  167. (org-test-with-temp-text
  168. (concat src-block results-before)
  169. (should (progn (org-babel-execute-src-block)
  170. (sleep-for 0 200)
  171. (string= (concat src-block results-after)
  172. (buffer-string)))))))
  173. (ert-deftest ob-session-async-R-named-value ()
  174. (let (ess-ask-for-ess-directory
  175. ess-history-file
  176. org-confirm-babel-evaluate
  177. (org-babel-temporary-directory "/tmp")
  178. (src-block "#+begin_src R :async :session R :results value\n paste(\"Yep!\")\n#+end_src")
  179. (results-before "\n\n#+NAME: foobar\n#+RESULTS:\n: [1] 1")
  180. (results-after "\n\n#+NAME: foobar\n#+RESULTS:\n: Yep!\n"))
  181. (org-test-with-temp-text
  182. (concat src-block results-before)
  183. (should (progn (org-babel-execute-src-block)
  184. (sleep-for 0 200)
  185. (string= (concat src-block results-after)
  186. (buffer-string)))))))
  187. (ert-deftest ob-session-async-R-output-drawer ()
  188. (let (ess-ask-for-ess-directory
  189. ess-history-file
  190. org-confirm-babel-evaluate
  191. (org-babel-temporary-directory "/tmp")
  192. (src-block "#+begin_src R :async :session R :results output drawer\n 1:5\n#+end_src")
  193. (result "\n\n#+RESULTS:\n:results:\n[1] 1 2 3 4 5\n:end:\n"))
  194. (org-test-with-temp-text
  195. src-block
  196. (should (progn (org-babel-execute-src-block)
  197. (sleep-for 0 200)
  198. (string= (concat src-block result)
  199. (buffer-string)))))))
  200. (ert-deftest ob-session-async-R-value-drawer ()
  201. (let (ess-ask-for-ess-directory
  202. ess-history-file
  203. org-confirm-babel-evaluate
  204. (org-babel-temporary-directory "/tmp")
  205. (src-block "#+begin_src R :async :session R :results value drawer\n 1:3\n#+end_src")
  206. (result "\n\n#+RESULTS:\n:results:\n1\n2\n3\n:end:\n"))
  207. (org-test-with-temp-text
  208. src-block
  209. (should (progn (org-babel-execute-src-block)
  210. (sleep-for 0 200)
  211. (string= (concat src-block result)
  212. (buffer-string)))))))
  213. (provide 'test-ob-R)
  214. ;;; test-ob-R.el ends here