22
33import tempfile
44from pathlib import Path
5- from unittest .mock import Mock , patch
5+ from unittest .mock import patch
66
77from typer .testing import CliRunner
88
@@ -43,12 +43,12 @@ def test_list_targets_command(self, mock_settings):
4343 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
4444 def test_setup_command_basic (self , mock_ensure ):
4545 """Test basic install command."""
46- mock_ensure .return_value = Mock (
47- sdk_root = self .sdk_root ,
48- ndk_path = self .sdk_root / "ndk" / "r26d" ,
49- installed_components = ["platform-tools" , "platforms;android-30" ],
50- avd_created = "test_avd" ,
51- )
46+ mock_ensure .return_value = {
47+ " sdk_root" : self .sdk_root ,
48+ " ndk_path" : self .sdk_root / "ndk" / "r26d" ,
49+ " installed_components" : ["platform-tools" , "platforms;android-30" ],
50+ " avd_created" : "test_avd" ,
51+ }
5252
5353 result = self .runner .invoke (
5454 app ,
@@ -57,17 +57,17 @@ def test_setup_command_basic(self, mock_ensure):
5757
5858 assert result .exit_code == 0
5959 mock_ensure .assert_called_once ()
60- assert "Setup completed " in result .stdout or "Success" in result .stdout
60+ assert "Installation complete " in result .stdout or "Success" in result .stdout
6161
6262 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
6363 def test_setup_command_with_ndk (self , mock_ensure ):
6464 """Test install command with NDK."""
65- mock_ensure .return_value = Mock (
66- sdk_root = self .sdk_root ,
67- ndk_path = self .sdk_root / "ndk" / "r26d" ,
68- installed_components = ["ndk;26.1.10909125" ],
69- avd_created = None ,
70- )
65+ mock_ensure .return_value = {
66+ " sdk_root" : self .sdk_root ,
67+ " ndk_path" : self .sdk_root / "ndk" / "r26d" ,
68+ " installed_components" : ["ndk;26.1.10909125" ],
69+ " avd_created" : None ,
70+ }
7171
7272 result = self .runner .invoke (
7373 app ,
@@ -80,13 +80,13 @@ def test_setup_command_with_ndk(self, mock_ensure):
8080 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
8181 def test_setup_command_dry_run (self , mock_ensure ):
8282 """Test install command with dry run."""
83- mock_ensure .return_value = Mock (
84- sdk_root = self .sdk_root ,
85- ndk_path = None ,
86- installed_components = [],
87- avd_created = None ,
88- dry_run = True ,
89- )
83+ mock_ensure .return_value = {
84+ " sdk_root" : self .sdk_root ,
85+ " ndk_path" : None ,
86+ " installed_components" : [],
87+ " avd_created" : None ,
88+ " dry_run" : True ,
89+ }
9090
9191 result = self .runner .invoke (
9292 app ,
@@ -95,7 +95,8 @@ def test_setup_command_dry_run(self, mock_ensure):
9595
9696 assert result .exit_code == 0
9797 mock_ensure .assert_called_once ()
98- assert "DRY RUN" in result .stdout or "Would" in result .stdout
98+ # Dry run shows configuration table with "Dry Run" row set to "Yes"
99+ assert "Dry Run" in result .stdout
99100
100101 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
101102 def test_setup_command_with_error (self , mock_ensure ):
@@ -116,55 +117,60 @@ def test_setup_command_with_error(self, mock_ensure):
116117 def test_verify_command (self , mock_verify ):
117118 """Test verify command."""
118119 mock_verify .return_value = {
119- "sdk_root " : str ( self . sdk_root ) ,
120+ "sdk_root_exists " : True ,
120121 "cmdline_tools" : True ,
121122 "platform_tools" : True ,
122- "platforms " : [ "android-30" ] ,
123- "system_images " : [] ,
123+ "emulator " : True ,
124+ "ndk " : True ,
124125 "ndk_versions" : ["r26d" ],
125126 "avds" : [],
127+ "components" : ["platform-tools" , "emulator" ],
126128 }
127129
128130 result = self .runner .invoke (app , ["verify" , "--sdk-root" , str (self .sdk_root )])
129131
130132 assert result .exit_code == 0
131133 mock_verify .assert_called_once ()
132- assert "Android SDK " in result .stdout or "Verification " in result .stdout
134+ assert "Installation Status " in result .stdout or "Verifying installation " in result .stdout
133135
134136 @patch ("ovmobilebench.android.installer.cli.verify_installation" )
135137 def test_verify_command_nothing_installed (self , mock_verify ):
136138 """Test verify command when nothing is installed."""
137139 mock_verify .return_value = {
138- "sdk_root " : str ( self . sdk_root ) ,
140+ "sdk_root_exists " : True ,
139141 "cmdline_tools" : False ,
140142 "platform_tools" : False ,
141- "platforms " : [] ,
142- "system_images " : [] ,
143+ "emulator " : False ,
144+ "ndk " : False ,
143145 "ndk_versions" : [],
144146 "avds" : [],
147+ "components" : [],
145148 }
146149
147150 result = self .runner .invoke (app , ["verify" , "--sdk-root" , str (self .sdk_root )])
148151
149152 assert result .exit_code == 0
150- assert "not found " in result .stdout . lower () or "No " in result .stdout
153+ assert "Not installed " in result .stdout or "None " in result .stdout
151154
152155 def test_main_help (self ):
153156 """Test main command help."""
154- result = self .runner .invoke (app , [])
157+ result = self .runner .invoke (app , ["--help" ])
158+ # With --help flag, should exit cleanly with code 0
155159 assert result .exit_code == 0
156- assert "setup" in result .stdout
157- assert "verify" in result .stdout
160+ assert "Android SDK/NDK installation" in result .stdout
161+ # Commands should be shown in the output
162+ assert "setup" in result .stdout .lower ()
163+ assert "verify" in result .stdout .lower ()
158164
159165 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
160166 def test_setup_with_avd (self , mock_ensure ):
161167 """Test setup command with AVD creation."""
162- mock_ensure .return_value = Mock (
163- sdk_root = self .sdk_root ,
164- ndk_path = None ,
165- installed_components = ["system-images;android-30;google_atd;x86_64" ],
166- avd_created = "test_avd" ,
167- )
168+ mock_ensure .return_value = {
169+ " sdk_root" : self .sdk_root ,
170+ " ndk_path" : None ,
171+ " installed_components" : ["system-images;android-30;google_atd;x86_64" ],
172+ " avd_created" : "test_avd" ,
173+ }
168174
169175 result = self .runner .invoke (
170176 app ,
@@ -175,7 +181,6 @@ def test_setup_with_avd(self, mock_ensure):
175181 "--api" ,
176182 "30" ,
177183 "--create-avd" ,
178- "--avd-name" ,
179184 "test_avd" ,
180185 ],
181186 )
@@ -186,12 +191,12 @@ def test_setup_with_avd(self, mock_ensure):
186191 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
187192 def test_setup_verbose (self , mock_ensure ):
188193 """Test setup command with verbose output."""
189- mock_ensure .return_value = Mock (
190- sdk_root = self .sdk_root ,
191- ndk_path = None ,
192- installed_components = [],
193- avd_created = None ,
194- )
194+ mock_ensure .return_value = {
195+ " sdk_root" : self .sdk_root ,
196+ " ndk_path" : None ,
197+ " installed_components" : [],
198+ " avd_created" : None ,
199+ }
195200
196201 result = self .runner .invoke (
197202 app ,
@@ -206,40 +211,47 @@ def test_setup_verbose(self, mock_ensure):
206211 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
207212 def test_setup_with_jsonl (self , mock_ensure ):
208213 """Test setup command with JSON Lines output."""
209- mock_ensure .return_value = Mock (
210- sdk_root = self .sdk_root ,
211- ndk_path = None ,
212- installed_components = [],
213- avd_created = None ,
214- )
214+ mock_ensure .return_value = {
215+ " sdk_root" : self .sdk_root ,
216+ " ndk_path" : None ,
217+ " installed_components" : [],
218+ " avd_created" : None ,
219+ }
215220
216221 jsonl_path = Path (self .tmpdir .name ) / "install.jsonl"
217222 result = self .runner .invoke (
218223 app ,
219- ["setup" , "--sdk-root" , str (self .sdk_root ), "--api" , "30" , "--jsonl" , str (jsonl_path )],
224+ [
225+ "setup" ,
226+ "--sdk-root" ,
227+ str (self .sdk_root ),
228+ "--api" ,
229+ "30" ,
230+ "--jsonl-log" ,
231+ str (jsonl_path ),
232+ ],
220233 )
221234
222235 assert result .exit_code == 0
223236 # JSONL path should be passed
224237 call_kwargs = mock_ensure .call_args [1 ]
225- assert "jsonl_path " in call_kwargs
238+ assert "jsonl_log " in call_kwargs
226239
227240 @patch ("ovmobilebench.android.installer.cli.ensure_android_tools" )
228241 def test_setup_with_force (self , mock_ensure ):
229- """Test setup command with force reinstall ."""
230- mock_ensure .return_value = Mock (
231- sdk_root = self .sdk_root ,
232- ndk_path = None ,
233- installed_components = [],
234- avd_created = None ,
235- )
242+ """Test setup command basic without optional features ."""
243+ mock_ensure .return_value = {
244+ " sdk_root" : self .sdk_root ,
245+ " ndk_path" : None ,
246+ " installed_components" : [],
247+ " avd_created" : None ,
248+ }
236249
237250 result = self .runner .invoke (
238251 app ,
239- ["setup" , "--sdk-root" , str (self .sdk_root ), "--api" , "30" , "--force" ],
252+ ["setup" , "--sdk-root" , str (self .sdk_root ), "--api" , "30" ],
240253 )
241254
242255 assert result .exit_code == 0
243- # Force flag should be passed
244- call_kwargs = mock_ensure .call_args [1 ]
245- assert "force" in call_kwargs
256+ # Ensure the function was called
257+ mock_ensure .assert_called_once ()
0 commit comments