Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/galaxy/tool_util/linters/tests.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/galaxy/tool_util/linters/tests.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,76 @@ +"""This module contains a linting functions for tool tests.""" +from ._util import is_datasource + + +# Misspelled so as not be picked up by nosetests. +def lint_tsts(tool_xml, lint_ctx): + tests = tool_xml.findall("./tests/test") + datasource = is_datasource(tool_xml) + + if not tests and not datasource: + lint_ctx.warn("No tests found, most tools should define test cases.") + elif datasource: + lint_ctx.info("No tests found, that should be OK for data_sources.") + + num_valid_tests = 0 + for test in tests: + has_test = False + test_expect = ("expect_failure", "expect_exit_code", "expect_num_outputs") + for te in test_expect: + if te in test.attrib: + has_test = True + break + test_assert = ("assert_stdout", "assert_stderr", "assert_command") + for ta in test_assert: + if len(test.findall(ta)) > 0: + has_test = True + break + + output_data_names, output_collection_names = _collect_output_names(tool_xml) + found_output_test = False + for output in test.findall("output"): + found_output_test = True + name = output.attrib.get("name", None) + if not name: + lint_ctx.warn("Found output tag without a name defined.") + else: + if name not in output_data_names: + lint_ctx.error(f"Found output tag with unknown name [{name}], valid names [{output_data_names}]") + + for output_collection in test.findall("output_collection"): + found_output_test = True + name = output_collection.attrib.get("name", None) + if not name: + lint_ctx.warn("Found output_collection tag without a name defined.") + else: + if name not in output_collection_names: + lint_ctx.warn(f"Found output_collection tag with unknown name [{name}], valid names [{output_collection_names}]") + + has_test = has_test or found_output_test + if not has_test: + lint_ctx.warn("No outputs or expectations defined for tests, this test is likely invalid.") + else: + num_valid_tests += 1 + + if num_valid_tests or datasource: + lint_ctx.valid("%d test(s) found.", num_valid_tests) + else: + lint_ctx.warn("No valid test(s) found.") + + +def _collect_output_names(tool_xml): + output_data_names = [] + output_collection_names = [] + + outputs = tool_xml.findall("./outputs") + if len(outputs) == 1: + for output in list(outputs[0]): + name = output.attrib.get("name", None) + if not name: + continue + if output.tag == "data": + output_data_names.append(name) + elif output.tag == "collection": + output_collection_names.append(name) + + return output_data_names, output_collection_names