============================= test session starts ============================== platform sunos5 -- Python $(PYTHON_VERSION).X -- $(PYTHON) cachedir: .pytest_cache rootdir: $(@D) configfile: pyproject.toml testpaths: tests collecting ... collected 990 items tests/test_ansi.py::test_strip_style PASSED tests/test_ansi.py::test_style_aware_wcswidth PASSED tests/test_ansi.py::test_widest_line PASSED tests/test_ansi.py::test_style_none PASSED tests/test_ansi.py::test_style_fg[] PASSED tests/test_ansi.py::test_style_fg[] PASSED tests/test_ansi.py::test_style_fg[fg_color2] PASSED tests/test_ansi.py::test_style_bg[] PASSED tests/test_ansi.py::test_style_bg[] PASSED tests/test_ansi.py::test_style_bg[bg_color2] PASSED tests/test_ansi.py::test_style_invalid_types PASSED tests/test_ansi.py::test_style_bold PASSED tests/test_ansi.py::test_style_dim PASSED tests/test_ansi.py::test_style_italic PASSED tests/test_ansi.py::test_style_overline PASSED tests/test_ansi.py::test_style_strikethrough PASSED tests/test_ansi.py::test_style_underline PASSED tests/test_ansi.py::test_style_multi PASSED tests/test_ansi.py::test_set_title PASSED tests/test_ansi.py::test_async_alert_str[127-(Cmd) -help his-12-\x1b[35mHello World!\x1b[39m-\x1b[2K\r\x1b[35mHello World!\x1b[39m] PASSED tests/test_ansi.py::test_async_alert_str[127-\n(Cmd) -help -5-foo-\x1b[2K\x1b[1A\x1b[2K\rfoo] PASSED tests/test_ansi.py::test_async_alert_str[10-(Cmd) -help history of the american republic-4-boo-\x1b[3B\x1b[2K\x1b[1A\x1b[2K\x1b[1A\x1b[2K\x1b[1A\x1b[2K\x1b[1A\x1b[2K\rboo] PASSED tests/test_ansi.py::test_clear_screen PASSED tests/test_ansi.py::test_clear_line PASSED tests/test_ansi.py::test_cursor PASSED tests/test_ansi.py::test_sequence_str_building[] PASSED tests/test_ansi.py::test_sequence_str_building[] PASSED tests/test_ansi.py::test_sequence_str_building[] PASSED tests/test_ansi.py::test_sequence_str_building[] PASSED tests/test_ansi.py::test_sequence_str_building[ansi_sequence4] PASSED tests/test_ansi.py::test_sequence_str_building[ansi_sequence5] PASSED tests/test_ansi.py::test_sequence_str_building[] PASSED tests/test_ansi.py::test_rgb_bounds[0-0-0-True] PASSED tests/test_ansi.py::test_rgb_bounds[255-255-255-True] PASSED tests/test_ansi.py::test_rgb_bounds[-1-0-0-False] PASSED tests/test_ansi.py::test_rgb_bounds[256-255-255-False] PASSED tests/test_ansi.py::test_rgb_bounds[0--1-0-False] PASSED tests/test_ansi.py::test_rgb_bounds[255-256-255-False] PASSED tests/test_ansi.py::test_rgb_bounds[0-0--1-False] PASSED tests/test_ansi.py::test_rgb_bounds[255-255-256-False] PASSED tests/test_ansi.py::test_std_color_re PASSED tests/test_ansi.py::test_eight_bit_color_re PASSED tests/test_ansi.py::test_rgb_color_re PASSED tests/test_argparse.py::test_invalid_syntax PASSED tests/test_argparse.py::test_argparse_basic_command PASSED tests/test_argparse.py::test_argparse_remove_quotes PASSED tests/test_argparse.py::test_argparser_kwargs PASSED tests/test_argparse.py::test_argparse_preserve_quotes PASSED tests/test_argparse.py::test_argparse_custom_namespace PASSED tests/test_argparse.py::test_argparse_with_list PASSED tests/test_argparse.py::test_argparse_with_list_remove_quotes PASSED tests/test_argparse.py::test_argparse_with_list_preserve_quotes PASSED tests/test_argparse.py::test_argparse_with_list_custom_namespace PASSED tests/test_argparse.py::test_argparse_with_list_and_empty_doc PASSED tests/test_argparse.py::test_argparser_correct_args_with_quotes_and_midline_options PASSED tests/test_argparse.py::test_argparser_and_unknown_args_kwargs PASSED tests/test_argparse.py::test_argparse_quoted_arguments_multiple PASSED tests/test_argparse.py::test_argparse_help_docstring PASSED tests/test_argparse.py::test_argparse_help_description PASSED tests/test_argparse.py::test_argparse_prog PASSED tests/test_argparse.py::test_arglist PASSED tests/test_argparse.py::test_arglist_kwargs PASSED tests/test_argparse.py::test_preservelist PASSED tests/test_argparse.py::test_subcommand_foo PASSED tests/test_argparse.py::test_subcommand_bar PASSED tests/test_argparse.py::test_subcommand_invalid PASSED tests/test_argparse.py::test_subcommand_base_help PASSED tests/test_argparse.py::test_subcommand_help PASSED tests/test_argparse.py::test_subcommand_invalid_help PASSED tests/test_argparse.py::test_add_another_subcommand PASSED tests/test_argparse.py::test_subcmd_decorator PASSED tests/test_argparse.py::test_unittest_mock PASSED tests/test_argparse.py::test_pytest_mock_invalid PASSED tests/test_argparse.py::test_pytest_mock_valid[spec_param0] PASSED tests/test_argparse.py::test_pytest_mock_valid[spec_param1] PASSED tests/test_argparse.py::test_pytest_mock_valid[spec_param2] PASSED tests/test_argparse_completer.py::test_help[music] PASSED tests/test_argparse_completer.py::test_help[music create] PASSED tests/test_argparse_completer.py::test_help[music create rock] PASSED tests/test_argparse_completer.py::test_help[music create jazz] PASSED tests/test_argparse_completer.py::test_bad_subcommand_help PASSED tests/test_argparse_completer.py::test_complete_help[-mus-completions0] PASSED tests/test_argparse_completer.py::test_complete_help[music-cre-completions1] PASSED tests/test_argparse_completer.py::test_complete_help[music-creab-completions2] PASSED tests/test_argparse_completer.py::test_complete_help[music create--completions3] PASSED tests/test_argparse_completer.py::test_complete_help[music crea-jazz-completions4] PASSED tests/test_argparse_completer.py::test_complete_help[music create-foo-completions5] PASSED tests/test_argparse_completer.py::test_complete_help[fake create--completions6] PASSED tests/test_argparse_completer.py::test_complete_help[music fake--completions7] PASSED tests/test_argparse_completer.py::test_subcommand_completions[create--completions0] PASSED tests/test_argparse_completer.py::test_subcommand_completions[create-ja-completions1] PASSED tests/test_argparse_completer.py::test_subcommand_completions[create-foo-completions2] PASSED tests/test_argparse_completer.py::test_subcommand_completions[creab-ja-completions3] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---completion_matches0-display_matches0] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag----completion_matches1-display_matches1] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag--n-completion_matches2-display_matches2] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---n-completion_matches3-display_matches3] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag --append_flag---completion_matches4-display_matches4] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag--r-completion_matches5-display_matches5] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---rem-completion_matches6-display_matches6] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag -r value---completion_matches7-display_matches7] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag --remainder_flag value----completion_matches8-display_matches8] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag--s-completion_matches9-display_matches9] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag---s-completion_matches10-display_matches10] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag -n----completion_matches11-display_matches11] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag --append_const_flag -c --append_flag value----completion_matches12-display_matches12] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag-+-completion_matches13-display_matches13] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag-++-completion_matches14-display_matches14] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag ------completion_matches15-display_matches15] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[flag --help ------completion_matches16-display_matches16] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag ---++-completion_matches17-display_matches17] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[plus_flag ++help ---++-completion_matches18-display_matches18] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[pos_and_flag--completion_matches19-display_matches19] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[pos_and_flag choice --completion_matches20-display_matches20] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[pos_and_flag choice -f --completion_matches21-display_matches21] PASSED tests/test_argparse_completer.py::test_autcomp_flag_completion[pos_and_flag choice -f -h --completion_matches22-display_matches22] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[-l--completions0] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--list-s-completions1] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[-p--completions2] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--provider-pr-completions3] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[-n--completions4] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--num-1-completions5] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--num---completions6] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--num--1-completions7] PASSED tests/test_argparse_completer.py::test_autocomp_flag_choices_completion[--num_completion_items--completions8] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[1--completions0] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[1-s-completions1] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[2--completions2] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[2-pr-completions3] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[3--completions4] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[3-2-completions5] PASSED tests/test_argparse_completer.py::test_autocomp_positional_choices_completion[4--completions6] PASSED tests/test_argparse_completer.py::test_flag_sorting PASSED tests/test_argparse_completer.py::test_autocomp_flag_completers[-c--completions0] PASSED tests/test_argparse_completer.py::test_autocomp_flag_completers[--completer-f-completions1] PASSED tests/test_argparse_completer.py::test_autocomp_positional_completers[1--completions0] PASSED tests/test_argparse_completer.py::test_autocomp_positional_completers[1-p-completions1] PASSED tests/test_argparse_completer.py::test_autocomp_positional_completers[2--completions2] PASSED tests/test_argparse_completer.py::test_autocomp_positional_completers[2-m-completions3] PASSED tests/test_argparse_completer.py::test_autocomp_blank_token PASSED tests/test_argparse_completer.py::test_completion_items PASSED tests/test_argparse_completer.py::test_max_completion_items[1-False] PASSED tests/test_argparse_completer.py::test_max_completion_items[5-True] PASSED tests/test_argparse_completer.py::test_max_completion_items[100-False] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--set_value-completions0] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--set_value set-completions1] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--set_value set value-completions2] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--set_value set value --set_value-completions3] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--one_or_more-completions4] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--one_or_more one-completions5] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--optional-completions6] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--optional optional-completions7] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--range-completions8] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--range some-completions9] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--range some range-completions10] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--remainder-completions11] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--remainder remainder -completions12] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--remainder choices --set_value-completions13] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--range choice ---completions14] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[--remainder remainder ---completions15] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[-- --one_or_more -completions16] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[-completions17] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[positional-completions18] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[positional --set_value-completions19] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[positional --set_value set-completions20] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[positional --set_value set value-completions21] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[positional --range choice ---completions22] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[the positional-completions23] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[the positional remainder-completions24] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[the positional remainder choices-completions25] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[the positional --set_value-completions26] PASSED tests/test_argparse_completer.py::test_autcomp_nargs[the positional remainder --set_value-completions27] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[hint --flag foo ----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[hint --flag foo --help--False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[hint --flag foo----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --one_or_more one ----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --one_or_more one or --set_value--False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --one_or_more one or more----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_value set value ----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_value set value --one_or_more--False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_value set value----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_val set value----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --range choices ----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --range choices range --set_value--False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --range range----False] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[hint --flag ----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[hint --flag --help--True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[hint --flag----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --one_or_more ----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --one_or_more --set_value--True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --one_or_more----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_value set ----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_value set --one_or_more--True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_value set----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --set_val set----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --range ----True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --range --set_value--True] PASSED tests/test_argparse_completer.py::test_unfinished_flag_error[nargs --range----True] PASSED tests/test_argparse_completer.py::test_completion_items_arg_header PASSED tests/test_argparse_completer.py::test_completion_items_descriptive_header PASSED tests/test_argparse_completer.py::test_autocomp_hint[hint--True] PASSED tests/test_argparse_completer.py::test_autocomp_hint[hint --flag--True] PASSED tests/test_argparse_completer.py::test_autocomp_hint[hint --suppressed_help--False] PASSED tests/test_argparse_completer.py::test_autocomp_hint[hint --suppressed_hint--False] PASSED tests/test_argparse_completer.py::test_autocomp_hint[nargs --one_or_more---True] PASSED tests/test_argparse_completer.py::test_autocomp_hint[nargs --one_or_more choices-bad_completion-True] PASSED tests/test_argparse_completer.py::test_autocomp_hint[nargs --one_or_more choices---False] PASSED tests/test_argparse_completer.py::test_autocomp_hint[nargs --remainder---True] PASSED tests/test_argparse_completer.py::test_autocomp_hint[hint---False] PASSED tests/test_argparse_completer.py::test_autocomp_hint[nargs the choices---True] PASSED tests/test_argparse_completer.py::test_autocomp_hint[nargs the choices remainder---True] PASSED tests/test_argparse_completer.py::test_autocomp_hint_no_help_text PASSED tests/test_argparse_completer.py::test_completion_error[--choice -choice] PASSED tests/test_argparse_completer.py::test_completion_error[-completer] PASSED tests/test_argparse_completer.py::test_arg_tokens[arg_tokens choice subcmd-completions0] PASSED tests/test_argparse_completer.py::test_arg_tokens[arg_tokens completer subcmd fake-completions1] PASSED tests/test_argparse_completer.py::test_arg_tokens[arg_tokens completer subcmd --parent_arg override fake-completions2] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex--the optional positional-None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex---fl----flag ] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex --flag--the flag arg-None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex pos_val---fl--None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex pos_val --flag--f/--flag: not allowed with argument optional_pos-None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex --flag flag_val--the last arg-None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex --flag flag_val---oth--None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex --flag flag_val --other---o/--other_flag: not allowed with argument -f/--flag-None] PASSED tests/test_argparse_completer.py::test_complete_mutex_group[mutex --flag flag_val --flag--the flag arg-None] PASSED tests/test_argparse_completer.py::test_single_prefix_char PASSED tests/test_argparse_completer.py::test_looks_like_flag PASSED tests/test_argparse_completer.py::test_complete_command_no_tokens PASSED tests/test_argparse_completer.py::test_complete_command_help_no_tokens PASSED tests/test_argparse_completer.py::test_complete_standalone[--provider-completions0] PASSED tests/test_argparse_completer.py::test_complete_standalone[--completer-completions1] PASSED tests/test_argparse_completer.py::test_default_custom_completer_type PASSED tests/test_argparse_completer.py::test_custom_completer_type PASSED tests/test_argparse_completer.py::test_decorated_subcmd_custom_completer PASSED tests/test_argparse_completer.py::test_add_parser_custom_completer PASSED tests/test_argparse_custom.py::test_apcustom_choices_callable_count[kwargs0-True] PASSED tests/test_argparse_custom.py::test_apcustom_choices_callable_count[kwargs1-True] PASSED tests/test_argparse_custom.py::test_apcustom_choices_callable_count[kwargs2-False] PASSED tests/test_argparse_custom.py::test_apcustom_no_choices_callables_alongside_choices[kwargs0] PASSED tests/test_argparse_custom.py::test_apcustom_no_choices_callables_alongside_choices[kwargs1] PASSED tests/test_argparse_custom.py::test_apcustom_no_choices_callables_when_nargs_is_0[kwargs0] PASSED tests/test_argparse_custom.py::test_apcustom_no_choices_callables_when_nargs_is_0[kwargs1] PASSED tests/test_argparse_custom.py::test_apcustom_usage PASSED tests/test_argparse_custom.py::test_apcustom_nargs_help_format PASSED tests/test_argparse_custom.py::test_apcustom_nargs_range_validation PASSED tests/test_argparse_custom.py::test_apcustom_narg_invalid_tuples[nargs_tuple0] PASSED tests/test_argparse_custom.py::test_apcustom_narg_invalid_tuples[nargs_tuple1] PASSED tests/test_argparse_custom.py::test_apcustom_narg_invalid_tuples[nargs_tuple2] PASSED tests/test_argparse_custom.py::test_apcustom_narg_invalid_tuples[nargs_tuple3] PASSED tests/test_argparse_custom.py::test_apcustom_narg_tuple_order PASSED tests/test_argparse_custom.py::test_apcustom_narg_tuple_negative PASSED tests/test_argparse_custom.py::test_apcustom_narg_tuple_zero_base PASSED tests/test_argparse_custom.py::test_apcustom_narg_tuple_one_base PASSED tests/test_argparse_custom.py::test_apcustom_narg_tuple_other_ranges PASSED tests/test_argparse_custom.py::test_apcustom_print_message PASSED tests/test_argparse_custom.py::test_generate_range_error PASSED tests/test_argparse_custom.py::test_apcustom_required_options PASSED tests/test_argparse_custom.py::test_override_parser PASSED tests/test_argparse_custom.py::test_apcustom_metavar_tuple PASSED tests/test_argparse_custom.py::test_cmd2_attribute_wrapper PASSED tests/test_argparse_custom.py::test_completion_items_as_choices PASSED tests/test_cmd2.py::test_version PASSED tests/test_cmd2.py::test_not_in_main_thread PASSED tests/test_cmd2.py::test_empty_statement PASSED tests/test_cmd2.py::test_base_help PASSED tests/test_cmd2.py::test_base_help_verbose PASSED tests/test_cmd2.py::test_base_argparse_help PASSED tests/test_cmd2.py::test_base_invalid_option PASSED tests/test_cmd2.py::test_base_shortcuts PASSED tests/test_cmd2.py::test_command_starts_with_shortcut PASSED tests/test_cmd2.py::test_base_set PASSED tests/test_cmd2.py::test_set PASSED tests/test_cmd2.py::test_set_val_empty PASSED tests/test_cmd2.py::test_set_val_is_flag PASSED tests/test_cmd2.py::test_set_not_supported PASSED tests/test_cmd2.py::test_set_no_settables PASSED tests/test_cmd2.py::test_set_allow_style[Never-True-Never] PASSED tests/test_cmd2.py::test_set_allow_style[neVeR-True-Never] PASSED tests/test_cmd2.py::test_set_allow_style[Terminal-True-Terminal] PASSED tests/test_cmd2.py::test_set_allow_style[TeRMInal-True-Terminal] PASSED tests/test_cmd2.py::test_set_allow_style[Always-True-Always] PASSED tests/test_cmd2.py::test_set_allow_style[AlWaYs-True-Always] PASSED tests/test_cmd2.py::test_set_allow_style[invalid-False-Terminal] PASSED tests/test_cmd2.py::test_set_with_choices PASSED tests/test_cmd2.py::test_set_onchange_hook PASSED tests/test_cmd2.py::test_base_shell PASSED tests/test_cmd2.py::test_shell_last_result PASSED tests/test_cmd2.py::test_shell_manual_call PASSED tests/test_cmd2.py::test_base_error PASSED tests/test_cmd2.py::test_base_error_suggest_command PASSED tests/test_cmd2.py::test_run_script PASSED tests/test_cmd2.py::test_run_script_with_empty_args PASSED tests/test_cmd2.py::test_run_script_with_invalid_file PASSED tests/test_cmd2.py::test_run_script_with_empty_file PASSED tests/test_cmd2.py::test_run_script_with_binary_file PASSED tests/test_cmd2.py::test_run_script_with_python_file PASSED tests/test_cmd2.py::test_run_script_with_utf8_file PASSED tests/test_cmd2.py::test_scripts_add_to_history PASSED tests/test_cmd2.py::test_run_script_nested_run_scripts PASSED tests/test_cmd2.py::test_runcmds_plus_hooks PASSED tests/test_cmd2.py::test_runcmds_plus_hooks_ctrl_c PASSED tests/test_cmd2.py::test_relative_run_script PASSED tests/test_cmd2.py::test_relative_run_script_with_odd_file_names[nothingweird] PASSED tests/test_cmd2.py::test_relative_run_script_with_odd_file_names[has spaces] PASSED tests/test_cmd2.py::test_relative_run_script_with_odd_file_names["is_double_quoted"] PASSED tests/test_cmd2.py::test_relative_run_script_with_odd_file_names['is_single_quoted'] PASSED tests/test_cmd2.py::test_relative_run_script_requires_an_argument PASSED tests/test_cmd2.py::test_in_script PASSED tests/test_cmd2.py::test_system_exit_in_command PASSED tests/test_cmd2.py::test_passthrough_exception_in_command PASSED tests/test_cmd2.py::test_output_redirection PASSED tests/test_cmd2.py::test_output_redirection_to_nonexistent_directory PASSED tests/test_cmd2.py::test_output_redirection_to_too_long_filename PASSED tests/test_cmd2.py::test_feedback_to_output_true PASSED tests/test_cmd2.py::test_feedback_to_output_false PASSED tests/test_cmd2.py::test_disallow_redirection PASSED tests/test_cmd2.py::test_pipe_to_shell PASSED tests/test_cmd2.py::test_pipe_to_shell_and_redirect PASSED tests/test_cmd2.py::test_pipe_to_shell_error PASSED tests/test_cmd2.py::test_send_to_paste_buffer SKIPPED (Pyperclip cou...) tests/test_cmd2.py::test_get_paste_buffer_exception PASSED tests/test_cmd2.py::test_allow_clipboard_initializer PASSED tests/test_cmd2.py::test_allow_clipboard PASSED tests/test_cmd2.py::test_base_timing PASSED tests/test_cmd2.py::test_base_debug PASSED tests/test_cmd2.py::test_debug_not_settable PASSED tests/test_cmd2.py::test_remove_settable_keyerror PASSED tests/test_cmd2.py::test_edit_file PASSED tests/test_cmd2.py::test_edit_file_with_odd_file_names[nothingweird] PASSED tests/test_cmd2.py::test_edit_file_with_odd_file_names[has spaces] PASSED tests/test_cmd2.py::test_edit_file_with_odd_file_names["is_double_quoted"] PASSED tests/test_cmd2.py::test_edit_file_with_odd_file_names['is_single_quoted'] PASSED tests/test_cmd2.py::test_edit_file_with_spaces PASSED tests/test_cmd2.py::test_edit_blank PASSED tests/test_cmd2.py::test_base_py_interactive PASSED tests/test_cmd2.py::test_base_cmdloop_with_startup_commands PASSED tests/test_cmd2.py::test_base_cmdloop_without_startup_commands PASSED tests/test_cmd2.py::test_cmdloop_without_rawinput PASSED tests/test_cmd2.py::test_stty_sane PASSED tests/test_cmd2.py::test_sigint_handler PASSED tests/test_cmd2.py::test_raise_keyboard_interrupt PASSED tests/test_cmd2.py::test_termination_signal_handler PASSED tests/test_cmd2.py::test_precmd_hook_success PASSED tests/test_cmd2.py::test_precmd_hook_failure PASSED tests/test_cmd2.py::test_ctrl_c_at_prompt PASSED tests/test_cmd2.py::test_default_to_shell PASSED tests/test_cmd2.py::test_escaping_prompt PASSED tests/test_cmd2.py::test_custom_command_help PASSED tests/test_cmd2.py::test_custom_help_menu PASSED tests/test_cmd2.py::test_help_undocumented PASSED tests/test_cmd2.py::test_help_overridden_method PASSED tests/test_cmd2.py::test_help_multiline_docstring PASSED tests/test_cmd2.py::test_help_verbose_uses_parser_description PASSED tests/test_cmd2.py::test_help_cat_base PASSED tests/test_cmd2.py::test_help_cat_verbose PASSED tests/test_cmd2.py::test_select_options PASSED tests/test_cmd2.py::test_select_invalid_option_too_big PASSED tests/test_cmd2.py::test_select_invalid_option_too_small PASSED tests/test_cmd2.py::test_select_list_of_strings PASSED tests/test_cmd2.py::test_select_list_of_tuples PASSED tests/test_cmd2.py::test_select_uneven_list_of_tuples PASSED tests/test_cmd2.py::test_select_return_type[1-] PASSED tests/test_cmd2.py::test_select_return_type[2-] PASSED tests/test_cmd2.py::test_select_return_type[3-] PASSED tests/test_cmd2.py::test_select_eof PASSED tests/test_cmd2.py::test_select_ctrl_c PASSED tests/test_cmd2.py::test_help_with_no_docstring PASSED tests/test_cmd2.py::test_multiline_complete_empty_statement_raises_exception PASSED tests/test_cmd2.py::test_multiline_complete_statement_without_terminator PASSED tests/test_cmd2.py::test_multiline_complete_statement_with_unclosed_quotes PASSED tests/test_cmd2.py::test_multiline_input_line_to_statement PASSED tests/test_cmd2.py::test_multiline_history_no_prior_history PASSED tests/test_cmd2.py::test_multiline_history_first_line_matches_prev_entry PASSED tests/test_cmd2.py::test_multiline_history_matches_prev_entry PASSED tests/test_cmd2.py::test_multiline_history_does_not_match_prev_entry PASSED tests/test_cmd2.py::test_multiline_history_with_quotes PASSED tests/test_cmd2.py::test_commandresult_truthy PASSED tests/test_cmd2.py::test_commandresult_falsy PASSED tests/test_cmd2.py::test_is_text_file_bad_input PASSED tests/test_cmd2.py::test_eof PASSED tests/test_cmd2.py::test_quit PASSED tests/test_cmd2.py::test_echo PASSED tests/test_cmd2.py::test_read_input_rawinput_true PASSED tests/test_cmd2.py::test_read_input_rawinput_false PASSED tests/test_cmd2.py::test_read_command_line_eof PASSED tests/test_cmd2.py::test_poutput_string PASSED tests/test_cmd2.py::test_poutput_zero PASSED tests/test_cmd2.py::test_poutput_empty_string PASSED tests/test_cmd2.py::test_poutput_none PASSED tests/test_cmd2.py::test_poutput_ansi_always PASSED tests/test_cmd2.py::test_poutput_ansi_never PASSED tests/test_cmd2.py::test_get_alias_completion_items PASSED tests/test_cmd2.py::test_get_macro_completion_items PASSED tests/test_cmd2.py::test_get_settable_completion_items PASSED tests/test_cmd2.py::test_alias_no_subcommand PASSED tests/test_cmd2.py::test_alias_create PASSED tests/test_cmd2.py::test_alias_create_with_quoted_tokens PASSED tests/test_cmd2.py::test_alias_create_invalid_name[""] PASSED tests/test_cmd2.py::test_alias_create_invalid_name[#] PASSED tests/test_cmd2.py::test_alias_create_invalid_name[!no_shortcut] PASSED tests/test_cmd2.py::test_alias_create_invalid_name[">"] PASSED tests/test_cmd2.py::test_alias_create_invalid_name["no>pe"] PASSED tests/test_cmd2.py::test_alias_create_invalid_name["no spaces"] PASSED tests/test_cmd2.py::test_alias_create_invalid_name["nopipe|"] PASSED tests/test_cmd2.py::test_alias_create_invalid_name["noterm;"] PASSED tests/test_cmd2.py::test_alias_create_invalid_name[noembedded"quotes] PASSED tests/test_cmd2.py::test_alias_create_with_command_name PASSED tests/test_cmd2.py::test_alias_create_with_macro_name PASSED tests/test_cmd2.py::test_alias_that_resolves_into_comment PASSED tests/test_cmd2.py::test_alias_list_invalid_alias PASSED tests/test_cmd2.py::test_alias_delete PASSED tests/test_cmd2.py::test_alias_delete_all PASSED tests/test_cmd2.py::test_alias_delete_non_existing PASSED tests/test_cmd2.py::test_alias_delete_no_name PASSED tests/test_cmd2.py::test_multiple_aliases PASSED tests/test_cmd2.py::test_macro_no_subcommand PASSED tests/test_cmd2.py::test_macro_create PASSED tests/test_cmd2.py::test_macro_create_with_quoted_tokens PASSED tests/test_cmd2.py::test_macro_create_invalid_name[""] PASSED tests/test_cmd2.py::test_macro_create_invalid_name[#] PASSED tests/test_cmd2.py::test_macro_create_invalid_name[!no_shortcut] PASSED tests/test_cmd2.py::test_macro_create_invalid_name[">"] PASSED tests/test_cmd2.py::test_macro_create_invalid_name["no>pe"] PASSED tests/test_cmd2.py::test_macro_create_invalid_name["no spaces"] PASSED tests/test_cmd2.py::test_macro_create_invalid_name["nopipe|"] PASSED tests/test_cmd2.py::test_macro_create_invalid_name["noterm;"] PASSED tests/test_cmd2.py::test_macro_create_invalid_name[noembedded"quotes] PASSED tests/test_cmd2.py::test_macro_create_with_command_name PASSED tests/test_cmd2.py::test_macro_create_with_alias_name PASSED tests/test_cmd2.py::test_macro_create_with_args PASSED tests/test_cmd2.py::test_macro_create_with_escaped_args PASSED tests/test_cmd2.py::test_macro_usage_with_missing_args PASSED tests/test_cmd2.py::test_macro_usage_with_exta_args PASSED tests/test_cmd2.py::test_macro_create_with_missing_arg_nums PASSED tests/test_cmd2.py::test_macro_create_with_invalid_arg_num PASSED tests/test_cmd2.py::test_macro_create_with_unicode_numbered_arg PASSED tests/test_cmd2.py::test_macro_create_with_missing_unicode_arg_nums PASSED tests/test_cmd2.py::test_macro_that_resolves_into_comment PASSED tests/test_cmd2.py::test_macro_list_invalid_macro PASSED tests/test_cmd2.py::test_macro_delete PASSED tests/test_cmd2.py::test_macro_delete_all PASSED tests/test_cmd2.py::test_macro_delete_non_existing PASSED tests/test_cmd2.py::test_macro_delete_no_name PASSED tests/test_cmd2.py::test_multiple_macros PASSED tests/test_cmd2.py::test_nonexistent_macro PASSED tests/test_cmd2.py::test_perror_style PASSED tests/test_cmd2.py::test_perror_no_style PASSED tests/test_cmd2.py::test_pexcept_style PASSED tests/test_cmd2.py::test_pexcept_no_style PASSED tests/test_cmd2.py::test_pexcept_not_exception PASSED tests/test_cmd2.py::test_ppaged PASSED tests/test_cmd2.py::test_ppaged_strips_ansi_when_redirecting PASSED tests/test_cmd2.py::test_ppaged_strips_ansi_when_redirecting_if_always PASSED tests/test_cmd2.py::test_parseline_empty PASSED tests/test_cmd2.py::test_parseline_quoted PASSED tests/test_cmd2.py::test_onecmd_raw_str_continue PASSED tests/test_cmd2.py::test_onecmd_raw_str_quit PASSED tests/test_cmd2.py::test_onecmd_add_to_history PASSED tests/test_cmd2.py::test_get_all_commands PASSED tests/test_cmd2.py::test_get_help_topics PASSED tests/test_cmd2.py::test_get_help_topics_hidden PASSED tests/test_cmd2.py::test_exit_code_default PASSED tests/test_cmd2.py::test_exit_code_nonzero PASSED tests/test_cmd2.py::test_ansi_pouterr_always_tty PASSED tests/test_cmd2.py::test_ansi_pouterr_always_notty PASSED tests/test_cmd2.py::test_ansi_terminal_tty PASSED tests/test_cmd2.py::test_ansi_terminal_notty PASSED tests/test_cmd2.py::test_ansi_never_tty PASSED tests/test_cmd2.py::test_ansi_never_notty PASSED tests/test_cmd2.py::test_disable_and_enable_category PASSED tests/test_cmd2.py::test_enable_enabled_command PASSED tests/test_cmd2.py::test_disable_fake_command PASSED tests/test_cmd2.py::test_disable_command_twice PASSED tests/test_cmd2.py::test_disabled_command_not_in_history PASSED tests/test_cmd2.py::test_disabled_message_command_name PASSED tests/test_cmd2.py::test_startup_script[True] PASSED tests/test_cmd2.py::test_startup_script[False] PASSED tests/test_cmd2.py::test_startup_script_with_odd_file_names[nothingweird] PASSED tests/test_cmd2.py::test_startup_script_with_odd_file_names[has spaces] PASSED tests/test_cmd2.py::test_startup_script_with_odd_file_names["is_double_quoted"] PASSED tests/test_cmd2.py::test_startup_script_with_odd_file_names['is_single_quoted'] PASSED tests/test_cmd2.py::test_transcripts_at_init PASSED tests/test_cmd2.py::test_columnize_too_wide PASSED tests/test_cmd2.py::test_command_parser_retrieval PASSED tests/test_cmd2.py::test_command_synonym_parser PASSED tests/test_completion.py::test_cmd2_command_completion_single PASSED tests/test_completion.py::test_complete_command_single PASSED tests/test_completion.py::test_complete_empty_arg PASSED tests/test_completion.py::test_complete_bogus_command PASSED tests/test_completion.py::test_complete_exception PASSED tests/test_completion.py::test_complete_macro PASSED tests/test_completion.py::test_default_sort_key PASSED tests/test_completion.py::test_cmd2_command_completion_multiple PASSED tests/test_completion.py::test_cmd2_command_completion_nomatch PASSED tests/test_completion.py::test_cmd2_help_completion_single PASSED tests/test_completion.py::test_cmd2_help_completion_multiple PASSED tests/test_completion.py::test_cmd2_help_completion_nomatch PASSED tests/test_completion.py::test_set_allow_style_completion PASSED tests/test_completion.py::test_set_bool_completion PASSED tests/test_completion.py::test_shell_command_completion_shortcut PASSED tests/test_completion.py::test_shell_command_completion_doesnt_match_wildcards PASSED tests/test_completion.py::test_shell_command_completion_multiple PASSED tests/test_completion.py::test_shell_command_completion_nomatch PASSED tests/test_completion.py::test_shell_command_completion_doesnt_complete_when_just_shell PASSED tests/test_completion.py::test_shell_command_completion_does_path_completion_when_after_command PASSED tests/test_completion.py::test_shell_command_complete_in_path PASSED tests/test_completion.py::test_path_completion_single_end PASSED tests/test_completion.py::test_path_completion_multiple PASSED tests/test_completion.py::test_path_completion_nomatch PASSED tests/test_completion.py::test_default_to_shell_completion PASSED tests/test_completion.py::test_path_completion_no_text PASSED tests/test_completion.py::test_path_completion_no_path PASSED tests/test_completion.py::test_path_completion_cwd_is_root_dir PASSED tests/test_completion.py::test_path_completion_doesnt_match_wildcards PASSED tests/test_completion.py::test_path_completion_complete_user PASSED tests/test_completion.py::test_path_completion_user_path_expansion PASSED tests/test_completion.py::test_path_completion_directories_only PASSED tests/test_completion.py::test_basic_completion_single PASSED tests/test_completion.py::test_basic_completion_multiple PASSED tests/test_completion.py::test_basic_completion_nomatch PASSED tests/test_completion.py::test_delimiter_completion PASSED tests/test_completion.py::test_flag_based_completion_single PASSED tests/test_completion.py::test_flag_based_completion_multiple PASSED tests/test_completion.py::test_flag_based_completion_nomatch PASSED tests/test_completion.py::test_flag_based_default_completer PASSED tests/test_completion.py::test_flag_based_callable_completer PASSED tests/test_completion.py::test_index_based_completion_single PASSED tests/test_completion.py::test_index_based_completion_multiple PASSED tests/test_completion.py::test_index_based_completion_nomatch PASSED tests/test_completion.py::test_index_based_default_completer PASSED tests/test_completion.py::test_index_based_callable_completer PASSED tests/test_completion.py::test_tokens_for_completion_quoted PASSED tests/test_completion.py::test_tokens_for_completion_unclosed_quote PASSED tests/test_completion.py::test_tokens_for_completion_punctuation PASSED tests/test_completion.py::test_tokens_for_completion_quoted_punctuation PASSED tests/test_completion.py::test_add_opening_quote_basic_no_text PASSED tests/test_completion.py::test_add_opening_quote_basic_nothing_added PASSED tests/test_completion.py::test_add_opening_quote_basic_quote_added PASSED tests/test_completion.py::test_add_opening_quote_basic_single_quote_added PASSED tests/test_completion.py::test_add_opening_quote_basic_text_is_common_prefix PASSED tests/test_completion.py::test_add_opening_quote_delimited_no_text PASSED tests/test_completion.py::test_add_opening_quote_delimited_nothing_added PASSED tests/test_completion.py::test_add_opening_quote_delimited_quote_added PASSED tests/test_completion.py::test_add_opening_quote_delimited_text_is_common_prefix PASSED tests/test_completion.py::test_add_opening_quote_delimited_space_in_prefix PASSED tests/test_completion.py::test_no_completer PASSED tests/test_completion.py::test_wordbreak_in_command PASSED tests/test_completion.py::test_complete_multiline_on_single_line PASSED tests/test_completion.py::test_complete_multiline_on_multiple_lines PASSED tests/test_completion.py::test_redirect_complete[fake-RedirCompType.DEFAULT] PASSED tests/test_completion.py::test_redirect_complete[fake arg-RedirCompType.DEFAULT] PASSED tests/test_completion.py::test_redirect_complete[fake |-RedirCompType.SHELL_CMD] PASSED tests/test_completion.py::test_redirect_complete[fake | grep-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake | grep arg-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake | grep >-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake | grep > >-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake | grep > file-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake | grep > file >-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake | grep > file |-RedirCompType.SHELL_CMD] PASSED tests/test_completion.py::test_redirect_complete[fake | grep > file | grep-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake | |-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake | >-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake >-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake >>-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake > >-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake > |-RedirCompType.SHELL_CMD] PASSED tests/test_completion.py::test_redirect_complete[fake >> file |-RedirCompType.SHELL_CMD] PASSED tests/test_completion.py::test_redirect_complete[fake >> file | grep-RedirCompType.PATH] PASSED tests/test_completion.py::test_redirect_complete[fake > file-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake > file >-RedirCompType.NONE] PASSED tests/test_completion.py::test_redirect_complete[fake > file >>-RedirCompType.NONE] PASSED tests/test_completion.py::test_complete_set_value PASSED tests/test_completion.py::test_complete_set_value_invalid_settable PASSED tests/test_completion.py::test_cmd2_subcommand_completion_single_end PASSED tests/test_completion.py::test_cmd2_subcommand_completion_multiple PASSED tests/test_completion.py::test_cmd2_subcommand_completion_nomatch PASSED tests/test_completion.py::test_help_subcommand_completion_single PASSED tests/test_completion.py::test_help_subcommand_completion_multiple PASSED tests/test_completion.py::test_help_subcommand_completion_nomatch PASSED tests/test_completion.py::test_subcommand_tab_completion PASSED tests/test_completion.py::test_subcommand_tab_completion_with_no_completer PASSED tests/test_completion.py::test_subcommand_tab_completion_space_in_text PASSED tests/test_completion.py::test_subcmd_with_unknown_completion_single_end PASSED tests/test_completion.py::test_subcmd_with_unknown_completion_multiple PASSED tests/test_completion.py::test_subcmd_with_unknown_completion_nomatch PASSED tests/test_completion.py::test_help_subcommand_completion_single_scu PASSED tests/test_completion.py::test_help_subcommand_completion_multiple_scu PASSED tests/test_completion.py::test_help_subcommand_completion_with_flags_before_command PASSED tests/test_completion.py::test_complete_help_subcommands_with_blank_command PASSED tests/test_completion.py::test_help_subcommand_completion_nomatch_scu PASSED tests/test_completion.py::test_subcommand_tab_completion_scu PASSED tests/test_completion.py::test_subcommand_tab_completion_with_no_completer_scu PASSED tests/test_completion.py::test_subcommand_tab_completion_space_in_text_scu PASSED tests/test_history.py::test_readline_remove_history_item PASSED tests/test_history.py::test_history_class_span PASSED tests/test_history.py::test_persisted_history_span PASSED tests/test_history.py::test_history_class_get PASSED tests/test_history.py::test_history_str_search PASSED tests/test_history.py::test_history_regex_search PASSED tests/test_history.py::test_history_max_length_zero PASSED tests/test_history.py::test_history_max_length_negative PASSED tests/test_history.py::test_history_max_length PASSED tests/test_history.py::test_history_to_json PASSED tests/test_history.py::test_history_from_json PASSED tests/test_history.py::test_multiline_histitem PASSED tests/test_history.py::test_multiline_with_quotes_histitem PASSED tests/test_history.py::test_multiline_histitem_verbose PASSED tests/test_history.py::test_single_line_format_blank PASSED tests/test_history.py::test_history_item_instantiate PASSED tests/test_history.py::test_history_item_properties PASSED tests/test_history.py::test_base_history PASSED tests/test_history.py::test_history_script_format PASSED tests/test_history.py::test_history_with_string_argument PASSED tests/test_history.py::test_history_expanded_with_string_argument PASSED tests/test_history.py::test_history_expanded_with_regex_argument PASSED tests/test_history.py::test_history_with_integer_argument PASSED tests/test_history.py::test_history_with_integer_span PASSED tests/test_history.py::test_history_with_span_start PASSED tests/test_history.py::test_history_with_span_end PASSED tests/test_history.py::test_history_with_span_index_error PASSED tests/test_history.py::test_history_output_file PASSED tests/test_history.py::test_history_bad_output_file PASSED tests/test_history.py::test_history_edit PASSED tests/test_history.py::test_history_run_all_commands PASSED tests/test_history.py::test_history_run_one_command PASSED tests/test_history.py::test_history_clear PASSED tests/test_history.py::test_history_verbose_with_other_options PASSED tests/test_history.py::test_history_verbose PASSED tests/test_history.py::test_history_script_with_invalid_options PASSED tests/test_history.py::test_history_script PASSED tests/test_history.py::test_history_expanded_with_invalid_options PASSED tests/test_history.py::test_history_expanded PASSED tests/test_history.py::test_history_script_expanded PASSED tests/test_history.py::test_base_help_history PASSED tests/test_history.py::test_exclude_from_history PASSED tests/test_history.py::test_history_file_is_directory PASSED tests/test_history.py::test_history_can_create_directory PASSED tests/test_history.py::test_history_cannot_create_directory PASSED tests/test_history.py::test_history_file_permission_error PASSED tests/test_history.py::test_history_file_bad_compression PASSED tests/test_history.py::test_history_file_bad_json PASSED tests/test_history.py::test_history_populates_readline PASSED tests/test_history.py::test_persist_history_ensure_no_error_if_no_histfile PASSED tests/test_history.py::test_persist_history_permission_error PASSED tests/test_parsing.py::test_parse_empty_string PASSED tests/test_parsing.py::test_parse_empty_string_default PASSED tests/test_parsing.py::test_tokenize_default[command-tokens0] PASSED tests/test_parsing.py::test_tokenize_default[#comment-tokens1] PASSED tests/test_parsing.py::test_tokenize_default[not # a comment-tokens2] PASSED tests/test_parsing.py::test_tokenize_default[termbare ; > /tmp/output-tokens3] PASSED tests/test_parsing.py::test_tokenize_default[termbare; > /tmp/output-tokens4] PASSED tests/test_parsing.py::test_tokenize_default[termbare & > /tmp/output-tokens5] PASSED tests/test_parsing.py::test_tokenize_default[termbare& > /tmp/output-tokens6] PASSED tests/test_parsing.py::test_tokenize_default[help|less-tokens7] PASSED tests/test_parsing.py::test_tokenize[command-tokens0] PASSED tests/test_parsing.py::test_tokenize[# comment-tokens1] PASSED tests/test_parsing.py::test_tokenize[not # a comment-tokens2] PASSED tests/test_parsing.py::test_tokenize[42 arg1 arg2-tokens3] PASSED tests/test_parsing.py::test_tokenize[l-tokens4] PASSED tests/test_parsing.py::test_tokenize[termbare ; > /tmp/output-tokens5] PASSED tests/test_parsing.py::test_tokenize[termbare; > /tmp/output-tokens6] PASSED tests/test_parsing.py::test_tokenize[termbare & > /tmp/output-tokens7] PASSED tests/test_parsing.py::test_tokenize[termbare& > /tmp/output-tokens8] PASSED tests/test_parsing.py::test_tokenize[help|less-tokens9] PASSED tests/test_parsing.py::test_tokenize[l|less-tokens10] PASSED tests/test_parsing.py::test_tokenize_unclosed_quotes PASSED tests/test_parsing.py::test_command_and_args[tokens0--] PASSED tests/test_parsing.py::test_command_and_args[tokens1-command-] PASSED tests/test_parsing.py::test_command_and_args[tokens2-command-arg1 arg2] PASSED tests/test_parsing.py::test_parse_single_word[plainword] PASSED tests/test_parsing.py::test_parse_single_word["one word"] PASSED tests/test_parsing.py::test_parse_single_word['one word'] PASSED tests/test_parsing.py::test_parse_word_plus_terminator[termbare;-;] PASSED tests/test_parsing.py::test_parse_word_plus_terminator[termbare ;-;] PASSED tests/test_parsing.py::test_parse_word_plus_terminator[termbare&-&] PASSED tests/test_parsing.py::test_parse_word_plus_terminator[termbare &-&] PASSED tests/test_parsing.py::test_parse_suffix_after_terminator[termbare; suffx-;] PASSED tests/test_parsing.py::test_parse_suffix_after_terminator[termbare ;suffx-;] PASSED tests/test_parsing.py::test_parse_suffix_after_terminator[termbare& suffx-&] PASSED tests/test_parsing.py::test_parse_suffix_after_terminator[termbare &suffx-&] PASSED tests/test_parsing.py::test_parse_command_with_args PASSED tests/test_parsing.py::test_parse_command_with_quoted_args PASSED tests/test_parsing.py::test_parse_command_with_args_terminator_and_suffix PASSED tests/test_parsing.py::test_parse_comment PASSED tests/test_parsing.py::test_parse_embedded_comment_char PASSED tests/test_parsing.py::test_parse_simple_pipe[simple | piped] PASSED tests/test_parsing.py::test_parse_simple_pipe[simple|piped] PASSED tests/test_parsing.py::test_parse_double_pipe_is_not_a_pipe PASSED tests/test_parsing.py::test_parse_complex_pipe PASSED tests/test_parsing.py::test_parse_redirect[help > out.txt->] PASSED tests/test_parsing.py::test_parse_redirect[help>out.txt->] PASSED tests/test_parsing.py::test_parse_redirect[help >> out.txt->>] PASSED tests/test_parsing.py::test_parse_redirect[help>>out.txt->>] PASSED tests/test_parsing.py::test_parse_redirect_with_args[afile.txt] PASSED tests/test_parsing.py::test_parse_redirect_with_args[python-cmd2/afile.txt] PASSED tests/test_parsing.py::test_parse_redirect_append PASSED tests/test_parsing.py::test_parse_pipe_then_redirect PASSED tests/test_parsing.py::test_parse_multiple_pipes PASSED tests/test_parsing.py::test_redirect_then_pipe PASSED tests/test_parsing.py::test_append_then_pipe PASSED tests/test_parsing.py::test_append_then_redirect PASSED tests/test_parsing.py::test_redirect_then_append PASSED tests/test_parsing.py::test_redirect_to_quoted_string PASSED tests/test_parsing.py::test_redirect_to_single_quoted_string PASSED tests/test_parsing.py::test_redirect_to_empty_quoted_string PASSED tests/test_parsing.py::test_redirect_to_empty_single_quoted_string PASSED tests/test_parsing.py::test_parse_output_to_paste_buffer PASSED tests/test_parsing.py::test_parse_redirect_inside_terminator PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside;-;] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside ;-;] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside;;;-;] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside;; ;;-;] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside&-&] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside &;-&] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside&&;-&] PASSED tests/test_parsing.py::test_parse_multiple_terminators[multiline with | inside &; &;-&] PASSED tests/test_parsing.py::test_parse_unfinished_multiliine_command PASSED tests/test_parsing.py::test_parse_basic_multiline_command PASSED tests/test_parsing.py::test_parse_multiline_command_ignores_redirectors_within_it[multiline has > inside;-;] PASSED tests/test_parsing.py::test_parse_multiline_command_ignores_redirectors_within_it[multiline has > inside;;;-;] PASSED tests/test_parsing.py::test_parse_multiline_command_ignores_redirectors_within_it[multiline has > inside;; ;;-;] PASSED tests/test_parsing.py::test_parse_multiline_command_ignores_redirectors_within_it[multiline has > inside &-&] PASSED tests/test_parsing.py::test_parse_multiline_command_ignores_redirectors_within_it[multiline has > inside & &-&] PASSED tests/test_parsing.py::test_parse_multiline_terminated_by_empty_line PASSED tests/test_parsing.py::test_parse_multiline_with_embedded_newline[multiline command "with\nembedded newline";-;] PASSED tests/test_parsing.py::test_parse_multiline_with_embedded_newline[multiline command "with\nembedded newline";;;-;] PASSED tests/test_parsing.py::test_parse_multiline_with_embedded_newline[multiline command "with\nembedded newline";; ;;-;] PASSED tests/test_parsing.py::test_parse_multiline_with_embedded_newline[multiline command "with\nembedded newline" &-&] PASSED tests/test_parsing.py::test_parse_multiline_with_embedded_newline[multiline command "with\nembedded newline" & &-&] PASSED tests/test_parsing.py::test_parse_multiline_with_embedded_newline[multiline command "with\nembedded newline"\n\n-\n] PASSED tests/test_parsing.py::test_parse_multiline_ignores_terminators_in_quotes PASSED tests/test_parsing.py::test_parse_command_with_unicode_args PASSED tests/test_parsing.py::test_parse_unicode_command PASSED tests/test_parsing.py::test_parse_redirect_to_unicode_filename PASSED tests/test_parsing.py::test_parse_unclosed_quotes PASSED tests/test_parsing.py::test_empty_statement_raises_exception PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[helpalias-help-] PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[helpalias mycommand-help-mycommand] PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[42-theanswer-] PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[42 arg1 arg2-theanswer-arg1 arg2] PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[!ls-shell-ls] PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[!ls -al /tmp-shell-ls -al /tmp] PASSED tests/test_parsing.py::test_parse_alias_and_shortcut_expansion[l-shell-ls -al] PASSED tests/test_parsing.py::test_parse_alias_on_multiline_command PASSED tests/test_parsing.py::test_parse_alias_redirection[helpalias > out.txt->] PASSED tests/test_parsing.py::test_parse_alias_redirection[helpalias>out.txt->] PASSED tests/test_parsing.py::test_parse_alias_redirection[helpalias >> out.txt->>] PASSED tests/test_parsing.py::test_parse_alias_redirection[helpalias>>out.txt->>] PASSED tests/test_parsing.py::test_parse_alias_pipe[helpalias | less] PASSED tests/test_parsing.py::test_parse_alias_pipe[helpalias|less] PASSED tests/test_parsing.py::test_parse_alias_terminator_no_whitespace[helpalias;] PASSED tests/test_parsing.py::test_parse_alias_terminator_no_whitespace[helpalias;;] PASSED tests/test_parsing.py::test_parse_alias_terminator_no_whitespace[helpalias;; ;] PASSED tests/test_parsing.py::test_parse_alias_terminator_no_whitespace[helpalias ;] PASSED tests/test_parsing.py::test_parse_alias_terminator_no_whitespace[helpalias ; ;] PASSED tests/test_parsing.py::test_parse_alias_terminator_no_whitespace[helpalias ;; ;] PASSED tests/test_parsing.py::test_parse_command_only_command_and_args PASSED tests/test_parsing.py::test_parse_command_only_strips_line PASSED tests/test_parsing.py::test_parse_command_only_expands_alias PASSED tests/test_parsing.py::test_parse_command_only_expands_shortcuts PASSED tests/test_parsing.py::test_parse_command_only_quoted_args PASSED tests/test_parsing.py::test_parse_command_only_unclosed_quote PASSED tests/test_parsing.py::test_parse_command_only_specialchars[helpalias > out.txt-> out.txt] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[helpalias>out.txt->out.txt] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[helpalias >> out.txt->> out.txt] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[helpalias>>out.txt->>out.txt] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[help|less-|less] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[helpalias;-;] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[help ;;-;;] PASSED tests/test_parsing.py::test_parse_command_only_specialchars[help; ;;-; ;;] PASSED tests/test_parsing.py::test_parse_command_only_empty[] PASSED tests/test_parsing.py::test_parse_command_only_empty[;] PASSED tests/test_parsing.py::test_parse_command_only_empty[;;] PASSED tests/test_parsing.py::test_parse_command_only_empty[;; ;] PASSED tests/test_parsing.py::test_parse_command_only_empty[&] PASSED tests/test_parsing.py::test_parse_command_only_empty[& &] PASSED tests/test_parsing.py::test_parse_command_only_empty[ && &] PASSED tests/test_parsing.py::test_parse_command_only_empty[>] PASSED tests/test_parsing.py::test_parse_command_only_empty['] PASSED tests/test_parsing.py::test_parse_command_only_empty["] PASSED tests/test_parsing.py::test_parse_command_only_empty[|] PASSED tests/test_parsing.py::test_parse_command_only_multiline PASSED tests/test_parsing.py::test_statement_initialization PASSED tests/test_parsing.py::test_statement_is_immutable PASSED tests/test_parsing.py::test_statement_as_dict PASSED tests/test_parsing.py::test_is_valid_command_invalid PASSED tests/test_parsing.py::test_is_valid_command_valid PASSED tests/test_parsing.py::test_macro_normal_arg_pattern PASSED tests/test_parsing.py::test_macro_escaped_arg_pattern PASSED tests/test_plugin.py::test_register_preloop_hook_too_many_parameters PASSED tests/test_plugin.py::test_register_preloop_hook_with_return_annotation PASSED tests/test_plugin.py::test_preloop_hook PASSED tests/test_plugin.py::test_preloop_hooks PASSED tests/test_plugin.py::test_register_postloop_hook_too_many_parameters PASSED tests/test_plugin.py::test_register_postloop_hook_with_wrong_return_annotation PASSED tests/test_plugin.py::test_postloop_hook PASSED tests/test_plugin.py::test_postloop_hooks PASSED tests/test_plugin.py::test_preparse PASSED tests/test_plugin.py::test_postparsing_hook_too_many_parameters PASSED tests/test_plugin.py::test_postparsing_hook_undeclared_parameter_annotation PASSED tests/test_plugin.py::test_postparsing_hook_wrong_parameter_annotation PASSED tests/test_plugin.py::test_postparsing_hook_undeclared_return_annotation PASSED tests/test_plugin.py::test_postparsing_hook_wrong_return_annotation PASSED tests/test_plugin.py::test_postparsing_hook PASSED tests/test_plugin.py::test_postparsing_hook_stop_first PASSED tests/test_plugin.py::test_postparsing_hook_stop_second PASSED tests/test_plugin.py::test_postparsing_hook_emptystatement_first PASSED tests/test_plugin.py::test_postparsing_hook_emptystatement_second PASSED tests/test_plugin.py::test_postparsing_hook_exception PASSED tests/test_plugin.py::test_register_precmd_hook_parameter_count PASSED tests/test_plugin.py::test_register_precmd_hook_no_parameter_annotation PASSED tests/test_plugin.py::test_register_precmd_hook_wrong_parameter_annotation PASSED tests/test_plugin.py::test_register_precmd_hook_no_return_annotation PASSED tests/test_plugin.py::test_register_precmd_hook_wrong_return_annotation PASSED tests/test_plugin.py::test_precmd_hook PASSED tests/test_plugin.py::test_precmd_hook_emptystatement_first PASSED tests/test_plugin.py::test_precmd_hook_emptystatement_second PASSED tests/test_plugin.py::test_register_postcmd_hook_parameter_count PASSED tests/test_plugin.py::test_register_postcmd_hook_no_parameter_annotation PASSED tests/test_plugin.py::test_register_postcmd_hook_wrong_parameter_annotation PASSED tests/test_plugin.py::test_register_postcmd_hook_no_return_annotation PASSED tests/test_plugin.py::test_register_postcmd_hook_wrong_return_annotation PASSED tests/test_plugin.py::test_postcmd PASSED tests/test_plugin.py::test_postcmd_exception_first PASSED tests/test_plugin.py::test_postcmd_exception_second PASSED tests/test_plugin.py::test_register_cmdfinalization_hook_parameter_count PASSED tests/test_plugin.py::test_register_cmdfinalization_hook_no_parameter_annotation PASSED tests/test_plugin.py::test_register_cmdfinalization_hook_wrong_parameter_annotation PASSED tests/test_plugin.py::test_register_cmdfinalization_hook_no_return_annotation PASSED tests/test_plugin.py::test_register_cmdfinalization_hook_wrong_return_annotation PASSED tests/test_plugin.py::test_cmdfinalization PASSED tests/test_plugin.py::test_cmdfinalization_stop_first PASSED tests/test_plugin.py::test_cmdfinalization_stop_second PASSED tests/test_plugin.py::test_cmdfinalization_hook_exception PASSED tests/test_plugin.py::test_cmdfinalization_hook_system_exit PASSED tests/test_plugin.py::test_cmdfinalization_hook_keyboard_interrupt PASSED tests/test_plugin.py::test_cmdfinalization_hook_passthrough_exception PASSED tests/test_plugin.py::test_skip_postcmd_hooks PASSED tests/test_plugin.py::test_cmd2_argparse_exception PASSED tests/test_run_pyscript.py::test_run_pyscript PASSED tests/test_run_pyscript.py::test_run_pyscript_recursive_not_allowed PASSED tests/test_run_pyscript.py::test_run_pyscript_with_nonexist_file PASSED tests/test_run_pyscript.py::test_run_pyscript_with_non_python_file PASSED tests/test_run_pyscript.py::test_run_pyscript_with_odd_file_names[nothingweird] PASSED tests/test_run_pyscript.py::test_run_pyscript_with_odd_file_names[has spaces] PASSED tests/test_run_pyscript.py::test_run_pyscript_with_odd_file_names["is_double_quoted"] PASSED tests/test_run_pyscript.py::test_run_pyscript_with_odd_file_names['is_single_quoted'] PASSED tests/test_run_pyscript.py::test_run_pyscript_with_exception PASSED tests/test_run_pyscript.py::test_run_pyscript_requires_an_argument PASSED tests/test_run_pyscript.py::test_run_pyscript_help PASSED tests/test_run_pyscript.py::test_scripts_add_to_history PASSED tests/test_run_pyscript.py::test_run_pyscript_dir PASSED tests/test_run_pyscript.py::test_run_pyscript_stdout_capture PASSED tests/test_run_pyscript.py::test_run_pyscript_stop PASSED tests/test_run_pyscript.py::test_run_pyscript_environment PASSED tests/test_run_pyscript.py::test_run_pyscript_self_in_py PASSED tests/test_run_pyscript.py::test_run_pyscript_py_locals PASSED tests/test_run_pyscript.py::test_run_pyscript_app_echo PASSED tests/test_table_creator.py::test_column_creation PASSED tests/test_table_creator.py::test_column_alignment PASSED tests/test_table_creator.py::test_blank_last_line PASSED tests/test_table_creator.py::test_wrap_text PASSED tests/test_table_creator.py::test_wrap_text_max_lines PASSED tests/test_table_creator.py::test_wrap_long_word PASSED tests/test_table_creator.py::test_wrap_long_word_max_data_lines PASSED tests/test_table_creator.py::test_wrap_long_char_wider_than_max_width PASSED tests/test_table_creator.py::test_generate_row_exceptions PASSED tests/test_table_creator.py::test_tabs PASSED tests/test_table_creator.py::test_simple_table_creation PASSED tests/test_table_creator.py::test_simple_table_width PASSED tests/test_table_creator.py::test_simple_generate_data_row_exceptions PASSED tests/test_table_creator.py::test_bordered_table_creation PASSED tests/test_table_creator.py::test_bordered_table_width PASSED tests/test_table_creator.py::test_bordered_generate_data_row_exceptions PASSED tests/test_table_creator.py::test_alternating_table_creation PASSED tests/test_transcript.py::test_commands_at_invocation PASSED tests/test_transcript.py::test_transcript[bol_eol.txt-False] PASSED tests/test_transcript.py::test_transcript[characterclass.txt-False] PASSED tests/test_transcript.py::test_transcript[dotstar.txt-False] PASSED tests/test_transcript.py::test_transcript[extension_notation.txt-False] PASSED tests/test_transcript.py::test_transcript[from_cmdloop.txt-True] PASSED tests/test_transcript.py::test_transcript[multiline_no_regex.txt-False] PASSED tests/test_transcript.py::test_transcript[multiline_regex.txt-False] PASSED tests/test_transcript.py::test_transcript[no_output.txt-False] PASSED tests/test_transcript.py::test_transcript[no_output_last.txt-False] PASSED tests/test_transcript.py::test_transcript[regex_set.txt-False] PASSED tests/test_transcript.py::test_transcript[singleslash.txt-False] PASSED tests/test_transcript.py::test_transcript[slashes_escaped.txt-False] PASSED tests/test_transcript.py::test_transcript[slashslash.txt-False] PASSED tests/test_transcript.py::test_transcript[spaces.txt-False] PASSED tests/test_transcript.py::test_transcript[word_boundaries.txt-False] PASSED tests/test_transcript.py::test_history_transcript PASSED tests/test_transcript.py::test_history_transcript_bad_path PASSED tests/test_transcript.py::test_run_script_record_transcript PASSED tests/test_transcript.py::test_generate_transcript_stop PASSED tests/test_transcript.py::test_parse_transcript_expected[text with no slashes-text\\ with\\ no\\ slashes] PASSED tests/test_transcript.py::test_parse_transcript_expected[specials .*-specials\\ \\.\\*] PASSED tests/test_transcript.py::test_parse_transcript_expected[use 2/3 cup-use\\ 2/3\\ cup] PASSED tests/test_transcript.py::test_parse_transcript_expected[/tmp is nice-/tmp\\ is\\ nice] PASSED tests/test_transcript.py::test_parse_transcript_expected[slash at end/-slash\\ at\\ end/] PASSED tests/test_transcript.py::test_parse_transcript_expected[not this slash\\/ or this one\\/-not\\ this\\ slash/\\ or\\ this\\ one/] PASSED tests/test_transcript.py::test_parse_transcript_expected[/.*/-.*] PASSED tests/test_transcript.py::test_parse_transcript_expected[specials ^ and + /[0-9]+/-specials\\ \\^\\ and\\ \\+\\ [0-9]+] PASSED tests/test_transcript.py::test_parse_transcript_expected[/a{6}/ but not \\/a{6} with /.*?/ more-a{6}\\ but\\ not\\ /a\\{6\\}\\ with\\ .*?\\ more] PASSED tests/test_transcript.py::test_parse_transcript_expected[not \\/, use /\\|?/, not \\/-not\\ /,\\ use\\ \\|?,\\ not\\ /] PASSED tests/test_transcript.py::test_parse_transcript_expected[not \\/, use /\\/?/, not \\/-not\\ /,\\ use\\ /?,\\ not\\ /] PASSED tests/test_transcript.py::test_parse_transcript_expected[lots /\\/?/ more /.*/ stuff-lots\\ /?\\ more\\ .*\\ stuff] PASSED tests/test_transcript.py::test_transcript_failure PASSED tests/test_transcript.py::test_transcript_no_file PASSED tests/test_utils.py::test_strip_quotes_no_quotes PASSED tests/test_utils.py::test_strip_quotes_with_quotes PASSED tests/test_utils.py::test_remove_duplicates_no_duplicates PASSED tests/test_utils.py::test_remove_duplicates_with_duplicates PASSED tests/test_utils.py::test_unicode_normalization PASSED tests/test_utils.py::test_unicode_casefold PASSED tests/test_utils.py::test_alphabetical_sort PASSED tests/test_utils.py::test_try_int_or_force_to_lower_case PASSED tests/test_utils.py::test_natural_keys PASSED tests/test_utils.py::test_natural_sort PASSED tests/test_utils.py::test_is_quoted_short PASSED tests/test_utils.py::test_is_quoted_yes PASSED tests/test_utils.py::test_is_quoted_no PASSED tests/test_utils.py::test_quote_string PASSED tests/test_utils.py::test_quote_string_if_needed_yes PASSED tests/test_utils.py::test_quote_string_if_needed_no PASSED tests/test_utils.py::test_stdsim_write_str PASSED tests/test_utils.py::test_stdsim_write_bytes PASSED tests/test_utils.py::test_stdsim_buffer_write_bytes PASSED tests/test_utils.py::test_stdsim_buffer_write_str PASSED tests/test_utils.py::test_stdsim_read PASSED tests/test_utils.py::test_stdsim_read_bytes PASSED tests/test_utils.py::test_stdsim_clear PASSED tests/test_utils.py::test_stdsim_getattr_exist PASSED tests/test_utils.py::test_stdsim_getattr_noexist PASSED tests/test_utils.py::test_stdsim_pause_storage PASSED tests/test_utils.py::test_stdsim_line_buffering PASSED tests/test_utils.py::test_proc_reader_send_sigint PASSED tests/test_utils.py::test_proc_reader_terminate PASSED tests/test_utils.py::test_context_flag_bool PASSED tests/test_utils.py::test_context_flag_exit_err PASSED tests/test_utils.py::test_remove_overridden_styles PASSED tests/test_utils.py::test_truncate_line PASSED tests/test_utils.py::test_truncate_line_already_fits PASSED tests/test_utils.py::test_truncate_line_with_newline PASSED tests/test_utils.py::test_truncate_line_width_is_too_small PASSED tests/test_utils.py::test_truncate_line_wide_text PASSED tests/test_utils.py::test_truncate_line_split_wide_text PASSED tests/test_utils.py::test_truncate_line_tabs PASSED tests/test_utils.py::test_truncate_with_style PASSED tests/test_utils.py::test_align_text_fill_char_is_tab PASSED tests/test_utils.py::test_align_text_with_style PASSED tests/test_utils.py::test_align_text_width_is_too_small PASSED tests/test_utils.py::test_align_text_fill_char_is_too_long PASSED tests/test_utils.py::test_align_text_fill_char_is_newline PASSED tests/test_utils.py::test_align_text_has_tabs PASSED tests/test_utils.py::test_align_text_blank PASSED tests/test_utils.py::test_align_text_wider_than_width PASSED tests/test_utils.py::test_align_text_wider_than_width_truncate PASSED tests/test_utils.py::test_align_text_wider_than_width_truncate_add_fill PASSED tests/test_utils.py::test_align_text_has_unprintable PASSED tests/test_utils.py::test_align_text_term_width PASSED tests/test_utils.py::test_align_left PASSED tests/test_utils.py::test_align_left_multiline PASSED tests/test_utils.py::test_align_left_wide_text PASSED tests/test_utils.py::test_align_left_wide_fill PASSED tests/test_utils.py::test_align_left_wide_fill_needs_padding PASSED tests/test_utils.py::test_align_center PASSED tests/test_utils.py::test_align_center_multiline PASSED tests/test_utils.py::test_align_center_wide_text PASSED tests/test_utils.py::test_align_center_wide_fill PASSED tests/test_utils.py::test_align_center_wide_fill_needs_right_padding PASSED tests/test_utils.py::test_align_center_wide_fill_needs_left_and_right_padding PASSED tests/test_utils.py::test_align_right PASSED tests/test_utils.py::test_align_right_multiline PASSED tests/test_utils.py::test_align_right_wide_text PASSED tests/test_utils.py::test_align_right_wide_fill PASSED tests/test_utils.py::test_align_right_wide_fill_needs_padding PASSED tests/test_utils.py::test_to_bool_str_true PASSED tests/test_utils.py::test_to_bool_str_false PASSED tests/test_utils.py::test_to_bool_str_invalid PASSED tests/test_utils.py::test_to_bool_bool PASSED tests/test_utils.py::test_to_bool_int PASSED tests/test_utils.py::test_to_bool_float PASSED tests/test_utils.py::test_find_editor_specified PASSED tests/test_utils.py::test_find_editor_not_specified PASSED tests/test_utils.py::test_similarity PASSED tests/test_utils.py::test_similarity_without_good_canididates PASSED tests/test_utils.py::test_similarity_overwrite_function PASSED tests/test_utils_defining_class.py::test_get_defining_class PASSED ======== 989 passed, 1 skipped ========