Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/cwltool/tests/test_toolargparse.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/cwltool/tests/test_toolargparse.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,156 @@ +import argparse +from io import StringIO +from pathlib import Path +from typing import Callable + +import pytest + +import cwltool.executors +from cwltool.argparser import generate_parser +from cwltool.context import LoadingContext +from cwltool.load_tool import load_tool +from cwltool.main import main + +from .util import get_data, needs_docker + +script_a = """ +#!/usr/bin/env cwl-runner +cwlVersion: v1.0 +class: CommandLineTool +doc: "This tool is developed for SMC-RNA Challenge for detecting gene fusions (STAR fusion)" +inputs: + #Give it a list of input files + - id: input + type: File + inputBinding: + position: 0 +outputs: + - id: output + type: File + outputBinding: + glob: test.txt +stdout: test.txt +baseCommand: [cat] +""" + +script_b = """ +#!/usr/bin/env cwl-runner +cwlVersion: v1.0 +class: CommandLineTool +inputs: + - id: bdg + type: "boolean" +outputs: + - id: output + type: File + outputBinding: + glob: foo +baseCommand: + - echo + - "ff" +stdout: foo +""" + +script_c = """ +#!/usr/bin/env cwl-runner + +cwlVersion: v1.0 +class: ExpressionTool + +inputs: + foo: + type: + type: record + fields: + one: File + two: string + +expression: $(inputs.foo.two) + +outputs: [] +""" + +scripts_argparse_params = [ + ("help", script_a, lambda x: ["--debug", x, "--input", get_data("tests/echo.cwl")]), + ("boolean", script_b, lambda x: [x, "--help"]), + ("help with c", script_c, lambda x: [x, "--help"]), + ( + "foo with c", + script_c, + lambda x: [x, "--foo.one", get_data("tests/echo.cwl"), "--foo.two", "test"], + ), +] + + +@needs_docker +@pytest.mark.parametrize("name,script_contents,params", scripts_argparse_params) +def test_argparse( + name: str, script_contents: str, params: Callable[[str], str], tmp_path: Path +) -> None: + script_name = tmp_path / "script" + try: + with script_name.open(mode="w") as script: + script.write(script_contents) + + my_params = ["--outdir", str(tmp_path / "outdir")] + my_params.extend(params(script.name)) + assert main(my_params) == 0, name + + except SystemExit as err: + assert err.code == 0, name + + +def test_dont_require_inputs(tmp_path: Path) -> None: + stream = StringIO() + + script_name = tmp_path / "script" + try: + with script_name.open(mode="w") as script: + script.write(script_a) + + assert ( + main( + argsl=["--debug", str(script_name), "--input", str(script_name)], + executor=cwltool.executors.NoopJobExecutor(), + stdout=stream, + ) + == 0 + ) + assert ( + main( + argsl=["--debug", str(script_name)], + executor=cwltool.executors.NoopJobExecutor(), + stdout=stream, + ) + == 2 + ) + assert ( + main( + argsl=["--debug", str(script_name)], + executor=cwltool.executors.NoopJobExecutor(), + input_required=False, + stdout=stream, + ) + == 0 + ) + + except SystemExit as err: + assert err.code == 0, script_name if script else None + + +def test_argparser_with_doc() -> None: + """The `desription` field is set if `doc` field is provided.""" + loadingContext = LoadingContext() + tool = load_tool(get_data("tests/with_doc.cwl"), loadingContext) + p = argparse.ArgumentParser() + parser = generate_parser(p, tool, {}, [], False) + assert parser.description is not None + + +def test_argparser_without_doc() -> None: + """The `desription` field is None if `doc` field is not provided.""" + loadingContext = LoadingContext() + tool = load_tool(get_data("tests/without_doc.cwl"), loadingContext) + p = argparse.ArgumentParser() + parser = generate_parser(p, tool, {}, [], False) + assert parser.description is None