88import pytest
99
1010from libvcs ._internal .subprocess import SubprocessCommand
11+ from libvcs ._internal .types import StrOrBytesPath
1112
1213if t .TYPE_CHECKING :
1314 import pathlib
1415
1516
16- def idfn (val : t .Any ) -> str :
17+ CmdArgs = StrOrBytesPath | t .Sequence [StrOrBytesPath ]
18+ Kwargs = dict [str , t .Any ]
19+
20+
21+ def idfn (val : CmdArgs | Kwargs | SubprocessCommand | None ) -> str :
1722 """Test ID naming function for SubprocessCommand py.test parametrize."""
1823 if isinstance (val , list ):
1924 if len (val ):
@@ -24,28 +29,36 @@ def idfn(val: t.Any) -> str:
2429
2530
2631@pytest .mark .parametrize (
27- ("args " , "kwargs" , "expected_result" ),
32+ ("cmd_args " , "kwargs" , "expected_result" ),
2833 [
29- (["ls" ], {}, SubprocessCommand ("ls" )),
30- ([["ls" , "-l" ]], {}, SubprocessCommand (["ls" , "-l" ])),
31- ([], {"args" : ["ls" , "-l" ]}, SubprocessCommand (["ls" , "-l" ])),
32- (["ls -l" ], {"shell" : True }, SubprocessCommand ("ls -l" , shell = True )),
33- ([], {"args" : "ls -l" , "shell" : True }, SubprocessCommand ("ls -l" , shell = True )),
34+ ("ls" , {}, SubprocessCommand ("ls" )),
35+ (["ls" , "-l" ], {}, SubprocessCommand (["ls" , "-l" ])),
36+ (None , {"args" : ["ls" , "-l" ]}, SubprocessCommand (["ls" , "-l" ])),
37+ ("ls -l" , {"shell" : True }, SubprocessCommand ("ls -l" , shell = True )),
38+ (
39+ None ,
40+ {"args" : "ls -l" , "shell" : True },
41+ SubprocessCommand ("ls -l" , shell = True ),
42+ ),
3443 (
35- [] ,
44+ None ,
3645 {"args" : ["ls" , "-l" ], "shell" : True },
3746 SubprocessCommand (["ls" , "-l" ], shell = True ),
3847 ),
3948 ],
4049 ids = idfn ,
4150)
4251def test_init (
43- args : list [ t . Any ] ,
44- kwargs : dict [ str , t . Any ] ,
45- expected_result : t . Any ,
52+ cmd_args : CmdArgs | None ,
53+ kwargs : Kwargs ,
54+ expected_result : SubprocessCommand ,
4655) -> None :
4756 """Test SubprocessCommand via list + kwargs, assert attributes."""
48- cmd = SubprocessCommand (* args , ** kwargs )
57+ cmd = (
58+ SubprocessCommand (cmd_args , ** kwargs )
59+ if cmd_args is not None
60+ else SubprocessCommand (** kwargs )
61+ )
4962 assert cmd == expected_result
5063
5164 # Attributes in cmd should match what's passed in
@@ -57,116 +70,116 @@ def test_init(
5770 assert proc .returncode == 0
5871
5972
60- FIXTURES = [
61- [[ "ls" ] , {}, SubprocessCommand ("ls" )] ,
62- [[[ "ls" , "-l" ]] , {}, SubprocessCommand (["ls" , "-l" ])] ,
73+ FIXTURES : list [ tuple [ CmdArgs , Kwargs , SubprocessCommand ]] = [
74+ ( "ls" , {}, SubprocessCommand ("ls" )) ,
75+ ([ "ls" , "-l" ], {}, SubprocessCommand (["ls" , "-l" ])) ,
6376]
6477
6578
6679@pytest .mark .parametrize (
67- ("args " , "kwargs" , "expected_result" ),
80+ ("cmd_args " , "kwargs" , "expected_result" ),
6881 FIXTURES ,
6982 ids = idfn ,
7083)
7184def test_init_and_Popen (
72- args : list [ t . Any ] ,
73- kwargs : dict [ str , t . Any ] ,
74- expected_result : t . Any ,
85+ cmd_args : CmdArgs ,
86+ kwargs : Kwargs ,
87+ expected_result : SubprocessCommand ,
7588) -> None :
7689 """Test SubprocessCommand with Popen."""
77- cmd = SubprocessCommand (* args , ** kwargs )
90+ cmd = SubprocessCommand (cmd_args , ** kwargs )
7891 assert cmd == expected_result
7992
8093 cmd_proc = cmd .Popen ()
8194 cmd_proc .communicate ()
8295 assert cmd_proc .returncode == 0
8396
84- proc = subprocess .Popen (* args , ** kwargs )
97+ proc = subprocess .Popen (cmd_args , ** kwargs )
8598 proc .communicate ()
8699 assert proc .returncode == 0
87100
88101
89102@pytest .mark .parametrize (
90- ("args " , "kwargs" , "expected_result" ),
103+ ("cmd_args " , "kwargs" , "expected_result" ),
91104 FIXTURES ,
92105 ids = idfn ,
93106)
94107def test_init_and_Popen_run (
95- args : list [ t . Any ] ,
96- kwargs : dict [ str , t . Any ] ,
97- expected_result : t . Any ,
108+ cmd_args : CmdArgs ,
109+ kwargs : Kwargs ,
110+ expected_result : SubprocessCommand ,
98111) -> None :
99112 """Test SubprocessCommand with run."""
100- cmd = SubprocessCommand (* args , ** kwargs )
113+ cmd = SubprocessCommand (cmd_args , ** kwargs )
101114 assert cmd == expected_result
102115
103116 cmd_proc = cmd .Popen ()
104117 cmd_proc .communicate ()
105118 assert cmd_proc .returncode == 0
106119
107- proc = subprocess .run (* args , ** kwargs , check = False )
120+ proc = subprocess .run (cmd_args , ** kwargs , check = False )
108121 assert proc .returncode == 0
109122
110123
111124@pytest .mark .parametrize (
112- ("args " , "kwargs" , "expected_result" ),
125+ ("cmd_args " , "kwargs" , "expected_result" ),
113126 FIXTURES ,
114127 ids = idfn ,
115128)
116129def test_init_and_check_call (
117- args : list [ t . Any ] ,
118- kwargs : dict [ str , t . Any ] ,
119- expected_result : t . Any ,
130+ cmd_args : CmdArgs ,
131+ kwargs : Kwargs ,
132+ expected_result : SubprocessCommand ,
120133) -> None :
121134 """Test SubprocessCommand with Popen.check_call."""
122- cmd = SubprocessCommand (* args , ** kwargs )
135+ cmd = SubprocessCommand (cmd_args , ** kwargs )
123136 assert cmd == expected_result
124137
125138 return_code = cmd .check_call ()
126139 assert return_code == 0
127140
128- proc = subprocess .check_call (* args , ** kwargs )
141+ proc = subprocess .check_call (cmd_args , ** kwargs )
129142 assert proc == return_code
130143
131144
132145@pytest .mark .parametrize (
133- ("args " , "kwargs" , "expected_result" ),
146+ ("cmd_args " , "kwargs" , "expected_result" ),
134147 FIXTURES ,
135148)
136149def test_init_and_check_output (
137- args : list [ t . Any ] ,
138- kwargs : dict [ str , t . Any ] ,
139- expected_result : t . Any ,
150+ cmd_args : CmdArgs ,
151+ kwargs : Kwargs ,
152+ expected_result : SubprocessCommand ,
140153) -> None :
141154 """Test SubprocessCommand with Popen.check_output."""
142- cmd = SubprocessCommand (* args , ** kwargs )
155+ cmd = SubprocessCommand (cmd_args , ** kwargs )
143156 assert cmd == expected_result
144157
145158 return_output = cmd .check_output ()
146159 assert isinstance (return_output , bytes )
147160
148- proc = subprocess .check_output (* args , ** kwargs )
161+ proc = subprocess .check_output (cmd_args , ** kwargs )
149162 assert proc == return_output
150163
151164
152165@pytest .mark .parametrize (
153- ("args " , "kwargs" , "run_kwargs" ),
166+ ("cmd_args " , "kwargs" , "run_kwargs" ),
154167 [
155- ([ "ls" ] , {}, {}),
156- ([[ "ls" , "-l" ] ], {}, {}),
157- ([[ "ls" , "-al" ] ], {}, {"stdout" : subprocess .DEVNULL }),
168+ ("ls" , {}, {}),
169+ (["ls" , "-l" ], {}, {}),
170+ (["ls" , "-al" ], {}, {"stdout" : subprocess .DEVNULL }),
158171 ],
159172 ids = idfn ,
160173)
161174def test_run (
162175 tmp_path : pathlib .Path ,
163- args : list [ t . Any ] ,
164- kwargs : dict [ str , t . Any ] ,
165- run_kwargs : dict [ str , t . Any ] ,
176+ cmd_args : CmdArgs ,
177+ kwargs : Kwargs ,
178+ run_kwargs : Kwargs ,
166179) -> None :
167180 """Test SubprocessCommand.run()."""
168181 kwargs ["cwd" ] = tmp_path
169- cmd = SubprocessCommand (* args , ** kwargs )
182+ cmd = SubprocessCommand (cmd_args , ** kwargs )
170183 response = cmd .run (** run_kwargs )
171184
172185 assert response .returncode == 0
0 commit comments