summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Avery Pennarun <apenwarr@gmail.com>2009-04-26 16:28:56 -0400
committerLibravatar Avery Pennarun <apenwarr@gmail.com>2009-04-26 16:31:27 -0400
commit1490e1546a380814fdd68dc3776023e58da60d48 (patch)
tree1e0dfc49d0717c282c2819b5f677062342525b05
parentAdd a 'create' helper function in test.sh. (diff)
downloadtgif-1490e1546a380814fdd68dc3776023e58da60d48.tar.xz
Add some basic assertions to test.sh.
-rwxr-xr-xtest.sh73
1 files changed, 72 insertions, 1 deletions
diff --git a/test.sh b/test.sh
index 276f40d1da..4f2b674e5d 100755
--- a/test.sh
+++ b/test.sh
@@ -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"
+