Mercurial > repos > guerler > springsuite
view planemo/lib/python3.7/site-packages/galaxy/tool_util/linters/tests.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author | guerler |
---|---|
date | Fri, 31 Jul 2020 00:32:28 -0400 |
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 if "expect_failure" in test.attrib or "expect_exit_code" in test.attrib: has_test = True if len(test.findall("assert_stdout")) > 0: has_test = True if len(test.findall("assert_stderr")) > 0: has_test = True if len(test.findall("assert_command")) > 0: has_test = True 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("Found output tag with unknown name [%s], valid names [%s]" % (name, 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("Found output_collection tag with unknown name [%s], valid names [%s]" % (name, 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