============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-9.0.3, pluggy-1.6.0 -- /usr/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.10.12', 'Platform': 'Linux-6.8.0-1026-gke-x86_64-with-glibc2.35', 'Packages': {'pytest': '9.0.3', 'pluggy': '1.6.0'}, 'Plugins': {'metadata': '3.1.1', 'mock': '3.15.1', 'anyio': '4.13.0', 'cov': '7.1.0', 'json-report': '1.5.0'}}
rootdir: /workspace/cookiecutter
configfile: setup.cfg
plugins: metadata-3.1.1, mock-3.15.1, anyio-4.13.0, cov-7.1.0, json-report-1.5.0
collecting ... collected 371 items

tests/replay/test_dump.py::test_type_error_if_no_template_name PASSED    [  0%]
tests/replay/test_dump.py::test_type_error_if_not_dict_context PASSED    [  0%]
tests/replay/test_dump.py::test_value_error_if_key_missing_in_context PASSED [  0%]
tests/replay/test_dump.py::test_ioerror_if_replay_dir_creation_fails PASSED [  1%]
tests/replay/test_dump.py::test_run_json_dump PASSED                     [  1%]
tests/replay/test_load.py::test_type_error_if_no_template_name PASSED    [  1%]
tests/replay/test_load.py::test_value_error_if_key_missing_in_context PASSED [  1%]
tests/replay/test_load.py::test_io_error_if_no_replay_file PASSED        [  2%]
tests/replay/test_load.py::test_run_json_load PASSED                     [  2%]
tests/replay/test_replay.py::test_get_replay_file_name[bar] PASSED       [  2%]
tests/replay/test_replay.py::test_get_replay_file_name[bar.json] PASSED  [  2%]
tests/replay/test_replay.py::test_raise_on_invalid_mode[invalid_kwargs0] PASSED [  3%]
tests/replay/test_replay.py::test_raise_on_invalid_mode[invalid_kwargs1] PASSED [  3%]
tests/replay/test_replay.py::test_raise_on_invalid_mode[invalid_kwargs2] PASSED [  3%]
tests/replay/test_replay.py::test_main_does_not_invoke_dump_but_load PASSED [  4%]
tests/replay/test_replay.py::test_main_does_not_invoke_load_but_dump PASSED [  4%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Simple expansion] PASSED [  4%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Skip expansion (expansion not an abbreviation)] PASSED [  4%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Expansion prefix] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[expansion_override_builtin] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[expansion_prefix_ignores_suffix] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Correct expansion for builtin abbreviations (github)] PASSED [  5%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Correct expansion for builtin abbreviations (gitlab)] PASSED [  6%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion[Correct expansion for builtin abbreviations (bitbucket)] PASSED [  6%]
tests/repository/test_abbreviation_expansion.py::test_abbreviation_expansion_prefix_not_0_in_braces PASSED [  6%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_zipfile_unzip[/path/to/zipfile.zip-False] PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_zipfile_unzip[https://example.com/path/to/zipfile.zip-True] PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_zipfile_unzip[http://example.com/path/to/zipfile.zip-True] PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_repository_url_should_clone PASSED [  7%]
tests/repository/test_determine_repo_dir_clones_repo.py::test_repository_url_with_no_context_file PASSED [  8%]
tests/repository/test_determine_repo_dir_finds_existing_cookiecutter.py::test_should_find_existing_cookiecutter PASSED [  8%]
tests/repository/test_determine_repo_dir_finds_subdirectories.py::test_should_find_existing_cookiecutter PASSED [  8%]
tests/repository/test_determine_repo_dir_finds_subdirectories.py::test_local_repo_typo PASSED [  8%]
tests/repository/test_determine_repository_should_use_local_repo.py::test_finds_local_repo PASSED [  9%]
tests/repository/test_determine_repository_should_use_local_repo.py::test_local_repo_with_no_context_raises PASSED [  9%]
tests/repository/test_determine_repository_should_use_local_repo.py::test_local_repo_typo PASSED [  9%]
tests/repository/test_is_repo_url.py::test_is_zip_file[/path/to/zipfile.zip] PASSED [  9%]
tests/repository/test_is_repo_url.py::test_is_zip_file[https://example.com/path/to/zipfile.zip] PASSED [ 10%]
tests/repository/test_is_repo_url.py::test_is_zip_file[http://example.com/path/to/zipfile.zip] PASSED [ 10%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[gitolite@server:team/repo] PASSED [ 10%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[git@github.com:audreyfeldroy/cookiecutter.git] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[https://github.com/cookiecutter/cookiecutter.git] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[git+https://private.com/gitrepo] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[hg+https://private.com/mercurialrepo] PASSED [ 11%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[https://bitbucket.org/pokoli/cookiecutter.hg] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_remote_urls[file://server/path/to/repo.git] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_local_urls[/audreyr/cookiecutter.git] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_local_urls[/home/audreyr/cookiecutter] PASSED [ 12%]
tests/repository/test_is_repo_url.py::test_is_repo_url_for_local_urls[c:\\users\\foo\\appdata\\local\\temp\\1\\pytest-0\\test_default_output_dir0\\template] PASSED [ 13%]
tests/repository/test_is_repo_url.py::test_expand_abbreviations PASSED   [ 13%]
tests/repository/test_repository_has_cookiecutter_json.py::test_valid_repository PASSED [ 13%]
tests/repository/test_repository_has_cookiecutter_json.py::test_invalid_repository[tests/fake-repo-bad] PASSED [ 14%]
tests/repository/test_repository_has_cookiecutter_json.py::test_invalid_repository[tests/unknown-repo] PASSED [ 14%]
tests/test_abort_generate_on_hook_error.py::test_hooks_raises_errors[pre_gen_hook_raises_error] PASSED [ 14%]
tests/test_abort_generate_on_hook_error.py::test_hooks_raises_errors[post_gen_hook_raises_error] PASSED [ 14%]
tests/test_cli.py::test_cli_version[-V] PASSED                           [ 15%]
tests/test_cli.py::test_cli_version[--version] PASSED                    [ 15%]
tests/test_cli.py::test_cli_error_on_existing_output_directory PASSED    [ 15%]
tests/test_cli.py::test_cli PASSED                                       [ 15%]
tests/test_cli.py::test_cli_verbose PASSED                               [ 16%]
tests/test_cli.py::test_cli_replay PASSED                                [ 16%]
tests/test_cli.py::test_cli_replay_file PASSED                           [ 16%]
tests/test_cli.py::test_cli_replay_generated PASSED                      [ 16%]
tests/test_cli.py::test_cli_exit_on_noinput_and_replay PASSED            [ 17%]
tests/test_cli.py::test_run_cookiecutter_on_overwrite_if_exists_and_replay[-f] PASSED [ 17%]
tests/test_cli.py::test_run_cookiecutter_on_overwrite_if_exists_and_replay[--overwrite-if-exists] PASSED [ 17%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_does_not_exist[-f] PASSED [ 18%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_does_not_exist[--overwrite-if-exists] PASSED [ 18%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_exists[-f] PASSED [ 18%]
tests/test_cli.py::test_cli_overwrite_if_exists_when_output_dir_exists[--overwrite-if-exists] PASSED [ 18%]
tests/test_cli.py::test_cli_output_dir[-o] PASSED                        [ 19%]
tests/test_cli.py::test_cli_output_dir[--output-dir] PASSED              [ 19%]
tests/test_cli.py::test_cli_help[-h] PASSED                              [ 19%]
tests/test_cli.py::test_cli_help[--help] PASSED                          [ 19%]
tests/test_cli.py::test_cli_help[help] PASSED                            [ 20%]
tests/test_cli.py::test_user_config PASSED                               [ 20%]
tests/test_cli.py::test_default_user_config_overwrite PASSED             [ 20%]
tests/test_cli.py::test_default_user_config PASSED                       [ 21%]
tests/test_cli.py::test_echo_undefined_variable_error PASSED             [ 21%]
tests/test_cli.py::test_echo_unknown_extension_error PASSED              [ 21%]
tests/test_cli.py::test_local_extension PASSED                           [ 21%]
tests/test_cli.py::test_local_extension_not_available PASSED             [ 22%]
tests/test_cli.py::test_cli_extra_context PASSED                         [ 22%]
tests/test_cli.py::test_cli_extra_context_invalid_format PASSED          [ 22%]
tests/test_cli.py::test_debug_file_non_verbose PASSED                    [ 22%]
tests/test_cli.py::test_debug_file_verbose PASSED                        [ 23%]
tests/test_cli.py::test_debug_list_installed_templates PASSED            [ 23%]
tests/test_cli.py::test_debug_list_installed_templates_failure PASSED    [ 23%]
tests/test_cli.py::test_directory_repo PASSED                            [ 23%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=yes-None-True] PASSED [ 24%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=no-None-False] PASSED [ 24%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=ask-yes-True] PASSED [ 24%]
tests/test_cli.py::test_cli_accept_hooks[-o---accept-hooks=ask-no-False] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=yes-None-True] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=no-None-False] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=ask-yes-True] PASSED [ 25%]
tests/test_cli.py::test_cli_accept_hooks[--output-dir---accept-hooks=ask-no-False] PASSED [ 26%]
tests/test_cli.py::test_cli_with_json_decoding_error PASSED              [ 26%]
tests/test_cli.py::test_cli_with_pre_prompt_hook PASSED                  [ 26%]
tests/test_cli.py::test_cli_with_pre_prompt_hook_fail PASSED             [ 26%]
tests/test_cookiecutter_invocation.py::test_should_invoke_main PASSED    [ 27%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_return_project_dir[tests/fake-repo-pre/] PASSED [ 27%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_return_project_dir[tests/fake-repo-pre] PASSED [ 27%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_extra_context PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_templated_context PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_no_input_return_rendered_file PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_dict_values_in_context PASSED [ 28%]
tests/test_cookiecutter_local_no_input.py::test_cookiecutter_template_cleanup PASSED [ 29%]
tests/test_cookiecutter_local_with_input.py::test_cookiecutter_local_with_input PASSED [ 29%]
tests/test_cookiecutter_local_with_input.py::test_cookiecutter_input_extra_context PASSED [ 29%]
tests/test_cookiecutter_nested_templates.py::test_cookiecutter_nested_templates[fake-nested-templates-fake-project] PASSED [ 29%]
tests/test_cookiecutter_nested_templates.py::test_cookiecutter_nested_templates[fake-nested-templates-old-style-fake-package] PASSED [ 30%]
tests/test_custom_extensions_in_hooks.py::test_hook_with_extension[pre_gen_hook] PASSED [ 30%]
tests/test_custom_extensions_in_hooks.py::test_hook_with_extension[post_gen_hook] PASSED [ 30%]
tests/test_default_extensions.py::test_jinja2_time_extension PASSED      [ 30%]
tests/test_default_extensions.py::test_jinja2_slugify_extension PASSED   [ 31%]
tests/test_default_extensions.py::test_jinja2_uuid_extension PASSED      [ 31%]
tests/test_environment.py::test_env_should_raise_for_unknown_extension PASSED [ 31%]
tests/test_environment.py::test_env_should_come_with_default_extensions PASSED [ 32%]
tests/test_exceptions.py::test_undefined_variable_to_str PASSED          [ 32%]
tests/test_find.py::test_find_template[template with default jinja strings] PASSED [ 32%]
tests/test_find.py::test_find_template[template with custom jinja strings] PASSED [ 32%]
tests/test_find.py::test_find_template[template with custom jinja strings but folder with default jinja strings] PASSED [ 33%]
tests/test_find.py::test_find_template[template missing folder] PASSED   [ 33%]
tests/test_generate_context.py::test_generate_context[input_params0-expected_context0] PASSED [ 33%]
tests/test_generate_context.py::test_generate_context[input_params1-expected_context1] PASSED [ 33%]
tests/test_generate_context.py::test_generate_context[input_params2-expected_context2] PASSED [ 34%]
tests/test_generate_context.py::test_generate_context[input_params3-expected_context3] PASSED [ 34%]
tests/test_generate_context.py::test_generate_context_with_json_decoding_error PASSED [ 34%]
tests/test_generate_context.py::test_default_context_replacement_in_generate_context PASSED [ 35%]
tests/test_generate_context.py::test_generate_context_decodes_non_ascii_chars PASSED [ 35%]
tests/test_generate_context.py::test_apply_overwrites_does_include_unused_variables PASSED [ 35%]
tests/test_generate_context.py::test_apply_overwrites_sets_non_list_value PASSED [ 35%]
tests/test_generate_context.py::test_apply_overwrites_does_not_modify_choices_for_invalid_overwrite PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_invalid_overwrite PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_sets_multichoice_values PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_invalid_multichoice_values PASSED [ 36%]
tests/test_generate_context.py::test_apply_overwrites_error_additional_values PASSED [ 37%]
tests/test_generate_context.py::test_apply_overwrites_in_dictionaries PASSED [ 37%]
tests/test_generate_context.py::test_apply_overwrites_sets_default_for_choice_variable PASSED [ 37%]
tests/test_generate_context.py::test_apply_overwrites_in_nested_dict PASSED [ 38%]
tests/test_generate_context.py::test_apply_overwrite_context_as_in_nested_dict_with_additional_values PASSED [ 38%]
tests/test_generate_context.py::test_apply_overwrites_in_nested_dict_additional_values PASSED [ 38%]
tests/test_generate_copy_without_render.py::test_generate_copy_without_render_extensions PASSED [ 38%]
tests/test_generate_copy_without_render_override.py::test_generate_copy_without_render_extensions PASSED [ 39%]
tests/test_generate_file.py::test_generate_file PASSED                   [ 39%]
tests/test_generate_file.py::test_generate_file_jsonify_filter PASSED    [ 39%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[True-10] PASSED [ 39%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[True-40] PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[False-10] PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_random_ascii_string[False-40] PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_with_true_condition PASSED [ 40%]
tests/test_generate_file.py::test_generate_file_with_false_condition PASSED [ 41%]
tests/test_generate_file.py::test_generate_file_verbose_template_syntax_error PASSED [ 41%]
tests/test_generate_file.py::test_generate_file_does_not_translate_lf_newlines_to_crlf PASSED [ 41%]
tests/test_generate_file.py::test_generate_file_does_not_translate_crlf_newlines_to_lf PASSED [ 42%]
tests/test_generate_file.py::test_generate_file_handles_mixed_line_endings PASSED [ 42%]
tests/test_generate_files.py::test_generate_files_nontemplated_exception PASSED [ 42%]
tests/test_generate_files.py::test_generate_files PASSED                 [ 42%]
tests/test_generate_files.py::test_generate_files_with_linux_newline PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_jinja2_environment PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_trailing_newline_forced_to_linux_by_context PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_windows_newline PASSED [ 43%]
tests/test_generate_files.py::test_generate_files_with_windows_newline_forced_to_linux_by_context PASSED [ 44%]
tests/test_generate_files.py::test_generate_files_binaries PASSED        [ 44%]
tests/test_generate_files.py::test_generate_files_absolute_path PASSED   [ 44%]
tests/test_generate_files.py::test_generate_files_output_dir PASSED      [ 45%]
tests/test_generate_files.py::test_generate_files_permissions PASSED     [ 45%]
tests/test_generate_files.py::test_generate_files_with_overwrite_if_exists_with_skip_if_file_exists PASSED [ 45%]
tests/test_generate_files.py::test_generate_files_with_skip_if_file_exists PASSED [ 45%]
tests/test_generate_files.py::test_generate_files_with_overwrite_if_exists PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_file_name PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_file_name_existing_project PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_file_content PASSED [ 46%]
tests/test_generate_files.py::test_raise_undefined_variable_dir_name PASSED [ 47%]
tests/test_generate_files.py::test_keep_project_dir_on_failure PASSED    [ 47%]
tests/test_generate_files.py::test_raise_undefined_variable_dir_name_existing_project PASSED [ 47%]
tests/test_generate_files.py::test_raise_undefined_variable_project_dir PASSED [ 47%]
tests/test_generate_hooks.py::test_ignore_hooks_dirs PASSED              [ 48%]
tests/test_generate_hooks.py::test_run_python_hooks PASSED               [ 48%]
tests/test_generate_hooks.py::test_run_python_hooks_cwd PASSED           [ 48%]
tests/test_generate_hooks.py::test_empty_hooks PASSED                    [ 49%]
tests/test_generate_hooks.py::test_oserror_hooks PASSED                  [ 49%]
tests/test_generate_hooks.py::test_run_failing_hook_removes_output_directory PASSED [ 49%]
tests/test_generate_hooks.py::test_run_failing_hook_preserves_existing_output_directory PASSED [ 49%]
tests/test_generate_hooks.py::test_run_shell_hooks PASSED                [ 50%]
tests/test_generate_hooks.py::test_run_shell_hooks_win SKIPPED (Win only
test)                                                                    [ 50%]
tests/test_generate_hooks.py::test_ignore_shell_hooks PASSED             [ 50%]
tests/test_generate_hooks.py::test_deprecate_run_hook_from_repo_dir PASSED [ 50%]
tests/test_get_config.py::test_merge_configs PASSED                      [ 51%]
tests/test_get_config.py::test_get_config PASSED                         [ 51%]
tests/test_get_config.py::test_get_config_does_not_exist PASSED          [ 51%]
tests/test_get_config.py::test_invalid_config PASSED                     [ 52%]
tests/test_get_config.py::test_get_config_with_defaults PASSED           [ 52%]
tests/test_get_config.py::test_get_config_empty_config_file PASSED       [ 52%]
tests/test_get_config.py::test_get_config_invalid_file_with_array_as_top_level_element PASSED [ 52%]
tests/test_get_config.py::test_get_config_invalid_file_with_multiple_docs PASSED [ 53%]
tests/test_get_user_config.py::test_get_user_config_valid PASSED         [ 53%]
tests/test_get_user_config.py::test_get_user_config_invalid PASSED       [ 53%]
tests/test_get_user_config.py::test_get_user_config_nonexistent PASSED   [ 53%]
tests/test_get_user_config.py::test_specify_config_path PASSED           [ 54%]
tests/test_get_user_config.py::test_default_config_path PASSED           [ 54%]
tests/test_get_user_config.py::test_default_config_from_env_variable PASSED [ 54%]
tests/test_get_user_config.py::test_force_default_config PASSED          [ 54%]
tests/test_get_user_config.py::test_expand_user_for_directories_in_config PASSED [ 55%]
tests/test_get_user_config.py::test_expand_vars_for_directories_in_config PASSED [ 55%]
tests/test_get_user_config.py::test_specify_config_values PASSED         [ 55%]
tests/test_hooks.py::TestFindHooks::test_find_hook PASSED                [ 56%]
tests/test_hooks.py::TestFindHooks::test_no_hooks PASSED                 [ 56%]
tests/test_hooks.py::TestFindHooks::test_unknown_hooks_dir PASSED        [ 56%]
tests/test_hooks.py::TestFindHooks::test_hook_not_found PASSED           [ 56%]
tests/test_hooks.py::TestExternalHooks::test_run_script PASSED           [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_failing_script PASSED   [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_failing_script_enoexec PASSED [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_script_cwd PASSED       [ 57%]
tests/test_hooks.py::TestExternalHooks::test_run_script_with_context PASSED [ 58%]
tests/test_hooks.py::TestExternalHooks::test_run_hook PASSED             [ 58%]
tests/test_hooks.py::TestExternalHooks::test_run_failing_hook PASSED     [ 58%]
tests/test_hooks.py::test_ignore_hook_backup_files PASSED                [ 59%]
tests/test_log.py::test_info_stdout_logging PASSED                       [ 59%]
tests/test_log.py::test_debug_stdout_logging PASSED                      [ 59%]
tests/test_log.py::test_debug_file_logging PASSED                        [ 59%]
tests/test_main.py::test_original_cookiecutter_options_preserved_in__cookiecutter PASSED [ 60%]
tests/test_main.py::test_replay_dump_template_name PASSED                [ 60%]
tests/test_main.py::test_replay_load_template_name PASSED                [ 60%]
tests/test_main.py::test_custom_replay_file PASSED                       [ 60%]
tests/test_output_folder.py::test_output_folder PASSED                   [ 61%]
tests/test_output_folder.py::test_exception_when_output_folder_exists PASSED [ 61%]
tests/test_pre_prompt_hooks.py::test_run_pre_prompt_python_hook PASSED   [ 61%]
tests/test_pre_prompt_hooks.py::test_run_pre_prompt_python_hook_fail PASSED [ 61%]
tests/test_pre_prompt_hooks.py::test_run_pre_prompt_shell_hook PASSED    [ 62%]
tests/test_preferred_encoding.py::test_not_ascii PASSED                  [ 62%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[1-1] PASSED [ 62%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[True-True] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[foo-foo] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[{{cookiecutter.project}}-foobar] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str[None-None] PASSED [ 63%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str_complex_variables[raw_var0-rendered_var0] PASSED [ 64%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str_complex_variables[raw_var1-rendered_var1] PASSED [ 64%]
tests/test_prompt.py::TestRenderVariable::test_convert_to_str_complex_variables[raw_var2-rendered_var2] PASSED [ 64%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config[ASCII default prompt/input] PASSED [ 64%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config[Unicode default prompt/input] PASSED [ 65%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_prompts[ASCII default prompt/input] PASSED [ 65%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_choices[context0] PASSED [ 65%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_choices[context1] PASSED [ 66%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_with_human_choices[context2] PASSED [ 66%]
tests/test_prompt.py::TestPrompt::test_prompt_for_config_dict PASSED     [ 66%]
tests/test_prompt.py::TestPrompt::test_should_render_dict PASSED         [ 66%]
tests/test_prompt.py::TestPrompt::test_should_render_deep_dict PASSED    [ 67%]
tests/test_prompt.py::TestPrompt::test_should_render_deep_dict_with_human_prompts PASSED [ 67%]
tests/test_prompt.py::TestPrompt::test_internal_use_no_human_prompts PASSED [ 67%]
tests/test_prompt.py::TestPrompt::test_prompt_for_templated_config PASSED [ 67%]
tests/test_prompt.py::TestPrompt::test_dont_prompt_for_private_context_var PASSED [ 68%]
tests/test_prompt.py::TestPrompt::test_should_render_private_variables_with_two_underscores PASSED [ 68%]
tests/test_prompt.py::TestPrompt::test_should_not_render_private_variables PASSED [ 68%]
tests/test_prompt.py::TestReadUserChoice::test_should_invoke_read_user_choice PASSED [ 69%]
tests/test_prompt.py::TestReadUserChoice::test_should_invoke_read_user_variable PASSED [ 69%]
tests/test_prompt.py::TestReadUserChoice::test_should_render_choices PASSED [ 69%]
tests/test_prompt.py::TestPromptChoiceForConfig::test_should_return_first_option_if_no_input PASSED [ 69%]
tests/test_prompt.py::TestPromptChoiceForConfig::test_should_read_user_choice PASSED [ 70%]
tests/test_prompt.py::TestReadUserYesNo::test_should_invoke_read_user_yes_no[True] PASSED [ 70%]
tests/test_prompt.py::TestReadUserYesNo::test_should_invoke_read_user_yes_no[False] PASSED [ 70%]
tests/test_prompt.py::TestReadUserYesNo::test_boolean_parameter_no_input PASSED [ 70%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict] PASSED [ 71%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict with choices] PASSED [ 71%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict with dict_key] PASSED [ 71%]
tests/test_prompt.py::test_undefined_variable[Undefined variable in cookiecutter dict with key_value] PASSED [ 71%]
tests/test_prompt.py::test_cookiecutter_nested_templates[fake-nested-templates-fake-project] PASSED [ 72%]
tests/test_prompt.py::test_cookiecutter_nested_templates[fake-nested-templates-old-style-fake-package] PASSED [ 72%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_paths[] PASSED [ 72%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_paths[/tmp] PASSED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_paths[/foo] PASSED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_win_paths[] SKIPPED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_win_paths[C:/tmp] SKIPPED [ 73%]
tests/test_prompt.py::test_cookiecutter_nested_templates_invalid_win_paths[D:/tmp] SKIPPED [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_rm_repo_dir PASSED      [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_exit_on_user_no_answer PASSED [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_rm_repo_file PASSED     [ 74%]
tests/test_prompt.py::test_prompt_should_ask_and_keep_repo_on_no_reuse PASSED [ 75%]
tests/test_prompt.py::test_prompt_should_ask_and_keep_repo_on_reuse PASSED [ 75%]
tests/test_prompt.py::test_prompt_should_not_ask_if_no_input_and_rm_repo_dir PASSED [ 75%]
tests/test_prompt.py::test_prompt_should_not_ask_if_no_input_and_rm_repo_file PASSED [ 76%]
tests/test_read_repo_password.py::test_click_invocation PASSED           [ 76%]
tests/test_read_user_choice.py::test_click_invocation[1-hello] PASSED    [ 76%]
tests/test_read_user_choice.py::test_click_invocation[2-world] PASSED    [ 76%]
tests/test_read_user_choice.py::test_click_invocation[3-foo] PASSED      [ 77%]
tests/test_read_user_choice.py::test_click_invocation[4-bar] PASSED      [ 77%]
tests/test_read_user_choice.py::test_raise_if_options_is_not_a_non_empty_list PASSED [ 77%]
tests/test_read_user_dict.py::test_process_json_invalid_json PASSED      [ 77%]
tests/test_read_user_dict.py::test_process_json_non_dict PASSED          [ 78%]
tests/test_read_user_dict.py::test_process_json_valid_json PASSED        [ 78%]
tests/test_read_user_dict.py::test_process_json_deep_dict PASSED         [ 78%]
tests/test_read_user_dict.py::test_should_raise_type_error PASSED        [ 78%]
tests/test_read_user_dict.py::test_should_call_prompt_with_process_json PASSED [ 79%]
tests/test_read_user_dict.py::test_should_not_load_json_from_sentinel PASSED [ 79%]
tests/test_read_user_dict.py::test_read_user_dict_default_value[\n] PASSED [ 79%]
tests/test_read_user_dict.py::test_read_user_dict_default_value[\ndefault\n] PASSED [ 80%]
tests/test_read_user_dict.py::test_json_prompt_process_response PASSED   [ 80%]
tests/test_read_user_variable.py::test_click_invocation PASSED           [ 80%]
tests/test_read_user_variable.py::test_input_loop_with_null_default_value PASSED [ 80%]
tests/test_read_user_yes_no.py::test_click_invocation PASSED             [ 81%]
tests/test_read_user_yes_no.py::test_yesno_prompt_process_response PASSED [ 81%]
tests/test_repo_not_found.py::test_should_raise_error_if_repo_does_not_exist PASSED [ 81%]
tests/test_specify_output_dir.py::test_api_invocation PASSED             [ 81%]
tests/test_specify_output_dir.py::test_default_output_dir PASSED         [ 82%]
tests/test_templates.py::test_build_templates[include] PASSED            [ 82%]
tests/test_templates.py::test_build_templates[no-templates] PASSED       [ 82%]
tests/test_templates.py::test_build_templates[extends] PASSED            [ 83%]
tests/test_templates.py::test_build_templates[super] PASSED              [ 83%]
tests/test_time_extension.py::test_tz_is_required PASSED                 [ 83%]
tests/test_time_extension.py::test_utc_default_datetime_format PASSED    [ 83%]
tests/test_time_extension.py::test_accept_valid_timezones[utc] PASSED    [ 84%]
tests/test_time_extension.py::test_accept_valid_timezones[local] PASSED  [ 84%]
tests/test_time_extension.py::test_accept_valid_timezones[Europe/Berlin] PASSED [ 84%]
tests/test_time_extension.py::test_environment_datetime_format PASSED    [ 84%]
tests/test_time_extension.py::test_add_time PASSED                       [ 85%]
tests/test_time_extension.py::test_substract_time PASSED                 [ 85%]
tests/test_time_extension.py::test_offset_with_format PASSED             [ 85%]
tests/test_utils.py::test_force_delete PASSED                            [ 85%]
tests/test_utils.py::test_rmtree PASSED                                  [ 86%]
tests/test_utils.py::test_make_sure_path_exists PASSED                   [ 86%]
tests/test_utils.py::test_make_sure_path_exists_correctly_handle_os_error PASSED [ 86%]
tests/test_utils.py::test_work_in PASSED                                 [ 87%]
tests/test_utils.py::test_work_in_without_path PASSED                    [ 87%]
tests/test_utils.py::test_create_tmp_repo_dir PASSED                     [ 87%]
tests/vcs/test_clone.py::test_clone_should_raise_if_vcs_not_installed PASSED [ 87%]
tests/vcs/test_clone.py::test_clone_should_rstrip_trailing_slash_in_repo_url PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_abort_if_user_does_not_want_to_reclone PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_silent_exit_if_ok_to_reuse PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-https://github.com/hello/world.git-world] PASSED [ 88%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[hg-https://bitbucket.org/foo/bar-bar] PASSED [ 89%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-git@host:gitoliterepo-gitoliterepo] PASSED [ 89%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-git@gitlab.com:cookiecutter/cookiecutter.git-cookiecutter] PASSED [ 89%]
tests/vcs/test_clone.py::test_clone_should_invoke_vcs_command[git-git@github.com:cookiecutter/cookiecutter.git-cookiecutter] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_repo_typo[fatal: repository 'https://github.com/hackebro/cookiedozer' not found] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_repo_typo[hg: abort: HTTP Error 404: Not Found] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_branch_typo[error: pathspec 'unknown_branch' did not match any file(s) known to git] PASSED [ 90%]
tests/vcs/test_clone.py::test_clone_handles_branch_typo[hg: abort: unknown revision 'unknown_branch'!] PASSED [ 91%]
tests/vcs/test_clone.py::test_clone_unknown_subprocess_error PASSED      [ 91%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[git+https://github.com/pytest-dev/cookiecutter-pytest-plugin.git-git-https://github.com/pytest-dev/cookiecutter-pytest-plugin.git] PASSED [ 91%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[hg+https://bitbucket.org/foo/bar.hg-hg-https://bitbucket.org/foo/bar.hg] PASSED [ 91%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://github.com/pytest-dev/cookiecutter-pytest-plugin.git-git-https://github.com/pytest-dev/cookiecutter-pytest-plugin.git] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://bitbucket.org/foo/bar.hg-hg-https://bitbucket.org/foo/bar.hg] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://github.com/audreyfeldroy/cookiecutter-pypackage.git-git-https://github.com/audreyfeldroy/cookiecutter-pypackage.git] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://github.com/audreyfeldroy/cookiecutter-pypackage-git-https://github.com/audreyfeldroy/cookiecutter-pypackage] PASSED [ 92%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[git@gitorious.org:cookiecutter-gitorious/cookiecutter-gitorious.git-git-git@gitorious.org:cookiecutter-gitorious/cookiecutter-gitorious.git] PASSED [ 93%]
tests/vcs/test_identify_repo.py::test_identify_known_repo[https://audreyr@bitbucket.org/audreyr/cookiecutter-bitbucket-hg-https://audreyr@bitbucket.org/audreyr/cookiecutter-bitbucket] PASSED [ 93%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foo+git] PASSED [ 93%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foo+hg] PASSED [ 94%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foo+bar] PASSED [ 94%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[foobar] PASSED [ 94%]
tests/vcs/test_identify_repo.py::test_identify_raise_on_unknown_repo[http://norepotypespecified.com] PASSED [ 94%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[-False] PASSED [ 95%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[None-False] PASSED [ 95%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[False-False] PASSED [ 95%]
tests/vcs/test_is_vcs_installed.py::test_is_vcs_installed[/usr/local/bin/git-True] PASSED [ 95%]
tests/zipfile/test_unzip.py::test_unzip_local_file PASSED                [ 96%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_environment_password PASSED [ 96%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_bad_environment_password PASSED [ 96%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_user_password_with_noinput PASSED [ 97%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_user_password PASSED [ 97%]
tests/zipfile/test_unzip.py::test_unzip_protected_local_file_user_bad_password PASSED [ 97%]
tests/zipfile/test_unzip.py::test_empty_zip_file PASSED                  [ 97%]
tests/zipfile/test_unzip.py::test_non_repo_zip_file PASSED               [ 98%]
tests/zipfile/test_unzip.py::test_bad_zip_file PASSED                    [ 98%]
tests/zipfile/test_unzip.py::test_unzip_url PASSED                       [ 98%]
tests/zipfile/test_unzip.py::test_unzip_url_with_empty_chunks PASSED     [ 98%]
tests/zipfile/test_unzip.py::test_unzip_url_existing_cache PASSED        [ 99%]
tests/zipfile/test_unzip.py::test_unzip_url_existing_cache_no_input PASSED [ 99%]
tests/zipfile/test_unzip.py::test_unzip_should_abort_if_no_redownload PASSED [ 99%]
tests/zipfile/test_unzip.py::test_unzip_is_ok_to_reuse PASSED            [100%]

--------------------------------- JSON report ----------------------------------
report saved to: report.json
================================ tests coverage ================================
_______________ coverage: platform linux, python 3.10.12-final-0 _______________

Name                          Stmts   Miss  Cover   Missing
-----------------------------------------------------------
cookiecutter/__init__.py          6      0   100%
cookiecutter/__main__.py          1      0   100%
cookiecutter/cli.py              84      1    99%   147
cookiecutter/config.py           61      4    93%   57, 66-67, 69
cookiecutter/environment.py      20      0   100%
cookiecutter/exceptions.py       23      0   100%
cookiecutter/extensions.py       70      0   100%
cookiecutter/find.py             27      5    81%   23, 27, 36-38
cookiecutter/generate.py        201      3    99%   147-148, 209
cookiecutter/hooks.py            94      0   100%
cookiecutter/log.py              20      0   100%
cookiecutter/main.py             69      0   100%
cookiecutter/prompt.py          194      6    97%   58, 145, 211, 322, 328, 332
cookiecutter/replay.py           26      0   100%
cookiecutter/repository.py       41      0   100%
cookiecutter/utils.py            49      2    96%   59-60
cookiecutter/vcs.py              67      3    96%   79, 121-122
cookiecutter/zipfile.py          62      1    98%   99
-----------------------------------------------------------
TOTAL                          1115     25    98%
======================== 367 passed, 4 skipped in 2.93s ========================