Explorar o código

Merge branch 'maint'

Kyle Meyer %!s(int64=7) %!d(string=hai) anos
pai
achega
6fee6b6cde
Modificáronse 3 ficheiros con 272 adicións e 7 borrados
  1. 8 7
      contrib/lisp/org-link-edit.el
  2. 68 0
      testing/lisp/test-org-list.el
  3. 196 0
      testing/lisp/test-org.el

+ 8 - 7
contrib/lisp/org-link-edit.el

@@ -5,7 +5,7 @@
 ;; Author:  Kyle Meyer <kyle@kyleam.com>
 ;; URL: https://gitlab.com/kyleam/org-link-edit
 ;; Keywords: convenience
-;; Version: 1.1.0
+;; Version: 1.1.1
 ;; Package-Requires: ((cl-lib "0.5") (org "8.2.10"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -373,17 +373,18 @@ END."
               (progn (goto-char pt)
                      (org-link-edit--on-link-p)))
       (user-error "Cannot transport next link with point on a link"))
-    (goto-char (car desc-bounds))
-    (cl-multiple-value-bind (link-beg link-end link desc)
+    (goto-char (or (car desc-bounds) pt))
+    (cl-multiple-value-bind (link-beg link-end link orig-desc)
         (org-link-edit--next-link-data previous)
-      (unless (or (not desc-bounds) (= (length desc) 0))
+      (unless (or (not desc-bounds) (= (length orig-desc) 0))
         (user-error "Link already has a description"))
       (delete-region link-beg link-end)
       (insert (org-make-link-string
                link
-               (and desc-bounds
-                    (delete-and-extract-region (car desc-bounds)
-                                               (cdr desc-bounds))))))))
+               (if desc-bounds
+                   (delete-and-extract-region (car desc-bounds)
+                                              (cdr desc-bounds))
+                 orig-desc))))))
 
 (provide 'org-link-edit)
 ;;; org-link-edit.el ends here

+ 68 - 0
testing/lisp/test-org-list.el

@@ -1012,6 +1012,74 @@
 	    (org-toggle-item t)
 	    (buffer-string)))))
 
+(ert-deftest test-org-list/sort ()
+  "Test `org-sort-list'."
+  ;; Sort alphabetically.
+  (should
+   (equal "- abc\n- def\n- xyz\n"
+	  (org-test-with-temp-text "- def\n- xyz\n- abc\n"
+	    (org-sort-list nil ?a)
+	    (buffer-string))))
+  (should
+   (equal "- xyz\n- def\n- abc\n"
+	  (org-test-with-temp-text "- def\n- xyz\n- abc\n"
+	    (org-sort-list nil ?A)
+	    (buffer-string))))
+  ;; Sort numerically.
+  (should
+   (equal "- 1\n- 2\n- 10\n"
+	  (org-test-with-temp-text "- 10\n- 1\n- 2\n"
+	    (org-sort-list nil ?n)
+	    (buffer-string))))
+  (should
+   (equal "- 10\n- 2\n- 1\n"
+	  (org-test-with-temp-text "- 10\n- 1\n- 2\n"
+	    (org-sort-list nil ?N)
+	    (buffer-string))))
+  ;; Sort by checked status.
+  (should
+   (equal "- [ ] xyz\n- [ ] def\n- [X] abc\n"
+	  (org-test-with-temp-text "- [X] abc\n- [ ] xyz\n- [ ] def\n"
+	    (org-sort-list nil ?x)
+	    (buffer-string))))
+  (should
+   (equal "- [X] abc\n- [ ] xyz\n- [ ] def\n"
+	  (org-test-with-temp-text "- [X] abc\n- [ ] xyz\n- [ ] def\n"
+	    (org-sort-list nil ?X)
+	    (buffer-string))))
+  ;; Sort by time stamp.
+  (should
+   (equal "- <2017-05-08 Mon>\n- <2017-05-09 Tue>\n- <2018-05-09 Wed>\n"
+	  (org-test-with-temp-text
+	      "- <2018-05-09 Wed>\n- <2017-05-09 Tue>\n- <2017-05-08 Mon>\n"
+	    (org-sort-list nil ?t)
+	    (buffer-string))))
+  (should
+   (equal "- <2018-05-09 Wed>\n- <2017-05-09 Tue>\n- <2017-05-08 Mon>\n"
+	  (org-test-with-temp-text
+	      "- <2018-05-09 Wed>\n- <2017-05-09 Tue>\n- <2017-05-08 Mon>\n"
+	    (org-sort-list nil ?T)
+	    (buffer-string))))
+  ;; Sort by custom function.
+  (should
+   (equal "- b\n- aa\n- ccc\n"
+	  (org-test-with-temp-text "- ccc\n- b\n- aa\n"
+	    (org-sort-list nil ?f
+			   (lambda ()
+			     (length (buffer-substring (point-at-bol)
+						       (point-at-eol))))
+			   #'<)
+	    (buffer-string))))
+  (should
+   (equal "- ccc\n- aa\n- b\n"
+	  (org-test-with-temp-text "- ccc\n- b\n- aa\n"
+	    (org-sort-list nil ?F
+			   (lambda ()
+			     (length (buffer-substring (point-at-bol)
+						       (point-at-eol))))
+			   #'<)
+	    (buffer-string)))))
+
 
 ;;; Radio Lists
 

+ 196 - 0
testing/lisp/test-org.el

@@ -2598,6 +2598,202 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/"
    (org-test-with-temp-text "xx abc<point> xx"
      (org-in-regexp "abc" nil t))))
 
+(ert-deftest test-org/sort-entries ()
+  "Test `org-sort-entries'."
+  ;; Sort alphabetically.
+  (should
+   (equal "\n* abc\n* def\n* xyz\n"
+	  (org-test-with-temp-text "\n* def\n* xyz\n* abc\n"
+	    (org-sort-entries nil ?a)
+	    (buffer-string))))
+  (should
+   (equal "\n* xyz\n* def\n* abc\n"
+	  (org-test-with-temp-text "\n* def\n* xyz\n* abc\n"
+	    (org-sort-entries nil ?A)
+	    (buffer-string))))
+  ;; Sort numerically.
+  (should
+   (equal "\n* 1\n* 2\n* 10\n"
+	  (org-test-with-temp-text "\n* 10\n* 1\n* 2\n"
+	    (org-sort-entries nil ?n)
+	    (buffer-string))))
+  (should
+   (equal "\n* 10\n* 2\n* 1\n"
+	  (org-test-with-temp-text "\n* 10\n* 1\n* 2\n"
+	    (org-sort-entries nil ?N)
+	    (buffer-string))))
+  ;; Sort by custom function.
+  (should
+   (equal "\n* b\n* aa\n* ccc\n"
+	  (org-test-with-temp-text "\n* ccc\n* b\n* aa\n"
+	    (org-sort-entries nil ?f
+			      (lambda ()
+				(length (buffer-substring (point-at-bol)
+							  (point-at-eol))))
+			      #'<)
+	    (buffer-string))))
+  (should
+   (equal "\n* ccc\n* aa\n* b\n"
+	  (org-test-with-temp-text "\n* ccc\n* b\n* aa\n"
+	    (org-sort-entries nil ?F
+			      (lambda ()
+				(length (buffer-substring (point-at-bol)
+							  (point-at-eol))))
+			      #'<)
+	    (buffer-string))))
+  ;; Sort by TODO keyword.
+  (should
+   (equal "\n* TODO h1\n* TODO h3\n* DONE h2\n"
+	  (org-test-with-temp-text
+	      "\n* TODO h1\n* DONE h2\n* TODO h3\n"
+	    (org-sort-entries nil ?o)
+	    (buffer-string))))
+  (should
+   (equal "\n* DONE h2\n* TODO h1\n* TODO h3\n"
+	  (org-test-with-temp-text
+	      "\n* TODO h1\n* DONE h2\n* TODO h3\n"
+	    (org-sort-entries nil ?O)
+	    (buffer-string))))
+  ;; Sort by priority.
+  (should
+   (equal "\n* [#A] h2\n* [#B] h3\n* [#C] h1\n"
+	  (org-test-with-temp-text
+	      "\n* [#C] h1\n* [#A] h2\n* [#B] h3\n"
+	    (org-sort-entries nil ?p)
+	    (buffer-string))))
+  (should
+   (equal "\n* [#C] h1\n* [#B] h3\n* [#A] h2\n"
+	  (org-test-with-temp-text
+	      "\n* [#C] h1\n* [#A] h2\n* [#B] h3\n"
+	    (org-sort-entries nil ?P)
+	    (buffer-string))))
+  ;; Sort by creation time.
+  (should
+   (equal "
+* h3
+  [2017-05-08 Mon]
+* h2
+  [2017-05-09 Tue]
+* h1
+  [2018-05-09 Wed]
+"
+	  (org-test-with-temp-text
+	      "
+* h1
+  [2018-05-09 Wed]
+* h2
+  [2017-05-09 Tue]
+* h3
+  [2017-05-08 Mon]
+"
+	    (org-sort-entries nil ?c)
+	    (buffer-string))))
+
+  ;; Sort by scheduled date.
+  (should
+   (equal "
+* TODO h4
+SCHEDULED: <2017-05-06 Sat>
+* TODO h3
+SCHEDULED: <2017-05-08 Mon>
+* TODO h2
+DEADLINE: <2017-05-09 Tue>
+* TODO h1
+DEADLINE: <2017-05-07 Sun>
+"
+	  (org-test-with-temp-text
+	      "
+* TODO h2
+DEADLINE: <2017-05-09 Tue>
+* TODO h1
+DEADLINE: <2017-05-07 Sun>
+* TODO h3
+SCHEDULED: <2017-05-08 Mon>
+* TODO h4
+SCHEDULED: <2017-05-06 Sat>
+"
+	    (org-sort-entries nil ?s)
+	    (buffer-string))))
+  ;; Sort by deadline date.
+  (should
+   (equal "
+* TODO h1
+DEADLINE: <2017-05-07 Sun>
+* TODO h2
+DEADLINE: <2017-05-09 Tue>
+* TODO h3
+SCHEDULED: <2017-05-08 Mon>
+* TODO h4
+SCHEDULED: <2017-05-06 Sat>
+"
+	  (org-test-with-temp-text
+	      "
+* TODO h2
+DEADLINE: <2017-05-09 Tue>
+* TODO h1
+DEADLINE: <2017-05-07 Sun>
+* TODO h3
+SCHEDULED: <2017-05-08 Mon>
+* TODO h4
+SCHEDULED: <2017-05-06 Sat>
+"
+	    (org-sort-entries nil ?d)
+	    (buffer-string))))
+  ;; Sort by any date/time
+  (should
+   (equal "
+* TODO h4
+SCHEDULED: <2017-05-06 Sat>
+* TODO h1
+DEADLINE: <2017-05-07 Sun>
+* TODO h3
+SCHEDULED: <2017-05-08 Mon>
+* TODO h2
+DEADLINE: <2017-05-09 Tue>
+"
+	  (org-test-with-temp-text
+	      "
+* TODO h2
+DEADLINE: <2017-05-09 Tue>
+* TODO h1
+DEADLINE: <2017-05-07 Sun>
+* TODO h3
+SCHEDULED: <2017-05-08 Mon>
+* TODO h4
+SCHEDULED: <2017-05-06 Sat>
+"
+	    (org-sort-entries nil ?t)
+	    (buffer-string))))
+  ;; Sort by clocking time.
+  (should
+   (equal "
+* clocked h2
+  :LOGBOOK:
+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07
+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:10] =>  0:10
+  :END:
+* clocked h1
+  :LOGBOOK:
+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07
+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:12] =>  0:12
+  :END:
+"
+	  (org-test-with-temp-text
+	      "
+* clocked h1
+  :LOGBOOK:
+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07
+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:12] =>  0:12
+  :END:
+* clocked h2
+  :LOGBOOK:
+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07
+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:10] =>  0:10
+  :END:
+"
+	    (org-sort-entries nil ?k)
+	    (buffer-string)))))
+
 
 ;;; Navigation