[PATCH 1/3] blame: add test for --color-lines + --color-by-age
- From
Robert Estelle via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Feb 2, 2023, 19:16 UTC
- Message-ID
- <01112de2b6ab7188e9fa9ef00aa06948ead74172.1675365406.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1449.git.git.1675365406.gitgitgadget@gmail.com>
From: Robert Estelle <robertestelle@gmail.com>
This adds a test verifying `git blame`'s output when run with both `--color-lines` and `--color-by-age`. Those flags are not mutually exclusive and both affect the output format. They were previously only tested independently.
Signed-off-by: Robert Estelle <robertestelle@gmail.com> --- t/t8012-blame-colors.sh | 63 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+)
diff --git a/t/t8012-blame-colors.sh b/t/t8012-blame-colors.sh index c3a5f6d01ff..820f86c3aed 100755 --- a/t/t8012-blame-colors.sh +++ b/t/t8012-blame-colors.sh @@ -49,4 +49,67 @@ test_expect_success 'blame color by age: new code is different' ' grep qfunc colored ' +# shellcheck disable=SC2317 +re_normalize_color_decoded_blame() { + # Construct the regex used by `normalize_color_decoded_blame`. + # This is simply for documentation: line comments aren't permitted in + # backslash-continuation lines, and POSIX sh does't support 'x+=' syntax. + printf '%s' '\(<[^>]*>\)' # 1: capture the "<YELLOW>" etc + printf '%s' ' *' # -- discard any spaces + printf '%s' '[0-9a-f]\{1,\}' # -- discard the commit ID + printf '%s' ' *' # -- discard any spaces + printf '%s' '(' # -- left paren + printf '%s' '\(.\)' # 2: capture the single-char A/F/G/etc + printf '%s' '[^\)]*' # -- discard author and timestamp stuff + printf '%s' '\([0-9]\)\{1,\}' # 3: capture the line number + printf '%s' ')' # -- right paren + printf '%s' ' *' # -- discard leading spaces + printf '%s' '\(.*$\)' # 4: capture the remainder +} + +# shellcheck disable=SC2317 +normalize_color_decoded_blame() { + # Reads from stdin and writes to stdout. + # Removes the commit ID and author/timestamp from blame output after + # "test_decode_color" has run. + # + # This is simply to make expected outputs easier to describe + # and compare without having to refer to magic line counts. + re="$(re_normalize_color_decoded_blame)" || return $? + sed -e 's/^'"${re}"'/\1 (\2 \3) \4/' +} + +test_expect_success 'blame color by age and lines' ' + git \ + -c color.blame.repeatedLines=blue \ + -c color.blame.highlightRecent="yellow,1 month ago, cyan" \ + blame \ + --color-lines \ + --color-by-age \ + hello.c \ + >actual.raw && + + test_decode_color <actual.raw >actual && + normalize_color_decoded_blame <actual >actual.norm && + + normalize_color_decoded_blame >expected.norm <<-EOF && + <YELLOW>11111111 (H ... 1) <RESET>#include <stdio.h> + <YELLOW>22222222 (F ... 2) <RESET>int main(int argc, const char *argv[]) + <BLUE> 22222222 (F ... 3) <RESET>{ + <BLUE> 22222222 (F ... 4) <RESET> puts("hello"); + <YELLOW>33333333 (G ... 5) <RESET> puts("goodbye"); + <YELLOW>22222222 (F ... 6) <RESET>} + <YELLOW>11111111 (H ... 7) <RESET>void mail() + <BLUE> 11111111 (H ... 8) <RESET>{ + <BLUE> 11111111 (H ... 9) <RESET> puts("mail"); + <BLUE> 11111111 (H ... 10) <RESET>} + <CYAN> 44444444 (A ... 11) <RESET>void qfunc(); + EOF + + test_cmp actual.norm expected.norm && + + grep "<YELLOW>" <actual.norm >sanity-check && + test_line_count = 5 sanity-check +' + test_done
-- gitgitgadget