test-org-element.el 72 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048
  1. ;;; test-org-element.el --- Tests for org-element.el
  2. ;; Copyright (C) 2012 Nicolas Goaziou
  3. ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
  4. ;; This program is free software; you can redistribute it and/or modify
  5. ;; it under the terms of the GNU General Public License as published by
  6. ;; the Free Software Foundation, either version 3 of the License, or
  7. ;; (at your option) any later version.
  8. ;; This program is distributed in the hope that it will be useful,
  9. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. ;; GNU General Public License for more details.
  12. ;; You should have received a copy of the GNU General Public License
  13. ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. ;;; Commentary:
  15. ;;; Code:
  16. (unless (featurep 'org-element)
  17. (signal 'missing-test-dependency "org-element"))
  18. (defun org-test-parse-and-interpret (text)
  19. "Parse TEXT as Org syntax and interpret it.
  20. Return interpreted string."
  21. (with-temp-buffer
  22. (org-mode)
  23. (insert text)
  24. (org-element-interpret-data (org-element-parse-buffer))))
  25. ;;; Test `org-element-map'
  26. (ert-deftest test-org-element/map ()
  27. "Test `org-element-map'."
  28. ;; Can map to `plain-text' objects.
  29. (should
  30. (= 2
  31. (org-test-with-temp-text "Some text \alpha
  32. #+BEGIN_CENTER
  33. Some other text
  34. #+END_CENTER"
  35. (let ((count 0))
  36. (org-element-map
  37. (org-element-parse-buffer) 'plain-text
  38. (lambda (s) (when (string-match "text" s) (incf count))))
  39. count))))
  40. ;; Applies to secondary strings
  41. (should
  42. (org-element-map '("some " (bold nil "bold") "text") 'bold 'identity))
  43. ;; Enter secondary strings before entering contents.
  44. (should
  45. (equal
  46. "alpha"
  47. (org-element-property
  48. :name
  49. (org-test-with-temp-text "* Some \\alpha headline\n\\beta entity."
  50. (org-element-map (org-element-parse-buffer) 'entity 'identity nil t)))))
  51. ;; Apply NO-RECURSION argument.
  52. (should-not
  53. (org-test-with-temp-text "#+BEGIN_CENTER\n\\alpha\n#+END_CENTER"
  54. (org-element-map
  55. (org-element-parse-buffer) 'entity 'identity nil nil 'center-block))))
  56. ;;; Test Parsers
  57. ;;;; Babel Call
  58. (ert-deftest test-org-element/babel-call-parser ()
  59. "Test `babel-call' parsing."
  60. (should
  61. (equal
  62. (org-test-with-temp-text "#+CALL: test()"
  63. (org-element-map (org-element-parse-buffer) 'babel-call 'identity nil t))
  64. '(babel-call (:begin 1 :end 15 :info ("test()" nil 0) :post-blank 0)))))
  65. ;;;; Bold
  66. (ert-deftest test-org-element/bold-parser ()
  67. "Test `bold' parser."
  68. ;; Regular test.
  69. (should
  70. (equal
  71. (org-test-with-temp-text "*bold*"
  72. (org-element-map (org-element-parse-buffer) 'bold 'identity nil t))
  73. '(bold (:begin 1 :end 7 :contents-begin 2 :contents-end 6 :post-blank 0)
  74. "bold")))
  75. ;; Multi-line markup.
  76. (should
  77. (equal
  78. (org-test-with-temp-text "*first line\nsecond line*"
  79. (org-element-map (org-element-parse-buffer) 'bold 'identity nil t))
  80. '(bold (:begin 1 :end 25 :contents-begin 2 :contents-end 24 :post-blank 0)
  81. "first line\nsecond line"))))
  82. ;;;; Center Block
  83. (ert-deftest test-org-element/center-block-parser ()
  84. "Test `center-block' parser."
  85. ;; Regular test.
  86. (should
  87. (equal
  88. (org-test-with-temp-text "#+BEGIN_CENTER\nText\n#+END_CENTER"
  89. (org-element-map
  90. (org-element-parse-buffer) 'center-block 'identity nil t))
  91. '(center-block
  92. (:begin 1 :end 33 :hiddenp nil :contents-begin 16 :contents-end 21
  93. :post-blank 0)
  94. (paragraph
  95. (:begin 16 :end 21 :contents-begin 16 :contents-end 20 :post-blank 0)
  96. "Text"))))
  97. ;; Test folded block.
  98. (org-test-with-temp-text "#+BEGIN_CENTER\nText\n#+END_CENTER"
  99. (org-cycle)
  100. (should
  101. (org-element-property
  102. :hiddenp
  103. (org-element-map
  104. (org-element-parse-buffer) 'center-block 'identity nil t))))
  105. ;; Ignore incomplete block.
  106. (should-not
  107. (org-test-with-temp-text "#+BEGIN_CENTER"
  108. (org-element-map
  109. (org-element-parse-buffer) 'center-block 'identity nil t))))
  110. ;;;; Clock
  111. (ert-deftest test-org-element/clock-parser ()
  112. "Test `clock' parser."
  113. ;; Running clock.
  114. (should
  115. (equal
  116. (let ((org-clock-string "CLOCK:"))
  117. (org-test-with-temp-text "CLOCK: [2012-01-01 sun. 00:01]"
  118. (org-element-map
  119. (org-element-parse-buffer) 'clock 'identity nil t)))
  120. '(clock
  121. (:status running :value "[2012-01-01 sun. 00:01]" :time nil :begin 1
  122. :end 31 :post-blank 0))))
  123. ;; Closed clock.
  124. (should
  125. (equal
  126. (let ((org-clock-string "CLOCK:"))
  127. (org-test-with-temp-text "
  128. CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01"
  129. (org-element-map
  130. (org-element-parse-buffer) 'clock 'identity nil t)))
  131. '(clock
  132. (:status closed
  133. :value "[2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02]"
  134. :time "0:01" :begin 2 :end 66 :post-blank 0)))))
  135. ;;;; Code
  136. (ert-deftest test-org-element/code-parser ()
  137. "Test `code' parser."
  138. ;; Regular test.
  139. (should
  140. (equal
  141. (org-test-with-temp-text "~code~"
  142. (org-element-map (org-element-parse-buffer) 'code 'identity nil t))
  143. '(code (:value "code" :begin 1 :end 7 :post-blank 0))))
  144. ;; Multi-line markup.
  145. (should
  146. (equal
  147. (org-test-with-temp-text "~first line\nsecond line~"
  148. (org-element-map (org-element-parse-buffer) 'code 'identity nil t))
  149. '(code (:value "first line\nsecond line" :begin 1 :end 25 :post-blank 0)))))
  150. ;;;; Comment
  151. (ert-deftest test-org-element/comment-parser ()
  152. "Test `comment' parser."
  153. ;; Regular comment.
  154. (should
  155. (equal
  156. (org-test-with-temp-text "# Comment"
  157. (org-element-map (org-element-parse-buffer) 'comment 'identity nil t))
  158. '(comment (:begin 1 :end 10 :value "Comment\n" :post-blank 0))))
  159. ;; Inline comment.
  160. (should
  161. (equal
  162. (org-test-with-temp-text "#+ Comment"
  163. (org-element-map (org-element-parse-buffer) 'comment 'identity nil t))
  164. '(comment (:begin 1 :end 11 :value "Comment\n" :post-blank 0))))
  165. ;; Preserve indentation.
  166. (should
  167. (equal
  168. (org-test-with-temp-text "#+ No blank\n#+ One blank"
  169. (org-element-map (org-element-parse-buffer) 'comment 'identity nil t))
  170. '(comment (:begin 1 :end 26 :value "No blank\n One blank\n" :post-blank 0))))
  171. ;; Comment with blank lines.
  172. (should
  173. (equal
  174. (org-test-with-temp-text "#+ First part\n#+ \n#+\n#+ Second part"
  175. (org-element-map (org-element-parse-buffer) 'comment 'identity nil t))
  176. '(comment
  177. (:begin 1 :end 36 :value "First part\n\n\nSecond part\n"
  178. :post-blank 0)))))
  179. ;;;; Comment Block
  180. (ert-deftest test-org-element/comment-block-parser ()
  181. "Test `comment-block' parser."
  182. ;; Regular tests.
  183. (should
  184. (equal
  185. (org-test-with-temp-text "#+BEGIN_COMMENT\nText\n#+END_COMMENT"
  186. (org-element-map
  187. (org-element-parse-buffer) 'comment-block 'identity nil t))
  188. '(comment-block (:begin 1 :end 35 :value "Text\n" :hiddenp nil
  189. :post-blank 0))))
  190. ;; Test folded block.
  191. (org-test-with-temp-text "#+BEGIN_COMMENT\nText\n#+END_COMMENT"
  192. (org-cycle)
  193. (should
  194. (org-element-property
  195. :hiddenp
  196. (org-element-map
  197. (org-element-parse-buffer) 'comment-block 'identity nil t))))
  198. ;; Ignore incomplete block.
  199. (should-not
  200. (org-test-with-temp-text "#+BEGIN_COMMENT"
  201. (org-element-map
  202. (org-element-parse-buffer) 'comment-block 'identity nil t))))
  203. ;;;; Drawer
  204. (ert-deftest test-org-element/drawer-parser ()
  205. "Test `drawer' parser."
  206. ;; Regular test.
  207. (should
  208. (equal
  209. (let ((org-drawers '("TEST")))
  210. (org-test-with-temp-text ":TEST:\nText\n:END:"
  211. (org-element-map (org-element-parse-buffer) 'drawer 'identity nil t)))
  212. '(drawer
  213. (:begin 1 :end 18 :drawer-name "TEST" :hiddenp nil :contents-begin 8
  214. :contents-end 13 :post-blank 0)
  215. (paragraph
  216. (:begin 8 :end 13 :contents-begin 8 :contents-end 12 :post-blank 0)
  217. "Text"))))
  218. ;; Do not mix regular drawers and property drawers.
  219. (should-not
  220. (let ((org-drawers '("PROPERTIES")))
  221. (org-test-with-temp-text ":PROPERTIES:\n:prop: value\n:END:"
  222. (org-element-map
  223. (org-element-parse-buffer) 'drawer 'identity nil t))))
  224. ;; Ignore incomplete drawer.
  225. (should-not
  226. (let ((org-drawers '("TEST")))
  227. (org-test-with-temp-text ":TEST:"
  228. (org-element-map
  229. (org-element-parse-buffer) 'drawer 'identity nil t)))))
  230. ;;;; Dynamic Block
  231. (ert-deftest test-org-element/dynamic-block-parser ()
  232. "Test `dynamic-block' parser."
  233. ;; Regular test.
  234. (should
  235. (equal
  236. (org-test-with-temp-text
  237. "#+BEGIN: myblock :param1 val1 :param2 val2\nText\n#+END:"
  238. (org-element-map
  239. (org-element-parse-buffer) 'dynamic-block 'identity nil t))
  240. '(dynamic-block
  241. (:begin 1 :end 55 :block-name "myblock"
  242. :arguments ":param1 val1 :param2 val2" :hiddenp nil
  243. :contents-begin 44 :contents-end 49 :post-blank 0)
  244. (paragraph
  245. (:begin 44 :end 49 :contents-begin 44 :contents-end 48 :post-blank 0)
  246. "Text"))))
  247. ;; Folded view
  248. (org-test-with-temp-text
  249. "#+BEGIN: myblock :param1 val1 :param2 val2\nText\n#+END:"
  250. (org-cycle)
  251. (should
  252. (org-element-property
  253. :hiddenp
  254. (org-element-map
  255. (org-element-parse-buffer) 'dynamic-block 'identity nil t))))
  256. ;; Ignore incomplete block.
  257. (should-not
  258. (org-test-with-temp-text "#+BEGIN: myblock :param1 val1 :param2 val2"
  259. (org-element-map
  260. (org-element-parse-buffer) 'dynamic-block 'identity nil t))))
  261. ;;;; Entity
  262. (ert-deftest test-org-element/entity-parser ()
  263. "Test `entity' parser."
  264. ;; Without brackets.
  265. (should
  266. (equal
  267. (org-test-with-temp-text "\\sin"
  268. (org-element-map (org-element-parse-buffer) 'entity 'identity nil t))
  269. '(entity
  270. (:name "sin" :latex "\\sin" :latex-math-p t :html "sin"
  271. :ascii "sin" :latin1 "sin" :utf-8 "sin" :begin 1 :end 5
  272. :use-brackets-p nil :post-blank 0))))
  273. ;; With brackets.
  274. (should
  275. (org-element-property
  276. :use-brackets-p
  277. (org-test-with-temp-text "\\alpha{}text"
  278. (org-element-map (org-element-parse-buffer) 'entity 'identity nil t))))
  279. ;; User-defined entity.
  280. (should
  281. (equal
  282. (org-element-property
  283. :name
  284. (let ((org-entities-user
  285. '(("test" "test" nil "test" "test" "test" "test"))))
  286. (org-test-with-temp-text "\\test"
  287. (org-element-map (org-element-parse-buffer) 'entity 'identity nil t))))
  288. "test")))
  289. ;;;; Example Block
  290. (ert-deftest test-org-element/example-block-parser ()
  291. "Test `example-block' parser."
  292. ;; Regular tests.
  293. (should
  294. (equal
  295. (org-test-with-temp-text "#+BEGIN_EXAMPLE\nText\n#+END_EXAMPLE"
  296. (org-element-map
  297. (org-element-parse-buffer) 'example-block 'identity nil t))
  298. '(example-block
  299. (:begin 1 :end 35 :value "Text\n" :switches nil
  300. :number-lines nil :preserve-indent nil :retain-labels t
  301. :use-labels t :label-fmt nil :hiddenp nil :post-blank 0))))
  302. ;; Test folded block.
  303. (org-test-with-temp-text "#+BEGIN_EXAMPLE\nText\n#+END_EXAMPLE"
  304. (org-cycle)
  305. (should
  306. (org-element-property
  307. :hiddenp
  308. (org-element-map
  309. (org-element-parse-buffer) 'example-block 'identity nil t))))
  310. ;; Ignore incomplete block.
  311. (should-not
  312. (org-test-with-temp-text "#+BEGIN_EXAMPLE"
  313. (org-element-map
  314. (org-element-parse-buffer) 'example-block 'identity nil t))))
  315. (ert-deftest test-org-element/block-switches ()
  316. "Test `example-block' and `src-block' switches parsing."
  317. (let ((org-coderef-label-format "(ref:%s)"))
  318. ;; 1. Test "-i" switch.
  319. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp\n(+ 1 1)\n#+END_SRC"
  320. (let ((element (org-element-current-element)))
  321. (should-not (org-element-property :preserve-indent element))))
  322. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp -i\n(+ 1 1)\n#+END_SRC"
  323. (let ((element (org-element-current-element)))
  324. (should (org-element-property :preserve-indent element))))
  325. (org-test-with-temp-text "#+BEGIN_EXAMPLE\nText.\n#+END_EXAMPLE"
  326. (let ((element (org-element-current-element)))
  327. (should-not (org-element-property :preserve-indent element))))
  328. (org-test-with-temp-text "#+BEGIN_EXAMPLE -i\nText.\n#+END_EXAMPLE"
  329. (let ((element (org-element-current-element)))
  330. (should (org-element-property :preserve-indent element))))
  331. ;; 2. "-n -r -k" combination should number lines, retain labels but
  332. ;; not use them in coderefs.
  333. (org-test-with-temp-text "#+BEGIN_EXAMPLE -n -r -k\nText.\n#+END_EXAMPLE"
  334. (let ((element (org-element-current-element)))
  335. (should (and (org-element-property :number-lines element)
  336. (org-element-property :retain-labels element)
  337. (not (org-element-property :use-labels element))))))
  338. (org-test-with-temp-text
  339. "#+BEGIN_SRC emacs-lisp -n -r -k\n(+ 1 1)\n#+END_SRC"
  340. (let ((element (org-element-current-element)))
  341. (should (and (org-element-property :number-lines element)
  342. (org-element-property :retain-labels element)
  343. (not (org-element-property :use-labels element))))))
  344. ;; 3. "-n -r" combination should number-lines remove labels and not
  345. ;; use them in coderefs.
  346. (org-test-with-temp-text "#+BEGIN_EXAMPLE -n -r\nText.\n#+END_EXAMPLE"
  347. (let ((element (org-element-current-element)))
  348. (should (and (org-element-property :number-lines element)
  349. (not (org-element-property :retain-labels element))
  350. (not (org-element-property :use-labels element))))))
  351. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp -n -r\n(+ 1 1)\n#+END_SRC"
  352. (let ((element (org-element-current-element)))
  353. (should (and (org-element-property :number-lines element)
  354. (not (org-element-property :retain-labels element))
  355. (not (org-element-property :use-labels element))))))
  356. ;; 4. "-n" or "+n" should number lines, retain labels and use them
  357. ;; in coderefs.
  358. (org-test-with-temp-text "#+BEGIN_EXAMPLE -n\nText.\n#+END_EXAMPLE"
  359. (let ((element (org-element-current-element)))
  360. (should (and (org-element-property :number-lines element)
  361. (org-element-property :retain-labels element)
  362. (org-element-property :use-labels element)))))
  363. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp -n\n(+ 1 1)\n#+END_SRC"
  364. (let ((element (org-element-current-element)))
  365. (should (and (org-element-property :number-lines element)
  366. (org-element-property :retain-labels element)
  367. (org-element-property :use-labels element)))))
  368. (org-test-with-temp-text "#+BEGIN_EXAMPLE +n\nText.\n#+END_EXAMPLE"
  369. (let ((element (org-element-current-element)))
  370. (should (and (org-element-property :number-lines element)
  371. (org-element-property :retain-labels element)
  372. (org-element-property :use-labels element)))))
  373. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp +n\n(+ 1 1)\n#+END_SRC"
  374. (let ((element (org-element-current-element)))
  375. (should (and (org-element-property :number-lines element)
  376. (org-element-property :retain-labels element)
  377. (org-element-property :use-labels element)))))
  378. ;; 5. No switch should not number lines, but retain labels and use
  379. ;; them in coderefs.
  380. (org-test-with-temp-text "#+BEGIN_EXAMPLE\nText.\n#+END_EXAMPLE"
  381. (let ((element (org-element-current-element)))
  382. (should (and (not (org-element-property :number-lines element))
  383. (org-element-property :retain-labels element)
  384. (org-element-property :use-labels element)))))
  385. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp\n(+ 1 1)\n#+END_SRC"
  386. (let ((element (org-element-current-element)))
  387. (should (and (not (org-element-property :number-lines element))
  388. (org-element-property :retain-labels element)
  389. (org-element-property :use-labels element)))))
  390. ;; 6. "-r" switch only: do not number lines, remove labels, and
  391. ;; don't use labels in coderefs.
  392. (org-test-with-temp-text "#+BEGIN_EXAMPLE -r\nText.\n#+END_EXAMPLE"
  393. (let ((element (org-element-current-element)))
  394. (should (and (not (org-element-property :number-lines element))
  395. (not (org-element-property :retain-labels element))
  396. (not (org-element-property :use-labels element))))))
  397. (org-test-with-temp-text "#+BEGIN_SRC emacs-lisp -r\n(+ 1 1)\n#+END_SRC"
  398. (let ((element (org-element-current-element)))
  399. (should (and (not (org-element-property :number-lines element))
  400. (not (org-element-property :retain-labels element))
  401. (not (org-element-property :use-labels element))))))
  402. ;; 7. Recognize coderefs with user-defined syntax.
  403. (org-test-with-temp-text
  404. "#+BEGIN_EXAMPLE -l \"[ref:%s]\"\nText [ref:text]\n#+END_EXAMPLE"
  405. (let ((element (org-element-current-element)))
  406. (should
  407. (equal (org-element-property :label-fmt element) "[ref:%s]"))))
  408. (org-test-with-temp-text
  409. "#+BEGIN_SRC emacs-lisp -l \"[ref:%s]\"\n(+ 1 1) [ref:text]\n#+END_SRC"
  410. (let ((element (org-element-current-element)))
  411. (should
  412. (equal (org-element-property :label-fmt element) "[ref:%s]"))))))
  413. ;;;; Export Block
  414. (ert-deftest test-org-element/export-block-parser ()
  415. "Test `export-block' parser."
  416. ;; Regular tests.
  417. (should
  418. (equal
  419. (org-test-with-temp-text "#+BEGIN_LATEX\nText\n#+END_LATEX"
  420. (org-element-map
  421. (org-element-parse-buffer) 'export-block 'identity nil t))
  422. '(export-block
  423. (:begin 1 :end 31 :type "LATEX" :value "Text\n" :hiddenp nil
  424. :post-blank 0))))
  425. ;; Test folded block.
  426. (org-test-with-temp-text "#+BEGIN_LATEX\nText\n#+END_LATEX"
  427. (org-cycle)
  428. (should
  429. (org-element-property
  430. :hiddenp
  431. (org-element-map
  432. (org-element-parse-buffer) 'export-block 'identity nil t))))
  433. ;; Ignore incomplete block.
  434. (should-not
  435. (org-test-with-temp-text "#+BEGIN_LATEX"
  436. (org-element-map
  437. (org-element-parse-buffer) 'export-block 'identity nil t))))
  438. ;;;; Export Snippet
  439. (ert-deftest test-org-element/export-snippet-parser ()
  440. "Test `export-snippet' parser."
  441. (should
  442. (equal
  443. (org-test-with-temp-text "<back-end@contents>"
  444. (org-element-map
  445. (org-element-parse-buffer) 'export-snippet 'identity nil t))
  446. '(export-snippet
  447. (:back-end "back-end"
  448. :value "contents" :begin 1 :end 20 :post-blank 0)))))
  449. ;;;; Fixed Width
  450. (ert-deftest test-org-element/fixed-width ()
  451. "Test fixed-width area parsing."
  452. ;; Preserve indentation.
  453. (should
  454. (equal
  455. (org-test-with-temp-text ": no blank\n: one blank"
  456. (org-element-map (org-element-parse-buffer) 'fixed-width 'identity nil t))
  457. '(fixed-width
  458. (:begin 1 :end 24 :value "no blank\n one blank\n" :post-blank 0))))
  459. ;; Fixed-width with empty lines.
  460. (should
  461. (equal
  462. (org-test-with-temp-text ": first part\n:\n: \n: second part"
  463. (org-element-map (org-element-parse-buffer) 'fixed-width 'identity nil t))
  464. '(fixed-width
  465. (:begin 1 :end 32 :value "first part\n\n\nsecond part\n" :post-blank 0))))
  466. ;; Parse indented fixed-width markers.
  467. (should
  468. (equal
  469. (org-test-with-temp-text "Text\n : no blank\n : one blank"
  470. (org-element-map (org-element-parse-buffer) 'fixed-width 'identity nil t))
  471. '(fixed-width
  472. (:begin 6 :end 33 :value "no blank\n one blank\n" :post-blank 0))))
  473. ;; Distinguish fixed-width areas within a list and outside of it.
  474. (should
  475. (= 2
  476. (length
  477. (org-test-with-temp-text "
  478. - Item
  479. : fixed-width inside
  480. : fixed-width outside"
  481. (org-element-map
  482. (org-element-parse-buffer) 'fixed-width 'identity))))))
  483. ;;;; Footnote Definition.
  484. (ert-deftest test-org-element/footnote-definition-parser ()
  485. "Test `footnote-definition' parser."
  486. (should
  487. (equal
  488. (org-test-with-temp-text "[fn:1] Definition"
  489. (org-element-map
  490. (org-element-parse-buffer) 'footnote-definition 'identity nil t))
  491. '(footnote-definition
  492. (:label "fn:1" :begin 1 :end 18 :contents-begin 8 :contents-end 18
  493. :post-blank 0)
  494. (paragraph
  495. (:begin 8 :end 18 :contents-begin 8 :contents-end 18 :post-blank 0)
  496. "Definition"))))
  497. ;; Footnote with more contents
  498. (should
  499. (= 28
  500. (org-element-property
  501. :end
  502. (org-test-with-temp-text "[fn:1] Definition\n| a | b |"
  503. (org-element-map
  504. (org-element-parse-buffer)
  505. 'footnote-definition 'identity nil t))))))
  506. ;;;; Footnotes Reference
  507. (ert-deftest test-org-element/footnote-reference-parser ()
  508. "Test `footnote-reference' parser."
  509. ;; 1. Parse a standard reference.
  510. (org-test-with-temp-text "[fn:label]"
  511. (should (equal (org-element-footnote-reference-parser)
  512. '(footnote-reference
  513. (:label "fn:label" :type standard :inline-definition nil
  514. :begin 1 :end 11 :post-blank 0)))))
  515. ;; 2. Parse a normalized reference.
  516. (org-test-with-temp-text "[1]"
  517. (should (equal (org-element-footnote-reference-parser)
  518. '(footnote-reference
  519. (:label "1" :type standard :inline-definition nil
  520. :begin 1 :end 4 :post-blank 0)))))
  521. ;; 3. Parse an inline reference.
  522. (org-test-with-temp-text "[fn:test:def]"
  523. (should (equal (org-element-footnote-reference-parser)
  524. '(footnote-reference
  525. (:label "fn:test" :type inline :inline-definition ("def")
  526. :begin 1 :end 14 :post-blank 0)))))
  527. ;; 4. Parse an anonymous reference.
  528. (org-test-with-temp-text "[fn::def]"
  529. (should (equal (org-element-footnote-reference-parser)
  530. '(footnote-reference
  531. (:label nil :type inline :inline-definition ("def")
  532. :begin 1 :end 10 :post-blank 0)))))
  533. ;; 5. Parse nested footnotes.
  534. (org-test-with-temp-text "[fn::def [fn:label]]"
  535. (should
  536. (equal
  537. (org-element-footnote-reference-parser)
  538. '(footnote-reference
  539. (:label nil :type inline
  540. :inline-definition
  541. ("def "
  542. (footnote-reference
  543. (:label "fn:label" :type standard :inline-definition nil
  544. :begin 5 :end 15 :post-blank 0)))
  545. :begin 1 :end 21 :post-blank 0)))))
  546. ;; 6. Parse adjacent footnotes.
  547. (org-test-with-temp-text "[fn:label1][fn:label2]"
  548. (should
  549. (equal
  550. (org-element-footnote-reference-parser)
  551. '(footnote-reference
  552. (:label "fn:label1" :type standard :inline-definition nil :begin 1
  553. :end 12 :post-blank 0)))))
  554. ;; 7. Only properly closed footnotes are recognized as such.
  555. (org-test-with-temp-text "Text [fn:label"
  556. (should-not
  557. (org-element-map
  558. (org-element-parse-buffer) 'footnote-reference 'identity))))
  559. ;;;; Headlines
  560. (ert-deftest test-org-element/headline-quote-keyword ()
  561. "Test QUOTE keyword recognition."
  562. ;; Reference test.
  563. (org-test-with-temp-text "* Headline"
  564. (let ((org-quote-string "QUOTE"))
  565. (should-not (org-element-property :quotedp (org-element-at-point)))))
  566. ;; Standard position.
  567. (org-test-with-temp-text "* QUOTE Headline"
  568. (let ((org-quote-string "QUOTE"))
  569. (let ((headline (org-element-at-point)))
  570. (should (org-element-property :quotedp headline))
  571. ;; Test removal from raw value.
  572. (should (equal (org-element-property :raw-value headline) "Headline"))))
  573. ;; Case sensitivity.
  574. (let ((org-quote-string "Quote"))
  575. (should-not (org-element-property :quotedp (org-element-at-point)))))
  576. ;; With another keyword.
  577. (org-test-with-temp-text "* TODO QUOTE Headline"
  578. (let ((org-quote-string "QUOTE")
  579. (org-todo-keywords '((sequence "TODO" "DONE"))))
  580. (should (org-element-property :quotedp (org-element-at-point))))))
  581. (ert-deftest test-org-element/headline-comment-keyword ()
  582. "Test COMMENT keyword recognition."
  583. ;; Reference test.
  584. (org-test-with-temp-text "* Headline"
  585. (let ((org-comment-string "COMMENT"))
  586. (should-not (org-element-property :commentedp (org-element-at-point)))))
  587. ;; Standard position.
  588. (org-test-with-temp-text "* COMMENT Headline"
  589. (let ((org-comment-string "COMMENT"))
  590. (let ((headline (org-element-at-point)))
  591. (should (org-element-property :commentedp headline))
  592. ;; Test removal from raw value.
  593. (should (equal (org-element-property :raw-value headline) "Headline"))))
  594. ;; Case sensitivity.
  595. (let ((org-comment-string "Comment"))
  596. (should-not (org-element-property :commentedp (org-element-at-point)))))
  597. ;; With another keyword.
  598. (org-test-with-temp-text "* TODO COMMENT Headline"
  599. (let ((org-comment-string "COMMENT")
  600. (org-todo-keywords '((sequence "TODO" "DONE"))))
  601. (should (org-element-property :commentedp (org-element-at-point))))))
  602. (ert-deftest test-org-element/headline-archive-tag ()
  603. "Test ARCHIVE tag recognition."
  604. ;; Reference test.
  605. (org-test-with-temp-text "* Headline"
  606. (let ((org-archive-tag "ARCHIVE"))
  607. (should-not (org-element-property :archivedp (org-element-at-point)))))
  608. ;; Single tag.
  609. (org-test-with-temp-text "* Headline :ARCHIVE:"
  610. (let ((org-archive-tag "ARCHIVE"))
  611. (let ((headline (org-element-at-point)))
  612. (should (org-element-property :archivedp headline))
  613. ;; Test tag removal.
  614. (should-not (org-element-property :tags headline))))
  615. (let ((org-archive-tag "Archive"))
  616. (should-not (org-element-property :archivedp (org-element-at-point)))))
  617. ;; Multiple tags.
  618. (org-test-with-temp-text "* Headline :test:ARCHIVE:"
  619. (let ((org-archive-tag "ARCHIVE"))
  620. (let ((headline (org-element-at-point)))
  621. (should (org-element-property :archivedp headline))
  622. ;; Test tag removal.
  623. (should (equal (org-element-property :tags headline) '("test")))))))
  624. ;;;; Inlinetask.
  625. (ert-deftest test-org-element/inlinetask-parser ()
  626. "Test `inlinetask' parser."
  627. (when (featurep 'org-inlinetask)
  628. (let ((org-inlinetask-min-level 15))
  629. ;; 1. Regular inlinetask.
  630. (should
  631. (equal
  632. (org-test-with-temp-text
  633. "*************** Task\nTest\n*************** END"
  634. (org-element-map
  635. (org-element-parse-buffer) 'inlinetask 'identity nil t))
  636. '(inlinetask
  637. (:title ("Task") :begin 1 :end 46 :hiddenp nil :contents-begin 22
  638. :contents-end 27 :level 15 :priority nil :tags nil
  639. :todo-keyword nil :todo-type nil :scheduled nil :deadline nil
  640. :timestamp nil :clock nil :post-blank 0 :category "???")
  641. (paragraph
  642. (:begin 22 :end 27 :contents-begin 22 :contents-end 26 :post-blank 0)
  643. "Test"))))
  644. ;; 2. Degenerate inlinetask.
  645. (should
  646. (equal
  647. (org-test-with-temp-text
  648. "*************** Task"
  649. (org-element-map
  650. (org-element-parse-buffer) 'inlinetask 'identity nil t))
  651. '(inlinetask
  652. (:title ("Task") :begin 1 :end 21 :hiddenp nil :contents-begin 21
  653. :contents-end 21 :level 15 :priority nil :tags nil
  654. :todo-keyword nil :todo-type nil :scheduled nil :deadline nil
  655. :timestamp nil :clock nil :post-blank 0 :category nil))))
  656. ;; TODO keyword.
  657. (should
  658. (equal
  659. "TODO"
  660. (let ((org-todo-keywords '((sequence "TODO" "DONE"))))
  661. (org-test-with-temp-text "*************** TODO Task"
  662. (org-element-property
  663. :todo-keyword
  664. (org-element-map
  665. (org-element-parse-buffer) 'inlinetask 'identity nil t))))))
  666. ;; Planning info.
  667. (should
  668. (equal
  669. "2012-03-29 thu."
  670. (org-test-with-temp-text "
  671. *************** Task
  672. DEADLINE: <2012-03-29 thu.>"
  673. (org-element-property
  674. :deadline
  675. (org-element-map
  676. (org-element-parse-buffer) 'inlinetask 'identity nil t)))))
  677. ;; Priority.
  678. (should
  679. (equal
  680. ?A
  681. (org-test-with-temp-text "
  682. *************** [#A] Task"
  683. (org-element-property
  684. :priority
  685. (org-element-map
  686. (org-element-parse-buffer) 'inlinetask 'identity nil t)))))
  687. ;; Tags.
  688. (should
  689. (equal
  690. '("test")
  691. (org-test-with-temp-text "
  692. *************** Task :test:"
  693. (org-element-property
  694. :tags
  695. (org-element-map
  696. (org-element-parse-buffer) 'inlinetask 'identity nil t))))))))
  697. ;;;; Item.
  698. (ert-deftest test-org-element/item-parser ()
  699. "Test `item' parser."
  700. ;; Standard test.
  701. (should
  702. (equal
  703. (org-test-with-temp-text "- item"
  704. (org-element-map (org-element-parse-buffer) 'item 'identity nil t))
  705. '(item
  706. (:bullet "- " :begin 1 :end 7 :contents-begin 3 :contents-end 7
  707. :checkbox nil :counter nil :tag nil :hiddenp nil
  708. :structure ((1 0 "- " nil nil nil 7))
  709. :post-blank 0)
  710. (paragraph
  711. (:begin 3 :end 7 :contents-begin 3 :contents-end 7 :post-blank 0)
  712. "item"))))
  713. ;; Counter.
  714. (should
  715. (= 6
  716. (org-element-property
  717. :counter
  718. (org-test-with-temp-text "6. [@6] item"
  719. (org-element-map (org-element-parse-buffer) 'item 'identity nil t)))))
  720. ;; Tag
  721. (should
  722. (equal
  723. '("tag")
  724. (org-element-property
  725. :tag
  726. (org-test-with-temp-text "- tag :: description"
  727. (org-element-map (org-element-parse-buffer) 'item 'identity nil t)))))
  728. ;; Check-boxes
  729. (should
  730. (equal
  731. '(trans on off)
  732. (org-test-with-temp-text "
  733. - [-] item 1
  734. - [X] item 1.1
  735. - [ ] item 1.2"
  736. (org-element-map
  737. (org-element-parse-buffer) 'item
  738. (lambda (item) (org-element-property :checkbox item))))))
  739. ;; Folded state.
  740. (org-test-with-temp-text "* Headline
  741. - item
  742. paragraph below"
  743. (forward-line)
  744. (let ((org-cycle-include-plain-lists t)) (org-cycle))
  745. (should
  746. (org-element-property
  747. :hiddenp
  748. (org-element-map (org-element-parse-buffer) 'item 'identity nil t)))))
  749. ;;;; Link
  750. (ert-deftest test-org-element/link-parser ()
  751. "Test `link' parser."
  752. ;; 1. Radio target.
  753. (should
  754. (equal (org-test-with-temp-text "A radio link"
  755. (org-element-map
  756. (let ((org-target-link-regexp "radio")) (org-element-parse-buffer))
  757. 'link 'identity nil t))
  758. '(link (:type "radio" :path "radio" :raw-link "radio" :begin 3 :end 9
  759. :contents-begin nil :contents-end nil :post-blank 1))))
  760. ;; 2. Standard link.
  761. ;;
  762. ;; 2.1. With description.
  763. (should
  764. (equal (org-test-with-temp-text "[[http://orgmode.org][Orgmode.org]]"
  765. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  766. '(link (:type "http" :path "//orgmode.org"
  767. :raw-link "http://orgmode.org" :begin 1 :end 36
  768. :contents-begin 23 :contents-end 34 :post-blank 0)
  769. "Orgmode.org")))
  770. ;; 2.2. Without description.
  771. (should
  772. (equal (org-test-with-temp-text "[[http://orgmode.org]]"
  773. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  774. '(link (:type "http" :path "//orgmode.org"
  775. :raw-link "http://orgmode.org" :begin 1 :end 23
  776. :contents-begin nil :contents-end nil :post-blank 0))))
  777. ;; 2.3. With expansion.
  778. (should
  779. (equal (org-test-with-temp-text "[[Org:worg]]"
  780. (let ((org-link-abbrev-alist '(("Org" . "http://orgmode.org/"))))
  781. (org-element-map
  782. (org-element-parse-buffer) 'link 'identity nil t)))
  783. '(link (:type "http" :path "//orgmode.org/worg" :raw-link "Org:worg"
  784. :begin 1 :end 13 :contents-begin nil :contents-end nil
  785. :post-blank 0))))
  786. ;; 2.4. With translation.
  787. (should
  788. (equal (org-test-with-temp-text "[[http://orgmode.org]]"
  789. (flet ((link-translate (type path) (cons type "127.0.0.1")))
  790. (let ((org-link-translation-function 'link-translate))
  791. (org-element-map
  792. (org-element-parse-buffer) 'link 'identity nil t))))
  793. '(link (:type "http" :path "127.0.0.1" :raw-link "http://orgmode.org"
  794. :begin 1 :end 23 :contents-begin nil :contents-end nil
  795. :post-blank 0))))
  796. ;; 2.5. Id link.
  797. (should
  798. (equal (org-test-with-temp-text "[[id:aaaa]]"
  799. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  800. '(link (:type "id" :path "aaaa" :raw-link "id:aaaa" :begin 1 :end 12
  801. :contents-begin nil :contents-end nil :post-blank 0))))
  802. ;; 2.6. Custom-id link.
  803. (should
  804. (equal (org-test-with-temp-text "[[#some-id]]"
  805. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  806. '(link (:type "custom-id" :path "some-id" :raw-link "#some-id"
  807. :begin 1 :end 13 :contents-begin nil :contents-end nil
  808. :post-blank 0))))
  809. ;; 2.7 Coderef link.
  810. (should
  811. (equal (org-test-with-temp-text "[[(reference)]]"
  812. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  813. '(link (:type "coderef" :path "reference" :raw-link "(reference)"
  814. :begin 1 :end 16 :contents-begin nil :contents-end nil
  815. :post-blank 0))))
  816. ;; 2.8 Fuzzy link.
  817. (should
  818. (equal (org-test-with-temp-text "[[target-or-title]]"
  819. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  820. '(link (:type "fuzzy" :path "target-or-title"
  821. :raw-link "target-or-title" :begin 1 :end 20
  822. :contents-begin nil :contents-end nil :post-blank 0))))
  823. ;; 3. Plain link.
  824. (should
  825. (equal (org-test-with-temp-text "A link: http://orgmode.org"
  826. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  827. '(link (:type "http" :path "//orgmode.org"
  828. :raw-link "http://orgmode.org" :begin 9 :end 27
  829. :contents-begin nil :contents-end nil :post-blank 0))))
  830. ;; 4. Angular link.
  831. (should
  832. (equal (org-test-with-temp-text "A link: <http://orgmode.org>"
  833. (org-element-map (org-element-parse-buffer) 'link 'identity nil t))
  834. '(link (:type "http" :path "//orgmode.org"
  835. :raw-link "http://orgmode.org" :begin 9 :end 29
  836. :contents-begin nil :contents-end nil :post-blank 0)))))
  837. ;;;; Plain List.
  838. (ert-deftest test-org-element/plain-list-parser ()
  839. "Test `plain-list' parser."
  840. (should
  841. (equal
  842. (org-test-with-temp-text "- item"
  843. (org-element-map (org-element-parse-buffer) 'plain-list 'identity nil t))
  844. '(plain-list
  845. (:type unordered :begin 1 :end 7 :contents-begin 1 :contents-end 7
  846. :structure ((1 0 "- " nil nil nil 7)) :post-blank 0)
  847. (item
  848. (:bullet "- " :begin 1 :end 7 :contents-begin 3 :contents-end 7
  849. :checkbox nil :counter nil :tag nil :hiddenp nil
  850. :structure ((1 0 "- " nil nil nil 7)) :post-blank 0)
  851. (paragraph
  852. (:begin 3 :end 7 :contents-begin 3 :contents-end 7 :post-blank 0)
  853. "item")))))
  854. ;; Blank lines after the list only belong to outer plain list.
  855. (org-test-with-temp-text "
  856. - outer
  857. - inner
  858. Outside list"
  859. (let ((endings (org-element-map
  860. (org-element-parse-buffer) 'plain-list
  861. (lambda (pl) (org-element-property :end pl)))))
  862. ;; Move to ending of outer list.
  863. (goto-char (car endings))
  864. (should (looking-at "Outside list"))
  865. ;; Move to ending of inner list.
  866. (goto-char (nth 1 endings))
  867. (should (looking-at "^$")))))
  868. ;;;; Src Block.
  869. (ert-deftest test-org-element/src-block-parser ()
  870. "Test `src-block' parser."
  871. ;; Regular tests.
  872. (should
  873. (equal
  874. (org-test-with-temp-text "#+BEGIN_SRC\nText\n#+END_SRC"
  875. (org-element-map
  876. (org-element-parse-buffer) 'src-block 'identity nil t))
  877. '(src-block
  878. (:language nil :switches nil :parameters nil :begin 1 :end 27
  879. :number-lines nil :preserve-indent nil :retain-labels t
  880. :use-labels t :label-fmt nil :hiddenp nil :value "Text\n"
  881. :post-blank 0))))
  882. ;; Test folded block.
  883. (org-test-with-temp-text "#+BEGIN_SRC\nText\n#+END_SRC"
  884. (org-cycle)
  885. (should
  886. (org-element-property
  887. :hiddenp
  888. (org-element-map
  889. (org-element-parse-buffer) 'src-block 'identity nil t))))
  890. ;; Ignore incomplete block.
  891. (should-not
  892. (org-test-with-temp-text "#+BEGIN_SRC"
  893. (org-element-map
  894. (org-element-parse-buffer) 'src-block 'identity nil t))))
  895. ;;;; Quote Block
  896. (ert-deftest test-org-element/quote-block-parser ()
  897. "Test `quote-block' parser."
  898. ;; Regular test.
  899. (should
  900. (equal
  901. (org-test-with-temp-text "#+BEGIN_QUOTE\nText\n#+END_QUOTE"
  902. (org-element-map
  903. (org-element-parse-buffer) 'quote-block 'identity nil t))
  904. '(quote-block
  905. (:begin 1 :end 31 :hiddenp nil :contents-begin 15 :contents-end 20
  906. :post-blank 0)
  907. (paragraph
  908. (:begin 15 :end 20 :contents-begin 15 :contents-end 19 :post-blank 0)
  909. "Text"))))
  910. ;; Test folded block.
  911. (org-test-with-temp-text "#+BEGIN_QUOTE\nText\n#+END_QUOTE"
  912. (org-cycle)
  913. (should
  914. (org-element-property
  915. :hiddenp
  916. (org-element-map
  917. (org-element-parse-buffer) 'quote-block 'identity nil t))))
  918. ;; Ignore incomplete block.
  919. (should-not
  920. (org-test-with-temp-text "#+BEGIN_QUOTE"
  921. (org-element-map
  922. (org-element-parse-buffer) 'quote-block 'identity nil t))))
  923. ;;;; Section
  924. (ert-deftest test-org-element/section-parser ()
  925. "Test `section' parser."
  926. ;; Standard test.
  927. (should
  928. (equal
  929. (org-test-with-temp-text "* Headline\nText"
  930. (org-element-map (org-element-parse-buffer) 'section 'identity nil t))
  931. '(section
  932. (:begin 12 :end 16 :contents-begin 12 :contents-end 16 :post-blank 0)
  933. (paragraph
  934. (:begin 12 :end 16 :contents-begin 12 :contents-end 16 :post-blank 0)
  935. "Text"))))
  936. ;; There's a section before the first headline.
  937. (should
  938. (org-test-with-temp-text "Text"
  939. (org-element-map (org-element-parse-buffer) 'section 'identity)))
  940. ;; A section cannot be empty.
  941. (should-not
  942. (org-test-with-temp-text "* Headline 1\n* Headline 2"
  943. (org-element-map (org-element-parse-buffer) 'section 'identity))))
  944. ;;;; Special Block
  945. (ert-deftest test-org-element/special-block-parser ()
  946. "Test `special-block' parser."
  947. ;; Regular test.
  948. (should
  949. (equal
  950. (org-test-with-temp-text "#+BEGIN_SPECIAL\nText\n#+END_SPECIAL"
  951. (org-element-map
  952. (org-element-parse-buffer) 'special-block 'identity nil t))
  953. '(special-block
  954. (:type "SPECIAL" :begin 1 :end 35 :hiddenp nil :contents-begin 17
  955. :contents-end 22 :post-blank 0)
  956. (paragraph
  957. (:begin 17 :end 22 :contents-begin 17 :contents-end 21 :post-blank 0)
  958. "Text"))))
  959. ;; Test folded block.
  960. (org-test-with-temp-text "#+BEGIN_SPECIAL\nText\n#+END_SPECIAL"
  961. (org-cycle)
  962. (should
  963. (org-element-property
  964. :hiddenp
  965. (org-element-map
  966. (org-element-parse-buffer) 'special-block 'identity nil t))))
  967. ;; Ignore incomplete block.
  968. (should-not
  969. (org-test-with-temp-text "#+BEGIN_SPECIAL"
  970. (org-element-map
  971. (org-element-parse-buffer) 'special-block 'identity nil t))))
  972. ;;;; Verse Block
  973. (ert-deftest test-org-element/verse-block-parser ()
  974. "Test `verse-block' parser."
  975. ;; Standard test.
  976. (org-test-with-temp-text "#+BEGIN_VERSE\nVerse block\n#+END_VERSE"
  977. (should
  978. (equal
  979. (org-element-map (org-element-parse-buffer) 'verse-block 'identity nil t)
  980. '(verse-block
  981. (:begin 1 :end 38 :contents-begin 15 :contents-end 27 :hiddenp nil
  982. :post-blank 0)
  983. "Verse block\n"))))
  984. ;; Ignore case.
  985. (org-test-with-temp-text "#+begin_verse\nVerse block\n#+end_verse"
  986. (should
  987. (equal
  988. (org-element-map (org-element-parse-buffer) 'verse-block 'identity nil t)
  989. '(verse-block
  990. (:begin 1 :end 38 :contents-begin 15 :contents-end 27 :hiddenp nil
  991. :post-blank 0)
  992. "Verse block\n"))))
  993. ;; Parse folding.
  994. (org-test-with-temp-text "#+BEGIN_VERSE\nVerse block\n#+END_VERSE"
  995. (org-hide-block-all)
  996. (should
  997. (equal
  998. (org-element-map (org-element-parse-buffer) 'verse-block 'identity nil t)
  999. '(verse-block
  1000. (:begin 1 :end 38 :contents-begin 15 :contents-end 27
  1001. :hiddenp org-hide-block :post-blank 0)
  1002. "Verse block\n"))))
  1003. ;; Parse objects in verse blocks.
  1004. (org-test-with-temp-text "#+BEGIN_VERSE\nVerse \\alpha\n#+END_VERSE"
  1005. (should (org-element-map (org-element-parse-buffer) 'entity 'identity)))
  1006. ;; Ignore incomplete verse block.
  1007. (should-not
  1008. (org-test-with-temp-text "#+BEGIN_VERSE"
  1009. (org-element-map
  1010. (org-element-parse-buffer) 'verse-block 'identity nil t))))
  1011. ;;; Test Interpreters.
  1012. (ert-deftest test-org-element/interpret-affiliated-keywords ()
  1013. "Test if affiliated keywords are correctly interpreted."
  1014. ;; Interpret simple keywords.
  1015. (should
  1016. (equal
  1017. (org-element-interpret-data
  1018. '(org-data nil (paragraph (:name "para") "Paragraph")))
  1019. "#+NAME: para\nParagraph\n"))
  1020. ;; Interpret multiple keywords.
  1021. (should
  1022. (equal
  1023. (org-element-interpret-data
  1024. '(org-data nil (paragraph (:attr_ascii ("line1" "line2")) "Paragraph")))
  1025. "#+ATTR_ASCII: line1\n#+ATTR_ASCII: line2\nParagraph\n"))
  1026. ;; Interpret parsed keywords.
  1027. (should
  1028. (equal
  1029. (org-element-interpret-data
  1030. '(org-data nil (paragraph (:caption ("caption")) "Paragraph")))
  1031. "#+CAPTION: caption\nParagraph\n"))
  1032. ;; Interpret dual keywords.
  1033. (should
  1034. (equal
  1035. (org-element-interpret-data
  1036. '(org-data nil (paragraph (:caption (("long") "short")) "Paragraph")))
  1037. "#+CAPTION[short]: long\nParagraph\n")))
  1038. (ert-deftest test-org-element/center-block-interpreter ()
  1039. "Test center block interpreter."
  1040. (should
  1041. (equal (org-test-parse-and-interpret "#+BEGIN_CENTER\nTest\n#+END_CENTER")
  1042. "#+BEGIN_CENTER\nTest\n#+END_CENTER\n")))
  1043. (ert-deftest test-org-element/drawer-interpreter ()
  1044. "Test drawer interpreter."
  1045. (should
  1046. (equal (let ((org-drawers '("TEST")))
  1047. (org-test-parse-and-interpret ":TEST:\nTest\n:END:"))
  1048. ":TEST:\nTest\n:END:\n")))
  1049. (ert-deftest test-org-element/dynamic-block-interpreter ()
  1050. "Test dynamic block interpreter."
  1051. (should
  1052. (equal (org-test-parse-and-interpret
  1053. "#+BEGIN: myblock :parameter value1\nTest\n#+END:")
  1054. "#+BEGIN: myblock :parameter value1\nTest\n#+END:\n")))
  1055. (ert-deftest test-org-element/footnote-definition-interpreter ()
  1056. "Test footnote definition interpreter."
  1057. (should (equal (org-test-parse-and-interpret "[fn:1] Test") "[fn:1] Test\n")))
  1058. (ert-deftest test-org-element/headline-interpreter ()
  1059. "Test headline and section interpreters."
  1060. ;; 1. Standard test.
  1061. (should (equal (org-test-parse-and-interpret "* Headline") "* Headline\n"))
  1062. ;; 2. With TODO keywords.
  1063. (should
  1064. (equal (let ((org-todo-keywords '((sequence "TODO" "DONE"))))
  1065. (org-test-parse-and-interpret "* TODO Headline"))
  1066. "* TODO Headline\n"))
  1067. ;; 3. With tags...
  1068. ;;
  1069. ;; 3.1. ... and a positive `org-tags-column' value.
  1070. (should
  1071. (equal (let ((org-tags-column 20))
  1072. (org-test-parse-and-interpret "* Headline :tag:"))
  1073. "* Headline :tag:\n"))
  1074. ;; 3.2. ... and a negative `org-tags-column' value.
  1075. (should
  1076. (equal (let ((org-tags-column -20))
  1077. (org-test-parse-and-interpret "* Headline :tag:"))
  1078. "* Headline :tag:\n"))
  1079. ;; 3.3. ... and a null `org-tags-column' value.
  1080. (should
  1081. (equal (let ((org-tags-column 0))
  1082. (org-test-parse-and-interpret "* Headline :tag:"))
  1083. "* Headline :tag:\n"))
  1084. ;; 4. With priority cookie.
  1085. (should
  1086. (equal (org-test-parse-and-interpret "* [#B] Headline")
  1087. "* [#B] Headline\n"))
  1088. ;; 5. With comment keyword.
  1089. (should
  1090. (equal (let ((org-comment-string "COMMENT"))
  1091. (org-test-parse-and-interpret "* COMMENT Headline"))
  1092. "* COMMENT Headline\n"))
  1093. ;; 6. With quote section.
  1094. (should
  1095. (equal (let ((org-quote-string "QUOTE"))
  1096. (org-test-parse-and-interpret "* QUOTE Headline"))
  1097. "* QUOTE Headline\n"))
  1098. ;; 7. Keep same number of blank lines before body.
  1099. (should
  1100. (equal (org-test-parse-and-interpret
  1101. "* Headline\n\n\nText after two blank lines.")
  1102. "* Headline\n\n\nText after two blank lines.\n")))
  1103. (ert-deftest test-org-element/inlinetask-interpreter ()
  1104. "Test inlinetask interpretation."
  1105. (when (featurep 'org-inlinetask)
  1106. (let ((org-inlinetask-min-level 15))
  1107. ;; 1. Regular inlinetask.
  1108. (should (equal (org-test-parse-and-interpret
  1109. "*************** Task\nTest\n*************** END")
  1110. "*************** Task\nTest\n*************** END\n"))
  1111. ;; 2. Degenerate inlinetask.
  1112. (should (equal (org-test-parse-and-interpret "*************** Task")
  1113. "*************** Task\n"))
  1114. ;; 3. Prefer degenerate form when there are no contents.
  1115. (should (equal (org-test-parse-and-interpret
  1116. "*************** Task\n*************** END")
  1117. "*************** Task\n"))
  1118. ;; 4. With TODO keywords.
  1119. (should
  1120. (equal (let ((org-todo-keywords '((sequence "TODO" "DONE"))))
  1121. (org-test-parse-and-interpret "*************** TODO Task"))
  1122. "*************** TODO Task\n"))
  1123. ;; 5. With tags...
  1124. ;;
  1125. ;; 5.1. ... and a positive `org-tags-column' value.
  1126. (should
  1127. (equal (let ((org-tags-column 30))
  1128. (org-test-parse-and-interpret "*************** Task :tag:"))
  1129. "*************** Task :tag:\n"))
  1130. ;; 5.2. ... and a negative `org-tags-column' value.
  1131. (should
  1132. (equal (let ((org-tags-column -30))
  1133. (org-test-parse-and-interpret "*************** Task :tag:"))
  1134. "*************** Task :tag:\n"))
  1135. ;; 5.3. ... and a null `org-tags-column' value.
  1136. (should
  1137. (equal (let ((org-tags-column 0))
  1138. (org-test-parse-and-interpret "*************** Task :tag:"))
  1139. "*************** Task :tag:\n"))
  1140. ;; 6. With priority cookie.
  1141. (should
  1142. (equal (org-test-parse-and-interpret "*************** [#B] Task")
  1143. "*************** [#B] Task\n")))))
  1144. (ert-deftest test-org-element/plain-list-interpreter ()
  1145. "Test plain-list and item interpreters."
  1146. ;; 1. Unordered list.
  1147. (should (equal (org-test-parse-and-interpret "- item 1") "- item 1\n"))
  1148. ;; 2. Description list.
  1149. (should
  1150. (equal (org-test-parse-and-interpret "- tag :: desc") "- tag :: desc\n"))
  1151. ;; 3. Ordered list.
  1152. (should
  1153. (equal (let ((org-plain-list-ordered-item-terminator t))
  1154. (org-test-parse-and-interpret "1. Item"))
  1155. "1. Item\n"))
  1156. ;; 4. Ordered list with counter.
  1157. (should
  1158. (equal (let ((org-plain-list-ordered-item-terminator t))
  1159. (org-test-parse-and-interpret "1. [@5] Item"))
  1160. "5. [@5] Item\n"))
  1161. ;; 5. List with check-boxes.
  1162. (should
  1163. (equal (org-test-parse-and-interpret
  1164. "- [-] Item 1\n - [X] Item 2\n - [ ] Item 3")
  1165. "- [-] Item 1\n - [X] Item 2\n - [ ] Item 3\n")))
  1166. (ert-deftest test-org-element/quote-block-interpreter ()
  1167. "Test quote block interpreter."
  1168. (should (equal (org-test-parse-and-interpret
  1169. "#+BEGIN_QUOTE\nTest\n#+END_QUOTE")
  1170. "#+BEGIN_QUOTE\nTest\n#+END_QUOTE\n")))
  1171. (ert-deftest test-org-element/special-block-interpreter ()
  1172. "Test special block interpreter."
  1173. (should (equal (org-test-parse-and-interpret
  1174. "#+BEGIN_SPECIAL\nTest\n#+END_SPECIAL")
  1175. "#+BEGIN_SPECIAL\nTest\n#+END_SPECIAL\n")))
  1176. (ert-deftest test-org-element/babel-call-interpreter ()
  1177. "Test babel call interpreter."
  1178. ;; 1. Without argument.
  1179. (should (equal (org-test-parse-and-interpret "#+CALL: test()")
  1180. "#+CALL: test()\n"))
  1181. ;; 2. With argument.
  1182. (should (equal (org-test-parse-and-interpret "#+CALL: test(x=2)")
  1183. "#+CALL: test(x=2)\n"))
  1184. ;; 3. With header arguments.
  1185. (should (equal (org-test-parse-and-interpret
  1186. "#+CALL: test[:results output]()[:results html]")
  1187. "#+CALL: test[:results output]()[:results html]\n")))
  1188. (ert-deftest test-org-element/clock-interpreter ()
  1189. "Test clock interpreter."
  1190. ;; Running clock.
  1191. (should
  1192. (equal (let ((org-clock-string "CLOCK:"))
  1193. (org-test-parse-and-interpret "CLOCK: [2012-01-01 sun. 00:01]"))
  1194. "CLOCK: [2012-01-01 sun. 00:01]\n"))
  1195. ;; Closed clock.
  1196. (should
  1197. (equal
  1198. (let ((org-clock-string "CLOCK:"))
  1199. (org-test-parse-and-interpret "
  1200. CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01"))
  1201. "CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01\n")))
  1202. (ert-deftest test-org-element/comment-interpreter ()
  1203. "Test comment interpreter."
  1204. ;; Regular comment.
  1205. (should (equal (org-test-parse-and-interpret "#Comment") "#+ Comment\n"))
  1206. ;; Inline comment.
  1207. (should (equal (org-test-parse-and-interpret " #+ Comment")
  1208. "#+ Comment\n"))
  1209. ;; Preserve indentation.
  1210. (should (equal (org-test-parse-and-interpret " #+ No blank\n#+ One blank")
  1211. "#+ No blank\n#+ One blank\n")))
  1212. (ert-deftest test-org-element/comment-block-interpreter ()
  1213. "Test comment block interpreter."
  1214. (should (equal (org-test-parse-and-interpret
  1215. "#+BEGIN_COMMENT\nTest\n#+END_COMMENT")
  1216. "#+BEGIN_COMMENT\nTest\n#+END_COMMENT\n")))
  1217. (ert-deftest test-org-element/example-block-interpreter ()
  1218. "Test example block interpreter."
  1219. ;; Without switches.
  1220. (should (equal (org-test-parse-and-interpret
  1221. "#+BEGIN_EXAMPLE\nTest\n#+END_EXAMPLE")
  1222. "#+BEGIN_EXAMPLE\nTest\n#+END_EXAMPLE\n"))
  1223. ;; With switches.
  1224. (should
  1225. (equal (org-test-parse-and-interpret
  1226. "#+BEGIN_EXAMPLE -n -k\n(+ 1 1)\n#+END_EXAMPLE")
  1227. "#+BEGIN_EXAMPLE -n -k\n(+ 1 1)\n#+END_EXAMPLE\n")))
  1228. (ert-deftest test-org-element/export-block-interpreter ()
  1229. "Test export block interpreter."
  1230. (should (equal (org-test-parse-and-interpret
  1231. "#+BEGIN_HTML\nTest\n#+END_HTML")
  1232. "#+BEGIN_HTML\nTest\n#+END_HTML\n")))
  1233. (ert-deftest test-org-element/fixed-width-interpreter ()
  1234. "Test fixed width interpreter."
  1235. ;; Standard test.
  1236. (should (equal (org-test-parse-and-interpret ": Test") ": Test\n"))
  1237. ;; Preserve indentation.
  1238. (should (equal (org-test-parse-and-interpret ": 2 blanks\n: 1 blank")
  1239. ": 2 blanks\n: 1 blank\n")))
  1240. (ert-deftest test-org-element/horizontal-rule-interpreter ()
  1241. "Test horizontal rule interpreter."
  1242. (should (equal (org-test-parse-and-interpret "-------") "-----\n")))
  1243. (ert-deftest test-org-element/keyword-interpreter ()
  1244. "Test keyword interpreter."
  1245. (should (equal (org-test-parse-and-interpret "#+KEYWORD: value")
  1246. "#+KEYWORD: value\n")))
  1247. (ert-deftest test-org-element/latex-environment-interpreter ()
  1248. "Test latex environment interpreter."
  1249. (should (equal (org-test-parse-and-interpret
  1250. "\\begin{equation}\n1+1=2\n\\end{equation}")
  1251. "\\begin{equation}\n1+1=2\n\\end{equation}\n")))
  1252. (ert-deftest test-org-element/planning-interpreter ()
  1253. "Test planning interpreter."
  1254. (let ((org-closed-string "CLOSED:")
  1255. (org-deadline-string "DEADLINE:")
  1256. (org-scheduled-string "SCHEDULED:"))
  1257. (should
  1258. (equal
  1259. (org-test-parse-and-interpret
  1260. "* Headline
  1261. CLOSED: <2012-01-01> DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01>")
  1262. "* Headline
  1263. CLOSED: <2012-01-01> DEADLINE: <2012-01-01> SCHEDULED: <2012-01-01>\n"))))
  1264. (ert-deftest test-org-element/property-drawer-interpreter ()
  1265. "Test property drawer interpreter."
  1266. (should (equal (let ((org-property-format "%-10s %s"))
  1267. (org-test-parse-and-interpret
  1268. ":PROPERTIES:\n:prop: value\n:END:"))
  1269. ":PROPERTIES:\n:prop: value\n:END:\n")))
  1270. (ert-deftest test-org-element/src-block-interpreter ()
  1271. "Test src block interpreter."
  1272. ;; With arguments.
  1273. (should
  1274. (equal (org-test-parse-and-interpret
  1275. "#+BEGIN_SRC emacs-lisp :results silent\n(+ 1 1)\n#+END_SRC")
  1276. "#+BEGIN_SRC emacs-lisp :results silent\n(+ 1 1)\n#+END_SRC\n"))
  1277. ;; With switches.
  1278. (should
  1279. (equal (org-test-parse-and-interpret
  1280. "#+BEGIN_SRC emacs-lisp -n -k\n(+ 1 1)\n#+END_SRC")
  1281. "#+BEGIN_SRC emacs-lisp -n -k\n(+ 1 1)\n#+END_SRC\n")))
  1282. (ert-deftest test-org-element/table-interpreter ()
  1283. "Test table, table-row and table-cell interpreters."
  1284. ;; 1. Simple table.
  1285. (should (equal (org-test-parse-and-interpret "| a | b |\n| c | d |")
  1286. "| a | b |\n| c | d |\n"))
  1287. ;; 2. Table with horizontal rules.
  1288. (should (equal (org-test-parse-and-interpret
  1289. "| a | b |\n|---+---|\n| c | d |")
  1290. "| a | b |\n|---+---|\n| c | d |\n"))
  1291. ;; 3. Table with meta-data.
  1292. (should (equal (org-test-parse-and-interpret "| / | < | > |\n| * | 1 | 2 |")
  1293. "| / | < | > |\n| * | 1 | 2 |\n")))
  1294. (ert-deftest test-org-element/verse-block-interpreter ()
  1295. "Test verse block interpretation."
  1296. (should
  1297. (equal (org-test-parse-and-interpret "#+BEGIN_VERSE\nTest\n#+END_VERSE")
  1298. "#+BEGIN_VERSE\nTest\n#+END_VERSE\n")))
  1299. (ert-deftest test-org-element/bold-interpreter ()
  1300. "Test bold interpreter."
  1301. (should (equal (org-test-parse-and-interpret "*text*") "*text*\n")))
  1302. (ert-deftest test-org-element/code-interpreter ()
  1303. "Test code interpreter."
  1304. (should (equal (org-test-parse-and-interpret "~text~") "~text~\n")))
  1305. (ert-deftest test-org-element/entity-interpreter ()
  1306. "Test entity interpreter."
  1307. ;; 1. Without brackets.
  1308. (should
  1309. (equal (org-test-parse-and-interpret "\\alpha text") "\\alpha text\n"))
  1310. ;; 2. With brackets.
  1311. (should
  1312. (equal (org-test-parse-and-interpret "\\alpha{}text") "\\alpha{}text\n")))
  1313. (ert-deftest test-org-element/export-snippet-interpreter ()
  1314. "Test export snippet interpreter."
  1315. (should (equal (org-test-parse-and-interpret "<back-end@contents>")
  1316. "<back-end@contents>\n")))
  1317. (ert-deftest test-org-element/footnote-reference-interpreter ()
  1318. "Test footnote reference interpreter."
  1319. ;; 1. Regular reference.
  1320. (should (equal (org-test-parse-and-interpret "Text[fn:1]") "Text[fn:1]\n"))
  1321. ;; 2. Normalized reference.
  1322. (should (equal (org-test-parse-and-interpret "Text[1]") "Text[1]\n"))
  1323. ;; 3. Named reference.
  1324. (should (equal (org-test-parse-and-interpret "Text[fn:label]")
  1325. "Text[fn:label]\n"))
  1326. ;; 4. Inline reference.
  1327. (should (equal (org-test-parse-and-interpret "Text[fn:label:def]")
  1328. "Text[fn:label:def]\n"))
  1329. ;; 5. Anonymous reference.
  1330. (should (equal (org-test-parse-and-interpret "Text[fn::def]")
  1331. "Text[fn::def]\n")))
  1332. (ert-deftest test-org-element/inline-babel-call-interpreter ()
  1333. "Test inline babel call interpreter."
  1334. ;; 1. Without arguments.
  1335. (should (equal (org-test-parse-and-interpret "call_test()") "call_test()\n"))
  1336. ;; 2. With arguments.
  1337. (should (equal (org-test-parse-and-interpret "call_test(x=2)")
  1338. "call_test(x=2)\n"))
  1339. ;; 3. With header arguments.
  1340. (should (equal (org-test-parse-and-interpret
  1341. "call_test[:results output]()[:results html]")
  1342. "call_test[:results output]()[:results html]\n")))
  1343. (ert-deftest test-org-element/inline-src-block-interpreter ()
  1344. "Test inline src block interpreter."
  1345. ;; 1. Without header argument.
  1346. (should (equal (org-test-parse-and-interpret "src_emacs-lisp{(+ 1 1)}")
  1347. "src_emacs-lisp{(+ 1 1)}\n"))
  1348. ;; 2. With header arguments.
  1349. (should (equal (org-test-parse-and-interpret
  1350. "src_emacs-lisp[:results silent]{(+ 1 1)}")
  1351. "src_emacs-lisp[:results silent]{(+ 1 1)}\n")))
  1352. (ert-deftest test-org-element/italic-interpreter ()
  1353. "Test italic interpreter."
  1354. (should (equal (org-test-parse-and-interpret "/text/") "/text/\n")))
  1355. (ert-deftest test-org-element/latex-fragment-interpreter ()
  1356. "Test latex fragment interpreter."
  1357. (let ((org-latex-regexps
  1358. '(("begin" "^[ ]*\\(\\\\begin{\\([a-zA-Z0-9\\*]+\\)[^�]+?\\\\end{\\2}\\)" 1 t)
  1359. ("$1" "\\([^$]\\|^\\)\\(\\$[^ \n,;.$]\\$\\)\\([- .,?;:'\")�]\\|$\\)" 2 nil)
  1360. ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ \n,;.$][^$\n ]*?\\(\n[^$\n ]*?\\)\\{0,2\\}[^ \n,.$]\\)\\$\\)\\)\\([- .,?;:'\")�]\\|$\\)" 2 nil)
  1361. ("\\(" "\\\\([^�]*?\\\\)" 0 nil)
  1362. ("\\[" "\\\\\\[[^�]*?\\\\\\]" 0 nil)
  1363. ("$$" "\\$\\$[^�]*?\\$\\$" 0 nil))))
  1364. (should (equal (org-test-parse-and-interpret "\\command{}")
  1365. "\\command{}\n"))
  1366. (should (equal (org-test-parse-and-interpret "$x$") "$x$\n"))
  1367. (should (equal (org-test-parse-and-interpret "$x+y$") "$x+y$\n"))
  1368. (should (equal (org-test-parse-and-interpret "$$x+y$$") "$$x+y$$\n"))
  1369. (should (equal (org-test-parse-and-interpret "\\(x+y\\)") "\\(x+y\\)\n"))
  1370. (should (equal (org-test-parse-and-interpret "\\[x+y\\]") "\\[x+y\\]\n"))))
  1371. (ert-deftest test-org-element/line-break-interpreter ()
  1372. "Test line break interpreter."
  1373. (should (equal (org-test-parse-and-interpret "First line \\\\ \nSecond line")
  1374. "First line \\\\\nSecond line\n")))
  1375. (ert-deftest test-org-element/link-interpreter ()
  1376. "Test link interpreter."
  1377. ;; 1. Links targeted from a radio target.
  1378. (should (equal (let ((org-target-link-regexp "radio-target"))
  1379. (org-test-parse-and-interpret "a radio-target"))
  1380. "a radio-target\n"))
  1381. ;; 2. Regular links.
  1382. ;;
  1383. ;; 2.1. Without description.
  1384. (should (equal (org-test-parse-and-interpret "[[http://orgmode.org]]")
  1385. "[[http://orgmode.org]]\n"))
  1386. ;; 2.2. With a description.
  1387. (should (equal (org-test-parse-and-interpret
  1388. "[[http://orgmode.org][Org mode]]")
  1389. "[[http://orgmode.org][Org mode]]\n"))
  1390. ;; 2.3. Id links.
  1391. (should (equal (org-test-parse-and-interpret "[[id:aaaa]]") "[[id:aaaa]]\n"))
  1392. ;; 2.4. Custom-id links.
  1393. (should (equal (org-test-parse-and-interpret "[[#id]]") "[[#id]]\n"))
  1394. ;; 2.5 Code-ref links.
  1395. (should (equal (org-test-parse-and-interpret "[[(ref)]]") "[[(ref)]]\n"))
  1396. ;; 3. Normalize plain links.
  1397. (should (equal (org-test-parse-and-interpret "http://orgmode.org")
  1398. "[[http://orgmode.org]]\n"))
  1399. ;; 4. Normalize angular links.
  1400. (should (equal (org-test-parse-and-interpret "<http://orgmode.org>")
  1401. "[[http://orgmode.org]]\n")))
  1402. (ert-deftest test-org-element/macro-interpreter ()
  1403. "Test macro interpreter."
  1404. ;; 1. Without argument.
  1405. (should (equal (org-test-parse-and-interpret "{{{test}}}") "{{{test}}}\n"))
  1406. ;; 2. With arguments.
  1407. (should (equal (org-test-parse-and-interpret "{{{test(arg1,arg2)}}}")
  1408. "{{{test(arg1,arg2)}}}\n")))
  1409. (ert-deftest test-org-element/radio-target-interpreter ()
  1410. "Test radio target interpreter."
  1411. (should (equal (org-test-parse-and-interpret "<<<some text>>>")
  1412. "<<<some text>>>\n")))
  1413. (ert-deftest test-org-element/statistics-cookie-interpreter ()
  1414. "Test statistics cookie interpreter."
  1415. ;; 1. Without percent
  1416. (should (equal (org-test-parse-and-interpret "[0/1]") "[0/1]\n"))
  1417. ;; 2. With percent.
  1418. (should (equal (org-test-parse-and-interpret "[66%]") "[66%]\n")))
  1419. (ert-deftest test-org-element/strike-through-interpreter ()
  1420. "Test strike through interpreter."
  1421. (should (equal (org-test-parse-and-interpret "+target+") "+target+\n")))
  1422. (ert-deftest test-org-element/subscript-interpreter ()
  1423. "Test subscript interpreter."
  1424. ;; 1. Without brackets.
  1425. (should (equal (org-test-parse-and-interpret "a_b") "a_b\n"))
  1426. ;; 2. With brackets.
  1427. (should (equal (org-test-parse-and-interpret "a_{b}") "a_{b}\n")))
  1428. (ert-deftest test-org-element/superscript-interpreter ()
  1429. "Test superscript interpreter."
  1430. ;; 1. Without brackets.
  1431. (should (equal (org-test-parse-and-interpret "a^b") "a^b\n"))
  1432. ;; 2. With brackets.
  1433. (should (equal (org-test-parse-and-interpret "a^{b}") "a^{b}\n")))
  1434. (ert-deftest test-org-element/target-interpreter ()
  1435. "Test target interpreter."
  1436. (should (equal (org-test-parse-and-interpret "<<target>>") "<<target>>\n")))
  1437. (ert-deftest test-org-element/underline-interpreter ()
  1438. "Test underline interpreter."
  1439. (should (equal (org-test-parse-and-interpret "_text_") "_text_\n")))
  1440. (ert-deftest test-org-element/verbatim-interpreter ()
  1441. "Test verbatim interpreter."
  1442. (should (equal (org-test-parse-and-interpret "=text=") "=text=\n")))
  1443. ;;; Test Granularity
  1444. (ert-deftest test-org-element/granularity ()
  1445. "Test granularity impact on buffer parsing."
  1446. (org-test-with-temp-text "
  1447. * Head 1
  1448. ** Head 2
  1449. #+BEGIN_CENTER
  1450. Centered paragraph.
  1451. #+END_CENTER
  1452. Paragraph \\alpha."
  1453. ;; 1.1. Granularity set to `headline' should parse every headline
  1454. ;; in buffer, and only them.
  1455. (let ((tree (org-element-parse-buffer 'headline)))
  1456. (should (= 2 (length (org-element-map tree 'headline 'identity))))
  1457. (should-not (org-element-map tree 'paragraph 'identity)))
  1458. ;; 1.2. Granularity set to `greater-element' should not enter
  1459. ;; greater elements excepted headlines and sections.
  1460. (let ((tree (org-element-parse-buffer 'greater-element)))
  1461. (should (= 1 (length (org-element-map tree 'center-block 'identity))))
  1462. (should (= 1 (length (org-element-map tree 'paragraph 'identity))))
  1463. (should-not (org-element-map tree 'entity 'identity)))
  1464. ;; 1.3. Granularity set to `element' should enter every
  1465. ;; greater-element.
  1466. (let ((tree (org-element-parse-buffer 'element)))
  1467. (should (= 2 (length (org-element-map tree 'paragraph 'identity))))
  1468. (should-not (org-element-map tree 'entity 'identity)))
  1469. ;; 1.4. Granularity set to `object' can see everything.
  1470. (let ((tree (org-element-parse-buffer 'object)))
  1471. (should (= 1 (length (org-element-map tree 'entity 'identity)))))))
  1472. (ert-deftest test-org-element/secondary-string-parsing ()
  1473. "Test if granularity correctly toggles secondary strings parsing."
  1474. ;; 1. With a granularity bigger than `object', no secondary string
  1475. ;; should be parsed.
  1476. ;;
  1477. ;; 1.1. Test with `headline' type.
  1478. (org-test-with-temp-text "* Headline"
  1479. (let ((headline
  1480. (org-element-map (org-element-parse-buffer 'headline) 'headline
  1481. 'identity
  1482. nil
  1483. 'first-match)))
  1484. (should (stringp (org-element-property :title headline)))))
  1485. ;; 1.2. Test with `item' type.
  1486. (org-test-with-temp-text "* Headline\n- tag :: item"
  1487. (let ((item (org-element-map (org-element-parse-buffer 'element)
  1488. 'item
  1489. 'identity
  1490. nil
  1491. 'first-match)))
  1492. (should (stringp (org-element-property :tag item)))))
  1493. ;; 1.3. Test with `inlinetask' type, if avalaible.
  1494. (when (featurep 'org-inlinetask)
  1495. (let ((org-inlinetask-min-level 15))
  1496. (org-test-with-temp-text "*************** Inlinetask"
  1497. (let ((inlinetask (org-element-map (org-element-parse-buffer 'element)
  1498. 'inlinetask
  1499. 'identity
  1500. nil
  1501. 'first-match)))
  1502. (should (stringp (org-element-property :title inlinetask)))))))
  1503. ;; 2. With a default granularity, secondary strings should be
  1504. ;; parsed.
  1505. (org-test-with-temp-text "* Headline"
  1506. (let ((headline
  1507. (org-element-map (org-element-parse-buffer) 'headline
  1508. 'identity
  1509. nil
  1510. 'first-match)))
  1511. (should (listp (org-element-property :title headline)))))
  1512. ;; 3. `org-element-at-point' should never parse a secondary string.
  1513. (org-test-with-temp-text "* Headline"
  1514. (should (stringp (org-element-property :title (org-element-at-point))))))
  1515. ;;; Test Normalize Contents
  1516. (ert-deftest test-org-element/normalize-contents ()
  1517. "Test `org-element-normalize-contents' specifications."
  1518. ;; 1. Remove maximum common indentation from element's contents.
  1519. (should
  1520. (equal
  1521. (org-element-normalize-contents
  1522. '(paragraph nil " Two spaces\n Three spaces"))
  1523. '(paragraph nil "Two spaces\n Three spaces")))
  1524. ;; 2. Ignore objects within contents when computing maximum common
  1525. ;; indentation.
  1526. (should
  1527. (equal
  1528. (org-element-normalize-contents
  1529. '(paragraph nil " One " (emphasis nil "space") "\n Two spaces"))
  1530. '(paragraph nil "One " (emphasis nil "space") "\n Two spaces")))
  1531. ;; 3. Ignore blank lines.
  1532. (should
  1533. (equal
  1534. (org-element-normalize-contents
  1535. '(paragraph nil " Two spaces\n\n \n Two spaces"))
  1536. '(paragraph nil "Two spaces\n\n \nTwo spaces")))
  1537. ;; 4. Recursively enter objects in order to compute common
  1538. ;; indentation.
  1539. (should
  1540. (equal
  1541. (org-element-normalize-contents
  1542. '(paragraph nil " Two spaces " (bold nil " and\n One space")))
  1543. '(paragraph nil " Two spaces " (bold nil " and\nOne space"))))
  1544. ;; 5. When optional argument is provided, ignore first line
  1545. ;; indentation.
  1546. (should
  1547. (equal
  1548. (org-element-normalize-contents
  1549. '(paragraph nil "No space\n Two spaces\n Three spaces") t)
  1550. '(paragraph nil "No space\nTwo spaces\n Three spaces"))))
  1551. ;;; Test Navigation Tools.
  1552. (ert-deftest test-org-element/at-point ()
  1553. "Test `org-element-at-point' specifications."
  1554. ;; Special case: at the very beginning of a table, return `table'
  1555. ;; object instead of `table-row'.
  1556. (should
  1557. (eq 'table
  1558. (org-test-with-temp-text "| a | b |"
  1559. (org-element-type (org-element-at-point)))))
  1560. ;; Special case: at the very beginning of a list or sub-list, return
  1561. ;; `plain-list' object instead of `item'.
  1562. (should
  1563. (eq 'plain-list
  1564. (org-test-with-temp-text "- item"
  1565. (org-element-type (org-element-at-point))))))
  1566. (ert-deftest test-org-element/forward ()
  1567. "Test `org-element-forward' specifications."
  1568. ;; 1. At EOB: should error.
  1569. (org-test-with-temp-text "Some text\n"
  1570. (goto-char (point-max))
  1571. (should-error (org-element-forward)))
  1572. ;; 2. Standard move: expected to ignore blank lines.
  1573. (org-test-with-temp-text "First paragraph.\n\n\nSecond paragraph."
  1574. (org-element-forward)
  1575. (should (looking-at "Second paragraph.")))
  1576. ;; 3. Headline tests.
  1577. (org-test-with-temp-text "
  1578. * Head 1
  1579. ** Head 1.1
  1580. *** Head 1.1.1
  1581. ** Head 1.2"
  1582. ;; 3.1. At an headline beginning: move to next headline at the
  1583. ;; same level.
  1584. (goto-line 3)
  1585. (org-element-forward)
  1586. (should (looking-at "** Head 1.2"))
  1587. ;; 3.2. At an headline beginning: move to parent headline if no
  1588. ;; headline at the same level.
  1589. (goto-line 3)
  1590. (org-element-forward)
  1591. (should (looking-at "** Head 1.2")))
  1592. ;; 4. Greater element tests.
  1593. (org-test-with-temp-text
  1594. "#+BEGIN_CENTER\nInside.\n#+END_CENTER\n\nOutside."
  1595. ;; 4.1. At a greater element: expected to skip contents.
  1596. (org-element-forward)
  1597. (should (looking-at "Outside."))
  1598. ;; 4.2. At the end of greater element contents: expected to skip
  1599. ;; to the end of the greater element.
  1600. (goto-line 2)
  1601. (org-element-forward)
  1602. (should (looking-at "Outside.")))
  1603. ;; 5. List tests.
  1604. (org-test-with-temp-text "
  1605. - item1
  1606. - sub1
  1607. - sub2
  1608. - sub3
  1609. Inner paragraph.
  1610. - item2
  1611. Outside."
  1612. ;; 5.1. At list top point: expected to move to the element after
  1613. ;; the list.
  1614. (goto-line 2)
  1615. (org-element-forward)
  1616. (should (looking-at "Outside."))
  1617. ;; 5.2. Special case: at the first line of a sub-list, but not at
  1618. ;; beginning of line, move to next item.
  1619. (goto-line 2)
  1620. (forward-char)
  1621. (org-element-forward)
  1622. (should (looking-at "- item2"))
  1623. (goto-line 4)
  1624. (forward-char)
  1625. (org-element-forward)
  1626. (should (looking-at " - sub2"))
  1627. ;; 5.3 At sub-list beginning: expected to move after the sub-list.
  1628. (goto-line 4)
  1629. (org-element-forward)
  1630. (should (looking-at " Inner paragraph."))
  1631. ;; 5.4. At sub-list end: expected to move outside the sub-list.
  1632. (goto-line 8)
  1633. (org-element-forward)
  1634. (should (looking-at " Inner paragraph."))
  1635. ;; 5.5. At an item: expected to move to next item, if any.
  1636. (goto-line 6)
  1637. (org-element-forward)
  1638. (should (looking-at " - sub3"))))
  1639. (ert-deftest test-org-element/backward ()
  1640. "Test `org-element-backward' specifications."
  1641. ;; 1. At BOB (modulo some white spaces): should error.
  1642. (org-test-with-temp-text " \nParagraph."
  1643. (org-skip-whitespace)
  1644. (should-error (org-element-backward)))
  1645. ;; 2. Not at the beginning of an element: move at its beginning.
  1646. (org-test-with-temp-text "Paragraph1.\n\nParagraph2."
  1647. (goto-line 3)
  1648. (end-of-line)
  1649. (org-element-backward)
  1650. (should (looking-at "Paragraph2.")))
  1651. ;; 3. Headline tests.
  1652. (org-test-with-temp-text "
  1653. * Head 1
  1654. ** Head 1.1
  1655. *** Head 1.1.1
  1656. ** Head 1.2"
  1657. ;; 3.1. At an headline beginning: move to previous headline at the
  1658. ;; same level.
  1659. (goto-line 5)
  1660. (org-element-backward)
  1661. (should (looking-at "** Head 1.1"))
  1662. ;; 3.2. At an headline beginning: move to parent headline if no
  1663. ;; headline at the same level.
  1664. (goto-line 3)
  1665. (org-element-backward)
  1666. (should (looking-at "* Head 1"))
  1667. ;; 3.3. At the first top-level headline: should error.
  1668. (goto-line 2)
  1669. (should-error (org-element-backward)))
  1670. ;; 4. At beginning of first element inside a greater element:
  1671. ;; expected to move to greater element's beginning.
  1672. (org-test-with-temp-text "Before.\n#+BEGIN_CENTER\nInside.\n#+END_CENTER."
  1673. (goto-line 3)
  1674. (org-element-backward)
  1675. (should (looking-at "#\\+BEGIN_CENTER")))
  1676. ;; 5. List tests.
  1677. (org-test-with-temp-text "
  1678. - item1
  1679. - sub1
  1680. - sub2
  1681. - sub3
  1682. Inner paragraph.
  1683. - item2
  1684. Outside."
  1685. ;; 5.1. At beginning of sub-list: expected to move to the
  1686. ;; paragraph before it.
  1687. (goto-line 4)
  1688. (org-element-backward)
  1689. (should (looking-at "item1"))
  1690. ;; 5.2. At an item in a list: expected to move at previous item.
  1691. (goto-line 8)
  1692. (org-element-backward)
  1693. (should (looking-at " - sub2"))
  1694. (goto-line 12)
  1695. (org-element-backward)
  1696. (should (looking-at "- item1"))
  1697. ;; 5.3. At end of list/sub-list: expected to move to list/sub-list
  1698. ;; beginning.
  1699. (goto-line 10)
  1700. (org-element-backward)
  1701. (should (looking-at " - sub1"))
  1702. (goto-line 15)
  1703. (org-element-backward)
  1704. (should (looking-at "- item1"))
  1705. ;; 5.4. At blank-lines before list end: expected to move to top
  1706. ;; item.
  1707. (goto-line 14)
  1708. (org-element-backward)
  1709. (should (looking-at "- item1"))))
  1710. (ert-deftest test-org-element/up ()
  1711. "Test `org-element-up' specifications."
  1712. ;; 1. At BOB or with no surrounding element: should error.
  1713. (org-test-with-temp-text "Paragraph."
  1714. (should-error (org-element-up)))
  1715. (org-test-with-temp-text "* Head1\n* Head2"
  1716. (goto-line 2)
  1717. (should-error (org-element-up)))
  1718. (org-test-with-temp-text "Paragraph1.\n\nParagraph2."
  1719. (goto-line 3)
  1720. (should-error (org-element-up)))
  1721. ;; 2. At an headline: move to parent headline.
  1722. (org-test-with-temp-text "* Head1\n** Sub-Head1\n** Sub-Head2"
  1723. (goto-line 3)
  1724. (org-element-up)
  1725. (should (looking-at "\\* Head1")))
  1726. ;; 3. Inside a greater element: move to greater element beginning.
  1727. (org-test-with-temp-text
  1728. "Before.\n#+BEGIN_CENTER\nParagraph1\nParagraph2\n#+END_CENTER\n"
  1729. (goto-line 3)
  1730. (org-element-up)
  1731. (should (looking-at "#\\+BEGIN_CENTER")))
  1732. ;; 4. List tests.
  1733. (org-test-with-temp-text "* Top
  1734. - item1
  1735. - sub1
  1736. - sub2
  1737. Paragraph within sub2.
  1738. - item2"
  1739. ;; 4.1. Within an item: move to the item beginning.
  1740. (goto-line 8)
  1741. (org-element-up)
  1742. (should (looking-at " - sub2"))
  1743. ;; 4.2. At an item in a sub-list: move to parent item.
  1744. (goto-line 4)
  1745. (org-element-up)
  1746. (should (looking-at "- item1"))
  1747. ;; 4.3. At an item in top list: move to beginning of whole list.
  1748. (goto-line 10)
  1749. (org-element-up)
  1750. (should (looking-at "- item1"))
  1751. ;; 4.4. Special case. At very top point: should move to parent of
  1752. ;; list.
  1753. (goto-line 2)
  1754. (org-element-up)
  1755. (should (looking-at "\\* Top"))))
  1756. (ert-deftest test-org-element/down ()
  1757. "Test `org-element-down' specifications."
  1758. ;; 1. Error when the element hasn't got a recursive type.
  1759. (org-test-with-temp-text "Paragraph."
  1760. (should-error (org-element-down)))
  1761. ;; 2. When at a plain-list, move to first item.
  1762. (org-test-with-temp-text "- Item 1\n - Item 1.1\n - Item 2.2"
  1763. (goto-line 2)
  1764. (org-element-down)
  1765. (should (looking-at " - Item 1.1")))
  1766. (org-test-with-temp-text "#+NAME: list\n- Item 1"
  1767. (org-element-down)
  1768. (should (looking-at " Item 1")))
  1769. ;; 3. When at a table, move to first row
  1770. (org-test-with-temp-text "#+NAME: table\n| a | b |"
  1771. (org-element-down)
  1772. (should (looking-at " a | b |")))
  1773. ;; 4. Otherwise, move inside the greater element.
  1774. (org-test-with-temp-text "#+BEGIN_CENTER\nParagraph.\n#+END_CENTER"
  1775. (org-element-down)
  1776. (should (looking-at "Paragraph"))))
  1777. (ert-deftest test-org-element/drag-backward ()
  1778. "Test `org-element-drag-backward' specifications."
  1779. ;; 1. Error when trying to move first element of buffer.
  1780. (org-test-with-temp-text "Paragraph 1.\n\nParagraph 2."
  1781. (should-error (org-element-drag-backward)))
  1782. ;; 2. Error when trying to swap nested elements.
  1783. (org-test-with-temp-text "#+BEGIN_CENTER\nTest.\n#+END_CENTER"
  1784. (forward-line)
  1785. (should-error (org-element-drag-backward)))
  1786. ;; 3. Error when trying to swap an headline element and
  1787. ;; a non-headline element.
  1788. (org-test-with-temp-text "Test.\n* Head 1"
  1789. (forward-line)
  1790. (should-error (org-element-drag-backward)))
  1791. ;; 4. Otherwise, swap elements, preserving column and blank lines
  1792. ;; between elements.
  1793. (org-test-with-temp-text "Para1\n\n\nParagraph 2\n\nPara3"
  1794. (search-forward "graph")
  1795. (org-element-drag-backward)
  1796. (should (equal (buffer-string) "Paragraph 2\n\n\nPara1\n\nPara3"))
  1797. (should (looking-at " 2"))))
  1798. (ert-deftest test-org-element/drag-forward ()
  1799. "Test `org-element-drag-forward' specifications."
  1800. ;; 1. Error when trying to move first element of buffer.
  1801. (org-test-with-temp-text "Paragraph 1.\n\nParagraph 2."
  1802. (goto-line 3)
  1803. (should-error (org-element-drag-forward)))
  1804. ;; 2. Error when trying to swap nested elements.
  1805. (org-test-with-temp-text "#+BEGIN_CENTER\nTest.\n#+END_CENTER"
  1806. (forward-line)
  1807. (should-error (org-element-drag-forward)))
  1808. ;; 3. Error when trying to swap a non-headline element and an
  1809. ;; headline.
  1810. (org-test-with-temp-text "Test.\n* Head 1"
  1811. (should-error (org-element-drag-forward)))
  1812. ;; 4. Otherwise, swap elements, preserving column and blank lines
  1813. ;; between elements.
  1814. (org-test-with-temp-text "Paragraph 1\n\n\nPara2\n\nPara3"
  1815. (search-forward "graph")
  1816. (org-element-drag-forward)
  1817. (should (equal (buffer-string) "Para2\n\n\nParagraph 1\n\nPara3"))
  1818. (should (looking-at " 1"))))
  1819. (ert-deftest test-org-element/fill-paragraph ()
  1820. "Test `org-element-fill-paragraph' specifications."
  1821. ;; At an Org table, align it.
  1822. (org-test-with-temp-text "|a|"
  1823. (org-element-fill-paragraph)
  1824. (should (equal (buffer-string) "| a |\n")))
  1825. ;; At a paragraph, preserve line breaks.
  1826. (org-test-with-temp-text "some \\\\\nlong\ntext"
  1827. (let ((fill-column 20))
  1828. (org-element-fill-paragraph)
  1829. (should (equal (buffer-string) "some \\\\\nlong text"))))
  1830. ;; At a verse block, fill paragraph at point, also preserving line
  1831. ;; breaks. Though, do nothing when point is at the block
  1832. ;; boundaries.
  1833. (org-test-with-temp-text "#+BEGIN_VERSE\nSome \\\\\nlong\ntext\n#+END_VERSE"
  1834. (forward-line)
  1835. (let ((fill-column 20))
  1836. (org-element-fill-paragraph)
  1837. (should (equal (buffer-string)
  1838. "#+BEGIN_VERSE\nSome \\\\\nlong text\n#+END_VERSE"))))
  1839. (org-test-with-temp-text "#+BEGIN_VERSE\nSome \\\\\nlong\ntext\n#+END_VERSE"
  1840. (let ((fill-column 20))
  1841. (org-element-fill-paragraph)
  1842. (should (equal (buffer-string)
  1843. "#+BEGIN_VERSE\nSome \\\\\nlong\ntext\n#+END_VERSE"))))
  1844. ;; Fill contents of `comment-block' and `example-block' elements.
  1845. (org-test-with-temp-text "#+BEGIN_COMMENT\nSome\ntext\n#+END_COMMENT"
  1846. (let ((fill-column 20))
  1847. (forward-line)
  1848. (org-element-fill-paragraph)
  1849. (should (equal (buffer-string)
  1850. "#+BEGIN_COMMENT\nSome text\n#+END_COMMENT"))))
  1851. (org-test-with-temp-text "#+BEGIN_EXAMPLE\nSome\ntext\n#+END_EXAMPLE"
  1852. (let ((fill-column 20))
  1853. (forward-line)
  1854. (org-element-fill-paragraph)
  1855. (should (equal (buffer-string)
  1856. "#+BEGIN_EXAMPLE\nSome text\n#+END_EXAMPLE"))))
  1857. ;; Do nothing at affiliated keywords.
  1858. (org-test-with-temp-text "#+NAME: para\nSome\ntext."
  1859. (let ((fill-column 20))
  1860. (org-element-fill-paragraph)
  1861. (should (equal (buffer-string) "#+NAME: para\nSome\ntext.")))))
  1862. (provide 'test-org-element)
  1863. ;;; test-org-element.el ends here