diff --git a/tests/snippets/stdlib_os.py b/tests/snippets/stdlib_os.py index e470ca7d6..67d4efcc9 100644 --- a/tests/snippets/stdlib_os.py +++ b/tests/snippets/stdlib_os.py @@ -393,6 +393,12 @@ with TestWithTempDir() as tmpdir: dir_iter_bytes.close() + collected_files = os.listdir(tmpdir) + assert set(collected_files) == set(expected_files) + + collected_files = os.listdir(tmpdir.encode()) + assert set(collected_files) == set([file.encode() for file in expected_files ]) + with TestWithTempCurrentDir(): os.chdir(tmpdir) with os.scandir() as dir_iter: diff --git a/vm/src/stdlib/os.rs b/vm/src/stdlib/os.rs index 42eb850a1..d20cf6d2a 100644 --- a/vm/src/stdlib/os.rs +++ b/vm/src/stdlib/os.rs @@ -466,11 +466,15 @@ fn os_rmdir(path: PyStringRef, dir_fd: DirFd, vm: &VirtualMachine) -> PyResult<( fs::remove_dir(path).map_err(|err| convert_io_error(vm, err)) } -fn os_listdir(path: PyStringRef, vm: &VirtualMachine) -> PyResult { - let res: PyResult> = fs::read_dir(path.as_str()) +fn os_listdir(path: PyPathLike, vm: &VirtualMachine) -> PyResult { + let res: PyResult> = fs::read_dir(&path.path) .map_err(|err| convert_io_error(vm, err))? .map(|entry| match entry { - Ok(path) => Ok(vm.ctx.new_str(path.file_name().into_string().unwrap())), + Ok(entry_path) => Ok(output_by_mode( + entry_path.file_name().into_string().unwrap(), + path.mode, + vm, + )), Err(s) => Err(convert_io_error(vm, s)), }) .collect();