I've attached an updated patch. This one has a test where we actually don't sort tags by using the `ignore' function.
Ihor Radchenko <yanta...@posteo.net> writes: >> + ;; Sorting doesn't care about `org-tag-alist'. This is only >> + ;; here for later when we add sorting methods that do >> .... > > Then, please refrain from setting alist in this patch and add it later, > when testing the relevant methods. Done. Now my tag names don't really make sense but I suppose that's not a big issue. >> + (org-test-agenda-with-agenda >> + (string-join >> + '("* TODO group_a :group_a:" >> + "* TODO tag_a_1 :tag_a_1:" >> + "* TODO tag_a_2 :tag_a_2:" >> + "* TODO tag_b_1 :tag_b_1:" >> + "* TODO tag_b_2 :tag_b_2:" >> + "* TODO groupless :groupless:" >> + "* TODO lonely :lonely:") >> + "\n") >> + (dolist (org-tags-sort-function '(nil org-string< org-string>)) >> + (should >> + (string-equal >> + (progn >> + (org-agenda nil "f") >> + (substring-no-properties (buffer-string))) >> + (pcase org-tags-sort-function >> + ;; TODO: a value of `nil' sorts it! That's not what the >> + ;; customize menu of `org-tags-sort-function' says! It >> + ;; says "No sorting". > > Right. When sort function is not set agenda specifically (but not other > users of org-tags-sort-function) falls back to alphabetical sorting. As far as I can tell the only place where it doesn't fall back is in `org-set-tags'. > In fact, the docstring does not at all mention that > `org-tags-sort-function' is honored at all: > > (defcustom org-agenda-sorting-strategy ... > ... > tag-up Sort alphabetically by last tag, A-Z. > tag-down Sort alphabetically by last tag, Z-A. > > We need to fix this docstring documenting `org-tags-sort-function', I think. I don't understand what is happening in `org-entries-lessp' or how it even manages to use `org-agenda-sorting-strategy' so I'm going to refrain from trying to document things I don't understand. >> + ((or 'nil 'org-string<) >> + >> "group_a\ngroupless\nlonely\ntag_a_1\ntag_a_2\ntag_b_1\ntag_b_2\n") >> + ('org-string> >> + >> "tag_b_2\ntag_b_1\ntag_a_2\ntag_a_1\nlonely\ngroupless\ngroup_a\n")))))))) > > Nitpick: it would be more readable to use `string-join' here as well. Done
>From 04fe8d44aba77b79a3a0f6ad332a0fb07bdb21a2 Mon Sep 17 00:00:00 2001 From: Morgan Smith <morgan.j.sm...@outlook.com> Date: Sat, 15 Jun 2024 11:27:34 -0400 Subject: [PATCH] Testing: Add tests for `org-tags-sort-function' * testing/lisp/test-org-agenda.el (test-org-agenda/tags-sorting): New test. --- testing/lisp/test-org-agenda.el | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/testing/lisp/test-org-agenda.el b/testing/lisp/test-org-agenda.el index 778f91e8e..a06d02064 100644 --- a/testing/lisp/test-org-agenda.el +++ b/testing/lisp/test-org-agenda.el @@ -655,6 +655,50 @@ Sunday 7 January 2024 (buffer-string)))))) (org-test-agenda--kill-all-agendas)))) +(ert-deftest test-org-agenda/tags-sorting () + "Test if `org-agenda' sorts tags according to `org-tags-sort-function'." + (let ((org-agenda-custom-commands + '(("f" "no fluff" todo "" + ((org-agenda-todo-keyword-format "") + (org-agenda-overriding-header "") + (org-agenda-prefix-format "") + (org-agenda-remove-tags t) + (org-agenda-sorting-strategy '(tag-up))))))) + (org-test-agenda-with-agenda + (string-join + '("* TODO group_a :group_a:" + "* TODO tag_a_1 :tag_a_1:" + "* TODO tag_a_2 :tag_a_2:" + "* TODO tag_b_1 :tag_b_1:" + "* TODO tag_b_2 :tag_b_2:" + "* TODO groupless :groupless:" + "* TODO lonely :lonely:") + "\n") + (dolist (org-tags-sort-function '(nil org-string< org-string> ignore)) + (should + (string-equal + (string-trim + (progn + (org-agenda nil "f") + (substring-no-properties (buffer-string)))) + (pcase org-tags-sort-function + ;; Not sorted + ('ignore + (string-join + '("group_a" "tag_a_1" "tag_a_2" "tag_b_1" "tag_b_2" "groupless" "lonely") + "\n")) + ;; TODO: a value of `nil' sorts it! That's not what the + ;; customize menu of `org-tags-sort-function' says! It + ;; says "No sorting". + ((or 'nil 'org-string< 'always) + (string-join + '("group_a" "groupless" "lonely" "tag_a_1" "tag_a_2" "tag_b_1" "tag_b_2") + "\n")) + ('org-string> + (string-join + '("tag_b_2" "tag_b_1" "tag_a_2" "tag_a_1" "lonely" "groupless" "group_a") + "\n"))))))))) + (ert-deftest test-org-agenda/goto-date () "Test `org-agenda-goto-date'." (unwind-protect -- 2.45.2