Test the progress display
authorSZEDER Gábor <szeder.dev@gmail.com>
Mon, 16 Sep 2019 20:54:12 +0000 (22:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Sep 2019 16:39:16 +0000 (09:39 -0700)
commit2bb74b53a49f92d433057f4d560b33f1fe2f770a
treeab34c2711e74477c231623b005a0b53e60ef0fe0
parentbbf47568ad7e91ab0962b314c054a2da03232c72
Test the progress display

'progress.c' has seen a few fixes recently [1], and, unfortunately,
some of those fixes required further fixes [2].  It seems it's time to
have a few tests focusing on the subtleties of the progress display.

Add the 'test-tool progress' subcommand to help testing the progress
display, reading instructions from standard input and turning them
into calls to the display_progress() and display_throughput()
functions with the given parameters.

The progress display is, however, critically dependent on timing,
because it's only updated once every second or, if the toal is known
in advance, every 1%, and there is the throughput rate as well.  These
make the progress display far too undeterministic for testing as-is.
To address this, add a few testing-specific variables and functions to
'progress.c', allowing the the new test helper to:

  - Disable the triggered-every-second SIGALRM and set the
    'progress_update' flag explicitly based in the input instructions.
    This way the progress line will be updated deterministically when
    the test wants it to be updated.

  - Specify the time elapsed since start_progress() to make the
    throughput rate calculations deterministic.

Add the new test script 't0500-progress-display.sh' to check a few
simple cases with and without throughput, and that a shorter progress
line properly covers up the previously displayed line in different
situations.

[1] See commits 545dc345eb (progress: break too long progress bar
    lines, 2019-04-12) and 9f1fd84e15 (progress: clear previous
    progress update dynamically, 2019-04-12).
[2] 1aed1a5f25 (progress: avoid empty line when breaking the progress
    line, 2019-05-19)

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
progress.c
t/helper/test-progress.c [new file with mode: 0644]
t/helper/test-tool.c
t/helper/test-tool.h
t/t0500-progress-display.sh [new file with mode: 0755]