Warning

This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.tools.linters.tests

"""This module contains a linting functions for tool tests."""
from ..lint_util import is_datasource


# Misspelled so as not be picked up by nosetests.
[docs]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