blob: 49c0703ef702d2f7c4dffec732704098898b5889 [file] [log] [blame] [view] [edit]
@PLUGIN@ States
===============
Below are sample config files which illustrate many examples of how task
states are affected by their own criteria and their subtasks' states.
To better help visualize the output that each `root` example leads to,
the json output for the root definition (and any definitions that it
refers to) will be placed inline right after the root. Naturally, this
json is not a part of the config, however it is part of the expected
output for task config when running the following:
```
$ ssh -x -p 29418 review-example gerrit query is:open \
--task--all --format json|head -1 |json_pp
```
The config below is expected to be in the `task.config` file in project
`{root-cfg-prj}` on ref `{root-cfg-branch}`.
file: `{root-cfg-prj}:{root-cfg-branch}:task.config`
```
[root "Root N/A"]
applicable = is:closed # Assumes test query is "is:open"
{
"applicable" : false,
"hasPass" : false,
"name" : "Root N/A",
"status" : "INVALID"
}
[root "Root APPLICABLE"]
applicable = is:open # Assumes test query is "is:open"
pass = True
subtask = Subtask APPLICABLE
[task "Subtask APPLICABLE"]
applicable = is:open
pass = True
{
"applicable" : true,
"hasPass" : true,
"name" : "Root APPLICABLE",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask APPLICABLE",
"status" : "PASS"
}
]
}
[root "Root PASS"]
pass = True
{ # Test Suite: task_only
"applicable" : true, # Test Suite: task_only
"hasPass" : true, # Test Suite: task_only
"name" : "Root PASS", # Test Suite: task_only
"status" : "PASS" # Test Suite: task_only
} # Test Suite: task_only
[root "Root FAIL"]
fail = True
{
"applicable" : true,
"hasPass" : true,
"name" : "Root FAIL",
"status" : "FAIL"
}
[root "Root PASS SR"]
pass = is:true_task
{
"applicable" : true,
"hasPass" : true,
"name" : "Root PASS SR",
"status" : "PASS"
}
[root "Root FAIL SR"]
fail = is:true_task
{
"applicable" : true,
"hasPass" : true,
"name" : "Root FAIL SR",
"status" : "FAIL"
}
[root "Root straight PASS"]
applicable = is:open
pass = is:open
{
"applicable" : true,
"hasPass" : true,
"name" : "Root straight PASS",
"status" : "PASS"
}
[root "Root straight FAIL"]
applicable = is:open
fail = is:open
pass = is:open
{
"applicable" : true,
"hasPass" : true,
"name" : "Root straight FAIL",
"status" : "FAIL"
}
[root "Root PASS-fail"]
applicable = is:open
fail = NOT is:open
{
"applicable" : true,
"hasPass" : true,
"name" : "Root PASS-fail",
"status" : "PASS"
}
[root "Root pass-FAIL"]
applicable = is:open
fail = is:open
{
"applicable" : true,
"hasPass" : true,
"name" : "Root pass-FAIL",
"status" : "FAIL"
}
[root "Root PASS-waiting-fail"]
applicable = is:open
fail = NOT is:open
subtask = Subtask PASS
[task "Subtask PASS"]
applicable = is:open
pass = is:open
{
"applicable" : true,
"hasPass" : true,
"name" : "Root PASS-waiting-fail",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
[root "Root pass-WAITING-fail"]
applicable = is:open
fail = NOT is:open
subtask = Subtask FAIL
[task "Subtask FAIL"]
applicable = is:open
fail = is:open
pass = is:open
{
"applicable" : true,
"hasPass" : true,
"name" : "Root pass-WAITING-fail",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask FAIL",
"status" : "FAIL"
}
]
}
[root "Root pass-waiting-FAIL"]
applicable = is:open
fail = is:open
subtask = Subtask PASS
{
"applicable" : true,
"hasPass" : true,
"name" : "Root pass-waiting-FAIL",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
[root "Root grouping PASS (subtask PASS)"]
subtask = Subtask PASS
{
"applicable" : true,
"hasPass" : false,
"name" : "Root grouping PASS (subtask PASS)",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
[root "Root grouping WAITING (subtask READY)"]
subtask = Subtask READY
{
"applicable" : true,
"hasPass" : false,
"name" : "Root grouping WAITING (subtask READY)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask READY",
"status" : "READY",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
[root "Root grouping WAITING (subtask FAIL)"]
subtask = Subtask FAIL
{
"applicable" : true,
"hasPass" : false,
"name" : "Root grouping WAITING (subtask FAIL)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask FAIL",
"status" : "FAIL"
}
]
}
[root "Root grouping NA (subtask NA)"]
applicable = is:open # Assumes Subtask NA has "applicable = NOT is:open"
subtask = Subtask NA
[task "Subtask NA"]
applicable = NOT is:open # Assumes test query is "is:open"
{
"applicable" : true,
"hasPass" : false,
"name" : "Root grouping NA (subtask NA)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : false,
"hasPass" : false,
"name" : "Subtask NA",
"status" : "INVALID"
}
]
}
[root "Root READY (subtask PASS)"]
applicable = is:open
pass = NOT is:open
subtask = Subtask PASS
ready-hint = You must now run the ready task
{
"applicable" : true,
"hasPass" : true,
"hint" : "You must now run the ready task",
"name" : "Root READY (subtask PASS)",
"status" : "READY",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
[root "Root WAITING (subtask READY)"]
applicable = is:open
pass = is:open
subtask = Subtask READY
[task "Subtask READY"]
applicable = is:open
pass = NOT is:open
subtask = Subtask PASS
{
"applicable" : true,
"hasPass" : true,
"name" : "Root WAITING (subtask READY)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask READY",
"status" : "READY",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
[root "Root WAITING (subtask FAIL)"]
applicable = is:open
pass = is:open
subtask = Subtask FAIL
{
"applicable" : true,
"hasPass" : true,
"name" : "Root WAITING (subtask FAIL)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask FAIL",
"status" : "FAIL"
}
]
}
[root "Root IN PROGRESS"]
applicable = is:open
in-progress = is:open
pass = NOT is:open
{
"applicable" : true,
"hasPass" : true,
"inProgress" : true,
"name" : "Root IN PROGRESS",
"status" : "READY"
}
[root "Root NOT IN PROGRESS"]
applicable = is:open
in-progress = NOT is:open
pass = NOT is:open
{
"applicable" : true,
"hasPass" : true,
"inProgress" : false,
"name" : "Root NOT IN PROGRESS",
"status" : "READY"
}
[root "Root OPTIONAL MISSING"]
subtask = OPTIONAL MISSING |
pass = True
{
"applicable" : true,
"hasPass" : true,
"name" : "Root OPTIONAL MISSING",
"status" : "PASS"
}
[root "Root Optional subtask EXISTS"]
subtask = Subtask Optional EXISTS |
[task "Subtask Optional EXISTS"]
subtask = Subtask PASS |
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Optional subtask EXISTS",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Optional EXISTS",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
[root "Root Optional subtask MISSING then EXISTS"]
subtask = Subtask Optional MISSING then EXISTS |
[task "Subtask Optional MISSING then EXISTS"]
subtask = OPTIONAL MISSING | Subtask FAIL
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Optional subtask MISSING then EXISTS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Optional MISSING then EXISTS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask FAIL",
"status" : "FAIL"
}
]
}
]
}
[root "Root Optional subtask MISSING then MISSING"]
subtask = Subtask Optional MISSING then MISSING |
[task "Subtask Optional MISSING then MISSING"]
subtask = OPTIONAL MISSING | OPTIONAL MISSING |
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Optional subtask MISSING then MISSING",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Optional MISSING then MISSING"
}
]
}
[root "Root Optional subtask MISSING then MISSING then EXISTS"]
subtask = Subtask Optional MISSING then MISSING then EXISTS |
[task "Subtask Optional MISSING then MISSING then EXISTS"]
subtask = OPTIONAL MISSING | OPTIONAL MISSING | Subtask READY
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Optional subtask MISSING then MISSING then EXISTS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Optional MISSING then MISSING then EXISTS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask READY",
"status" : "READY",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
]
}
[root "Subtasks File"]
subtasks-file = common.config
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtasks File",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config FAIL",
"status" : "FAIL"
}
]
}
[root "Subtasks File (Missing)"]
subtasks-file = common.config
subtasks-file = missing
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtasks File (Missing)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config FAIL",
"status" : "FAIL"
}
]
}
[root "Subtasks External"]
subtasks-external = user special
[external "user special"]
user = testuser
file = special.config
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtasks External",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config FAIL",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config Preload PASS",
"status" : "PASS"
}
]
}
[root "Subtasks External (Missing)"]
subtasks-external = user special
subtasks-external = missing
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtasks External (Missing)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config FAIL",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config Preload PASS",
"status" : "PASS"
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
}
[root "Subtasks External (User Missing)"]
subtasks-external = user special
subtasks-external = user missing
[external "user missing"]
user = missing
file = special.config
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtasks External (User Missing)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config FAIL",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config Preload PASS",
"status" : "PASS"
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
}
[root "Subtasks External (File Missing)"]
subtasks-external = user special
subtasks-external = file missing
[external "file missing"]
user = testuser
file = missing
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtasks External (File Missing)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config FAIL",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config Preload PASS",
"status" : "PASS"
}
]
}
[root "Root tasks-factory STATIC"]
subtasks-factory = tasks-factory static
[tasks-factory "tasks-factory static"]
names-factory = names-factory static list
fail = True
[names-factory "names-factory static list"]
type = static
name = my a task
name = my b task
name = my c task
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory STATIC",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "my a task",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my b task",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my c task",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory CHANGE"]
subtasks-factory = tasks-factory change
[tasks-factory "tasks-factory change"]
names-factory = names-factory change list
fail = True
[names-factory "names-factory change list"]
changes = change:_change1_number OR change:_change2_number
type = change
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory CHANGE",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : true,
"name" : "_change2_number",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory PLUGIN no args"]
applicable = status:new
subtasks-factory = tasks-factory plugin no args
[tasks-factory "tasks-factory plugin no args"]
names-factory = names-factory plugin no args names
fail = True
[names-factory "names-factory plugin no args names"]
type = plugin
plugin = names-factory-provider
provider = foobar_provider
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory PLUGIN no args",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory PLUGIN no properties"]
applicable = status:new
subtasks-factory = tasks-factory plugin no properties
[tasks-factory "tasks-factory plugin no properties"]
names-factory = names-factory plugin no properties names
fail = True
[names-factory "names-factory plugin no properties names"]
type = plugin
plugin = names-factory-provider
provider = foobar_provider
arg = baz
arg = qux
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory PLUGIN no properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar-baz",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar-qux",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory PLUGIN non-change properties"]
applicable = status:new
set-first-non-change-property = non-change-value
set-second-non-change-property = another-${first-non-change-property}
subtasks-factory = tasks-factory plugin non-change properties
[tasks-factory "tasks-factory plugin non-change properties"]
names-factory = names-factory plugin non-change properties names
fail = True
[names-factory "names-factory plugin non-change properties names"]
type = plugin
plugin = names-factory-provider
provider = foobar_provider
arg = ${first-non-change-property}-baz
arg = ${second-non-change-property}-qux
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory PLUGIN non-change properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar-non-change-value-baz",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar-another-non-change-value-qux",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory PLUGIN change properties"]
applicable = status:new
subtasks-factory = tasks-factory plugin change properties
[tasks-factory "tasks-factory plugin change properties"]
names-factory = names-factory plugin change properties names
fail = True
[names-factory "names-factory plugin change properties names"]
type = plugin
plugin = names-factory-provider
provider = foobar_provider
arg = ${_change_number}-baz
arg = ${_change_branch}-qux
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory PLUGIN change properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar-_change_number-baz",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "foobar-_change_branch-qux",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory static (empty name)"]
subtasks-factory = tasks-factory static (empty name)
# Grouping task since it has no pass criteria, not output since it has no subtasks
[tasks-factory "tasks-factory static (empty name)"]
names-factory = names-factory static (empty name list)
fail = True
[names-factory "names-factory static (empty name list)"]
type = static
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory static (empty name)"
}
[root "Root tasks-factory static (empty name PASS)"]
pass = True
subtasks-factory = tasks-factory static (empty name)
{
"applicable" : true,
"hasPass" : true,
"name" : "Root tasks-factory static (empty name PASS)",
"status" : "PASS"
}
[root "Root Same Name - Different Tasks-Factory"]
subtasks-factory = parent tasks-factory Same Name - Different Tasks-Factory
[tasks-factory "parent tasks-factory Same Name - Different Tasks-Factory"]
names-factory = parent names-factory Same Name - Different Tasks-Factory
fail = True
subtasks-factory = child tasks-factory Same Name - Different Tasks-Factory
[names-factory "parent names-factory Same Name - Different Tasks-Factory"]
type = static
name = Same Name
[tasks-factory "child tasks-factory Same Name - Different Tasks-Factory"]
names-factory = child names-factory Same Name - Different Tasks-Factory
fail = False
[names-factory "child names-factory Same Name - Different Tasks-Factory"]
type = static
name = Same Name
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Same Name - Different Tasks-Factory",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Same Name",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Same Name",
"status" : "PASS"
}
]
}
]
}
[root "Root Same Name - Different Change"]
subtasks-factory = init tasks-factory Same Name - Different Change
[tasks-factory "init tasks-factory Same Name - Different Change"]
names-factory = init names-factory Same Name - Different Change
subtask = Same Name - Different Change
[names-factory "init names-factory Same Name - Different Change"]
type = change
changes = change:_change2_number
[task "Same Name - Different Change"]
subtasks-factory = tasks-factory Same Name - Different Change
pass = False
ready-hint = continues on to change _change1_number
fail-hint = stops here since we are change _change1_number
fail = change:_change1_number
[tasks-factory "tasks-factory Same Name - Different Change"]
names-factory = names-factory Same Name - Different Change
subtask = Same Name - Different Change
[names-factory "names-factory Same Name - Different Change"]
type = change
changes = change:_change1_number NOT change:${_change_number}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Same Name - Different Change",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : false,
"name" : "_change2_number",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Same Name - Different Change",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : false,
"name" : "_change1_number",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "stops here since we are change _change1_number",
"name" : "Same Name - Different Change",
"status" : "FAIL"
}
]
}
]
}
]
}
]
}
[root "Root Property References"]
set-first-property = first-value
set-backward-reference = first-[${first-property}]
set-forward-reference = last-[${last-property}]
set-last-property = last-value
fail = True
fail-hint = backward-reference(${backward-reference}) forward-reference(${forward-reference})
{
"applicable" : true,
"hasPass" : true,
"hint" : "backward-reference(first-[first-value]) forward-reference(last-[last-value])",
"name" : "Root Property References",
"status" : "FAIL"
}
[root "Root Deep Property References"]
set-first-property = first-value
set-direct-reference = first-[${first-property}]
set-deep-reference = deep-{${direct-reference}}
fail = True
fail-hint = deep-reference(${deep-reference})
{
"applicable" : true,
"hasPass" : true,
"hint" : "deep-reference(deep-{first-[first-value]})",
"name" : "Root Deep Property References",
"status" : "FAIL"
}
[root "Root Properties Referenced Twice"]
set-first-property = first-value
set-referenced-twice = first-[${first-property}] first-[${first-property}]
fail = True
fail-hint = first-[${first-property}] referenced-twice(${referenced-twice}) referenced-twice(${referenced-twice})
{
"applicable" : true,
"hasPass" : true,
"hint" : "first-[first-value] referenced-twice(first-[first-value] first-[first-value]) referenced-twice(first-[first-value] first-[first-value])",
"name" : "Root Properties Referenced Twice",
"status" : "FAIL"
}
[root "Root Inherited Properties"]
set-root-property = root-value
subtask = Subtask Parent Inherited Properties
[task "Subtask Parent Inherited Properties"]
set-parent-property = parent-value
subtask = Subtask Inherited Properties
[task "Subtask Inherited Properties"]
set-my-property = my-value
fail = True
fail-hint = root-property(${root-property}) parent-property(${parent-property}) my-property(${my-property})
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Inherited Properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Parent Inherited Properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "root-property(root-value) parent-property(parent-value) my-property(my-value)",
"name" : "Subtask Inherited Properties",
"status" : "FAIL"
}
]
}
]
}
[root "Root Inherited Distant Properties"]
set-root-property = root-value
set-root-change-property = ${_change_number}
subtask = Subtask Parent Inherited Distant Properties
[task "Subtask Parent Inherited Distant Properties"]
subtask = Subtask Inherited Distant Properties
[task "Subtask Inherited Distant Properties"]
fail = True
fail-hint = root-property(${root-property}) root-change-property(${root-change-property})
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Inherited Distant Properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Parent Inherited Distant Properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "root-property(root-value) root-change-property(_change_number)",
"name" : "Subtask Inherited Distant Properties",
"status" : "FAIL"
}
]
}
]
}
[root "Root Properties Reset By Subtask"]
set-root-to-reset-by-subtask = reset-my-root-value
subtask = Subtask Properties Reset
[task "Subtask Properties Reset"]
fail = True
set-root-to-reset-by-subtask = reset-by-subtask-root-value
fail-hint = root-to-reset-by-subtask:(${root-to-reset-by-subtask})
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties Reset By Subtask",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "root-to-reset-by-subtask:(reset-by-subtask-root-value)",
"name" : "Subtask Properties Reset",
"status" : "FAIL"
}
]
}
[root "Root Inherited Property References"]
set-root-property = root-value
subtask = Subtask Parent Inherited Property References
[task "Subtask Parent Inherited Property References"]
set-parent-property = parent-value
set-parent-inherited-root-reference = root-property(${root-property})
subtask = Subtask Inherited Property References
[task "Subtask Inherited Property References"]
set-inherited-root-reference = root-[${root-property}]
set-inherited-parent-reference = parent-[${parent-property}]
set-inherited-root-deep-reference = parent-inherited-root-reference-[${parent-inherited-root-reference}]
fail = True
fail-hint = inherited-root-reference(${inherited-root-reference}) inherited-parent-reference(${inherited-parent-reference}) inherited-root-deep-reference(${inherited-root-deep-reference})
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Inherited Property References",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Parent Inherited Property References",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "inherited-root-reference(root-[root-value]) inherited-parent-reference(parent-[parent-value]) inherited-root-deep-reference(parent-inherited-root-reference-[root-property(root-value)])",
"name" : "Subtask Inherited Property References",
"status" : "FAIL"
}
]
}
]
}
[root "Root Properties Exports"]
export-root-exported = ${_name}
subtask = Subtask Properties Exports
fail = True
fail-hint = root-exported(${root-exported})
[task "Subtask Properties Exports"]
export-subtask-exported = ${_name}
fail = True
fail-hint = root-exported(${root-exported}) subtask-exported(${subtask-exported})
{
"applicable" : true,
"exported" : {
"root-exported" : "Root Properties Exports"
},
"hasPass" : true,
"hint" : "root-exported(Root Properties Exports)",
"name" : "Root Properties Exports",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"exported" : {
"subtask-exported" : "Subtask Properties Exports"
},
"hasPass" : true,
"hint" : "root-exported(Root Properties Exports) subtask-exported(Subtask Properties Exports)",
"name" : "Subtask Properties Exports",
"status" : "FAIL"
}
]
}
[root "Root Internal Properties"]
export-root = Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
set-root-internals = Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
fail = True
fail-hint = Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
subtask = Subtask Internal Properties
[task "Subtask Internal Properties"]
fail = True
fail-hint = root-internals(${root-internals}) Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
{
"applicable" : true,
"exported" : {
"root" : "Name(Root Internal Properties) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)"
},
"hasPass" : true,
"hint" : "Name(Root Internal Properties) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)",
"name" : "Root Internal Properties",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "root-internals(Name(Root Internal Properties) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)) Name(Subtask Internal Properties) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)",
"name" : "Subtask Internal Properties",
"status" : "FAIL"
}
]
}
[root "Root Subtask Via Property"]
set-subtask = Subtask
subtask = ${subtask} Via Property
[task "Subtask Via Property"]
subtask = Second ${_name}
[task "Second Subtask Via Property"]
fail = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Subtask Via Property",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Via Property",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Second Subtask Via Property",
"status" : "FAIL"
}
]
}
]
}
[root "Root applicable Property"]
subtask = Subtask applicable Property
subtasks-factory = tasks-factory branch NOT applicable Property
[tasks-factory "tasks-factory branch NOT applicable Property"]
names-factory = names-factory branch NOT applicable Property
applicable = branch:dev
fail = True
[names-factory "names-factory branch NOT applicable Property"]
type = static
name = NOT Applicable 1
name = NOT Applicable 2
name = NOT Applicable 3
[task "Subtask applicable Property"]
applicable = change:${_change_number}
fail = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root applicable Property",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask applicable Property",
"status" : "FAIL"
}, # Only Test Suite: all
{ # Only Test Suite: all
"applicable" : false, # Only Test Suite: all
"hasPass" : true, # Only Test Suite: all
"name" : "NOT Applicable 1", # Only Test Suite: all
"status" : "FAIL" # Only Test Suite: all
}, # Only Test Suite: all
{ # Only Test Suite: all
"applicable" : false, # Only Test Suite: all
"hasPass" : true, # Only Test Suite: all
"name" : "NOT Applicable 2", # Only Test Suite: all
"status" : "FAIL" # Only Test Suite: all
}, # Only Test Suite: all
{ # Only Test Suite: all
"applicable" : false, # Only Test Suite: all
"hasPass" : true, # Only Test Suite: all
"name" : "NOT Applicable 3", # Only Test Suite: all
"status" : "FAIL" # Only Test Suite: all
}
]
}
[root "Root branch applicable Property"]
subtasks-factory = tasks-factory branch applicable Property
[tasks-factory "tasks-factory branch applicable Property"]
names-factory = names-factory branch applicable Property
applicable = branch:master
fail = True
[names-factory "names-factory branch applicable Property"]
type = static
name = Applicable 1
name = Applicable 2
name = Applicable 3
{
"applicable" : true,
"hasPass" : false,
"name" : "Root branch applicable Property",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Applicable 1",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Applicable 2",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Applicable 3",
"status" : "FAIL"
}
]
}
[root "Root Properties tasks-factory STATIC"]
subtasks-factory = tasks-factory STATIC Properties
[tasks-factory "tasks-factory STATIC Properties"]
set-welcome-message = Welcome to the jungle
names-factory = names-factory static list
fail-hint = ${welcome-message} Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
fail = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties tasks-factory STATIC",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "Welcome to the jungle Name(my a task) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)",
"name" : "my a task",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"hint" : "Welcome to the jungle Name(my b task) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)",
"name" : "my b task",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"hint" : "Welcome to the jungle Name(my c task) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)",
"name" : "my c task",
"status" : "FAIL"
}
]
}
[root "Root Properties tasks-factory CHANGE"]
subtasks-factory = tasks-factory CHANGE Properties
[tasks-factory "tasks-factory CHANGE Properties"]
set-welcome-message = Welcome to the pleasuredome
names-factory = names-factory a change
fail-hint = ${welcome-message} Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
fail = change:_change1_number
[names-factory "names-factory a change"]
type = change
changes = change:_change1_number OR change:_change2_number
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties tasks-factory CHANGE",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"hint" : "Welcome to the pleasuredome Name(_change1_number) Change Number(_change1_number) Change Id(_change1_id) Change Project(_change1_project) Change Branch(_change1_branch) Change Status(_change1_status) Change Topic(_change1_topic)",
"name" : "_change1_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : true,
"name" : "_change2_number",
"status" : "PASS"
}
]
}
[root "Root Properties tasks-factory PLUGIN"]
subtasks-factory = tasks-factory PLUGIN Properties
[tasks-factory "tasks-factory PLUGIN Properties"]
set-welcome-message = Welcome to the party
names-factory = names-factory plugin provided list
fail-hint = ${welcome-message} Name(${_name}) Change Number(${_change_number}) Change Id(${_change_id}) Change Project(${_change_project}) Change Branch(${_change_branch}) Change Status(${_change_status}) Change Topic(${_change_topic})
fail = True
[names-factory "names-factory plugin provided list"]
type = plugin
plugin = names-factory-provider
provider = foobar_provider
arg = ${_change_number}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties tasks-factory PLUGIN",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "Welcome to the party Name(foobar-_change_number) Change Number(_change_number) Change Id(_change_id) Change Project(_change_project) Change Branch(_change_branch) Change Status(_change_status) Change Topic(_change_topic)",
"name" : "foobar-_change_number",
"status" : "FAIL"
}
]
}
[root "Root tasks-factory _name Property Reference"]
subtasks-factory = Properties tasks-factory _name Property Reference
[tasks-factory "Properties tasks-factory _name Property Reference"]
set-name-reference = first-property ${_name}
fail-hint = ${name-reference}
fail = true
names-factory = names-factory static list
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory _name Property Reference",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "first-property my a task",
"name" : "my a task",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"hint" : "first-property my b task",
"name" : "my b task",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"hint" : "first-property my c task",
"name" : "my c task",
"status" : "FAIL"
}
]
}
[root "Root Properties names-factory STATIC"]
subtasks-factory = tasks-factory Properties names-factory STATIC
[tasks-factory "tasks-factory Properties names-factory STATIC"]
names-factory = Properties names-factory STATIC
fail = True
[names-factory "Properties names-factory STATIC"]
type = static
name = Change Number(${_change_number})
name = Change Id(${_change_id})
name = Change Project(${_change_project})
name = Change Branch(${_change_branch})
name = Change Status(${_change_status})
name = Change Topic(${_change_topic})
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties names-factory STATIC",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Change Number(_change_number)",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Change Id(_change_id)",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Change Project(_change_project)",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Change Branch(_change_branch)",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Change Status(_change_status)",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Change Topic(_change_topic)",
"status" : "FAIL"
}
]
}
[root "Root Properties names-factory CHANGE"]
subtasks-factory = tasks-factory Properties names-factory CHANGE
[tasks-factory "tasks-factory Properties names-factory CHANGE"]
names-factory = Properties names-factory CHANGE
fail = True
[names-factory "Properties names-factory CHANGE"]
type = change
changes = change:_change1_number OR change:${_change_number} project:${_change_project} branch:${_change_branch}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties names-factory CHANGE",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change_number,
"hasPass" : true,
"name" : "_change_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL"
}
]
}
[root "Root CHANGE constant subtask list CHANGE Properties"]
subtasks-factory = tasks-factory Properties CHANGE names-factory CHANGE
[tasks-factory "tasks-factory Properties CHANGE names-factory CHANGE"]
names-factory = Properties names-factory current CHANGE
subtask = Current CHANGE Property
[task "Current CHANGE Property"]
fail = True
fail-hint = Current Change: ${_change_number}
[names-factory "Properties names-factory current CHANGE"]
type = change
changes = change:${_change_number}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root CHANGE constant subtask list CHANGE Properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change_number,
"hasPass" : false,
"name" : "_change_number",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "Current Change: _change_number",
"name" : "Current CHANGE Property",
"status" : "FAIL"
}
]
}
]
}
[root "Root Preload"]
preload-task = Subtask FAIL
subtask = Subtask Preload
[task "Subtask Preload"]
preload-task = Subtask READY
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Preload",
"status" : "READY",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
[root "Root Properties names-factory Reference"]
subtasks-factory = tasks-factory Properties names-factory Reference
set-predicate = change:_change1_number
[tasks-factory "tasks-factory Properties names-factory Reference"]
names-factory = Properties names-factory Reference
fail = True
[names-factory "Properties names-factory Reference"]
type = change
changes = ${predicate} OR change:${_change_number} project:${_change_project} branch:${_change_branch}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties names-factory Reference",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change_number,
"hasPass" : true,
"name" : "_change_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL"
}
]
}
[root "Root Properties names-factory Deep Reference"]
subtasks-factory = tasks-factory Properties names-factory Deep Reference
set-predicate-reference = ${predicate}
set-predicate = change:_change1_number
[tasks-factory "tasks-factory Properties names-factory Deep Reference"]
names-factory = Properties names-factory Deep Reference
fail = True
[names-factory "Properties names-factory Deep Reference"]
type = change
changes = ${predicate-reference} OR change:${_change_number} project:${_change_project} branch:${_change_branch}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties names-factory Deep Reference",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change_number,
"hasPass" : true,
"name" : "_change_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL"
}
]
}
[root "Root Properties names-factory Reference Internal"]
subtasks-factory = tasks-factory Properties names-factory Reference Internal
set-predicate = change:${_change_number} project:${_change_project} branch:${_change_branch}
[tasks-factory "tasks-factory Properties names-factory Reference Internal"]
names-factory = Properties names-factory Reference Internal
fail = True
[names-factory "Properties names-factory Reference Internal"]
type = change
changes = change:_change1_number OR ${predicate}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties names-factory Reference Internal",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change_number,
"hasPass" : true,
"name" : "_change_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL"
}
]
}
[root "Root Properties names-factory Reference Inherited"]
subtask = task Properties names-factory Reference Inherited
set-predicate = change:${_change_number} project:${_change_project} branch:${_change_branch}
[task "task Properties names-factory Reference Inherited"]
subtasks-factory = tasks-factory Properties names-factory Reference Inherited
[tasks-factory "tasks-factory Properties names-factory Reference Inherited"]
names-factory = Properties names-factory Reference Inherited
fail = True
[names-factory "Properties names-factory Reference Inherited"]
type = change
changes = change:_change1_number OR ${predicate}
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Properties names-factory Reference Inherited",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "task Properties names-factory Reference Inherited",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change_number,
"hasPass" : true,
"name" : "_change_number",
"status" : "FAIL"
},
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL"
}
]
}
]
}
[root "Root Preload Preload"]
subtask = Subtask Preload Preload
[task "Subtask Preload Preload"]
preload-task = Subtask Preload with Preload
[task "Subtask Preload with Preload"]
preload-task = Subtask PASS
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload Preload",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Preload Preload",
"status" : "PASS"
}
]
}
[root "Root Preload Hints PASS"]
subtask = Subtask Preload Hints PASS
[task "Subtask Preload Hints PASS"]
preload-task = Subtask Hints
pass = False
[task "Subtask Hints"] # meant to be preloaded, not a test case in itself
ready-hint = Task is ready
fail-hint = Task failed
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload Hints PASS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "Task is ready",
"name" : "Subtask Preload Hints PASS",
"status" : "READY"
}
]
}
[root "Root Preload Hints FAIL"]
subtask = Subtask Preload Hints FAIL
[task "Subtask Preload Hints FAIL"]
preload-task = Subtask Hints
fail = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload Hints FAIL",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "Task failed",
"name" : "Subtask Preload Hints FAIL",
"status" : "FAIL"
}
]
}
[root "Root Override Preload Pass"]
subtask = Subtask Override Preload Pass
[task "Subtask Override Preload Pass"]
preload-task = Subtask PASS
pass = False
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Override Preload Pass",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Override Preload Pass",
"status" : "READY"
}
]
}
[root "Root Override Preload Fail"]
subtask = Subtask Override Preload Fail
[task "Subtask Override Preload Fail"]
preload-task = Subtask FAIL
fail = False
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Override Preload Fail",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Override Preload Fail",
"status" : "PASS"
}
]
}
[root "Root Append Preloaded Subtasks"]
subtask = Subtask Append Preloaded Subtasks
[task "Subtask Append Preloaded Subtasks"]
preload-task = Subtask READY
subtask = Subtask APPLICABLE
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Append Preloaded Subtasks",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Append Preloaded Subtasks",
"status" : "READY",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask APPLICABLE",
"status" : "PASS"
}
]
}
]
}
[root "Root Preload Optional"]
subtask = Subtask Preload Optional
[task "Subtask Preload Optional"]
preload-task = Missing | Subtask PASS
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload Optional",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Preload Optional",
"status" : "PASS"
}
]
}
[root "Root Preload Properties"]
subtask = Subtask Preload Properties
[task "Subtask Preload Properties"]
preload-task = Subtask Preload Properties Hints
set-fourth-property = fourth-value
fail-hint = second-property(${second-property}) fourth-property(${fourth-property})
[task "Subtask Preload Properties Hints"]
set-first-property = first-value
set-second-property = ${first-property} second-extra ${third-property}
set-third-property = third-value
fail = True
fail-hint = root-property(${root-property}) first-property(${first-property}) second-property(${second-property})
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload Properties",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"hint" : "second-property(first-value second-extra third-value) fourth-property(fourth-value)",
"name" : "Subtask Preload Properties",
"status" : "FAIL"
}
]
}
[root "Root Preload tasks-factory"]
subtasks-factory = tasks-factory Preload tasks-factory
[tasks-factory "tasks-factory Preload tasks-factory"]
names-factory = names-factory static list
preload-task = Subtask PASS
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload tasks-factory",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "my a task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my b task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my c task",
"status" : "PASS"
}
]
}
[root "Root (subtask SKIPPED)"]
subtask = Subtask SKIPPED
[task "Subtask SKIPPED"]
evaluation-threshold = 1
pass = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root (subtask SKIPPED)",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"hint" : "Expensive task evaluation-threshold breached, skipped evaluation",
"name" : "Subtask SKIPPED",
"status" : "SKIPPED"
}
]
}
[root "Root (subtask NOT SKIPPED)"]
subtask = Subtask NOT SKIPPED
[task "Subtask NOT SKIPPED"]
evaluation-threshold = 2
pass = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root (subtask NOT SKIPPED)",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask NOT SKIPPED",
"status" : "PASS"
}
]
}
[root "Root tasks-factory CHANGE SKIPPED"]
subtasks-factory = tasks-factory change SKIPPED
[tasks-factory "tasks-factory change SKIPPED"]
names-factory = names-factory change list
evaluation-threshold = 1
preload-task = Subtask APPLICABLE
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory CHANGE SKIPPED",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : false,
"hint": "Expensive task evaluation-threshold breached, skipped evaluation",
"name" : "_change1_number",
"status" : "SKIPPED"
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : false,
"hint": "Expensive task evaluation-threshold breached, skipped evaluation",
"name" : "_change2_number",
"status" : "SKIPPED"
}
]
}
[root "Root tasks-factory CHANGE NOT SKIPPED"]
subtasks-factory = tasks-factory change NOT SKIPPED
[tasks-factory "tasks-factory change NOT SKIPPED"]
names-factory = names-factory change list
evaluation-threshold = 2
preload-task = Subtask APPLICABLE
{
"applicable" : true,
"hasPass" : false,
"name" : "Root tasks-factory CHANGE NOT SKIPPED",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "PASS"
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : true,
"name" : "_change2_number",
"status" : "PASS"
}
]
}
[root "Root Looping"]
subtask = Looping
[task "Looping"]
subtask = Looping
pass = True
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Looping",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Looping",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"hint" : "Duplicate task is non blocking and empty to break the loop",
"name" : "Looping",
"status" : "DUPLICATE"
}
]
}
]
}
[root "Root Looping DuplicateKey"]
preload-task = DuplicateKey
[task "Looping DuplicateKey"]
preload-task = DuplicateKey
pass = True
[task "DuplicateKey"]
duplicate-key = 1234
subtask = Looping DuplicateKey
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Looping DuplicateKey",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"hint" : "Duplicate task is non blocking and empty to break the loop",
"name" : "Looping DuplicateKey",
"status" : "DUPLICATE"
}
]
}
[root "Root changes loop"]
subtask = task (tasks-factory changes loop)
[task "task (tasks-factory changes loop)"]
subtasks-factory = tasks-factory change loop
[tasks-factory "tasks-factory change loop"]
names-factory = names-factory change constant
subtask = task (tasks-factory changes loop)
fail = True
[names-factory "names-factory change constant"]
changes = change:_change1_number OR change:_change2_number
type = change
{
"applicable" : true,
"hasPass" : false,
"name" : "Root changes loop",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory changes loop)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : true,
"name" : "_change1_number",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory changes loop)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : false,
"hint" : "Duplicate task is non blocking and empty to break the loop",
"name" : "_change1_number",
"status" : "DUPLICATE"
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : true,
"name" : "_change2_number",
"status" : "FAIL",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory changes loop)",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"change" : _change1_number,
"hasPass" : false,
"hint" : "Duplicate task is non blocking and empty to break the loop",
"name" : "_change1_number",
"status" : "DUPLICATE"
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : false,
"hint" : "Duplicate task is non blocking and empty to break the loop",
"name" : "_change2_number",
"status" : "DUPLICATE"
}
]
}
]
}
]
}
]
},
{
"applicable" : true,
"change" : _change2_number,
"hasPass" : false,
"hint" : "Duplicate task is non blocking and empty to break the loop",
"name" : "_change2_number",
"status" : "DUPLICATE"
}
]
}
]
}
[root "Root Import tasks using absolute syntax"]
applicable = is:open
subtask = /relative.config^Root Import task from subdir using relative syntax
subtask = /dir/common.config^Root Import task from root task.config
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import tasks using absolute syntax",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import task from subdir using relative syntax",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Sample relative task in sub dir",
"status" : "PASS"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import task from root task.config",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
[root "Root Import relative tasks from root config"]
applicable = is:open
subtask = dir/common.config^Root Import task from root task.config
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import relative tasks from root config",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import task from root task.config",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
]
}
[root "Root subtasks-external user ref with Absolute and Relative syntaxes"]
subtasks-external = user absolute and relative syntaxes
[external "user absolute and relative syntaxes"]
user = testuser
file = dir/sample.config
{
"applicable" : true,
"hasPass" : false,
"name" : "Root subtasks-external user ref with Absolute and Relative syntaxes",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Referencing single task from same user ref",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Relative Task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Relative Task in sub dir",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "task in user root config file",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task",
"status" : "PASS"
}
]
}
]
}
[root "Root Import user tasks"]
applicable = is:open
subtask = @testuser/foo/bar.config^Absolute Task
subtask = @testuser^task in user root config file
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import user tasks",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "task in user root config file",
"status" : "PASS"
}
]
}
[root "Root Import group tasks"]
applicable = is:open
subtask = %{non_secret_group_name_without_space}/foo/bar.config^Absolute Task 1
subtask = %{non_secret_group_name_without_space}^task in group root config file 1
subtask = %{non_secret_group_name_with_space}/foo/bar.config^Absolute Task 3
subtask = %{non_secret_group_name_with_space}^task in group root config file 3
subtask = %%{non_secret_group_uuid}/foo/bar.config^Absolute Task 2
subtask = %%{non_secret_group_uuid}^task in group root config file 2
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Import group tasks",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task 1",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "task in group root config file 1",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task 3",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "task in group root config file 3",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task 2",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "task in group root config file 2",
"status" : "PASS"
}
]
}
[root "Root Reference tasks from {root-cfg-prj}"]
applicable = is:open
subtask = //^Subtask PASS
subtask = @testuser/dir/relative.config^Import {root-cfg-prj} root task
subtask = @testuser/dir/relative.config^Import {root-cfg-prj} non-root task
subtask = %{non_secret_group_name_without_space}/dir/relative.config^Import {root-cfg-prj} root task - groups
subtask = %{non_secret_group_name_without_space}/dir/relative.config^Import {root-cfg-prj} non-root task - groups
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Reference tasks from {root-cfg-prj}",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Import {root-cfg-prj} root task",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Import {root-cfg-prj} non-root task",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Sample relative task in sub dir",
"status" : "PASS"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Import {root-cfg-prj} root task - groups",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Import {root-cfg-prj} non-root task - groups",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Sample relative task in sub dir",
"status" : "PASS"
}
]
}
]
}
[root "Root Preload from all-projects sub-dir which has preload-task in same file"]
preload-task = //dir/common.config^Sample task in sub dir with preload-task from same file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir which has preload-task in same file",
"status" : "PASS"
}
[root "Root Preload from all-projects sub-dir which has preload-task in different file"]
preload-task = //dir/common.config^Sample task in sub dir with preload-task from different file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir which has preload-task in different file",
"status" : "PASS"
}
[root "Root Preload from all-projects sub-dir"]
preload-task = //dir/common.config^Sample relative task in sub dir
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir",
"status" : "PASS"
}
[root "Root Preload from all-projects sub-dir which has subtask in same file"]
preload-task = //dir/common.config^Sample relative task in sub dir with subtask from same file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir which has subtask in same file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Sample relative task in sub dir",
"status" : "PASS"
}
]
}
[root "Root Preload from all-projects sub-dir which has subtask in different file"]
preload-task = //dir/common.config^Sample relative task in sub dir with subtask from different file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir which has subtask in different file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Passing task",
"status" : "PASS"
}
]
}
[root "Root Preload from all-projects sub-dir which has subtasks-factory in same file"]
preload-task = //dir/common.config^Sample relative task in sub dir with subtasks-factory from same file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir which has subtasks-factory in same file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "my a task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my b task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my c task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "my d task",
"status" : "PASS"
}
]
}
[root "Root Preload from all-projects sub-dir which has subtasks-external in same file"]
preload-task = //dir/common.config^Sample relative task in sub dir with subtasks-external from same file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from all-projects sub-dir which has subtasks-external in same file",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "userfile task/special.config FAIL",
"status" : "FAIL"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "file task/common.config Preload PASS",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Referencing single task from same user ref",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Relative Task",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Relative Task in sub dir",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "task in user root config file",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task",
"status" : "PASS"
}
]
}
]
}
[root "Root Preload from group ref which has subtasks-file"]
preload-task = %{non_secret_group_name_without_space}^Sample task with subtasks-file
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from group ref which has subtasks-file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task 1",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task 2",
"status" : "PASS"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Absolute Task",
"status" : "PASS"
}
]
}
[root "Root Preload from user ref"]
preload-task = @testuser/dir/relative.config^Relative Task
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from user ref",
"status" : "PASS"
}
[root "Root Preload from user ref which has subtask in same file"]
preload-task = @testuser/dir/relative.config^Relative Task with subtask
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from user ref which has subtask in same file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Passing task",
"status" : "PASS"
}
]
}
[root "Root Preload from user ref which has subtask in different file"]
preload-task = @testuser/dir/relative.config^Import {root-cfg-prj} root task
{
"applicable" : true,
"hasPass" : false,
"name" : "Root Preload from user ref which has subtask in different file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
[root "Root Preload from group ref"]
preload-task = %{non_secret_group_name_without_space}^task in group root config file 1
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from group ref",
"status" : "PASS"
}
[root "Root Preload from group ref which has subtask in same file"]
preload-task = %{non_secret_group_name_without_space}^task in group root with subtask
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from group ref which has subtask in same file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Passing task",
"status" : "PASS"
}
]
}
[root "Root Preload from group ref which has subtask in different file"]
preload-task = %{non_secret_group_name_without_space}^task in group root with subtask from all-projects
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from group ref which has subtask in different file",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask PASS",
"status" : "PASS"
}
]
}
[root "Root Preload from group ref which has subtask in different group ref"]
preload-task = %{non_secret_group_name_without_space}^task in group root with subtask from another group
{
"applicable" : true,
"hasPass" : true,
"name" : "Root Preload from group ref which has subtask in different group ref",
"status" : "PASS",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "task in group root config file 3",
"status" : "PASS"
}
]
}
[root "Root INVALID Preload"]
preload-task = missing
{ # Test Suite: task_only
"name" : "UNKNOWN", # Test Suite: task_only
"status" : "INVALID" # Test Suite: task_only
} # Test Suite: task_only
[root "INVALIDS"]
subtasks-file = invalids.config
{
"applicable" : true,
"hasPass" : false,
"name" : "INVALIDS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "No PASS criteria",
"status" : "INVALID"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "WAITING (subtask INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "WAITING (subtask duplicate)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : true,
"name" : "WAITING (subtask missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Grouping WAITING (subtask INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Grouping WAITING (subtask missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Optional",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Blank",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"name" : "Bad APPLICABLE query", # Only Test Suite: visible
"name" : "UNKNOWN", # Only Test Suite: !visible
"status" : "INVALID"
},
{
"applicable" : false,
"hasPass" : true,
"name" : "NA Bad PASS query",
"status" : "FAIL" # Only Test Suite: all
"status" : "INVALID" # Only Test Suite: !all
},
{
"applicable" : false,
"hasPass" : true,
"name" : "NA Bad FAIL query",
"status" : "INVALID"
},
{
"applicable" : false,
"hasPass" : true,
"name" : "NA Bad INPROGRESS query",
"status" : "FAIL" # Only Test Suite: all
"status" : "INVALID" # Only Test Suite: !all
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory static INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory change INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory type missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory type INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory name Blank)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory duplicate)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "duplicate",
"status" : "FAIL"
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory changes type missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory changes missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory changes invalid)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
}
]
}
[root "Root NA Pass"]
applicable = NOT is:open # Assumes test query is "is:open"
pass = True
{
"applicable" : false,
"hasPass" : true,
"name" : "Root NA Pass",
"status" : "PASS"
}
[root "Root NA Fail"]
applicable = NOT is:open # Assumes test query is "is:open"
fail = True
{
"applicable" : false,
"hasPass" : true,
"name" : "Root NA Fail",
"status" : "FAIL"
}
[root "NA INVALIDS"]
applicable = NOT is:open # Assumes test query is "is:open"
subtasks-file = invalids.config
{
"applicable" : false,
"hasPass" : false,
"name" : "NA INVALIDS",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "No PASS criteria",
"status" : "INVALID"
},
{
"applicable" : true,
"hasPass" : true,
"name" : "WAITING (subtask INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "WAITING (subtask duplicate)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : true,
"name" : "WAITING (subtask missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Grouping WAITING (subtask INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Grouping WAITING (subtask missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask INVALID",
"status" : "INVALID"
},
{
"applicable" : true,
"hasPass" : false,
"name" : "Subtask Optional",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : true,
"name" : "Subtask Blank",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"name" : "Bad APPLICABLE query", # Only Test Suite: visible
"name" : "UNKNOWN", # Only Test Suite: !visible
"status" : "INVALID"
},
{
"applicable" : false,
"hasPass" : true,
"name" : "NA Bad PASS query",
"status" : "FAIL" # Only Test Suite: all
"status" : "INVALID" # Only Test Suite: !all
},
{
"applicable" : false,
"hasPass" : true,
"name" : "NA Bad FAIL query",
"status" : "INVALID"
},
{
"applicable" : false,
"hasPass" : true,
"name" : "NA Bad INPROGRESS query",
"status" : "FAIL" # Only Test Suite: all
"status" : "INVALID" # Only Test Suite: !all
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory static INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (tasks-factory change INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory type missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory type INVALID)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory name Blank)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory duplicate)",
"status" : "WAITING",
"subTasks" : [
{
"applicable" : true,
"hasPass" : true,
"name" : "duplicate",
"status" : "FAIL"
},
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory changes type missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory changes missing)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
},
{
"applicable" : true,
"hasPass" : false,
"name" : "task (names-factory changes invalid)",
"status" : "WAITING",
"subTasks" : [
{
"name" : "UNKNOWN",
"status" : "INVALID"
}
]
}
]
}
```
file: `{root-cfg-prj}:{root-cfg-branch}:task/common.config`
```
[task "file task/common.config PASS"]
applicable = is:open
pass = is:open
[task "file task/common.config FAIL"]
applicable = is:open
fail = is:open
```
file: `{root-cfg-prj}:{root-cfg-branch}:task/relative.config`
```
[task "Root Import task from subdir using relative syntax"]
subtask = dir/common.config^Sample relative task in sub dir
[task "Passing task"]
applicable = is:open
pass = True
```
file: `{root-cfg-prj}:{root-cfg-branch}:task/dir/common.config`
```
[task "Sample relative task in sub dir"]
applicable = is:open
pass = is:open
[task "Sample relative task in sub dir with subtask from same file"]
applicable = is:open
pass = is:open
subtask = Sample relative task in sub dir
[task "Sample relative task in sub dir with subtasks-factory from same file"]
applicable = is:open
pass = is:open
set-my-factory-prop = simple static tasks-factory 2
subtasks-factory = simple static tasks-factory 1
subtasks-factory = ${my-factory-prop}
[tasks-factory "simple static tasks-factory 1"]
names-factory = names-factory static list 1
pass = True
[names-factory "names-factory static list 1"]
type = static
name = my a task
name = my b task
name = my c task
[tasks-factory "simple static tasks-factory 2"]
names-factory = names-factory static list 2
pass = True
[names-factory "names-factory static list 2"]
type = static
name = my d task
[task "Sample relative task in sub dir with subtasks-external from same file"]
applicable = is:open
pass = is:open
set-my-external-prop = user sample config
subtasks-external = user special tasks
subtasks-external = ${my-external-prop}
[external "user special tasks"]
user = testuser
file = special.config
[external "user sample config"]
user = testuser
file = dir/sample.config
[task "Sample relative task in sub dir with subtask from different file"]
applicable = is:open
pass = is:open
subtask = //relative.config^Passing task
[task "Root Import task from root task.config"]
applicable = is:open
subtask = ^Subtask PASS
[task "Sample task in sub dir with preload-task from same file"]
preload-task = Sample relative task in sub dir
[task "Sample task in sub dir with preload-task from different file"]
preload-task = %{non_secret_group_name_without_space}/foo/bar.config^Absolute Task 1
```
file: `{root-cfg-prj}:{root-cfg-branch}:task/invalids.config`
```
[task "No PASS criteria"]
fail-hint = Invalid without Pass criteria and without subtasks
[task "WAITING (subtask INVALID)"]
pass = is:open
subtask = Subtask INVALID
[task "WAITING (subtask duplicate)"]
subtask = Subtask INVALID
subtask = Subtask INVALID
[task "WAITING (subtask missing)"]
pass = is:open
subtask = MISSING # security bug: subtask name appears in output
[task "Grouping WAITING (subtask INVALID)"]
subtask = Subtask INVALID
[task "Grouping WAITING (subtask missing)"]
subtask = MISSING # security bug: subtask name appears in output
[task "Subtask INVALID"]
fail-hint = Use when an INVALID subtask is needed, not meant as a test case in itself
[task "Subtask Optional"]
subtask = MISSING | MISSING
[task "Subtask Blank"]
pass = True
subtask =
[task "Bad APPLICABLE query"]
applicable = bad:query
fail = True
[task "NA Bad PASS query"]
applicable = NOT is:open # Assumes test query is "is:open"
fail = True
pass = has:bad
[task "NA Bad FAIL query"]
applicable = NOT is:open # Assumes test query is "is:open"
pass = True
fail = has:bad
[task "NA Bad INPROGRESS query"]
applicable = NOT is:open # Assumes test query is "is:open"
fail = True
in-progress = has:bad
[task "Looping Properties"]
set-A = ${B}
set-B = ${A}
fail-hint = ${A}
fail = True
[task "task (tasks-factory missing)"]
subtasks-factory = missing
[task "task (tasks-factory static INVALID)"]
subtasks-factory = tasks-factory (preload-task missing)
[task "task (tasks-factory change INVALID)"]
subtasks-factory = tasks-factory change (preload-task missing)
[task "task (names-factory type missing)"]
subtasks-factory = tasks-factory (names-factory type missing)
[task "task (names-factory type INVALID)"]
subtasks-factory = tasks-factory (names-factory type INVALID)
[task "task (names-factory name Blank)"]
subtasks-factory = tasks-factory (names-factory name Blank)
[task "task (names-factory duplicate)"]
subtasks-factory = tasks-factory (names-factory duplicate)
[task "task (names-factory changes type missing)"]
subtasks-factory = tasks-factory change (names-factory type missing)
[task "task (names-factory changes missing)"]
subtasks-factory = tasks-factory change (names-factory changes missing)
[task "task (names-factory changes invalid)"]
subtasks-factory = tasks-factory change (names-factory changes invalid)
[tasks-factory "tasks-factory (names-factory type missing)"]
names-factory = names-factory (type missing)
fail = True
[tasks-factory "tasks-factory (preload-task missing)"]
names-factory = names-factory static
fail = True
preload-task = missing
[tasks-factory "tasks-factory change (preload-task missing)"]
names-factory = names-factory change list
fail = True
preload-task = missing
[tasks-factory "tasks-factory (names-factory type INVALID)"]
names-factory = name-factory (type INVALID)
[tasks-factory "tasks-factory (names-factory name Blank)"]
names-factory = names-factory (name Blank)
fail = True
[tasks-factory "tasks-factory (names-factory duplicate)"]
names-factory = names-factory duplicate
fail = True
[tasks-factory "tasks-factory change (names-factory type missing)"]
names-factory = names-factory change list (type missing)
fail = True
[tasks-factory "tasks-factory change (names-factory changes missing)"]
names-factory = names-factory change list (changes missing)
fail = True
[tasks-factory "tasks-factory change (names-factory changes invalid)"]
names-factory = names-factory change list (changes invalid)
fail = True
[names-factory "names-factory static"]
name = task A
type = static
[names-factory "names-factory change list"]
changes = change:_change1_number OR change:_change2_number
type = change
[names-factory "names-factory (type missing)"]
name = no type test
[names-factory "names-factory change list (type missing)"]
changes = change:_change1_number OR change:_change2_number
[names-factory "names-factory (type INVALID)"]
name = invalid type test
type = invalid
[names-factory "names-factory (name Blank)"]
name =
type = static
[names-factory "names-factory duplicate"]
name = duplicate
name = duplicate
type = static
[names-factory "names-factory change list (changes missing)"]
type = change
[names-factory "names-factory change list (changes invalid)"]
changes = change:invalidChange
type = change
```
file: `All-Users:refs/meta/config:task/special.config`
```
[task "userfile task/special.config PASS"]
applicable = is:open
pass = is:open
[task "userfile task/special.config FAIL"]
applicable = is:open
fail = is:open
[task "file task/common.config Preload PASS"]
preload-task = userfile task/special.config PASS
```
file: `All-Users:refs/users/self:task/common.config`
```
[task "file task/common.config PASS"]
applicable = is:open
pass = is:open
[task "file task/common.config FAIL"]
applicable = is:open
fail = is:open
```
file: `All-Users:refs/users/self:task.config`
```
[task "task in user root config file"]
applicable = is:open
pass = is:open
```
file: `All-Users:refs/users/self:task/dir/sample.config`
```
[task "Referencing single task from same user ref"]
applicable = is:open
pass = is:open
subtask = relative.config^Relative Task
subtask = sub_dir/relative.config^Relative Task in sub dir
subtask = ^task in user root config file
subtask = /foo/bar.config^Absolute Task
```
file: `All-Users:refs/users/self:task/dir/relative.config`
```
[task "Relative Task"]
applicable = is:open
pass = is:open
[task "Relative Task with subtask"]
applicable = is:open
pass = is:open
subtask = Passing task
[task "Passing task"]
applicable = is:open
pass = True
[task "Import {root-cfg-prj} root task"]
applicable = is:open
subtask = //^Subtask PASS
[task "Import {root-cfg-prj} non-root task"]
applicable = is:open
subtask = //dir/common.config^Sample relative task in sub dir
```
file: `All-Users:refs/users/self:task/dir/sub_dir/relative.config`
```
[task "Relative Task in sub dir"]
applicable = is:open
pass = is:open
```
file: `All-Users:refs/users/self:task/foo/bar.config`
```
[task "Absolute Task"]
applicable = is:open
pass = is:open
```
file: `All-Users:refs/groups/{sharded_non_secret_group_uuid_without_space}:task/dir/relative.config`
```
[task "Import {root-cfg-prj} root task - groups"]
applicable = is:open
subtask = //^Subtask PASS
[task "Import {root-cfg-prj} non-root task - groups"]
applicable = is:open
subtask = //dir/common.config^Sample relative task in sub dir
```
file: `All-Users:refs/groups/{sharded_non_secret_group_uuid_without_space}:task/foo/bar.config`
```
[task "Absolute Task 1"]
applicable = is:open
pass = is:open
[task "Absolute Task 2"]
applicable = is:open
pass = is:open
```
file: `All-Users:refs/groups/{sharded_non_secret_group_uuid_without_space}:task/foo.config`
```
[task "Absolute Task"]
applicable = is:open
pass = is:open
```
file: `All-Users:refs/groups/{sharded_non_secret_group_uuid_without_space}:task.config`
```
[task "task in group root config file 1"]
applicable = is:open
pass = is:open
[task "task in group root with subtask"]
applicable = is:open
pass = is:open
subtask = Passing task
[task "Passing task"]
applicable = is:open
pass = True
[task "task in group root with subtask from all-projects"]
applicable = is:open
pass = is:open
subtask = //^Subtask PASS
[task "task in group root with subtask from another group"]
applicable = is:open
pass = is:open
subtask = %{non_secret_group_name_with_space}^task in group root config file 3
[task "task in group root config file 2"]
applicable = is:open
pass = is:open
[task "Sample task with subtasks-file"]
applicable = is:open
pass = is:open
set-my-prop = foo.config
subtasks-file = foo/bar.config
subtasks-file = ${my-prop}
```
file: `All-Users:refs/groups/{sharded_non_secret_group_uuid_with_space}:task/foo/bar.config`
```
[task "Absolute Task 3"]
applicable = is:open
pass = is:open
```
file: `All-Users:refs/groups/{sharded_non_secret_group_uuid_with_space}:task.config`
```
[task "task in group root config file 3"]
applicable = is:open
pass = is:open
```