Add some basic assertions to test.sh.
authorAvery Pennarun <apenwarr@gmail.com>
Sun, 26 Apr 2009 20:28:56 +0000 (16:28 -0400)
committerAvery Pennarun <apenwarr@gmail.com>
Sun, 26 Apr 2009 20:31:27 +0000 (16:31 -0400)
test.sh

diff --git a/test.sh b/test.sh
index 276f40d1daffe3157baa886232510a154d32678c..4f2b674e5de6e4b9c8c4ab9fd9684d99aa1cae50 100755 (executable)
--- 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"
+