From b523a3edf52c0e335f7409b183fc0c914e93179a Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 8 Aug 2012 13:55:18 +0200 Subject: [PATCH] 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. --- lisp/org-element.el | 35 ++--- lisp/org.el | 2 +- testing/lisp/test-org-element.el | 313 -------------------------------------- testing/lisp/test-org.el | 321 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 329 insertions(+), 342 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index f50098a67..0ca6231c7 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 85221b33b..667f85a80 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 1af1d073c..81b221377 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 3d37e4e77..9f59a7cdd 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 -- 2.11.4.GIT