261 lines
7.5 KiB
Python
261 lines
7.5 KiB
Python
def test_shell_allow_stdout(capfd, dotfiles, run_dotbot):
|
|
"""Verify shell command STDOUT works."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"shell": [
|
|
{
|
|
"command": "echo apple",
|
|
"stdout": True,
|
|
}
|
|
],
|
|
}
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
output = capfd.readouterr()
|
|
assert any([line.startswith("apple") for line in output.out.splitlines()]), output
|
|
|
|
|
|
def test_shell_cli_verbosity_overrides_1(capfd, dotfiles, run_dotbot):
|
|
"""Verify that '-vv' overrides the implicit default stdout=False."""
|
|
|
|
dotfiles.write_config([{"shell": [{"command": "echo apple"}]}])
|
|
run_dotbot("-vv")
|
|
|
|
lines = capfd.readouterr().out.splitlines()
|
|
assert any(line.startswith("apple") for line in lines)
|
|
|
|
|
|
def test_shell_cli_verbosity_overrides_2(capfd, dotfiles, run_dotbot):
|
|
"""Verify that '-vv' overrides an explicit stdout=False."""
|
|
|
|
dotfiles.write_config([{"shell": [{"command": "echo apple", "stdout": False}]}])
|
|
run_dotbot("-vv")
|
|
|
|
lines = capfd.readouterr().out.splitlines()
|
|
assert any(line.startswith("apple") for line in lines)
|
|
|
|
|
|
def test_shell_cli_verbosity_overrides_3(capfd, dotfiles, run_dotbot):
|
|
"""Verify that '-vv' overrides an explicit defaults:shell:stdout=False."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{"defaults": {"shell": {"stdout": False}}},
|
|
{"shell": [{"command": "echo apple"}]},
|
|
]
|
|
)
|
|
run_dotbot("-vv")
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert any(line.startswith("apple") for line in stdout)
|
|
|
|
|
|
def test_shell_cli_verbosity_stderr(capfd, dotfiles, run_dotbot):
|
|
"""Verify that commands can output to STDERR."""
|
|
|
|
dotfiles.write_config([{"shell": [{"command": "echo apple >&2"}]}])
|
|
run_dotbot("-vv")
|
|
|
|
stderr = capfd.readouterr().err.splitlines()
|
|
assert any(line.startswith("apple") for line in stderr)
|
|
|
|
|
|
def test_shell_cli_verbosity_stderr_with_explicit_stdout_off(capfd, dotfiles, run_dotbot):
|
|
"""Verify that commands can output to STDERR with STDOUT explicitly off."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"shell": [
|
|
{
|
|
"command": "echo apple >&2",
|
|
"stdout": False,
|
|
}
|
|
],
|
|
}
|
|
]
|
|
)
|
|
run_dotbot("-vv")
|
|
|
|
stderr = capfd.readouterr().err.splitlines()
|
|
assert any(line.startswith("apple") for line in stderr)
|
|
|
|
|
|
def test_shell_cli_verbosity_stderr_with_defaults_stdout_off(capfd, dotfiles, run_dotbot):
|
|
"""Verify that commands can output to STDERR with defaults:shell:stdout=False."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"defaults": {
|
|
"shell": {
|
|
"stdout": False,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"shell": [
|
|
{"command": "echo apple >&2"},
|
|
],
|
|
},
|
|
]
|
|
)
|
|
run_dotbot("-vv")
|
|
|
|
stderr = capfd.readouterr().err.splitlines()
|
|
assert any(line.startswith("apple") for line in stderr)
|
|
|
|
|
|
def test_shell_single_v_verbosity_stdout(capfd, dotfiles, run_dotbot):
|
|
"""Verify that a single '-v' verbosity doesn't override stdout=False."""
|
|
|
|
dotfiles.write_config([{"shell": [{"command": "echo apple"}]}])
|
|
run_dotbot("-v")
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert not any(line.startswith("apple") for line in stdout)
|
|
|
|
|
|
def test_shell_single_v_verbosity_stderr(capfd, dotfiles, run_dotbot):
|
|
"""Verify that a single '-v' verbosity doesn't override stderr=False."""
|
|
|
|
dotfiles.write_config([{"shell": [{"command": "echo apple >&2"}]}])
|
|
run_dotbot("-v")
|
|
|
|
stderr = capfd.readouterr().err.splitlines()
|
|
assert not any(line.startswith("apple") for line in stderr)
|
|
|
|
|
|
def test_shell_compact_stdout_1(capfd, dotfiles, run_dotbot):
|
|
"""Verify that shell command stdout works in compact form."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{"defaults": {"shell": {"stdout": True}}},
|
|
{"shell": ["echo apple"]},
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert any(line.startswith("apple") for line in stdout)
|
|
|
|
|
|
def test_shell_compact_stdout_2(capfd, dotfiles, run_dotbot):
|
|
"""Verify that shell command stdout works in compact form."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{"defaults": {"shell": {"stdout": True}}},
|
|
{"shell": [["echo apple", "echoing message"]]},
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert any(line.startswith("apple") for line in stdout)
|
|
assert any(line.startswith("echoing message") for line in stdout)
|
|
|
|
|
|
def test_shell_stdout_disabled_by_default(capfd, dotfiles, run_dotbot):
|
|
"""Verify that the shell command disables stdout by default."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"shell": ["echo banana"],
|
|
}
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert not any(line.startswith("banana") for line in stdout)
|
|
|
|
|
|
def test_shell_can_override_defaults(capfd, dotfiles, run_dotbot):
|
|
"""Verify that the shell command can override defaults."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{"defaults": {"shell": {"stdout": True}}},
|
|
{"shell": [{"command": "echo apple", "stdout": False}]},
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert not any(line.startswith("apple") for line in stdout)
|
|
|
|
|
|
def test_shell_quiet_default(capfd, dotfiles, run_dotbot):
|
|
"""Verify that quiet is off by default."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"shell": [
|
|
{
|
|
"command": "echo banana",
|
|
"description": "echoing a thing...",
|
|
}
|
|
],
|
|
}
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert not any(line.startswith("banana") for line in stdout)
|
|
assert any("echo banana" in line for line in stdout)
|
|
assert any(line.startswith("echoing a thing...") for line in stdout)
|
|
|
|
|
|
def test_shell_quiet_enabled_with_description(capfd, dotfiles, run_dotbot):
|
|
"""Verify that only the description is shown when quiet is enabled."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"shell": [
|
|
{
|
|
"command": "echo banana",
|
|
"description": "echoing a thing...",
|
|
"quiet": True,
|
|
}
|
|
],
|
|
}
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert not any(line.startswith("banana") for line in stdout)
|
|
assert not any("echo banana" in line for line in stdout)
|
|
assert any(line.startswith("echoing a thing...") for line in stdout)
|
|
|
|
|
|
def test_shell_quiet_enabled_without_description(capfd, dotfiles, run_dotbot):
|
|
"""Verify the command is shown when quiet is enabled with no description."""
|
|
|
|
dotfiles.write_config(
|
|
[
|
|
{
|
|
"shell": [
|
|
{
|
|
"command": "echo banana",
|
|
"quiet": True,
|
|
}
|
|
],
|
|
}
|
|
]
|
|
)
|
|
run_dotbot()
|
|
|
|
stdout = capfd.readouterr().out.splitlines()
|
|
assert not any(line.startswith("banana") for line in stdout)
|
|
assert any(line.startswith("echo banana") for line in stdout)
|