typer/tests/test_others.py
Sebastián Ramírez 1d3337a4da
Re-implement completion, fixes, add PowerShell support (#66)
*  Re-implement completion

*  Add tests for re-implemented completion

* 🎨 Move mypy config to file

* 🙈 Update .gitignore

*  Remove click-completion, add support for autodetection with shellingham

*  Fix test for PowerShell

* 🐛 Fix PowerShell permissions/test

* 🎨 Format test

* 🏁 Fix PowerShell script for Windows and PowerShell 5

* 📝 Update docs, internal implementation of completion
2020-03-16 13:21:58 +01:00

71 lines
1.7 KiB
Python

from typing import Optional
from unittest import mock
import shellingham
import typer
import typer.completion
from typer.main import solve_typer_info_defaults, solve_typer_info_help
from typer.models import TyperInfo
from typer.testing import CliRunner
runner = CliRunner()
def test_optional():
app = typer.Typer()
@app.command()
def opt(user: Optional[str] = None):
if user:
typer.echo(f"User: {user}")
else:
typer.echo("No user")
result = runner.invoke(app)
assert result.exit_code == 0
assert "No user" in result.output
result = runner.invoke(app, ["--user", "Camila"])
assert result.exit_code == 0
assert "User: Camila" in result.output
def test_no_type():
app = typer.Typer()
@app.command()
def no_type(user):
typer.echo(f"User: {user}")
result = runner.invoke(app, ["Camila"])
assert result.exit_code == 0
assert "User: Camila" in result.output
def test_help_from_info():
# Mainly for coverage/completeness
value = solve_typer_info_help(TyperInfo())
assert value is None
def test_defaults_from_info():
# Mainly for coverage/completeness
value = solve_typer_info_defaults(TyperInfo())
assert value
def test_install_invalid_shell():
app = typer.Typer()
@app.command()
def main():
typer.echo("Hello World")
typer.completion.Shells
with mock.patch.object(
shellingham, "detect_shell", return_value=("xshell", "/usr/bin/xshell")
):
result = runner.invoke(app, ["--install-completion"])
assert "Shell xshell is not supported." in result.stdout
result = runner.invoke(app)
assert "Hello World" in result.stdout