org: Improved consistency + tests

* lisp/org.el (org-get-valid-level): The function now returns 1 for
  parameters level=0, change=1 and `org-odd-levels-only'=t.  Before
  it returned 3.
This commit is contained in:
Marco Wahl 2017-01-17 22:59:48 +01:00
parent 738d3b4def
commit 69b22b6590
2 changed files with 35 additions and 5 deletions

View File

@ -8262,13 +8262,14 @@ time to headlines when structure editing, based on the value of
(if org-odd-levels-only 2 1)) (if org-odd-levels-only 2 1))
(defun org-get-valid-level (level &optional change) (defun org-get-valid-level (level &optional change)
"Rectify a level change under the influence of `org-odd-levels-only' "Rectify a level change under the influence of `org-odd-levels-only'.
LEVEL is a current level, CHANGE is by how much the level should be LEVEL is a current level, CHANGE is by how much the level should
modified. Even if CHANGE is nil, LEVEL may be returned modified because be modified. Even if CHANGE is nil, LEVEL may be returned
even level numbers will become the next higher odd number." modified because even level numbers will become the next higher
odd number. Returns values greater than 0."
(if org-odd-levels-only (if org-odd-levels-only
(cond ((or (not change) (= 0 change)) (1+ (* 2 (/ level 2)))) (cond ((or (not change) (= 0 change)) (1+ (* 2 (/ level 2))))
((> change 0) (1+ (* 2 (/ (+ level (* 2 change)) 2)))) ((> change 0) (1+ (* 2 (/ (+ (1- level) (* 2 change)) 2))))
((< change 0) (max 1 (1+ (* 2 (/ (+ level (* 2 change)) 2)))))) ((< change 0) (max 1 (1+ (* 2 (/ (+ level (* 2 change)) 2))))))
(max 1 (+ level (or change 0))))) (max 1 (+ level (or change 0)))))

View File

@ -3786,6 +3786,35 @@ Text.
(forward-line) (forward-line)
(org-get-indentation))))) (org-get-indentation)))))
(ert-deftest test-org/org-get-valid-level ()
"Test function `org-get-valid-level' specifications."
(let ((org-odd-levels-only nil))
(should (equal 1 (org-get-valid-level 0 0)))
(should (equal 1 (org-get-valid-level 0 1)))
(should (equal 2 (org-get-valid-level 0 2)))
(should (equal 3 (org-get-valid-level 0 3)))
(should (equal 1 (org-get-valid-level 1 0)))
(should (equal 2 (org-get-valid-level 1 1)))
(should (equal 23 (org-get-valid-level 1 22)))
(should (equal 1 (org-get-valid-level 1 -1)))
(should (equal 1 (org-get-valid-level 2 -1))))
(let ((org-odd-levels-only t))
(should (equal 1 (org-get-valid-level 0 0)))
(should (equal 1 (org-get-valid-level 0 1)))
(should (equal 3 (org-get-valid-level 0 2)))
(should (equal 5 (org-get-valid-level 0 3)))
(should (equal 1 (org-get-valid-level 1 0)))
(should (equal 3 (org-get-valid-level 1 1)))
(should (equal 3 (org-get-valid-level 2 1)))
(should (equal 5 (org-get-valid-level 3 1)))
(should (equal 5 (org-get-valid-level 4 1)))
(should (equal 43 (org-get-valid-level 1 21)))
(should (equal 1 (org-get-valid-level 1 -1)))
(should (equal 1 (org-get-valid-level 2 -1)))
(should (equal 1 (org-get-valid-level 3 -1)))
(should (equal 3 (org-get-valid-level 4 -1)))
(should (equal 3 (org-get-valid-level 5 -1)))))
;;; Planning ;;; Planning