diff --git a/docs/Advanced/Styling.md b/docs/Advanced/Styling.md
index c7f69c695d..2ae701663d 100644
--- a/docs/Advanced/Styling.md
+++ b/docs/Advanced/Styling.md
@@ -329,6 +329,8 @@ li.task-list-item[data-task-status-type="IN_PROGRESS"] .task-list-item-checkbox
```
+We take the view that the status type [[Status Types#ON_HOLD|ON_HOLD]] is not (yet) actionable, and so have not included that value in the snippet.
+
For example, in Reading mode:

diff --git a/docs/Getting Started/About Getting Started.md b/docs/Getting Started/About Getting Started.md
index ef9679f30d..2f99bb0a73 100644
--- a/docs/Getting Started/About Getting Started.md
+++ b/docs/Getting Started/About Getting Started.md
@@ -32,7 +32,7 @@ publish: true
- [[Statuses]]
- Also known as Custom Checkboxes.
- In vanilla Obsidian tasks are either 'TODO' or 'DONE'.
- - Statuses allow you to track `IN_PROGRESS`, `CANCELLED` and `NON_TASK` actions too.
+ - Statuses allow you to track `IN_PROGRESS`, `ON_HOLD`, `CANCELLED` and `NON_TASK` actions too.
- [[Use Filename as Default Date]]
- Automatically set a scheduled date for tasks based on the name of their files.
- [[Tags]]
diff --git a/docs/Getting Started/Statuses.md b/docs/Getting Started/Statuses.md
index d22e61a55d..ad1e109288 100644
--- a/docs/Getting Started/Statuses.md
+++ b/docs/Getting Started/Statuses.md
@@ -61,7 +61,7 @@ Here is some more detail.
- **Next Status Symbol**
- the status symbol to use when the task is toggled.
- **Status Type**
- - one of `TODO`, `IN_PROGRESS`, `DONE`, `CANCELLED`, `NON_TASK`.
+ - one of `TODO`, `IN_PROGRESS`, `ON_HOLD`, `DONE`, `CANCELLED`, `NON_TASK`.
- Tasks needs to know the type of each status, so that it knows how to treat them when searching, and what to do when tasks with the status are toggled.
- types are searchable with `status.type`, for example `status.type is IN_PROGRESS`.
- Also available:
diff --git a/docs/Getting Started/Statuses/Example Statuses.md b/docs/Getting Started/Statuses/Example Statuses.md
index 6304bfdaa2..8b59d2fd5d 100644
--- a/docs/Getting Started/Statuses/Example Statuses.md
+++ b/docs/Getting Started/Statuses/Example Statuses.md
@@ -27,6 +27,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Todo"]:::TODO
2["In Progress"]:::IN_PROGRESS
@@ -64,6 +65,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Important"]:::TODO
2["Doing - Important"]:::IN_PROGRESS
@@ -103,6 +105,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Pro"]:::NON_TASK
2["Con"]:::NON_TASK
@@ -139,6 +142,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Bookmark"]:::NON_TASK
2["Example"]:::NON_TASK
diff --git a/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md b/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md
index 456366191e..a12c731f53 100644
--- a/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md
+++ b/docs/Getting Started/Statuses/Recurring Tasks and Custom Statuses.md
@@ -39,6 +39,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO
2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS
@@ -125,6 +126,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO
2["'Done'
[x] -> [-]
(DONE)"]:::DONE
@@ -183,6 +185,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Pro'
[P] -> [C]
(NON_TASK)"]:::NON_TASK
2["'Con'
[C] -> [P]
(NON_TASK)"]:::NON_TASK
diff --git a/docs/Getting Started/Statuses/Status Types.md b/docs/Getting Started/Statuses/Status Types.md
index 290a469bb4..ea09d1b799 100644
--- a/docs/Getting Started/Statuses/Status Types.md
+++ b/docs/Getting Started/Statuses/Status Types.md
@@ -15,10 +15,11 @@ With the new ability to create a variety of [[Custom Statuses]], Tasks needs to
- how to treat tasks when searching,
- and what to do when tasks with the status are toggled, both for adding or removing Done dates, and for creating new task recurrences.
-This was solved by the introduction of 'Status Types', which are simply a set of 5 possible types of status:
+This was solved by the introduction of 'Status Types', which are simply a set of 6 possible types of status:
- `TODO`
- `IN_PROGRESS`
+- `ON_HOLD`
- `DONE`
- `CANCELLED`
- `NON_TASK`
@@ -33,6 +34,13 @@ Self explanatory, we hope: this can be thought of as 'things not yet started'.
Use of this is totally optional. You may find it useful to be able to prioritise completing tasks which have already been started.
+### ON_HOLD
+
+> [!released]
+> The `ON_HOLD` Status Type was introduced in Tasks X.Y.Z.
+
+Use this for tasks you've decided are currently unworkable—for example, when awaiting external input or any circumstances you cannot control, such as feedback, decisions, or third-party actions. Unlike [[Priority|priorities]], which help you choose what to work on, or [[Task Dependencies|dependencies]], which enforce sequencing, `ON_HOLD` signals that a task is simply not actionable right now.
+
### DONE
The `DONE` type is used to determine:
@@ -71,14 +79,16 @@ The `status.type` filter uses a new pattern in the Tasks code which some refer t
If Tasks does not understand a `status.type` instruction, it reports this kind of message:
+
```text
Tasks query: Invalid status.type instruction: 'status.type in progress'.
Allowed options: 'is' and 'is not' (without quotes).
- Allowed values: TODO DONE IN_PROGRESS CANCELLED NON_TASK
+ Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK
Note: values are case-insensitive,
so 'in_progress' works too, for example.
Example: status.type is not NON_TASK
```
+
### Status Types in Tasks filters
@@ -89,26 +99,28 @@ For example, how are they used by the old `done` and `not done` filters?
If you are interested in detail, this table demonstrates the behaviour of each of the status types in Tasks.
Each column shows a representative example task with the given status type.
-The tasks shown are purely examples for context. The `~` column is just an arbitrary example to show `NON_TASK`'s behaviour'. You can assign each of these types to any of your custom statuses.
+The tasks shown are purely examples for context. For example, the `~` column is just an arbitrary example to show `NON_TASK`'s behaviour'. You can assign each of these types to any of your custom statuses.
-| Operation and status.type | TODO | IN_PROGRESS | DONE | CANCELLED | NON_TASK |
-| ----- | ----- | ----- | ----- | ----- | ----- |
-| Example Task | `- [ ] demo` | `- [/] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` |
-| Matches `not done` | YES | YES | no | no | no |
-| Matches `done` | no | no | YES | YES | YES |
-| Matches `status.type is TODO` | YES | no | no | no | no |
-| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no |
-| Matches `status.type is DONE` | no | no | YES | no | no |
-| Matches `status.type is CANCELLED` | no | no | no | YES | no |
-| Matches `status.type is NON_TASK` | no | no | no | no | YES |
-| Matches `status.name includes todo` | YES | no | no | no | no |
-| Matches `status.name includes in progress` | no | YES | no | no | no |
-| Matches `status.name includes done` | no | no | YES | no | no |
-| Matches `status.name includes cancelled` | no | no | no | YES | no |
-| Name for `group by status` | Todo | Todo | Done | Done | Done |
-| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%DONE | %%4%%CANCELLED | %%5%%NON_TASK |
-| Name for `group by status.name` | Todo | In Progress | Done | Cancelled | My custom status |
+| Operation and status.type | TODO | IN_PROGRESS | ON_HOLD | DONE | CANCELLED | NON_TASK |
+| ----- | ----- | ----- | ----- | ----- | ----- | ----- |
+| Example Task | `- [ ] demo` | `- [/] demo` | `- [h] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` |
+| Matches `not done` | YES | YES | YES | no | no | no |
+| Matches `done` | no | no | no | YES | YES | YES |
+| Matches `status.type is TODO` | YES | no | no | no | no | no |
+| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | no |
+| Matches `status.type is ON_HOLD` | no | no | YES | no | no | no |
+| Matches `status.type is DONE` | no | no | no | YES | no | no |
+| Matches `status.type is CANCELLED` | no | no | no | no | YES | no |
+| Matches `status.type is NON_TASK` | no | no | no | no | no | YES |
+| Matches `status.name includes todo` | YES | no | no | no | no | no |
+| Matches `status.name includes in progress` | no | YES | no | no | no | no |
+| Matches `status.name includes on hold` | no | no | YES | no | no | no |
+| Matches `status.name includes done` | no | no | no | YES | no | no |
+| Matches `status.name includes cancelled` | no | no | no | no | YES | no |
+| Name for `group by status` | Todo | Todo | Todo | Done | Done | Done |
+| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%ON_HOLD | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK |
+| Name for `group by status.name` | Todo | In Progress | On Hold | Done | Cancelled | My custom status |
diff --git a/docs/Getting Started/Task Dependencies.md b/docs/Getting Started/Task Dependencies.md
index c6800e7ba1..9a68e6f154 100644
--- a/docs/Getting Started/Task Dependencies.md
+++ b/docs/Getting Started/Task Dependencies.md
@@ -209,8 +209,8 @@ When using those dependencies in searches, we define two more relationships: `bl
A task is `blocking` if:
-- It is `TODO` or `IN_PROGRESS`.
-- And any of the tasks that **directly depend on it** are also `TODO` or `IN_PROGRESS`.
+- It is `TODO`, `IN_PROGRESS` or `ON_HOLD`.
+- And any of the tasks that **directly depend on it** are also `TODO`, `IN_PROGRESS` or `ON_HOLD`.
Note that:
@@ -237,8 +237,8 @@ is blocking
A task is `blocked` if:
-- It is `TODO` or `IN_PROGRESS`.
-- And any of the tasks **it directly depends on** are also `TODO` or `IN_PROGRESS`.
+- It is `TODO`, `IN_PROGRESS` or `ON_HOLD`.
+- And any of the tasks **it directly depends on** are also `TODO`, `IN_PROGRESS` or `ON_HOLD`.
Note that:
@@ -267,7 +267,7 @@ is not blocked
### Demonstration of blocking and blocked
> [!Example] Blocking occurs
-> If *both* ends of a `dependsOn` link are `TODO` or `IN_PROGRESS`, blocking occurs:
+> If *both* ends of a `dependsOn` link are `TODO`, `IN_PROGRESS` or `ON_HOLD`, blocking occurs:
>
> ```mermaid
> flowchart BT
diff --git a/docs/Queries/Sorting.md b/docs/Queries/Sorting.md
index 41582f57f4..b336d543bc 100644
--- a/docs/Queries/Sorting.md
+++ b/docs/Queries/Sorting.md
@@ -86,7 +86,7 @@ sort by function !task.isDone
```
- `sort by function` sorts `true` before `false`
-- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.
+- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.
diff --git a/docs/Quick Reference.md b/docs/Quick Reference.md
index 8884d35b53..3e7879fc59 100644
--- a/docs/Quick Reference.md
+++ b/docs/Quick Reference.md
@@ -15,7 +15,7 @@ This table summarizes the filters and other options available inside a `tasks` b
| **[[Filters#Filters for Dates in Tasks\|Status]]** | | | | |
| `done`
`not done` | `sort by status` | `group by status` | | `task.isDone` |
| `status.name (includes, does not include) `
`status.name (regex matches, regex does not match) /regex/i` | `sort by status.name` | `group by status.name` | | `task.status.name` |
-| `status.type (is, is not) (TODO, DONE, IN_PROGRESS, CANCELLED, NON_TASK)` | `sort by status.type` | `group by status.type` | | `task.status.type`
`task.status.typeGroupText` |
+| `status.type (is, is not) (TODO, DONE, IN_PROGRESS, ON_HOLD, CANCELLED, NON_TASK)` | `sort by status.type` | `group by status.type` | | `task.status.type`
`task.status.typeGroupText` |
| | | | | `task.status.symbol` |
| | | | | `task.status.nextSymbol` |
| **[[Task Dependencies]]** | | | | |
diff --git a/docs/What is New/Changelog.md b/docs/What is New/Changelog.md
index cd1e3e52f7..6a70f7a6a2 100644
--- a/docs/What is New/Changelog.md
+++ b/docs/What is New/Changelog.md
@@ -13,6 +13,7 @@ _In recent [Tasks releases](https://github.com/obsidian-tasks-group/obsidian-tas
## 7.x releases
- X.Y.Z:
+ - Add [[Status Types#ON_HOLD|ON_HOLD]] status type.
- Add 'Copy results' button: an initial implementation, which is not yet documented.
- 7.22.0:
- Fix [[Recurring Tasks#Priority of Dates|priority of dates in recurring tasks]] when using [[Recurring Tasks#Remove scheduled date on recurrence|Remove scheduled date on recurrence]].
diff --git a/src/Config/CustomStatusModal.ts b/src/Config/CustomStatusModal.ts
index 0935675f5e..d405ae802e 100644
--- a/src/Config/CustomStatusModal.ts
+++ b/src/Config/CustomStatusModal.ts
@@ -105,6 +105,7 @@ export class CustomStatusModal extends Modal {
const types = [
StatusType.TODO,
StatusType.IN_PROGRESS,
+ StatusType.ON_HOLD,
StatusType.DONE,
StatusType.CANCELLED,
StatusType.NON_TASK,
diff --git a/src/Query/Filter/StatusField.ts b/src/Query/Filter/StatusField.ts
index 2907c7cd1a..39af7afe59 100644
--- a/src/Query/Filter/StatusField.ts
+++ b/src/Query/Filter/StatusField.ts
@@ -15,6 +15,7 @@ export class StatusField extends FilterInstructionsBasedField {
// StatusType.CANCELLED counts as done
// StatusType.TODO counts as not done
// StatusType.IN_PROGRESS counts as not done
+ // StatusType.ON_HOLD counts as not done
// StatusType.NON_TASK counts as done
this._filters.add('done', (task: Task) => task.isDone);
this._filters.add('not done', (task: Task) => !task.isDone);
diff --git a/src/Statuses/Status.ts b/src/Statuses/Status.ts
index fb2cf8b6ce..47d09f89e0 100644
--- a/src/Statuses/Status.ts
+++ b/src/Statuses/Status.ts
@@ -59,6 +59,16 @@ export class Status {
new StatusConfiguration('/', 'In Progress', 'x', true, StatusType.IN_PROGRESS),
);
+ /**
+ * The default On Hold status. Goes to Todo when toggled.
+ *
+ * @static
+ * @type {Status}
+ */
+ public static readonly ON_HOLD: Status = new Status(
+ new StatusConfiguration('h', 'On Hold', ' ', true, StatusType.ON_HOLD),
+ );
+
/**
* A sample Non-Task status. Goes to NON_TASK when toggled.
*
@@ -148,18 +158,21 @@ export class Status {
case StatusType.TODO:
prefix = '2';
break;
- case StatusType.DONE:
+ case StatusType.ON_HOLD:
prefix = '3';
break;
- case StatusType.CANCELLED:
+ case StatusType.DONE:
prefix = '4';
break;
- case StatusType.NON_TASK:
+ case StatusType.CANCELLED:
prefix = '5';
break;
- case StatusType.EMPTY:
+ case StatusType.NON_TASK:
prefix = '6';
break;
+ case StatusType.EMPTY:
+ prefix = '7';
+ break;
}
// Text inside the %%..%% comments is used to control the sorting in both sorting of tasks and naming of groups.
// The comments are hidden by Obsidian when the headings are rendered.
diff --git a/src/Statuses/StatusConfiguration.ts b/src/Statuses/StatusConfiguration.ts
index 8b1d3d3003..e1f9d7c584 100644
--- a/src/Statuses/StatusConfiguration.ts
+++ b/src/Statuses/StatusConfiguration.ts
@@ -5,6 +5,7 @@ export enum StatusType {
TODO = 'TODO',
DONE = 'DONE',
IN_PROGRESS = 'IN_PROGRESS',
+ ON_HOLD = 'ON_HOLD',
CANCELLED = 'CANCELLED',
NON_TASK = 'NON_TASK',
EMPTY = 'EMPTY',
diff --git a/src/Statuses/StatusRegistry.ts b/src/Statuses/StatusRegistry.ts
index af24f0063c..63232f7a4a 100644
--- a/src/Statuses/StatusRegistry.ts
+++ b/src/Statuses/StatusRegistry.ts
@@ -371,6 +371,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
${nodes.join('\n')}
${edges.join('\n')}
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md
index 812af9a824..4751d22bf8 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_core-statuses.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Todo"]:::TODO
2["Done"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md
index dc4b7c0e33..f953a33a36 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_custom-statuses.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["In Progress"]:::IN_PROGRESS
2["Cancelled"]:::CANCELLED
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md
index 6d1d71d568..680676475c 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled-with-unconventional-symbols.approved.detailed.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Todo'
[ ] -> [*]
(TODO)"]:::TODO
2["'Done'
[*] -> [x]
(DONE)"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md
index e018e0ffe7..3163867459 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_done-toggles-to-cancelled.approved.detailed.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO
2["'Done'
[x] -> [-]
(DONE)"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md
index 942b40791c..b18da2983c 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_important-cycle.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Important"]:::TODO
2["Doing - Important"]:::IN_PROGRESS
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md
index 9d4ff56b75..3535ff7d8d 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.detailed.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Pro'
[P] -> [C]
(NON_TASK)"]:::NON_TASK
2["'Con'
[C] -> [P]
(NON_TASK)"]:::NON_TASK
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md
index 5d65c1cb1c..353741010c 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_pro-con-cycle.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Pro"]:::NON_TASK
2["Con"]:::NON_TASK
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md
index d86b4e1125..947ca435b7 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.detailed.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Todo'
[ ] -> [/]
(TODO)"]:::TODO
2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md
index 1368c06135..6737e6546e 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_todo-in_progress-done.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Todo"]:::TODO
2["In Progress"]:::IN_PROGRESS
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md
index 0c7ba14444..eb6de39c72 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.DefaultStatuses_toggle-does-nothing.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Bookmark"]:::NON_TASK
2["Example"]:::NON_TASK
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md
index f20029778b..dda1a80e09 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Status_Transitions_status-types.approved.md
@@ -1,22 +1,24 @@
-| Operation and status.type | TODO | IN_PROGRESS | DONE | CANCELLED | NON_TASK |
-| ----- | ----- | ----- | ----- | ----- | ----- |
-| Example Task | `- [ ] demo` | `- [/] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` |
-| Matches `not done` | YES | YES | no | no | no |
-| Matches `done` | no | no | YES | YES | YES |
-| Matches `status.type is TODO` | YES | no | no | no | no |
-| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no |
-| Matches `status.type is DONE` | no | no | YES | no | no |
-| Matches `status.type is CANCELLED` | no | no | no | YES | no |
-| Matches `status.type is NON_TASK` | no | no | no | no | YES |
-| Matches `status.name includes todo` | YES | no | no | no | no |
-| Matches `status.name includes in progress` | no | YES | no | no | no |
-| Matches `status.name includes done` | no | no | YES | no | no |
-| Matches `status.name includes cancelled` | no | no | no | YES | no |
-| Name for `group by status` | Todo | Todo | Done | Done | Done |
-| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%DONE | %%4%%CANCELLED | %%5%%NON_TASK |
-| Name for `group by status.name` | Todo | In Progress | Done | Cancelled | My custom status |
+| Operation and status.type | TODO | IN_PROGRESS | ON_HOLD | DONE | CANCELLED | NON_TASK |
+| ----- | ----- | ----- | ----- | ----- | ----- | ----- |
+| Example Task | `- [ ] demo` | `- [/] demo` | `- [h] demo` | `- [x] demo` | `- [-] demo` | `- [~] demo` |
+| Matches `not done` | YES | YES | YES | no | no | no |
+| Matches `done` | no | no | no | YES | YES | YES |
+| Matches `status.type is TODO` | YES | no | no | no | no | no |
+| Matches `status.type is IN_PROGRESS` | no | YES | no | no | no | no |
+| Matches `status.type is ON_HOLD` | no | no | YES | no | no | no |
+| Matches `status.type is DONE` | no | no | no | YES | no | no |
+| Matches `status.type is CANCELLED` | no | no | no | no | YES | no |
+| Matches `status.type is NON_TASK` | no | no | no | no | no | YES |
+| Matches `status.name includes todo` | YES | no | no | no | no | no |
+| Matches `status.name includes in progress` | no | YES | no | no | no | no |
+| Matches `status.name includes on hold` | no | no | YES | no | no | no |
+| Matches `status.name includes done` | no | no | no | YES | no | no |
+| Matches `status.name includes cancelled` | no | no | no | no | YES | no |
+| Name for `group by status` | Todo | Todo | Todo | Done | Done | Done |
+| Name for `group by status.type` | %%2%%TODO | %%1%%IN_PROGRESS | %%3%%ON_HOLD | %%4%%DONE | %%5%%CANCELLED | %%6%%NON_TASK |
+| Name for `group by status.name` | Todo | In Progress | On Hold | Done | Cancelled | My custom status |
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md
index bca42a230c..5e0ad6f65f 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_AnuPpuccin_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Unchecked"]:::TODO
2["Checked"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md
index 2ed78d7850..ac6a8c2121 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Aura_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["incomplete"]:::TODO
2["complete / done"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md
index 43a0c77483..58b216b691 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Border_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["To Do"]:::TODO
2["In Progress"]:::IN_PROGRESS
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md
index 3f1913224e..54e7520775 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Ebullientworks_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Unchecked"]:::TODO
2["Checked"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md
index 521a2a4add..1a2c6b6367 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_ITS_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Unchecked"]:::TODO
2["Regular"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md
index 0b94ddcb87..9e5208eda2 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_LYT_Mode_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["Unchecked"]:::TODO
2["Checked"]:::DONE
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md
index 4c1d275407..6676bd6e8a 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Minimal_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["to-do"]:::TODO
2["incomplete"]:::IN_PROGRESS
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md
index 4c1d275407..6676bd6e8a 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.Theme_Things_Table.approved.mermaid.md
@@ -7,6 +7,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["to-do"]:::TODO
2["incomplete"]:::IN_PROGRESS
diff --git a/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts b/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts
index 87a8db2578..2f027cc834 100644
--- a/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts
+++ b/tests/DocumentationSamples/DocsSamplesForStatuses.test.ts
@@ -97,6 +97,7 @@ describe('Status Transitions', () => {
const statuses = [
Status.TODO,
Status.IN_PROGRESS,
+ Status.ON_HOLD,
Status.DONE,
Status.CANCELLED,
new Status(new StatusConfiguration('~', 'My custom status', ' ', false, StatusType.NON_TASK)),
diff --git a/tests/Query/Filter/StatusField.test.ts b/tests/Query/Filter/StatusField.test.ts
index a62831a79b..020d466738 100644
--- a/tests/Query/Filter/StatusField.test.ts
+++ b/tests/Query/Filter/StatusField.test.ts
@@ -38,6 +38,7 @@ describe('status', () => {
expect(filter).toMatchTaskWithStatus(Status.DONE.configuration);
expect(filter).toMatchTaskWithStatus(new StatusConfiguration('X', 'Really Done', 'x', true, StatusType.DONE));
expect(filter).not.toMatchTaskWithStatus(Status.IN_PROGRESS.configuration);
+ expect(filter).not.toMatchTaskWithStatus(Status.ON_HOLD.configuration);
expect(filter).toMatchTaskWithStatus(Status.CANCELLED.configuration);
expect(filter).not.toMatchTaskWithStatus(new StatusConfiguration('!', 'Todo', 'x', true, StatusType.TODO)); // 'done' checks type.
expect(filter).toMatchTaskWithStatus(new StatusConfiguration('^', 'Non', 'x', true, StatusType.NON_TASK));
@@ -54,6 +55,7 @@ describe('status', () => {
new StatusConfiguration('X', 'Really Done', 'x', true, StatusType.DONE),
);
expect(filter).toMatchTaskWithStatus(Status.IN_PROGRESS.configuration);
+ expect(filter).toMatchTaskWithStatus(Status.ON_HOLD.configuration);
expect(filter).not.toMatchTaskWithStatus(Status.CANCELLED.configuration);
expect(filter).toMatchTaskWithStatus(new StatusConfiguration('!', 'Todo', 'x', true, StatusType.TODO)); // 'not done' type.
expect(filter).not.toMatchTaskWithStatus(new StatusConfiguration('^', 'Non', 'x', true, StatusType.NON_TASK));
diff --git a/tests/Query/Filter/StatusNameField.test.ts b/tests/Query/Filter/StatusNameField.test.ts
index fb5e0e78a8..818bd6537f 100644
--- a/tests/Query/Filter/StatusNameField.test.ts
+++ b/tests/Query/Filter/StatusNameField.test.ts
@@ -103,6 +103,14 @@ describe('grouping by status.name', () => {
const grouper = new StatusNameField().createNormalGrouper();
const tasks = SampleTasks.withAllStatuses();
- expect({ grouper, tasks }).groupHeadingsToBe(['Cancelled', 'Done', 'EMPTY', 'In Progress', 'Non-Task', 'Todo']);
+ expect({ grouper, tasks }).groupHeadingsToBe([
+ 'Cancelled',
+ 'Done',
+ 'EMPTY',
+ 'In Progress',
+ 'Non-Task',
+ 'On Hold',
+ 'Todo',
+ ]);
});
});
diff --git a/tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text b/tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text
new file mode 100644
index 0000000000..c8b3fbb1ad
--- /dev/null
+++ b/tests/Query/Filter/StatusTypeField.test.status.name_status.name_with_invalid_line_is_helpful.approved.text
@@ -0,0 +1,6 @@
+Tasks query: Invalid status.type instruction: 'status.type in progress'.
+ Allowed options: 'is' and 'is not' (without quotes).
+ Allowed values: TODO DONE IN_PROGRESS ON_HOLD CANCELLED NON_TASK
+ Note: values are case-insensitive,
+ so 'in_progress' works too, for example.
+ Example: status.type is not NON_TASK
diff --git a/tests/Query/Filter/StatusTypeField.test.ts b/tests/Query/Filter/StatusTypeField.test.ts
index 04a1d2ee30..df91b61cc1 100644
--- a/tests/Query/Filter/StatusTypeField.test.ts
+++ b/tests/Query/Filter/StatusTypeField.test.ts
@@ -10,6 +10,7 @@ import { Status } from '../../../src/Statuses/Status';
import * as FilterParser from '../../../src/Query/FilterParser';
import { fromLine } from '../../TestingTools/TestHelpers';
import { SampleTasks } from '../../TestingTools/SampleTasks';
+import { verifyWithFileExtension } from '../../TestingTools/ApprovalTestHelpers';
// Abbreviated names so that the markdown text is aligned
const todoTask = fromLine({ line: '- [ ] Todo' });
@@ -76,20 +77,16 @@ describe('status.name', () => {
expect(filter).not.toBeValid();
});
- it('status.name with invalid line is parsed and user sees helpful message', () => {
+ it('status.name with invalid line is helpful', () => {
// Arrange
- const filter = FilterParser.parseFilter('status.type gobbledygook');
+ const filter = FilterParser.parseFilter('status.type in progress');
// Assert
expect(filter).not.toBeValid();
- expect(filter?.error).toMatchInlineSnapshot(`
- "Invalid status.type instruction: 'status.type gobbledygook'.
- Allowed options: 'is' and 'is not' (without quotes).
- Allowed values: TODO DONE IN_PROGRESS CANCELLED NON_TASK
- Note: values are case-insensitive,
- so 'in_progress' works too, for example.
- Example: status.type is not NON_TASK"
- `);
+ verifyWithFileExtension(
+ 'Tasks query: ' + (filter?.error ?? 'Unexpectedly, no error message generated'),
+ 'text',
+ );
});
});
@@ -156,10 +153,10 @@ describe('grouping by status.type', () => {
expect({ grouper, tasks: [inprTask] }).groupHeadingsToBe(['%%1%%IN_PROGRESS']);
expect({ grouper, tasks: [todoTask] }).groupHeadingsToBe(['%%2%%TODO']);
expect({ grouper, tasks: [unknTask] }).groupHeadingsToBe(['%%2%%TODO']);
- expect({ grouper, tasks: [doneTask] }).groupHeadingsToBe(['%%3%%DONE']);
- expect({ grouper, tasks: [cancTask] }).groupHeadingsToBe(['%%4%%CANCELLED']);
- expect({ grouper, tasks: [non_Task] }).groupHeadingsToBe(['%%5%%NON_TASK']);
- expect({ grouper, tasks: [emptTask] }).groupHeadingsToBe(['%%6%%EMPTY']); // won't be seen by users
+ expect({ grouper, tasks: [doneTask] }).groupHeadingsToBe(['%%4%%DONE']);
+ expect({ grouper, tasks: [cancTask] }).groupHeadingsToBe(['%%5%%CANCELLED']);
+ expect({ grouper, tasks: [non_Task] }).groupHeadingsToBe(['%%6%%NON_TASK']);
+ expect({ grouper, tasks: [emptTask] }).groupHeadingsToBe(['%%7%%EMPTY']); // won't be seen by users
});
it('should sort groups for StatusTypeField', () => {
@@ -169,10 +166,10 @@ describe('grouping by status.type', () => {
expect({ grouper, tasks }).groupHeadingsToBe([
'%%1%%IN_PROGRESS',
'%%2%%TODO',
- '%%3%%DONE',
- '%%4%%CANCELLED',
- '%%5%%NON_TASK',
- '%%6%%EMPTY',
+ '%%4%%DONE',
+ '%%5%%CANCELLED',
+ '%%6%%NON_TASK',
+ '%%7%%EMPTY',
]);
});
});
diff --git a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt
index d1834b25c6..44e312791d 100644
--- a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.other_properties_task.isDone_results.approved.txt
@@ -16,6 +16,7 @@ Same as the `not done` filter, but might be useful in conjunction with other exp
=>
- [] Status EMPTY
- [/] Status In Progress
+- [h] Status On Hold
- [ ] Status Todo
====================================================================================
diff --git a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt
index 49f677fdf9..c1a8a26a67 100644
--- a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.symbol_results.approved.txt
@@ -16,6 +16,7 @@ Find tasks with anything but the space character as their status symbol, that is
- [x] Status Done
- [] Status EMPTY
- [/] Status In Progress
+- [h] Status On Hold
- [Q] Status Non-Task
- [p] Unknown symbol
- [s] Toggles to self
@@ -57,6 +58,7 @@ This is a convenient shortcut over a longer statement testing each allowed value
filter by function !' -x/'.includes(task.status.symbol)
Find tasks with any status symbol not supported by Tasks in the default settings.
=>
+- [h] Status On Hold
- [Q] Status Non-Task
- [p] Unknown symbol
- [s] Toggles to self
diff --git a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt
index 9def593297..06011822b8 100644
--- a/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomFiltering/CustomFilteringExamples.test.statuses_task.status.type_results.approved.txt
@@ -30,6 +30,7 @@ Find tasks that are not type `NON_TASK` and not type `CANCELLED`.
- [x] Status Done
- [] Status EMPTY
- [/] Status In Progress
+- [h] Status On Hold
- [ ] Status Todo
- [p] Unknown symbol
- [s] Toggles to self
diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt
index bc4333c4a4..f757ba182e 100644
--- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.name_results.approved.txt
@@ -10,6 +10,7 @@ Done
EMPTY
In Progress
Non-Task
+On Hold
Todo
====================================================================================
@@ -22,6 +23,7 @@ DONE
EMPTY
IN PROGRESS
NON-TASK
+ON HOLD
TODO
====================================================================================
diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt
index e30559b7ab..6c5e95a7b2 100644
--- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.symbol_results.approved.txt
@@ -8,6 +8,7 @@ Group by the status symbol, making space characters visible.
Status symbol:
Status symbol: -
Status symbol: /
+Status symbol: h
Status symbol: Q
Status symbol: space
Status symbol: x
diff --git a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt
index a3ae34c2ea..c8f884d85a 100644
--- a/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomGrouping/CustomGroupingExamples.test.statuses_task.status.type_results.approved.txt
@@ -10,6 +10,7 @@ DONE
EMPTY
IN_PROGRESS
NON_TASK
+ON_HOLD
TODO
====================================================================================
@@ -19,9 +20,10 @@ This sorts the status types in the same order as "group by status.type".
=>
%%1%%IN_PROGRESS
%%2%%TODO
-%%3%%DONE
-%%4%%CANCELLED
-%%5%%NON_TASK
-%%6%%EMPTY
+%%3%%ON_HOLD
+%%4%%DONE
+%%5%%CANCELLED
+%%6%%NON_TASK
+%%7%%EMPTY
====================================================================================
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md
index 7dd0ec26e2..6e5838d226 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_docs.approved.md
@@ -6,7 +6,7 @@ sort by function !task.isDone
```
- `sort by function` sorts `true` before `false`
-- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.
+- Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt
index 0c367872de..07c2bc544d 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.other_properties_task.isDone_results.approved.txt
@@ -4,10 +4,11 @@ Results of custom sorters
sort by function !task.isDone
`sort by function` sorts `true` before `false`
-Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.
+Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.
=>
- [/] Status In Progress
- [ ] Status Todo
+- [h] Status On Hold
- [] Status EMPTY
- [x] Status Done
- [-] Status Cancelled
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt
index ef336d2cc0..4d1b0d6b78 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.name_results.approved.txt
@@ -10,6 +10,7 @@ Identical to "Sort by status.name".
- [] Status EMPTY
- [/] Status In Progress
- [Q] Status Non-Task
+- [h] Status On Hold
- [ ] Status Todo
====================================================================================
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt
index 5fe12e83fe..b29a8201d9 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.nextSymbol_results.approved.txt
@@ -6,6 +6,7 @@ sort by function task.status.nextSymbol
Sort by the next status symbol.
=>
- [] Status EMPTY
+- [h] Status On Hold
- [x] Status Done
- [-] Status Cancelled
- [Q] Status Non-Task
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt
index dbe2335fd0..fe6c6f173d 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.symbol_results.approved.txt
@@ -9,6 +9,7 @@ Sort by the status symbol.
- [ ] Status Todo
- [-] Status Cancelled
- [/] Status In Progress
+- [h] Status On Hold
- [Q] Status Non-Task
- [x] Status Done
====================================================================================
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt
index ab77052102..f842a997e6 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.statuses_task.status.type_results.approved.txt
@@ -10,6 +10,7 @@ Unlike "Sort by status.type", this sorts the status types in alphabetical order.
- [] Status EMPTY
- [/] Status In Progress
- [Q] Status Non-Task
+- [h] Status On Hold
- [ ] Status Todo
====================================================================================
diff --git a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts
index b102c496a5..b8e044dd2c 100644
--- a/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts
+++ b/tests/Scripting/ScriptingReference/CustomSorting/CustomSortingExamples.test.ts
@@ -310,7 +310,7 @@ describe('other properties', () => {
[
'sort by function !task.isDone',
'`sort by function` sorts `true` before `false`',
- 'Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO` and `IN_PROGRESS` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.',
+ 'Hence, we use `!` to negate `task.isDone`, so tasks with [[Status Types|Status Type]] `TODO`, `IN_PROGRESS` and `ON_HOLD` tasks are sorted **before** `DONE`, `CANCELLED` and `NON_TASK`.',
],
],
SampleTasks.withAllStatuses(),
diff --git a/tests/Statuses/Status.test.ts b/tests/Statuses/Status.test.ts
index b6ef6fa638..6364d3ccf2 100644
--- a/tests/Statuses/Status.test.ts
+++ b/tests/Statuses/Status.test.ts
@@ -125,7 +125,7 @@ describe('Status', () => {
it('should provide text with sorting comments for convenience of custom grouping', () => {
const status = Status.CANCELLED;
- expect(status.typeGroupText).toEqual('%%4%%CANCELLED');
+ expect(status.typeGroupText).toEqual('%%5%%CANCELLED');
});
});
diff --git a/tests/Statuses/StatusRegistry.test.ts b/tests/Statuses/StatusRegistry.test.ts
index 7b5a82921e..e6ad5dc110 100644
--- a/tests/Statuses/StatusRegistry.test.ts
+++ b/tests/Statuses/StatusRegistry.test.ts
@@ -213,55 +213,57 @@ describe('StatusRegistry', () => {
// Assert
// Without detail:
expect(statusRegistry.mermaidDiagram(false)).toMatchInlineSnapshot(`
- "
- \`\`\`mermaid
- flowchart LR
-
- classDef TODO stroke:#f33,stroke-width:3px;
- classDef DONE stroke:#0c0,stroke-width:3px;
- classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
- classDef CANCELLED stroke:#ddd,stroke-width:3px;
- classDef NON_TASK stroke:#99e,stroke-width:3px;
-
- 1["Todo"]:::TODO
- 2["In Progress"]:::IN_PROGRESS
- 3["Done"]:::DONE
- 4["Cancelled"]:::CANCELLED
- 1 --> 3
- 2 --> 3
- 3 --> 1
- 4 --> 1
-
- linkStyle default stroke:gray
- \`\`\`
- "
- `);
+ "
+ \`\`\`mermaid
+ flowchart LR
+
+ classDef TODO stroke:#f33,stroke-width:3px;
+ classDef DONE stroke:#0c0,stroke-width:3px;
+ classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
+ classDef CANCELLED stroke:#ddd,stroke-width:3px;
+ classDef NON_TASK stroke:#99e,stroke-width:3px;
+ classDef ON_HOLD stroke:#00f,stroke-width:3px;
+
+ 1["Todo"]:::TODO
+ 2["In Progress"]:::IN_PROGRESS
+ 3["Done"]:::DONE
+ 4["Cancelled"]:::CANCELLED
+ 1 --> 3
+ 2 --> 3
+ 3 --> 1
+ 4 --> 1
+
+ linkStyle default stroke:gray
+ \`\`\`
+ "
+ `);
// With detail:
expect(statusRegistry.mermaidDiagram(true)).toMatchInlineSnapshot(`
- "
- \`\`\`mermaid
- flowchart LR
-
- classDef TODO stroke:#f33,stroke-width:3px;
- classDef DONE stroke:#0c0,stroke-width:3px;
- classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
- classDef CANCELLED stroke:#ddd,stroke-width:3px;
- classDef NON_TASK stroke:#99e,stroke-width:3px;
-
- 1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO
- 2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS
- 3["'Done'
[x] -> [ ]
(DONE)"]:::DONE
- 4["'Cancelled'
[-] -> [ ]
(CANCELLED)"]:::CANCELLED
- 1 --> 3
- 2 --> 3
- 3 --> 1
- 4 --> 1
-
- linkStyle default stroke:gray
- \`\`\`
- "
- `);
+ "
+ \`\`\`mermaid
+ flowchart LR
+
+ classDef TODO stroke:#f33,stroke-width:3px;
+ classDef DONE stroke:#0c0,stroke-width:3px;
+ classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
+ classDef CANCELLED stroke:#ddd,stroke-width:3px;
+ classDef NON_TASK stroke:#99e,stroke-width:3px;
+ classDef ON_HOLD stroke:#00f,stroke-width:3px;
+
+ 1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO
+ 2["'In Progress'
[/] -> [x]
(IN_PROGRESS)"]:::IN_PROGRESS
+ 3["'Done'
[x] -> [ ]
(DONE)"]:::DONE
+ 4["'Cancelled'
[-] -> [ ]
(CANCELLED)"]:::CANCELLED
+ 1 --> 3
+ 2 --> 3
+ 3 --> 1
+ 4 --> 1
+
+ linkStyle default stroke:gray
+ \`\`\`
+ "
+ `);
});
it('should encode symbols in mermaid diagrams when necessary', () => {
@@ -280,55 +282,57 @@ describe('StatusRegistry', () => {
// Assert
// Without detail:
expect(statusRegistry.mermaidDiagram(false)).toMatchInlineSnapshot(`
- "
- \`\`\`mermaid
- flowchart LR
-
- classDef TODO stroke:#f33,stroke-width:3px;
- classDef DONE stroke:#0c0,stroke-width:3px;
- classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
- classDef CANCELLED stroke:#ddd,stroke-width:3px;
- classDef NON_TASK stroke:#99e,stroke-width:3px;
-
- 1["Todo <"]:::TODO
- 2["Todo >"]:::TODO
- 3["Todo ""]:::TODO
- 4["Todo &"]:::TODO
- 1 --> 1
- 2 --> 2
- 3 --> 3
- 4 --> 4
-
- linkStyle default stroke:gray
- \`\`\`
- "
- `);
+ "
+ \`\`\`mermaid
+ flowchart LR
+
+ classDef TODO stroke:#f33,stroke-width:3px;
+ classDef DONE stroke:#0c0,stroke-width:3px;
+ classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
+ classDef CANCELLED stroke:#ddd,stroke-width:3px;
+ classDef NON_TASK stroke:#99e,stroke-width:3px;
+ classDef ON_HOLD stroke:#00f,stroke-width:3px;
+
+ 1["Todo <"]:::TODO
+ 2["Todo >"]:::TODO
+ 3["Todo ""]:::TODO
+ 4["Todo &"]:::TODO
+ 1 --> 1
+ 2 --> 2
+ 3 --> 3
+ 4 --> 4
+
+ linkStyle default stroke:gray
+ \`\`\`
+ "
+ `);
// With detail:
expect(statusRegistry.mermaidDiagram(true)).toMatchInlineSnapshot(`
- "
- \`\`\`mermaid
- flowchart LR
-
- classDef TODO stroke:#f33,stroke-width:3px;
- classDef DONE stroke:#0c0,stroke-width:3px;
- classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
- classDef CANCELLED stroke:#ddd,stroke-width:3px;
- classDef NON_TASK stroke:#99e,stroke-width:3px;
-
- 1["'Todo <'
[<] -> [<]
(TODO)"]:::TODO
- 2["'Todo >'
[>] -> [>]
(TODO)"]:::TODO
- 3["'Todo "'
["] -> ["]
(TODO)"]:::TODO
- 4["'Todo &'
[&] -> [&]
(TODO)"]:::TODO
- 1 --> 1
- 2 --> 2
- 3 --> 3
- 4 --> 4
-
- linkStyle default stroke:gray
- \`\`\`
- "
- `);
+ "
+ \`\`\`mermaid
+ flowchart LR
+
+ classDef TODO stroke:#f33,stroke-width:3px;
+ classDef DONE stroke:#0c0,stroke-width:3px;
+ classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
+ classDef CANCELLED stroke:#ddd,stroke-width:3px;
+ classDef NON_TASK stroke:#99e,stroke-width:3px;
+ classDef ON_HOLD stroke:#00f,stroke-width:3px;
+
+ 1["'Todo <'
[<] -> [<]
(TODO)"]:::TODO
+ 2["'Todo >'
[>] -> [>]
(TODO)"]:::TODO
+ 3["'Todo "'
["] -> ["]
(TODO)"]:::TODO
+ 4["'Todo &'
[&] -> [&]
(TODO)"]:::TODO
+ 1 --> 1
+ 2 --> 2
+ 3 --> 3
+ 4 --> 4
+
+ linkStyle default stroke:gray
+ \`\`\`
+ "
+ `);
});
it('should not include unknown nextStatusSymbols in mermaid diagrams', () => {
@@ -345,23 +349,24 @@ describe('StatusRegistry', () => {
// Assert
expect(statusRegistry.registeredStatuses.length).toEqual(originalNumberOfStatuses);
expect(mermaidText).toMatchInlineSnapshot(`
- "
- \`\`\`mermaid
- flowchart LR
+ "
+ \`\`\`mermaid
+ flowchart LR
- classDef TODO stroke:#f33,stroke-width:3px;
- classDef DONE stroke:#0c0,stroke-width:3px;
- classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
- classDef CANCELLED stroke:#ddd,stroke-width:3px;
- classDef NON_TASK stroke:#99e,stroke-width:3px;
+ classDef TODO stroke:#f33,stroke-width:3px;
+ classDef DONE stroke:#0c0,stroke-width:3px;
+ classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
+ classDef CANCELLED stroke:#ddd,stroke-width:3px;
+ classDef NON_TASK stroke:#99e,stroke-width:3px;
+ classDef ON_HOLD stroke:#00f,stroke-width:3px;
- 1["Todo"]:::TODO
+ 1["Todo"]:::TODO
- linkStyle default stroke:gray
- \`\`\`
- "
- `);
+ linkStyle default stroke:gray
+ \`\`\`
+ "
+ `);
});
});
diff --git a/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md b/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md
index d837e6578b..ed25dac52e 100644
--- a/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md
+++ b/tests/Statuses/StatusRegistryReport.test.StatusRegistryReport_should_create_a_report.approved.md
@@ -45,6 +45,7 @@ classDef DONE stroke:#0c0,stroke-width:3px;
classDef IN_PROGRESS stroke:#fa0,stroke-width:3px;
classDef CANCELLED stroke:#ddd,stroke-width:3px;
classDef NON_TASK stroke:#99e,stroke-width:3px;
+classDef ON_HOLD stroke:#00f,stroke-width:3px;
1["'Todo'
[ ] -> [x]
(TODO)"]:::TODO
2["'Done'
[x] -> [ ]
(DONE)"]:::DONE
diff --git a/tests/Task/Task.test.ts b/tests/Task/Task.test.ts
index 9f5bdf92a4..ce85326007 100644
--- a/tests/Task/Task.test.ts
+++ b/tests/Task/Task.test.ts
@@ -533,6 +533,7 @@ describe('properties for scripting', () => {
it('should provide isDone for convenience', () => {
expect(new TaskBuilder().status(Status.TODO).build().isDone).toEqual(false);
expect(new TaskBuilder().status(Status.IN_PROGRESS).build().isDone).toEqual(false);
+ expect(new TaskBuilder().status(Status.ON_HOLD).build().isDone).toEqual(false);
expect(new TaskBuilder().status(Status.DONE).build().isDone).toEqual(true);
expect(new TaskBuilder().status(Status.CANCELLED).build().isDone).toEqual(true);
expect(
diff --git a/tests/TestingTools/SampleTasks.ts b/tests/TestingTools/SampleTasks.ts
index 1bd7aae673..ebf410af0b 100644
--- a/tests/TestingTools/SampleTasks.ts
+++ b/tests/TestingTools/SampleTasks.ts
@@ -174,6 +174,7 @@ export class SampleTasks {
Status.DONE,
Status.EMPTY,
Status.IN_PROGRESS,
+ Status.ON_HOLD,
Status.TODO,
Status.NON_TASK,
];
diff --git a/tests/TestingTools/VerifyStatuses.ts b/tests/TestingTools/VerifyStatuses.ts
index e93252223a..ea2b86a019 100644
--- a/tests/TestingTools/VerifyStatuses.ts
+++ b/tests/TestingTools/VerifyStatuses.ts
@@ -116,11 +116,13 @@ export function verifyTransitionsAsMarkdownTable(statuses: Status[]) {
filterAllStatuses(FilterParser.parseFilter('done')!);
filterAllStatuses(FilterParser.parseFilter('status.type is TODO')!);
filterAllStatuses(FilterParser.parseFilter('status.type is IN_PROGRESS')!);
+ filterAllStatuses(FilterParser.parseFilter('status.type is ON_HOLD')!);
filterAllStatuses(FilterParser.parseFilter('status.type is DONE')!);
filterAllStatuses(FilterParser.parseFilter('status.type is CANCELLED')!);
filterAllStatuses(FilterParser.parseFilter('status.type is NON_TASK')!);
filterAllStatuses(FilterParser.parseFilter('status.name includes todo')!);
filterAllStatuses(FilterParser.parseFilter('status.name includes in progress')!);
+ filterAllStatuses(FilterParser.parseFilter('status.name includes on hold')!);
filterAllStatuses(FilterParser.parseFilter('status.name includes done')!);
filterAllStatuses(FilterParser.parseFilter('status.name includes cancelled')!);