diff options
Diffstat (limited to 'tests/test_rules/RULES')
-rw-r--r-- | tests/test_rules/RULES | 95 |
1 files changed, 89 insertions, 6 deletions
diff --git a/tests/test_rules/RULES b/tests/test_rules/RULES index 1a65ec8..f53efba 100644 --- a/tests/test_rules/RULES +++ b/tests/test_rules/RULES @@ -1,9 +1,14 @@ { "test_case": { "doc": ["Define a test case for rule tests."] - , "string_fields": ["name", "targets", "asserts"] + , "string_fields": ["name", "libs", "targets", "asserts"] , "target_fields": ["data"] , "field_doc": { "name": ["Name of the test (multiple entries are joined)."] + , "libs": + [ "Paths to external libraries' trees provided by the \"test-libs\"" + , "repository. From within a test cases, the library's tree can be" + , "accessed via [\"@\", \"<libpath>\", \"\", \"tree\"]." + ] , "targets": [ "Target names to build and install. Each target name is prefixed by" , "\"+\" or \"-\", indicating if the build should fail or not." @@ -23,6 +28,7 @@ { "runner": ["test_runner.py"] , "rules": [["@", "test-rules", "", "tree"]] , "just": [["@", "test-just", "", ""]] + , "libs_tree": [["@", "test-libs", "", "tree"]] } , "imports": {"stage_artifact": "stage_singleton_field"} , "expression": @@ -35,6 +41,18 @@ , ["fieldname", "rules"] , ["location", "rules"] , ["rules", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}] + , [ "imports" + , { "type": "singleton_map" + , "key": "imports/TARGETS" + , "value": + { "type": "BLOB" + , "data": "{\"tree\":{\"type\":\"install\",\"dirs\":[[[\"TREE\",null,\".\"],\".\"]]}}" + } + } + ] + , ["fieldname", "libs_tree"] + , ["location", "libs"] + , ["libs", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}] , ["fieldname", "data"] , ["location", "work"] , ["work", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}] @@ -43,6 +61,67 @@ , ["runner", {"type": "CALL_EXPRESSION", "name": "stage_artifact"}] , ["targets", {"type": "FIELD", "name": "targets"}] , ["asserts", {"type": "FIELD", "name": "asserts"}] + , [ "work_bindings" + , { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + [ [{"type": "singleton_map", "key": "rules", "value": "rules"}] + , { "type": "foreach" + , "range": {"type": "FIELD", "name": "libs"} + , "var": "libpath" + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "libpath"} + , "value": {"type": "var", "name": "libpath"} + } + } + ] + } + } + ] + , [ "work_deps" + , { "type": "map_union" + , "$1": + { "type": "++" + , "$1": + [ [ { "type": "let*" + , "bindings": + [ ["workspace_root", ["file", "rules"]] + , ["rules", {"type": "env", "vars": ["workspace_root"]}] + ] + , "body": {"type": "env", "vars": ["rules"]} + } + ] + , { "type": "foreach" + , "range": {"type": "FIELD", "name": "libs"} + , "var": "libpath" + , "body": + { "type": "let*" + , "bindings": + [ [ "workspace_root" + , [ "file" + , { "type": "join" + , "$1": ["libs/", {"type": "var", "name": "libpath"}] + } + ] + ] + , ["target_root", ["file", "imports"]] + ] + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "libpath"} + , "value": + { "type": "env" + , "vars": ["workspace_root", "target_root"] + } + } + } + } + ] + } + } + ] , [ "repos" , { "type": "singleton_map" , "key": "repos.json" @@ -54,15 +133,17 @@ { "type": "let*" , "bindings": [ ["workspace_root", ["file", "work"]] - , ["rules", "rules"] - , ["bindings", {"type": "env", "vars": ["rules"]}] + , ["bindings", {"type": "var", "name": "work_bindings"}] , [ "work" , {"type": "env", "vars": ["workspace_root", "bindings"]} ] - , ["workspace_root", ["file", "rules"]] - , ["rules", {"type": "env", "vars": ["workspace_root"]}] , [ "repositories" - , {"type": "env", "vars": ["rules", "work"]} + , { "type": "map_union" + , "$1": + [ {"type": "env", "vars": ["work"]} + , {"type": "var", "name": "work_deps"} + ] + } ] , ["main", "work"] ] @@ -92,6 +173,8 @@ [ {"type": "var", "name": "runner"} , {"type": "var", "name": "rules"} , {"type": "var", "name": "just"} + , {"type": "var", "name": "imports"} + , {"type": "var", "name": "libs"} , {"type": "var", "name": "repos"} , {"type": "var", "name": "work"} , {"type": "var", "name": "config"} |