Mercurial > repos > guerler > springsuite
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/planemo/lib/python3.7/site-packages/galaxy/tool_util/linters/tests.py Fri Jul 31 00:32:28 2020 -0400 @@ -0,0 +1,74 @@ +"""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