summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2012-08-08 13:55:18 +0200
committerNicolas Goaziou <n.goaziou@gmail.com>2012-08-08 13:58:14 +0200
commitb523a3edf52c0e335f7409b183fc0c914e93179a (patch)
tree3fa42085bb4f3dd1eb7fb8b14dfa641dd5db4fbb
parentee483e98f79d62b30325e8b828c64ac18e80b91d (diff)
downloadorg-mode-b523a3edf52c0e335f7409b183fc0c914e93179a.tar.gz
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.
-rw-r--r--lisp/org-element.el35
-rw-r--r--lisp/org.el2
-rw-r--r--testing/lisp/test-org-element.el313
-rw-r--r--testing/lisp/test-org.el321
4 files changed, 329 insertions, 342 deletions
diff --git a/lisp/org-element.el b/lisp/org-element.el
index f50098a..0ca6231 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -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
diff --git a/lisp/org.el b/lisp/org.el
index 85221b3..667f85a 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -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
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 1af1d07..81b2213 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -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
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 3d37e4e..9f59a7c 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -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)))))))
+
+
+
+;; 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))
+(provide 'test-org)
;;; test-org.el ends here