mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-12-28 10:56:57 +00:00
Fix tests
* lisp/org-element.el: Update code commets. * testing/lisp/test-org-element.el: Remove tests for renamed navigation and manipulation fuctions. * testing/lisp/test-org.el: Add tests for renamed navigation and manipulation functions.
This commit is contained in:
parent
ee483e98f7
commit
b523a3edf5
@ -100,10 +100,9 @@
|
||||
;; The penultimate part is the cradle of an interpreter for the
|
||||
;; obtained parse tree: `org-element-interpret-data'.
|
||||
;;
|
||||
;; The library ends by furnishing a set of interactive tools for
|
||||
;; element's navigation and manipulation, mostly based on
|
||||
;; `org-element-at-point' function, and a way to give information
|
||||
;; about document structure around point with `org-element-context'.
|
||||
;; The library ends by furnishing `org-element-at-point' function, and
|
||||
;; a way to give information about document structure around point
|
||||
;; with `org-element-context'.
|
||||
|
||||
|
||||
;;; Code:
|
||||
@ -4012,13 +4011,15 @@ indentation is not done with TAB characters."
|
||||
;; containing point. This is the job of `org-element-at-point'. It
|
||||
;; basically jumps back to the beginning of section containing point
|
||||
;; and moves, element after element, with
|
||||
;; `org-element--current-element' until the container is found.
|
||||
;; `org-element--current-element' until the container is found. Note:
|
||||
;; When using `org-element-at-point', secondary values are never
|
||||
;; parsed since the function focuses on elements, not on objects.
|
||||
;;
|
||||
;; At a deeper level, `org-element-context' lists all elements and
|
||||
;; objects containing point.
|
||||
;;
|
||||
;; Note: When using `org-element-at-point', secondary values are never
|
||||
;; parsed since the function focuses on elements, not on objects.
|
||||
;; `org-element-nested-p' and `org-element-swap-A-B' may be used
|
||||
;; internally by navigation and manipulation tools.
|
||||
|
||||
;;;###autoload
|
||||
(defun org-element-at-point (&optional keep-trail)
|
||||
@ -4193,25 +4194,6 @@ and :post-blank properties."
|
||||
(setq parent object end cend)))))))
|
||||
parent))))))
|
||||
|
||||
|
||||
;; Once the local structure around point is well understood, it's easy
|
||||
;; to implement some replacements for `forward-paragraph'
|
||||
;; `backward-paragraph', namely `org-element-forward' and
|
||||
;; `org-element-backward'.
|
||||
;;
|
||||
;; Also, `org-transpose-elements' mimics the behaviour of
|
||||
;; `transpose-words', at the element's level, whereas
|
||||
;; `org-element-drag-forward', `org-element-drag-backward', and
|
||||
;; `org-element-up' generalize, respectively, functions
|
||||
;; `org-subtree-down', `org-subtree-up' and `outline-up-heading'.
|
||||
;;
|
||||
;; `org-element-unindent-buffer' will, as its name almost suggests,
|
||||
;; smartly remove global indentation from buffer, making it possible
|
||||
;; to use Org indent mode on a file created with hard indentation.
|
||||
;;
|
||||
;; `org-element-nested-p' and `org-element-swap-A-B' are used
|
||||
;; internally by some of the previously cited tools.
|
||||
|
||||
(defsubst org-element-nested-p (elem-A elem-B)
|
||||
"Non-nil when elements ELEM-A and ELEM-B are nested."
|
||||
(let ((beg-A (org-element-property :begin elem-A))
|
||||
@ -4288,5 +4270,6 @@ end of ELEM-A."
|
||||
(cdr overlays))
|
||||
(goto-char (org-element-property :end elem-B)))))
|
||||
|
||||
|
||||
(provide 'org-element)
|
||||
;;; org-element.el ends here
|
||||
|
@ -20682,7 +20682,7 @@ hierarchy of headlines by UP levels before marking the subtree."
|
||||
((org-before-first-heading-p) (error "Not in a subtree"))
|
||||
(t (outline-previous-visible-heading 1))))
|
||||
(when up (while (and (> up 0) (org-up-heading-safe)) (decf up)))
|
||||
(org-element-mark-element))
|
||||
(org-mark-element))
|
||||
|
||||
;;; Indentation
|
||||
|
||||
|
@ -2299,319 +2299,6 @@ Paragraph \\alpha."
|
||||
(org-element-type
|
||||
(org-element-property :parent (org-element-context))))))))
|
||||
|
||||
(ert-deftest test-org-element/forward ()
|
||||
"Test `org-element-forward' specifications."
|
||||
;; 1. At EOB: should error.
|
||||
(org-test-with-temp-text "Some text\n"
|
||||
(goto-char (point-max))
|
||||
(should-error (org-element-forward)))
|
||||
;; 2. Standard move: expected to ignore blank lines.
|
||||
(org-test-with-temp-text "First paragraph.\n\n\nSecond paragraph."
|
||||
(org-element-forward)
|
||||
(should (looking-at "Second paragraph.")))
|
||||
;; 3. Headline tests.
|
||||
(org-test-with-temp-text "
|
||||
* Head 1
|
||||
** Head 1.1
|
||||
*** Head 1.1.1
|
||||
** Head 1.2"
|
||||
;; 3.1. At an headline beginning: move to next headline at the
|
||||
;; same level.
|
||||
(goto-line 3)
|
||||
(org-element-forward)
|
||||
(should (looking-at "** Head 1.2"))
|
||||
;; 3.2. At an headline beginning: move to parent headline if no
|
||||
;; headline at the same level.
|
||||
(goto-line 3)
|
||||
(org-element-forward)
|
||||
(should (looking-at "** Head 1.2")))
|
||||
;; 4. Greater element tests.
|
||||
(org-test-with-temp-text
|
||||
"#+BEGIN_CENTER\nInside.\n#+END_CENTER\n\nOutside."
|
||||
;; 4.1. At a greater element: expected to skip contents.
|
||||
(org-element-forward)
|
||||
(should (looking-at "Outside."))
|
||||
;; 4.2. At the end of greater element contents: expected to skip
|
||||
;; to the end of the greater element.
|
||||
(goto-line 2)
|
||||
(org-element-forward)
|
||||
(should (looking-at "Outside.")))
|
||||
;; 5. List tests.
|
||||
(org-test-with-temp-text "
|
||||
- item1
|
||||
|
||||
- sub1
|
||||
|
||||
- sub2
|
||||
|
||||
- sub3
|
||||
|
||||
Inner paragraph.
|
||||
|
||||
- item2
|
||||
|
||||
Outside."
|
||||
;; 5.1. At list top point: expected to move to the element after
|
||||
;; the list.
|
||||
(goto-line 2)
|
||||
(org-element-forward)
|
||||
(should (looking-at "Outside."))
|
||||
;; 5.2. Special case: at the first line of a sub-list, but not at
|
||||
;; beginning of line, move to next item.
|
||||
(goto-line 2)
|
||||
(forward-char)
|
||||
(org-element-forward)
|
||||
(should (looking-at "- item2"))
|
||||
(goto-line 4)
|
||||
(forward-char)
|
||||
(org-element-forward)
|
||||
(should (looking-at " - sub2"))
|
||||
;; 5.3 At sub-list beginning: expected to move after the sub-list.
|
||||
(goto-line 4)
|
||||
(org-element-forward)
|
||||
(should (looking-at " Inner paragraph."))
|
||||
;; 5.4. At sub-list end: expected to move outside the sub-list.
|
||||
(goto-line 8)
|
||||
(org-element-forward)
|
||||
(should (looking-at " Inner paragraph."))
|
||||
;; 5.5. At an item: expected to move to next item, if any.
|
||||
(goto-line 6)
|
||||
(org-element-forward)
|
||||
(should (looking-at " - sub3"))))
|
||||
|
||||
(ert-deftest test-org-element/backward ()
|
||||
"Test `org-element-backward' specifications."
|
||||
;; 1. At BOB (modulo some white spaces): should error.
|
||||
(org-test-with-temp-text " \nParagraph."
|
||||
(org-skip-whitespace)
|
||||
(should-error (org-element-backward)))
|
||||
;; 2. Not at the beginning of an element: move at its beginning.
|
||||
(org-test-with-temp-text "Paragraph1.\n\nParagraph2."
|
||||
(goto-line 3)
|
||||
(end-of-line)
|
||||
(org-element-backward)
|
||||
(should (looking-at "Paragraph2.")))
|
||||
;; 3. Headline tests.
|
||||
(org-test-with-temp-text "
|
||||
* Head 1
|
||||
** Head 1.1
|
||||
*** Head 1.1.1
|
||||
** Head 1.2"
|
||||
;; 3.1. At an headline beginning: move to previous headline at the
|
||||
;; same level.
|
||||
(goto-line 5)
|
||||
(org-element-backward)
|
||||
(should (looking-at "** Head 1.1"))
|
||||
;; 3.2. At an headline beginning: move to parent headline if no
|
||||
;; headline at the same level.
|
||||
(goto-line 3)
|
||||
(org-element-backward)
|
||||
(should (looking-at "* Head 1"))
|
||||
;; 3.3. At the first top-level headline: should error.
|
||||
(goto-line 2)
|
||||
(should-error (org-element-backward)))
|
||||
;; 4. At beginning of first element inside a greater element:
|
||||
;; expected to move to greater element's beginning.
|
||||
(org-test-with-temp-text "Before.\n#+BEGIN_CENTER\nInside.\n#+END_CENTER."
|
||||
(goto-line 3)
|
||||
(org-element-backward)
|
||||
(should (looking-at "#\\+BEGIN_CENTER")))
|
||||
;; 5. List tests.
|
||||
(org-test-with-temp-text "
|
||||
- item1
|
||||
|
||||
- sub1
|
||||
|
||||
- sub2
|
||||
|
||||
- sub3
|
||||
|
||||
Inner paragraph.
|
||||
|
||||
- item2
|
||||
|
||||
|
||||
Outside."
|
||||
;; 5.1. At beginning of sub-list: expected to move to the
|
||||
;; paragraph before it.
|
||||
(goto-line 4)
|
||||
(org-element-backward)
|
||||
(should (looking-at "item1"))
|
||||
;; 5.2. At an item in a list: expected to move at previous item.
|
||||
(goto-line 8)
|
||||
(org-element-backward)
|
||||
(should (looking-at " - sub2"))
|
||||
(goto-line 12)
|
||||
(org-element-backward)
|
||||
(should (looking-at "- item1"))
|
||||
;; 5.3. At end of list/sub-list: expected to move to list/sub-list
|
||||
;; beginning.
|
||||
(goto-line 10)
|
||||
(org-element-backward)
|
||||
(should (looking-at " - sub1"))
|
||||
(goto-line 15)
|
||||
(org-element-backward)
|
||||
(should (looking-at "- item1"))
|
||||
;; 5.4. At blank-lines before list end: expected to move to top
|
||||
;; item.
|
||||
(goto-line 14)
|
||||
(org-element-backward)
|
||||
(should (looking-at "- item1"))))
|
||||
|
||||
(ert-deftest test-org-element/up ()
|
||||
"Test `org-element-up' specifications."
|
||||
;; 1. At BOB or with no surrounding element: should error.
|
||||
(org-test-with-temp-text "Paragraph."
|
||||
(should-error (org-element-up)))
|
||||
(org-test-with-temp-text "* Head1\n* Head2"
|
||||
(goto-line 2)
|
||||
(should-error (org-element-up)))
|
||||
(org-test-with-temp-text "Paragraph1.\n\nParagraph2."
|
||||
(goto-line 3)
|
||||
(should-error (org-element-up)))
|
||||
;; 2. At an headline: move to parent headline.
|
||||
(org-test-with-temp-text "* Head1\n** Sub-Head1\n** Sub-Head2"
|
||||
(goto-line 3)
|
||||
(org-element-up)
|
||||
(should (looking-at "\\* Head1")))
|
||||
;; 3. Inside a greater element: move to greater element beginning.
|
||||
(org-test-with-temp-text
|
||||
"Before.\n#+BEGIN_CENTER\nParagraph1\nParagraph2\n#+END_CENTER\n"
|
||||
(goto-line 3)
|
||||
(org-element-up)
|
||||
(should (looking-at "#\\+BEGIN_CENTER")))
|
||||
;; 4. List tests.
|
||||
(org-test-with-temp-text "* Top
|
||||
- item1
|
||||
|
||||
- sub1
|
||||
|
||||
- sub2
|
||||
|
||||
Paragraph within sub2.
|
||||
|
||||
- item2"
|
||||
;; 4.1. Within an item: move to the item beginning.
|
||||
(goto-line 8)
|
||||
(org-element-up)
|
||||
(should (looking-at " - sub2"))
|
||||
;; 4.2. At an item in a sub-list: move to parent item.
|
||||
(goto-line 4)
|
||||
(org-element-up)
|
||||
(should (looking-at "- item1"))
|
||||
;; 4.3. At an item in top list: move to beginning of whole list.
|
||||
(goto-line 10)
|
||||
(org-element-up)
|
||||
(should (looking-at "- item1"))
|
||||
;; 4.4. Special case. At very top point: should move to parent of
|
||||
;; list.
|
||||
(goto-line 2)
|
||||
(org-element-up)
|
||||
(should (looking-at "\\* Top"))))
|
||||
|
||||
(ert-deftest test-org-element/down ()
|
||||
"Test `org-element-down' specifications."
|
||||
;; Error when the element hasn't got a recursive type.
|
||||
(org-test-with-temp-text "Paragraph."
|
||||
(should-error (org-element-down)))
|
||||
;; Error when the element has no contents
|
||||
(org-test-with-temp-text "* Headline"
|
||||
(should-error (org-element-down)))
|
||||
;; When at a plain-list, move to first item.
|
||||
(org-test-with-temp-text "- Item 1\n - Item 1.1\n - Item 2.2"
|
||||
(goto-line 2)
|
||||
(org-element-down)
|
||||
(should (looking-at " - Item 1.1")))
|
||||
(org-test-with-temp-text "#+NAME: list\n- Item 1"
|
||||
(org-element-down)
|
||||
(should (looking-at " Item 1")))
|
||||
;; When at a table, move to first row
|
||||
(org-test-with-temp-text "#+NAME: table\n| a | b |"
|
||||
(org-element-down)
|
||||
(should (looking-at " a | b |")))
|
||||
;; Otherwise, move inside the greater element.
|
||||
(org-test-with-temp-text "#+BEGIN_CENTER\nParagraph.\n#+END_CENTER"
|
||||
(org-element-down)
|
||||
(should (looking-at "Paragraph"))))
|
||||
|
||||
(ert-deftest test-org-element/drag-backward ()
|
||||
"Test `org-element-drag-backward' specifications."
|
||||
;; 1. Error when trying to move first element of buffer.
|
||||
(org-test-with-temp-text "Paragraph 1.\n\nParagraph 2."
|
||||
(should-error (org-element-drag-backward)))
|
||||
;; 2. Error when trying to swap nested elements.
|
||||
(org-test-with-temp-text "#+BEGIN_CENTER\nTest.\n#+END_CENTER"
|
||||
(forward-line)
|
||||
(should-error (org-element-drag-backward)))
|
||||
;; 3. Error when trying to swap an headline element and
|
||||
;; a non-headline element.
|
||||
(org-test-with-temp-text "Test.\n* Head 1"
|
||||
(forward-line)
|
||||
(should-error (org-element-drag-backward)))
|
||||
;; 4. Otherwise, swap elements, preserving column and blank lines
|
||||
;; between elements.
|
||||
(org-test-with-temp-text "Para1\n\n\nParagraph 2\n\nPara3"
|
||||
(search-forward "graph")
|
||||
(org-element-drag-backward)
|
||||
(should (equal (buffer-string) "Paragraph 2\n\n\nPara1\n\nPara3"))
|
||||
(should (looking-at " 2")))
|
||||
;; 5. Preserve visibility of elements and their contents.
|
||||
(org-test-with-temp-text "
|
||||
#+BEGIN_CENTER
|
||||
Text.
|
||||
#+END_CENTER
|
||||
- item 1
|
||||
#+BEGIN_QUOTE
|
||||
Text.
|
||||
#+END_QUOTE"
|
||||
(while (search-forward "BEGIN_" nil t) (org-cycle))
|
||||
(search-backward "- item 1")
|
||||
(org-element-drag-backward)
|
||||
(should
|
||||
(equal
|
||||
'((63 . 82) (26 . 48))
|
||||
(mapcar (lambda (ov) (cons (overlay-start ov) (overlay-end ov)))
|
||||
(overlays-in (point-min) (point-max)))))))
|
||||
|
||||
(ert-deftest test-org-element/drag-forward ()
|
||||
"Test `org-element-drag-forward' specifications."
|
||||
;; 1. Error when trying to move first element of buffer.
|
||||
(org-test-with-temp-text "Paragraph 1.\n\nParagraph 2."
|
||||
(goto-line 3)
|
||||
(should-error (org-element-drag-forward)))
|
||||
;; 2. Error when trying to swap nested elements.
|
||||
(org-test-with-temp-text "#+BEGIN_CENTER\nTest.\n#+END_CENTER"
|
||||
(forward-line)
|
||||
(should-error (org-element-drag-forward)))
|
||||
;; 3. Error when trying to swap a non-headline element and an
|
||||
;; headline.
|
||||
(org-test-with-temp-text "Test.\n* Head 1"
|
||||
(should-error (org-element-drag-forward)))
|
||||
;; 4. Otherwise, swap elements, preserving column and blank lines
|
||||
;; between elements.
|
||||
(org-test-with-temp-text "Paragraph 1\n\n\nPara2\n\nPara3"
|
||||
(search-forward "graph")
|
||||
(org-element-drag-forward)
|
||||
(should (equal (buffer-string) "Para2\n\n\nParagraph 1\n\nPara3"))
|
||||
(should (looking-at " 1")))
|
||||
;; 5. Preserve visibility of elements and their contents.
|
||||
(org-test-with-temp-text "
|
||||
#+BEGIN_CENTER
|
||||
Text.
|
||||
#+END_CENTER
|
||||
- item 1
|
||||
#+BEGIN_QUOTE
|
||||
Text.
|
||||
#+END_QUOTE"
|
||||
(while (search-forward "BEGIN_" nil t) (org-cycle))
|
||||
(search-backward "#+BEGIN_CENTER")
|
||||
(org-element-drag-forward)
|
||||
(should
|
||||
(equal
|
||||
'((63 . 82) (26 . 48))
|
||||
(mapcar (lambda (ov) (cons (overlay-start ov) (overlay-end ov)))
|
||||
(overlays-in (point-min) (point-max)))))))
|
||||
|
||||
|
||||
(provide 'test-org-element)
|
||||
;;; test-org-element.el ends here
|
||||
|
@ -372,9 +372,326 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/"
|
||||
(progn (transient-mark-mode 1)
|
||||
(forward-line 1)
|
||||
(let ((org-inlinetask-min-level 15)) (org-mark-subtree))
|
||||
(region-beginning))))))
|
||||
(region-beginning)))))))
|
||||
|
||||
|
||||
(provide 'test-org))
|
||||
|
||||
;; Navigation
|
||||
|
||||
(ert-deftest test-org/forward-element ()
|
||||
"Test `org-forward-element' specifications."
|
||||
;; 1. At EOB: should error.
|
||||
(org-test-with-temp-text "Some text\n"
|
||||
(goto-char (point-max))
|
||||
(should-error (org-forward-element)))
|
||||
;; 2. Standard move: expected to ignore blank lines.
|
||||
(org-test-with-temp-text "First paragraph.\n\n\nSecond paragraph."
|
||||
(org-forward-element)
|
||||
(should (looking-at "Second paragraph.")))
|
||||
;; 3. Headline tests.
|
||||
(org-test-with-temp-text "
|
||||
* Head 1
|
||||
** Head 1.1
|
||||
*** Head 1.1.1
|
||||
** Head 1.2"
|
||||
;; 3.1. At an headline beginning: move to next headline at the
|
||||
;; same level.
|
||||
(goto-line 3)
|
||||
(org-forward-element)
|
||||
(should (looking-at "** Head 1.2"))
|
||||
;; 3.2. At an headline beginning: move to parent headline if no
|
||||
;; headline at the same level.
|
||||
(goto-line 3)
|
||||
(org-forward-element)
|
||||
(should (looking-at "** Head 1.2")))
|
||||
;; 4. Greater element tests.
|
||||
(org-test-with-temp-text
|
||||
"#+BEGIN_CENTER\nInside.\n#+END_CENTER\n\nOutside."
|
||||
;; 4.1. At a greater element: expected to skip contents.
|
||||
(org-forward-element)
|
||||
(should (looking-at "Outside."))
|
||||
;; 4.2. At the end of greater element contents: expected to skip
|
||||
;; to the end of the greater element.
|
||||
(goto-line 2)
|
||||
(org-forward-element)
|
||||
(should (looking-at "Outside.")))
|
||||
;; 5. List tests.
|
||||
(org-test-with-temp-text "
|
||||
- item1
|
||||
|
||||
- sub1
|
||||
|
||||
- sub2
|
||||
|
||||
- sub3
|
||||
|
||||
Inner paragraph.
|
||||
|
||||
- item2
|
||||
|
||||
Outside."
|
||||
;; 5.1. At list top point: expected to move to the element after
|
||||
;; the list.
|
||||
(goto-line 2)
|
||||
(org-forward-element)
|
||||
(should (looking-at "Outside."))
|
||||
;; 5.2. Special case: at the first line of a sub-list, but not at
|
||||
;; beginning of line, move to next item.
|
||||
(goto-line 2)
|
||||
(forward-char)
|
||||
(org-forward-element)
|
||||
(should (looking-at "- item2"))
|
||||
(goto-line 4)
|
||||
(forward-char)
|
||||
(org-forward-element)
|
||||
(should (looking-at " - sub2"))
|
||||
;; 5.3 At sub-list beginning: expected to move after the sub-list.
|
||||
(goto-line 4)
|
||||
(org-forward-element)
|
||||
(should (looking-at " Inner paragraph."))
|
||||
;; 5.4. At sub-list end: expected to move outside the sub-list.
|
||||
(goto-line 8)
|
||||
(org-forward-element)
|
||||
(should (looking-at " Inner paragraph."))
|
||||
;; 5.5. At an item: expected to move to next item, if any.
|
||||
(goto-line 6)
|
||||
(org-forward-element)
|
||||
(should (looking-at " - sub3"))))
|
||||
|
||||
(ert-deftest test-org/backward-element ()
|
||||
"Test `org-backward-element' specifications."
|
||||
;; 1. At BOB (modulo some white spaces): should error.
|
||||
(org-test-with-temp-text " \nParagraph."
|
||||
(org-skip-whitespace)
|
||||
(should-error (org-backward-element)))
|
||||
;; 2. Not at the beginning of an element: move at its beginning.
|
||||
(org-test-with-temp-text "Paragraph1.\n\nParagraph2."
|
||||
(goto-line 3)
|
||||
(end-of-line)
|
||||
(org-backward-element)
|
||||
(should (looking-at "Paragraph2.")))
|
||||
;; 3. Headline tests.
|
||||
(org-test-with-temp-text "
|
||||
* Head 1
|
||||
** Head 1.1
|
||||
*** Head 1.1.1
|
||||
** Head 1.2"
|
||||
;; 3.1. At an headline beginning: move to previous headline at the
|
||||
;; same level.
|
||||
(goto-line 5)
|
||||
(org-backward-element)
|
||||
(should (looking-at "** Head 1.1"))
|
||||
;; 3.2. At an headline beginning: move to parent headline if no
|
||||
;; headline at the same level.
|
||||
(goto-line 3)
|
||||
(org-backward-element)
|
||||
(should (looking-at "* Head 1"))
|
||||
;; 3.3. At the first top-level headline: should error.
|
||||
(goto-line 2)
|
||||
(should-error (org-backward-element)))
|
||||
;; 4. At beginning of first element inside a greater element:
|
||||
;; expected to move to greater element's beginning.
|
||||
(org-test-with-temp-text "Before.\n#+BEGIN_CENTER\nInside.\n#+END_CENTER."
|
||||
(goto-line 3)
|
||||
(org-backward-element)
|
||||
(should (looking-at "#\\+BEGIN_CENTER")))
|
||||
;; 5. List tests.
|
||||
(org-test-with-temp-text "
|
||||
- item1
|
||||
|
||||
- sub1
|
||||
|
||||
- sub2
|
||||
|
||||
- sub3
|
||||
|
||||
Inner paragraph.
|
||||
|
||||
- item2
|
||||
|
||||
|
||||
Outside."
|
||||
;; 5.1. At beginning of sub-list: expected to move to the
|
||||
;; paragraph before it.
|
||||
(goto-line 4)
|
||||
(org-backward-element)
|
||||
(should (looking-at "item1"))
|
||||
;; 5.2. At an item in a list: expected to move at previous item.
|
||||
(goto-line 8)
|
||||
(org-backward-element)
|
||||
(should (looking-at " - sub2"))
|
||||
(goto-line 12)
|
||||
(org-backward-element)
|
||||
(should (looking-at "- item1"))
|
||||
;; 5.3. At end of list/sub-list: expected to move to list/sub-list
|
||||
;; beginning.
|
||||
(goto-line 10)
|
||||
(org-backward-element)
|
||||
(should (looking-at " - sub1"))
|
||||
(goto-line 15)
|
||||
(org-backward-element)
|
||||
(should (looking-at "- item1"))
|
||||
;; 5.4. At blank-lines before list end: expected to move to top
|
||||
;; item.
|
||||
(goto-line 14)
|
||||
(org-backward-element)
|
||||
(should (looking-at "- item1"))))
|
||||
|
||||
(ert-deftest test-org/up-element ()
|
||||
"Test `org-up-element' specifications."
|
||||
;; 1. At BOB or with no surrounding element: should error.
|
||||
(org-test-with-temp-text "Paragraph."
|
||||
(should-error (org-up-element)))
|
||||
(org-test-with-temp-text "* Head1\n* Head2"
|
||||
(goto-line 2)
|
||||
(should-error (org-up-element)))
|
||||
(org-test-with-temp-text "Paragraph1.\n\nParagraph2."
|
||||
(goto-line 3)
|
||||
(should-error (org-up-element)))
|
||||
;; 2. At an headline: move to parent headline.
|
||||
(org-test-with-temp-text "* Head1\n** Sub-Head1\n** Sub-Head2"
|
||||
(goto-line 3)
|
||||
(org-up-element)
|
||||
(should (looking-at "\\* Head1")))
|
||||
;; 3. Inside a greater element: move to greater element beginning.
|
||||
(org-test-with-temp-text
|
||||
"Before.\n#+BEGIN_CENTER\nParagraph1\nParagraph2\n#+END_CENTER\n"
|
||||
(goto-line 3)
|
||||
(org-up-element)
|
||||
(should (looking-at "#\\+BEGIN_CENTER")))
|
||||
;; 4. List tests.
|
||||
(org-test-with-temp-text "* Top
|
||||
- item1
|
||||
|
||||
- sub1
|
||||
|
||||
- sub2
|
||||
|
||||
Paragraph within sub2.
|
||||
|
||||
- item2"
|
||||
;; 4.1. Within an item: move to the item beginning.
|
||||
(goto-line 8)
|
||||
(org-up-element)
|
||||
(should (looking-at " - sub2"))
|
||||
;; 4.2. At an item in a sub-list: move to parent item.
|
||||
(goto-line 4)
|
||||
(org-up-element)
|
||||
(should (looking-at "- item1"))
|
||||
;; 4.3. At an item in top list: move to beginning of whole list.
|
||||
(goto-line 10)
|
||||
(org-up-element)
|
||||
(should (looking-at "- item1"))
|
||||
;; 4.4. Special case. At very top point: should move to parent of
|
||||
;; list.
|
||||
(goto-line 2)
|
||||
(org-up-element)
|
||||
(should (looking-at "\\* Top"))))
|
||||
|
||||
(ert-deftest test-org/down-element ()
|
||||
"Test `org-down-element' specifications."
|
||||
;; Error when the element hasn't got a recursive type.
|
||||
(org-test-with-temp-text "Paragraph."
|
||||
(should-error (org-down-element)))
|
||||
;; Error when the element has no contents
|
||||
(org-test-with-temp-text "* Headline"
|
||||
(should-error (org-down-element)))
|
||||
;; When at a plain-list, move to first item.
|
||||
(org-test-with-temp-text "- Item 1\n - Item 1.1\n - Item 2.2"
|
||||
(goto-line 2)
|
||||
(org-down-element)
|
||||
(should (looking-at " - Item 1.1")))
|
||||
(org-test-with-temp-text "#+NAME: list\n- Item 1"
|
||||
(org-down-element)
|
||||
(should (looking-at " Item 1")))
|
||||
;; When at a table, move to first row
|
||||
(org-test-with-temp-text "#+NAME: table\n| a | b |"
|
||||
(org-down-element)
|
||||
(should (looking-at " a | b |")))
|
||||
;; Otherwise, move inside the greater element.
|
||||
(org-test-with-temp-text "#+BEGIN_CENTER\nParagraph.\n#+END_CENTER"
|
||||
(org-down-element)
|
||||
(should (looking-at "Paragraph"))))
|
||||
|
||||
(ert-deftest test-org/drag-element-backward ()
|
||||
"Test `org-drag-element-backward' specifications."
|
||||
;; 1. Error when trying to move first element of buffer.
|
||||
(org-test-with-temp-text "Paragraph 1.\n\nParagraph 2."
|
||||
(should-error (org-drag-element-backward)))
|
||||
;; 2. Error when trying to swap nested elements.
|
||||
(org-test-with-temp-text "#+BEGIN_CENTER\nTest.\n#+END_CENTER"
|
||||
(forward-line)
|
||||
(should-error (org-drag-element-backward)))
|
||||
;; 3. Error when trying to swap an headline element and
|
||||
;; a non-headline element.
|
||||
(org-test-with-temp-text "Test.\n* Head 1"
|
||||
(forward-line)
|
||||
(should-error (org-drag-element-backward)))
|
||||
;; 4. Otherwise, swap elements, preserving column and blank lines
|
||||
;; between elements.
|
||||
(org-test-with-temp-text "Para1\n\n\nParagraph 2\n\nPara3"
|
||||
(search-forward "graph")
|
||||
(org-drag-element-backward)
|
||||
(should (equal (buffer-string) "Paragraph 2\n\n\nPara1\n\nPara3"))
|
||||
(should (looking-at " 2")))
|
||||
;; 5. Preserve visibility of elements and their contents.
|
||||
(org-test-with-temp-text "
|
||||
#+BEGIN_CENTER
|
||||
Text.
|
||||
#+END_CENTER
|
||||
- item 1
|
||||
#+BEGIN_QUOTE
|
||||
Text.
|
||||
#+END_QUOTE"
|
||||
(while (search-forward "BEGIN_" nil t) (org-cycle))
|
||||
(search-backward "- item 1")
|
||||
(org-drag-element-backward)
|
||||
(should
|
||||
(equal
|
||||
'((63 . 82) (26 . 48))
|
||||
(mapcar (lambda (ov) (cons (overlay-start ov) (overlay-end ov)))
|
||||
(overlays-in (point-min) (point-max)))))))
|
||||
|
||||
(ert-deftest test-org/drag-element-forward ()
|
||||
"Test `org-drag-element-forward' specifications."
|
||||
;; 1. Error when trying to move first element of buffer.
|
||||
(org-test-with-temp-text "Paragraph 1.\n\nParagraph 2."
|
||||
(goto-line 3)
|
||||
(should-error (org-drag-element-forward)))
|
||||
;; 2. Error when trying to swap nested elements.
|
||||
(org-test-with-temp-text "#+BEGIN_CENTER\nTest.\n#+END_CENTER"
|
||||
(forward-line)
|
||||
(should-error (org-drag-element-forward)))
|
||||
;; 3. Error when trying to swap a non-headline element and an
|
||||
;; headline.
|
||||
(org-test-with-temp-text "Test.\n* Head 1"
|
||||
(should-error (org-drag-element-forward)))
|
||||
;; 4. Otherwise, swap elements, preserving column and blank lines
|
||||
;; between elements.
|
||||
(org-test-with-temp-text "Paragraph 1\n\n\nPara2\n\nPara3"
|
||||
(search-forward "graph")
|
||||
(org-drag-element-forward)
|
||||
(should (equal (buffer-string) "Para2\n\n\nParagraph 1\n\nPara3"))
|
||||
(should (looking-at " 1")))
|
||||
;; 5. Preserve visibility of elements and their contents.
|
||||
(org-test-with-temp-text "
|
||||
#+BEGIN_CENTER
|
||||
Text.
|
||||
#+END_CENTER
|
||||
- item 1
|
||||
#+BEGIN_QUOTE
|
||||
Text.
|
||||
#+END_QUOTE"
|
||||
(while (search-forward "BEGIN_" nil t) (org-cycle))
|
||||
(search-backward "#+BEGIN_CENTER")
|
||||
(org-drag-element-forward)
|
||||
(should
|
||||
(equal
|
||||
'((63 . 82) (26 . 48))
|
||||
(mapcar (lambda (ov) (cons (overlay-start ov) (overlay-end ov)))
|
||||
(overlays-in (point-min) (point-max)))))))
|
||||
|
||||
|
||||
(provide 'test-org)
|
||||
|
||||
;;; test-org.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user