Add some basic assertions to test.sh.

This commit is contained in:
Avery Pennarun 2009-04-26 16:28:56 -04:00
parent 0ad3dd8534
commit 1490e1546a

73
test.sh
View File

@ -1,4 +1,4 @@
#!/bin/bash -x
#!/bin/bash
. shellopts.sh
set -e
@ -8,6 +8,50 @@ create()
git add "$1"
}
check()
{
echo
echo "check:" "$@"
if "$@"; then
echo ok
return 0
else
echo FAILED
exit 1
fi
}
check_equal()
{
echo
echo "check a:" "$1"
echo " b:" "$2"
if [ "$1" = "$2" ]; then
return 0
else
echo FAILED
exit 1
fi
}
fixnl()
{
t=""
while read x; do
t="$t$x "
done
echo $t
}
multiline()
{
while read x; do
set -- $x
for d in "$@"; do
echo "$d"
done
done
}
rm -rf mainline subproj
mkdir mainline subproj
@ -19,6 +63,7 @@ create sub1
git commit -m 'sub1'
git branch sub1
git branch -m master subproj
check true
create sub2
git commit -m 'sub2'
@ -86,7 +131,33 @@ git branch split3 FETCH_HEAD
git merge FETCH_HEAD
git branch subproj-merge-split3
chkm="main4 main6"
chkms="main-sub10 main-sub5 main-sub7 main-sub8"
chkms_sub=$(echo $chkms | multiline | sed 's,^,subdir/,' | fixnl)
chks="sub1 sub2 sub3 sub9"
chks_sub=$(echo $chks | multiline | sed 's,^,subdir/,' | fixnl)
# make sure exactly the right set of files ends up in the subproj
subfiles=$(git ls-files | fixnl)
check_equal "$subfiles" "$chkms $chks"
# make sure the subproj history *only* contains commits that affect the subdir.
allchanges=$(git log --name-only --pretty=format:'' | sort | fixnl)
check_equal "$allchanges" "$chkms $chks"
cd ../mainline
git fetch ../subproj subproj-merge-split3
git branch subproj-merge-split3 FETCH_HEAD
git subtree pull --prefix=subdir ../subproj subproj-merge-split3
# make sure exactly the right set of files ends up in the mainline
mainfiles=$(git ls-files | fixnl)
check_equal "$mainfiles" "$chkm $chkms_sub $chks_sub"
# make sure each filename changed exactly once in the entire history.
# 'main-sub??' and '/subdir/main-sub??' both change, because those are the
# changes that were split into their own history. And 'subdir/sub??' never
# change, since they were *only* changed in the subtree branch.
allchanges=$(git log --name-only --pretty=format:'' | sort | fixnl)
check_equal "$allchanges" "$chkm $chkms $chks $chkms_sub"