@@ -234,4 +234,73 @@ mod tests {
234234
235235 fs:: remove_dir_all ( root) . unwrap ( ) ;
236236 }
237+
238+ #[ test]
239+ fn global_virtualenv_dirs_returns_empty_when_all_none ( ) {
240+ let dirs = get_global_virtualenv_dirs ( None , None , None ) ;
241+ assert ! ( dirs. is_empty( ) ) ;
242+ }
243+
244+ #[ test]
245+ fn global_virtualenv_dirs_skips_nonexistent_work_on_home ( ) {
246+ let root = create_test_dir ( "skip-work-on" ) ;
247+ let nonexistent = root. join ( "does-not-exist" ) ;
248+
249+ let dirs =
250+ get_global_virtualenv_dirs ( Some ( nonexistent. to_string_lossy ( ) . to_string ( ) ) , None , None ) ;
251+ assert ! ( dirs. is_empty( ) ) ;
252+
253+ fs:: remove_dir_all ( root) . unwrap ( ) ;
254+ }
255+
256+ #[ test]
257+ fn global_virtualenv_dirs_skips_nonexistent_xdg_virtualenvs ( ) {
258+ let root = create_test_dir ( "skip-xdg" ) ;
259+ let xdg = root. join ( "xdg-missing" ) ;
260+
261+ let dirs = get_global_virtualenv_dirs ( None , Some ( xdg. to_string_lossy ( ) . to_string ( ) ) , None ) ;
262+ assert ! ( dirs. is_empty( ) ) ;
263+
264+ fs:: remove_dir_all ( root) . unwrap ( ) ;
265+ }
266+
267+ #[ test]
268+ fn list_global_virtual_envs_all_none_returns_empty ( ) {
269+ let paths = list_global_virtual_envs_paths ( None , None , None , None ) ;
270+ assert ! ( paths. is_empty( ) ) ;
271+ }
272+
273+ #[ test]
274+ fn list_global_virtual_envs_virtual_env_var_nonexistent_is_skipped ( ) {
275+ let root = create_test_dir ( "skip-virtual-env" ) ;
276+ let nonexistent = root. join ( "nonexistent-venv" ) ;
277+
278+ let paths = list_global_virtual_envs_paths (
279+ Some ( nonexistent. to_string_lossy ( ) . to_string ( ) ) ,
280+ None ,
281+ None ,
282+ None ,
283+ ) ;
284+ assert ! ( paths. is_empty( ) ) ;
285+
286+ fs:: remove_dir_all ( root) . unwrap ( ) ;
287+ }
288+
289+ #[ test]
290+ fn list_global_virtual_envs_skips_empty_dirs ( ) {
291+ let root = create_test_dir ( "empty-dirs" ) ;
292+ let work_on_home = root. join ( "workon" ) ;
293+ fs:: create_dir_all ( & work_on_home) . unwrap ( ) ;
294+
295+ // workon dir exists but has no children
296+ let paths = list_global_virtual_envs_paths (
297+ None ,
298+ Some ( work_on_home. to_string_lossy ( ) . to_string ( ) ) ,
299+ None ,
300+ None ,
301+ ) ;
302+ assert ! ( paths. is_empty( ) ) ;
303+
304+ fs:: remove_dir_all ( root) . unwrap ( ) ;
305+ }
237306}
0 commit comments