commit 8e778ade0370b5cabdf946ca7d9d6ac9338790b0 from: Mark Jamsek via: Thomas Adam date: Sat Apr 22 18:10:25 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 - fa9bb690d2fe11cc48b603cb872a8a39a240d29d commit + 8e778ade0370b5cabdf946ca7d9d6ac9338790b0 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 - 8fa205d719a08166373e452c826e108940372eb3 blob + 7c6e96e31033b1401d1fabc19f50ec38cab506bd --- tog/tog.c +++ tog/tog.c @@ -621,6 +621,7 @@ struct tog_io { FILE *cin; FILE *cout; FILE *f; + int wait_for_ui; } tog_io; static int using_mock_io; @@ -1632,6 +1633,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)) { @@ -1641,7 +1647,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; @@ -6116,6 +6125,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; }