| @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 |
| ``` |