commit 0e67301325787b5b65e8e3d635a2d98a7c182393 from: Stefan Sperling date: Wed Jan 02 14:42:46 2019 UTC add a command line test suite with a simple 'got checkout' test commit - 2944241d9c75a5af82bf989d3931ca67a5c7f70d commit + 0e67301325787b5b65e8e3d635a2d98a7c182393 blob - 94812f8f2a0bac465e3b642b6661d9a35a327822 blob + f918083c00ae9177d907aa902cc4f8492ca05b0f --- README +++ README @@ -15,8 +15,8 @@ This will install the following commands to ~/bin: tog (ncurses interface) and several helper programs from the libexec directory -The tests will pass only after 'make install' because -they rely on installed libexec binaries: +Tests will pass only after 'make install' because they rely on installed +libexec binaries. Tests in the cmdline directory currently depend on git(1). $ make regress blob - 31e2dae1aab1a02e90cf3bbde63915c8d964fbd7 blob + bd68cd59dd3fc57df8b43aee72ba61e5cda697d3 --- regress/Makefile +++ regress/Makefile @@ -1,3 +1,3 @@ -SUBDIR = delta idset repository worktree +SUBDIR = cmdline delta idset repository worktree .include blob - /dev/null blob + 7570e53a2e07dba0a6067523173c50db54c8571c (mode 644) --- /dev/null +++ regress/cmdline/Makefile @@ -0,0 +1,6 @@ +REGRESS_TARGETS=checkout + +checkout: + ./checkout.sh + +.include blob - /dev/null blob + b6cbba38597d53c0313d9edc51565941668d6977 (mode 755) --- /dev/null +++ regress/cmdline/checkout.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Copyright (c) 2019 Stefan Sperling +# +# 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 + +function test_checkout_basic { + local testroot=`test_init checkout_basic` + + echo "A $testroot/wt/alpha" > $testroot/stdout.expected + echo "A $testroot/wt/beta" >> $testroot/stdout.expected + echo "A $testroot/wt/epsilon/zeta" >> $testroot/stdout.expected + echo "A $testroot/wt/gamma/delta" >> $testroot/stdout.expected + echo "Now shut up and hack" >> $testroot/stdout.expected + + got checkout $testroot/repo $testroot/wt > $testroot/stdout + if [ "$?" != "0" ]; then + test_done "$testroot" "$?" + return 1 + fi + + cmp $testroot/stdout.expected $testroot/stdout + if [ "$?" != "0" ]; then + diff -u $testroot/stdout.expected $testroot/stdout + test_done "$testroot" "$?" + return 1 + fi + + echo "alpha" > $testroot/content.expected + echo "beta" >> $testroot/content.expected + echo "zeta" >> $testroot/content.expected + echo "delta" >> $testroot/content.expected + cat $testroot/wt/alpha $testroot/wt/beta $testroot/wt/epsilon/zeta \ + $testroot/wt/gamma/delta > $testroot/content + + cmp $testroot/content.expected $testroot/content + if [ "$?" != "0" ]; then + diff -u $testroot/content.expected $testroot/content + fi + test_done "$testroot" "$?" +} + +# run tests +run_test test_checkout_basic blob - /dev/null blob + 4fb24d61a698847ebfe40cb77aed98a0c3f92799 (mode 644) --- /dev/null +++ regress/cmdline/common.sh @@ -0,0 +1,79 @@ +#!/bin/sh +# +# Copyright (c) 2019 Stefan Sperling +# +# 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. + +function git_init +{ + git init -q "$@" +} + +function git_commit +{ + local repo="$1" + shift + (cd $repo && git commit -q -a "$@") +} + +function make_test_tree +{ + repo="$1" + + echo alpha > $repo/alpha + echo beta > $repo/beta + mkdir $repo/gamma + echo delta > $repo/gamma/delta + mkdir $repo/epsilon + echo zeta > $repo/epsilon/zeta + (cd $repo && git add .) +} + +function test_init +{ + local testname="$1" + if [ -z "$testname" ]; then + echo "No test name provided" >&2 + return 1 + fi + local testroot=`mktemp -p /tmp -d got-test-$testname-XXXXXXXX` + mkdir $testroot/repo + git_init $testroot/repo + make_test_tree $testroot/repo + git_commit $testroot/repo -m "adding the test tree" + echo "$testroot" +} + +function test_cleanup +{ + local testroot="$1" + rm -rf "$testroot" +} + +function run_test +{ + testfunc="$1" + echo "$testfunc" + $testfunc +} + +function test_done +{ + local testroot="$1" + local result="$2" + if [ "$result" == "0" ]; then + test_cleanup "$testroot" + else + echo "test failed; leaving test data in $testroot" + fi +}