From f300d04ec5bf2f5c8f8279a10ff6705eb315701a Mon Sep 17 00:00:00 2001 From: Panagiotis Vlantis Date: Sun, 9 Apr 2023 10:44:28 +0300 Subject: [PATCH] Tests: Tag hierarchy aware queries --- tests/data-tags-with-hierarchy.org | 21 +++++ tests/test-org-ql.el | 138 ++++++++++++++++++++++++++++- 2 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 tests/data-tags-with-hierarchy.org diff --git a/tests/data-tags-with-hierarchy.org b/tests/data-tags-with-hierarchy.org new file mode 100644 index 0000000..e52b437 --- /dev/null +++ b/tests/data-tags-with-hierarchy.org @@ -0,0 +1,21 @@ +# This file is currently used to test org-file-tags with tag hierarchies. + +#+FILETAGS: :groceries: +#+TAGS: [ food : produce meat ] +#+TAGS: [ produce : fruit vegetable ] +#+TAGS: [ meat : poultry beef fish ] + +* Meat +** Poultry :poultry: +*** Chicken :like: +*** Duck +** Beef :beef: +** Fish :fish: +*** Tuna +*** Salmon :like: +* Fruit :fruit: +** Blueberry +** Strawberry +* Vegetable :vegetable: +** Broccoli +** Potato diff --git a/tests/test-org-ql.el b/tests/test-org-ql.el index 5f9463f..4bc51dd 100644 --- a/tests/test-org-ql.el +++ b/tests/test-org-ql.el @@ -1487,7 +1487,33 @@ with keyword arg NOW in PLIST." :buffer (org-ql-test-data-buffer "data-file-tags.org")) (org-ql-expect ('(tags "fruit")) '("Fruit" "Blueberry" "Strawberry") - :buffer (org-ql-test-data-buffer "data-file-tags.org")))) + :buffer (org-ql-test-data-buffer "data-file-tags.org"))) + + (org-ql-it "with tag hierarchy" + (org-ql-expect ('(tags "groceries")) + '("Meat" "Poultry" "Chicken" "Duck" "Beef" "Fish" "Tuna" "Salmon" "Fruit" "Blueberry" "Strawberry" "Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "food")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "meat")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "fish")) + '("Fish" "Tuna" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "beef")) + '("Beef") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "produce")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "vegetable")) + '("Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags "fruit")) + '("Fruit" "Blueberry" "Strawberry") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")))) (describe "(tags-inherited)" @@ -1518,7 +1544,33 @@ with keyword arg NOW in PLIST." :buffer (org-ql-test-data-buffer "data-file-tags.org")) (org-ql-expect ('(tags-inherited "fruit")) '("Blueberry" "Strawberry") - :buffer (org-ql-test-data-buffer "data-file-tags.org")))) + :buffer (org-ql-test-data-buffer "data-file-tags.org"))) + + (org-ql-it "with tag hierarchy" + (org-ql-expect ('(tags-inherited "groceries")) + '("Meat" "Poultry" "Chicken" "Duck" "Beef" "Fish" "Tuna" "Salmon" "Fruit" "Blueberry" "Strawberry" "Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "food")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "meat")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "fish")) + '("Tuna" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "beef")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "produce")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "vegetable")) + '("Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-inherited "fruit")) + '("Blueberry" "Strawberry") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")))) (describe "(tags-local)" @@ -1548,7 +1600,33 @@ with keyword arg NOW in PLIST." :buffer (org-ql-test-data-buffer "data-file-tags.org")) (org-ql-expect ('(tags-local "fruit")) '("Fruit") - :buffer (org-ql-test-data-buffer "data-file-tags.org")))) + :buffer (org-ql-test-data-buffer "data-file-tags.org"))) + + (org-ql-it "with tag hierarchy" + (org-ql-expect ('(tags-local "groceries")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "food")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "meat")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "fish")) + '("Fish") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "beef")) + '("Beef") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "produce")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "vegetable")) + '("Vegetable") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(tags-local "fruit")) + '("Fruit") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")))) (describe "(tags-all), (tags&)" @@ -1591,6 +1669,60 @@ with keyword arg NOW in PLIST." '("Fruit" "Blueberry" "Strawberry") :buffer (org-ql-test-data-buffer "data-file-tags.org")))) + (describe "(group-tags)" + + (org-ql-it "with tag hierarchy" + (org-ql-expect ('(group-tags "groceries")) + '("Meat" "Poultry" "Chicken" "Duck" "Beef" "Fish" "Tuna" "Salmon" "Fruit" "Blueberry" "Strawberry" "Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "food")) + '("Poultry" "Chicken" "Duck" "Beef" "Fish" "Tuna" "Salmon" "Fruit" "Blueberry" "Strawberry" "Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "meat")) + '("Poultry" "Chicken" "Duck" "Beef" "Fish" "Tuna" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "fish")) + '("Fish" "Tuna" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "beef")) + '("Beef") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "produce")) + '("Fruit" "Blueberry" "Strawberry" "Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "vegetable")) + '("Vegetable" "Broccoli" "Potato") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags "fruit")) + '("Fruit" "Blueberry" "Strawberry") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")))) + + (describe "(group-tags-all), (group-tags&)" + + (org-ql-it "with tag hierarchy" + (org-ql-expect ('(group-tags-all "groceries" "like")) + '("Chicken" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags-all "poultry" "like")) + '("Chicken") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags-all "fish" "like")) + '("Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags-all "vegetables" "like")) + nil + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")))) + + (describe "(group-tags-regexp), (group-tags*)" + + (org-ql-it "with tag hierarchy" + (org-ql-expect ('(group-tags-regexp ".*ke.*")) + '("Chicken" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")) + (org-ql-expect ('(group-tags-regexp ".*ea.*")) + '("Poultry" "Chicken" "Duck" "Beef" "Fish" "Tuna" "Salmon") + :buffer (org-ql-test-data-buffer "data-tags-with-hierarchy.org")))) + (describe "(ts)" (describe "active"