Coverage report: 100%

Files Functions Classes

coverage.py v7.11.1, created at 2026-03-27 20:23 -0700

File function statements missing excluded branches partial coverage
src/countdown/__init__.py (no function) 0 0 0 0 0 100%
src/countdown/__main__.py get_number_lines 1 0 0 0 0 100%
src/countdown/__main__.py run_countdown 43 0 0 18 0 100%
src/countdown/__main__.py main 4 0 0 2 0 100%
src/countdown/__main__.py (no function) 14 0 1 0 0 100%
src/countdown/digits.py paragraphs 8 0 0 6 0 100%
src/countdown/digits.py transpose 1 0 0 0 0 100%
src/countdown/digits.py center 1 0 0 0 0 100%
src/countdown/digits.py populate_constants 17 0 0 6 0 100%
src/countdown/digits.py (no function) 9 0 0 0 0 100%
src/countdown/display.py enable_ansi_escape_codes 0 0 15 0 0 100%
src/countdown/display.py _format_time_string 3 0 0 0 0 100%
src/countdown/display.py get_required_width 2 0 0 0 0 100%
src/countdown/display.py get_chars_for_terminal 9 0 0 4 0 100%
src/countdown/display.py print_full_screen 19 0 0 6 0 100%
src/countdown/display.py (no function) 14 0 1 0 0 100%
src/countdown/keys.py is_pause_key 1 0 0 0 0 100%
src/countdown/keys.py is_time_adjust_key 1 0 0 0 0 100%
src/countdown/keys.py get_time_adjustment 5 0 0 4 0 100%
src/countdown/keys.py (no function) 3 0 0 0 0 100%
src/countdown/terminal.py check_for_keypress 0 0 7 0 0 100%
src/countdown/terminal.py read_key 0 0 10 0 0 100%
src/countdown/terminal.py drain_keypresses 0 0 3 0 0 100%
src/countdown/terminal.py setup_terminal 0 0 10 0 0 100%
src/countdown/terminal.py restore_terminal 0 0 4 0 0 100%
src/countdown/terminal.py (no function) 1 0 12 0 0 100%
src/countdown/timer.py duration 5 0 0 2 0 100%
src/countdown/timer.py get_number_lines 9 0 0 4 0 100%
src/countdown/timer.py (no function) 4 0 0 0 0 100%
tests/__init__.py (no function) 0 0 0 0 0 100%
tests/conftest.py pytest_assertrepr_compare 0 0 16 0 0 100%
tests/conftest.py (no function) 3 0 5 0 0 100%
tests/test_display.py fake_size 2 0 0 0 0 100%
tests/test_display.py fake_size.get_terminal_size 1 0 0 0 0 100%
tests/test_display.py test_print_full_screen_tiny_terminal 5 0 0 0 0 100%
tests/test_display.py test_print_full_screen_larger_terminal 5 0 0 0 0 100%
tests/test_display.py test_print_full_screen_multiline_text 5 0 0 0 0 100%
tests/test_display.py test_print_full_screen_paused_shows_red_and_message 7 0 0 0 0 100%
tests/test_display.py test_print_full_screen_not_paused_no_red_or_message 5 0 0 0 0 100%
tests/test_display.py test_print_full_screen_paused_tiny_terminal_no_message 6 0 0 0 0 100%
tests/test_display.py test_digit_sizes_available 5 0 0 0 0 100%
tests/test_display.py test_all_characters_in_each_size 5 0 0 2 0 100%
tests/test_display.py test_char_heights_match_size 6 0 0 4 0 100%
tests/test_display.py test_get_chars_for_terminal_selects_largest_that_fits 24 0 0 0 0 100%
tests/test_display.py test_different_sizes_render_correctly 13 0 0 0 0 100%
tests/test_display.py test_width_constraints_force_smaller_size 12 0 0 0 0 100%
tests/test_display.py test_three_digit_minutes_force_smaller_chars 5 0 0 0 0 100%
tests/test_display.py (no function) 18 0 0 0 0 100%
tests/test_keys.py test_is_pause_key_with_strings 8 0 0 0 0 100%
tests/test_keys.py test_is_time_adjust_key_with_strings 5 0 0 0 0 100%
tests/test_keys.py test_get_time_adjustment 4 0 0 0 0 100%
tests/test_keys.py (no function) 4 0 0 0 0 100%
tests/test_main.py FakeClock.__init__ 5 0 0 0 0 100%
tests/test_main.py FakeClock.elapsed 1 0 0 0 0 100%
tests/test_main.py FakeClock.time 1 0 0 0 0 100%
tests/test_main.py FakeClock.sleep 5 0 0 4 0 100%
tests/test_main.py patch_clock 2 0 0 0 0 100%
tests/test_main.py fake_size 2 0 0 0 0 100%
tests/test_main.py fake_size.get_terminal_size 1 0 0 0 0 100%
tests/test_main.py clean_main_output 3 0 0 0 0 100%
tests/test_main.py runner 1 0 0 0 0 100%
tests/test_main.py test_main_with_no_arguments 5 0 0 0 0 100%
tests/test_main.py test_version_works 3 0 0 0 0 100%
tests/test_main.py test_main_3_seconds 8 0 0 0 0 100%
tests/test_main.py test_main_1_minute 5 0 0 0 0 100%
tests/test_main.py test_main_10_minutes_has_600_clear_screens 7 0 0 0 0 100%
tests/test_main.py test_main_enables_alt_buffer_and_hides_cursor_at_beginning 5 0 0 0 0 100%
tests/test_main.py test_main_disable_alt_buffer_and_show_cursor_at_end 5 0 0 0 0 100%
tests/test_main.py test_main_early_exit_still_shows_cursor_at_end 6 0 0 0 0 100%
tests/test_main.py test_pause_key_triggers_pause 15 0 0 0 0 100%
tests/test_main.py test_pause_key_triggers_pause.fake_check_for_keypress 4 0 0 2 0 100%
tests/test_main.py test_pause_key_triggers_pause.fake_read_key 2 0 0 0 0 100%
tests/test_main.py test_pause_key_triggers_pause.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_non_pause_key_ignored 13 0 0 0 0 100%
tests/test_main.py test_non_pause_key_ignored.fake_check_for_keypress 4 0 0 2 0 100%
tests/test_main.py test_non_pause_key_ignored.fake_read_key 2 0 0 0 0 100%
tests/test_main.py test_sleep_exits_early_on_keypress 18 0 0 0 0 100%
tests/test_main.py test_sleep_exits_early_on_keypress.tracking_sleep 4 0 0 2 0 100%
tests/test_main.py test_sleep_exits_early_on_keypress.fake_check_for_keypress 1 0 0 0 0 100%
tests/test_main.py test_sleep_exits_early_on_keypress.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_sleep_exits_early_on_keypress.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_resume_from_pause_exits_early 26 0 0 0 0 100%
tests/test_main.py test_resume_from_pause_exits_early.tracking_sleep 4 0 0 2 0 100%
tests/test_main.py test_resume_from_pause_exits_early.fake_check_for_keypress 2 0 0 0 0 100%
tests/test_main.py test_resume_from_pause_exits_early.fake_read_key 3 0 0 0 0 100%
tests/test_main.py test_resume_from_pause_exits_early.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_resume_from_pause_exits_early.tracking_print 2 0 0 0 0 100%
tests/test_main.py test_add_time_with_plus_key 17 0 0 0 0 100%
tests/test_main.py test_add_time_with_plus_key.fake_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_add_time_with_plus_key.fake_check_for_keypress 1 0 0 0 0 100%
tests/test_main.py test_add_time_with_plus_key.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_add_time_with_plus_key.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_with_minus_key 17 0 0 0 0 100%
tests/test_main.py test_subtract_time_with_minus_key.fake_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_subtract_time_with_minus_key.fake_check_for_keypress 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_with_minus_key.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_with_minus_key.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_cannot_go_negative 18 0 0 0 0 100%
tests/test_main.py test_subtract_time_cannot_go_negative.fake_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_subtract_time_cannot_go_negative.fake_check_for_keypress 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_cannot_go_negative.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_cannot_go_negative.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_q_key_quits_timer 11 0 0 0 0 100%
tests/test_main.py test_q_key_quits_timer.fake_check_for_keypress 2 0 0 0 0 100%
tests/test_main.py test_q_key_quits_timer.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_no_arguments_shows_help 5 0 0 0 0 100%
tests/test_main.py test_countdown_displays_each_second 10 0 0 0 0 100%
tests/test_main.py test_countdown_displays_each_second.tracking_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_drift_correction_with_slow_sleeps 10 0 0 0 0 100%
tests/test_main.py test_drift_correction_with_slow_sleeps.tracking_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_drift_correction_skips_seconds_when_very_slow 12 0 0 2 0 100%
tests/test_main.py test_drift_correction_skips_seconds_when_very_slow.tracking_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_pause_preserves_remaining_time 20 0 0 0 0 100%
tests/test_main.py test_pause_preserves_remaining_time.tracking_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_pause_preserves_remaining_time.fake_check_for_keypress 2 0 0 0 0 100%
tests/test_main.py test_pause_preserves_remaining_time.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_pause_preserves_remaining_time.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_add_time_extends_deadline 19 0 0 0 0 100%
tests/test_main.py test_add_time_extends_deadline.tracking_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_add_time_extends_deadline.fake_check_for_keypress 1 0 0 0 0 100%
tests/test_main.py test_add_time_extends_deadline.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_add_time_extends_deadline.fake_drain 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_shortens_deadline 19 0 0 0 0 100%
tests/test_main.py test_subtract_time_shortens_deadline.tracking_get_number_lines 2 0 0 0 0 100%
tests/test_main.py test_subtract_time_shortens_deadline.fake_check_for_keypress 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_shortens_deadline.fake_read_key 1 0 0 0 0 100%
tests/test_main.py test_subtract_time_shortens_deadline.fake_drain 1 0 0 0 0 100%
tests/test_main.py (no function) 39 0 0 0 0 100%
tests/test_terminal.py test_check_for_keypress_returns_false_when_not_a_tty 6 0 0 0 0 100%
tests/test_terminal.py (no function) 3 0 0 0 0 100%
tests/test_timer.py join_lines 1 0 0 0 0 100%
tests/test_timer.py test_invalid_duration 2 0 0 0 0 100%
tests/test_timer.py test_duration_10_seconds 1 0 0 0 0 100%
tests/test_timer.py test_duration_60_seconds 1 0 0 0 0 100%
tests/test_timer.py test_duration_1_minute 1 0 0 0 0 100%
tests/test_timer.py test_duration_10_minutes 1 0 0 0 0 100%
tests/test_timer.py test_duration_150_minutes 1 0 0 0 0 100%
tests/test_timer.py test_duration_25_minutes 1 0 0 0 0 100%
tests/test_timer.py test_duration_3_minute_and_30_seconds 1 0 0 0 0 100%
tests/test_timer.py test_duration_2_minutes_and_8_seconds 1 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_10_seconds 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_60_seconds 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_45_minutes 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_101_minutes 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_17_minutes_and_four_seconds 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_8_minutes_and_6_seconds 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_9_minutes 2 0 0 0 0 100%
tests/test_timer.py test_get_number_lines_3478 2 0 0 0 0 100%
tests/test_timer.py (no function) 22 0 0 0 0 100%
Total   786 0 84 72 0 100%

No items found using the specified filter.