Coverage for tests/test_annotated.py: 100%
54 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-14 00:18 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-04-14 00:18 +0000
1import typer 1iabgcdhef
2from typer.testing import CliRunner 1iabgcdhef
3from typing_extensions import Annotated 1iabgcdhef
5from .utils import needs_py310 1iabgcdhef
7runner = CliRunner() 1iabgcdhef
10def test_annotated_argument_with_default(): 1iabgcdhef
11 app = typer.Typer() 1iabgcdhef
13 @app.command() 1iabgcdhef
14 def cmd(val: Annotated[int, typer.Argument()] = 0): 1iabgcdhef
15 print(f"hello {val}") 1iabgcdhef
17 result = runner.invoke(app) 1iabgcdhef
18 assert result.exit_code == 0, result.output 1iabgcdhef
19 assert "hello 0" in result.output 1iabgcdhef
21 result = runner.invoke(app, ["42"]) 1iabgcdhef
22 assert result.exit_code == 0, result.output 1iabgcdhef
23 assert "hello 42" in result.output 1iabgcdhef
26@needs_py310 1iabgcdhef
27def test_annotated_argument_in_string_type_with_default(): 1abgcdhef
28 app = typer.Typer() 1abcdef
30 @app.command() 1abcdef
31 def cmd(val: "Annotated[int, typer.Argument()]" = 0): 1abcdef
32 print(f"hello {val}") 1abcdef
34 result = runner.invoke(app) 1abcdef
35 assert result.exit_code == 0, result.output 1abcdef
36 assert "hello 0" in result.output 1abcdef
38 result = runner.invoke(app, ["42"]) 1abcdef
39 assert result.exit_code == 0, result.output 1abcdef
40 assert "hello 42" in result.output 1abcdef
43def test_annotated_argument_with_default_factory(): 1iabgcdhef
44 app = typer.Typer() 1iabgcdhef
46 def make_string(): 1iabgcdhef
47 return "I made it" 1iabgcdhef
49 @app.command() 1iabgcdhef
50 def cmd(val: Annotated[str, typer.Argument(default_factory=make_string)]): 1iabgcdhef
51 print(val) 1iabgcdhef
53 result = runner.invoke(app) 1iabgcdhef
54 assert result.exit_code == 0, result.output 1iabgcdhef
55 assert "I made it" in result.output 1iabgcdhef
57 result = runner.invoke(app, ["overridden"]) 1iabgcdhef
58 assert result.exit_code == 0, result.output 1iabgcdhef
59 assert "overridden" in result.output 1iabgcdhef
62def test_annotated_option_with_argname_doesnt_mutate_multiple_calls(): 1iabgcdhef
63 app = typer.Typer() 1iabgcdhef
65 @app.command() 1iabgcdhef
66 def cmd(force: Annotated[bool, typer.Option("--force")] = False): 1iabgcdhef
67 if force: 1iabgcdhef
68 print("Forcing operation") 1iabgcdhef
69 else:
70 print("Not forcing") 1iabgcdhef
72 result = runner.invoke(app) 1iabgcdhef
73 assert result.exit_code == 0, result.output 1iabgcdhef
74 assert "Not forcing" in result.output 1iabgcdhef
76 result = runner.invoke(app, ["--force"]) 1iabgcdhef
77 assert result.exit_code == 0, result.output 1iabgcdhef
78 assert "Forcing operation" in result.output 1iabgcdhef