Mercurial > repos > shellac > sam_consensus_v3
view 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 source
"""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