commit 8d212112582e612c39aa399858bc0b10c74782d0 from: Mark Jamsek date: Sun Apr 16 07:33:14 2023 UTC tog: blame regress and new test framework wait instruction Basic blame view test required adding the WAIT_FOR_UI instruction to delay screen dumps till the ui has been completely rendered. This will also apply to future test cases such as limited log views and further blame test cases. ok stsp@ commit - 5bde47590bc2803fac92ad9b3362511f427d3c6a commit + 8d212112582e612c39aa399858bc0b10c74782d0 blob - ac485dd3c4b41a848f35a558031031452fc7aa5e blob + eca41169193af38a1320fdb788385993cd078872 --- regress/tog/Makefile +++ regress/tog/Makefile @@ -1,4 +1,4 @@ -REGRESS_TARGETS=log diff +REGRESS_TARGETS=log diff blame NOOBJ=Yes GOT_TEST_ROOT=/tmp @@ -9,4 +9,7 @@ log: diff: ./diff.sh -q -r "$(GOT_TEST_ROOT)" +blame: + ./blame.sh -q -r "$(GOT_TEST_ROOT)" + .include blob - /dev/null blob + 93c8f6f920ce4b2013710cddd1e94d1b83b0a7ad (mode 755) --- /dev/null +++ regress/tog/blame.sh @@ -0,0 +1,80 @@ +#!/bin/sh +# +# Copyright (c) 2023 Mark Jamsek +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +. ./common.sh + +test_blame_basic() +{ + test_init blame_basic 80 8 + + local commit_id1=`git_show_head $testroot/repo` + + got checkout $testroot/repo $testroot/wt > /dev/null + ret=$? + if [ $ret -ne 0 ]; then + test_done "$testroot" "$ret" + return 1 + fi + + echo aaaa >> $testroot/wt/alpha + (cd $testroot/wt && got commit -m "a change" > /dev/null) + local commit_id2=`git_show_head $testroot/repo` + + echo bbbb >> $testroot/wt/alpha + (cd $testroot/wt && got commit -m "b change" > /dev/null) + local commit_id3=`git_show_head $testroot/repo` + + echo cccc >> $testroot/wt/alpha + (cd $testroot/wt && got commit -m "c change" > /dev/null) + local commit_id4=`git_show_head $testroot/repo` + local author_time=`git_show_author_time $testroot/repo` + local ymd=`date -u -r $author_time +"%G-%m-%d"` + + cat <$TOG_TEST_SCRIPT +WAIT_FOR_UI wait for blame to finish +SCREENDUMP +EOF + + local commit_id1_short=`trim_obj_id 32 $commit_id1` + local commit_id2_short=`trim_obj_id 32 $commit_id2` + local commit_id3_short=`trim_obj_id 32 $commit_id3` + local commit_id4_short=`trim_obj_id 32 $commit_id4` + + cat <$testroot/view.expected +commit $commit_id4 +[1/4] /alpha +$commit_id1_short alpha +$commit_id2_short aaaa +$commit_id3_short bbbb +$commit_id4_short cccc + + +EOF + + cd $testroot/wt && tog blame alpha + cmp -s $testroot/view.expected $testroot/view + ret=$? + if [ $ret -ne 0 ]; then + diff -u $testroot/view.expected $testroot/view + test_done "$testroot" "$ret" + return 1 + fi + + test_done "$testroot" "$ret" +} + +test_parseargs "$@" +run_test test_blame_basic blob - b1b624c8f817efab9f0fca62e40bd69dab642202 blob + c05b5d3f676d0d0b4f723b3825e8cf02afd3fa47 --- tog/tog.c +++ tog/tog.c @@ -617,6 +617,7 @@ struct tog_io { FILE *cin; FILE *cout; FILE *f; + int wait_for_ui; } tog_io; static int using_mock_io; @@ -1628,6 +1629,11 @@ tog_read_script_key(FILE *script, int *ch, int *done) const struct got_error *err = NULL; char *line = NULL; size_t linesz = 0; + + *ch = -1; + + if (tog_io.wait_for_ui) + goto done; if (getline(&line, &linesz, script) == -1) { if (feof(script)) { @@ -1637,7 +1643,10 @@ tog_read_script_key(FILE *script, int *ch, int *done) err = got_ferror(script, GOT_ERR_IO); goto done; } - } else if (strncasecmp(line, "KEY_ENTER", 9) == 0) + } + if (strncasecmp(line, "WAIT_FOR_UI", 11) == 0) + tog_io.wait_for_ui = 1; + else if (strncasecmp(line, "KEY_ENTER", 9) == 0) *ch = KEY_ENTER; else if (strncasecmp(line, "KEY_RIGHT", 9) == 0) *ch = KEY_RIGHT; @@ -6112,6 +6121,11 @@ draw_blame(struct tog_view *view) view_border(view); + if (tog_io.wait_for_ui) { + if (s->blame_complete) + tog_io.wait_for_ui = 0; + } + return NULL; }