diff options
Diffstat (limited to 'lib/codereview/test.sh')
-rwxr-xr-x | lib/codereview/test.sh | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/lib/codereview/test.sh b/lib/codereview/test.sh new file mode 100755 index 000000000..13f2b9cda --- /dev/null +++ b/lib/codereview/test.sh @@ -0,0 +1,198 @@ +#!/bin/bash +# Copyright 2011 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# Test the code review plugin. +# Assumes a local Rietveld is running using the App Engine SDK +# at http://localhost:7777/ +# +# dev_appserver.py -p 7777 $HOME/pub/rietveld + +codereview_script=$(pwd)/codereview.py +server=localhost:7777 +master=/tmp/go.test +clone1=/tmp/go.test1 +clone2=/tmp/go.test2 +export HGEDITOR=true + +must() { + if ! "$@"; then + echo "$@" failed >&2 + exit 1 + fi +} + +not() { + if "$@"; then + false + else + true + fi +} + +status() { + echo '+++' "$@" >&2 +} + +firstcl() { + hg pending | sed 1q | tr -d ':' +} + +# Initial setup. +status Create repositories. +rm -rf $master $clone1 $clone2 +mkdir $master +cd $master +must hg init . +echo Initial state >file +must hg add file +must hg ci -m 'first commit' file +must hg clone $master $clone1 +must hg clone $master $clone2 + +echo " +[ui] +username=Grace R Emlin <gre@golang.org> +[extensions] +codereview=$codereview_script +[codereview] +server=$server +" >>$clone1/.hg/hgrc +cp $clone1/.hg/hgrc $clone2/.hg/hgrc + +status Codereview should be disabled. +cd $clone1 +must hg status +must not hg pending + +status Enabling code review. +must mkdir lib lib/codereview +must touch lib/codereview/codereview.cfg + +status Code review should work even without CONTRIBUTORS. +must hg pending + +status Add CONTRIBUTORS. +echo 'Grace R Emlin <gre@golang.org>' >CONTRIBUTORS +must hg add lib/codereview/codereview.cfg CONTRIBUTORS + +status First submit. +must hg submit -r gre@golang.org -m codereview \ + lib/codereview/codereview.cfg CONTRIBUTORS + +status Should see change in other client. +cd $clone2 +must hg pull -u +must test -f lib/codereview/codereview.cfg +must test -f CONTRIBUTORS + +test_clpatch() { + # The email address must be test@example.com to match + # the test code review server's default user. + # Clpatch will check. + + cd $clone1 + # Tried to use UTF-8 here to test that, but dev_appserver.py crashes. Ha ha. + if false; then + status Using UTF-8. + name="Grácè T Emlïn <test@example.com>" + else + status Using ASCII. + name="Grace T Emlin <test@example.com>" + fi + echo "$name" >>CONTRIBUTORS + cat .hg/hgrc | sed "s/Grace.*/$name/" >/tmp/x && mv /tmp/x .hg/hgrc + echo ' +Reviewer: gre@golang.org +Description: + CONTRIBUTORS: add $name +Files: + CONTRIBUTORS +' | must hg change -i + num=$(hg pending | sed 1q | tr -d :) + + status Patch CL. + cd $clone2 + must hg clpatch $num + must [ "$num" = "$(firstcl)" ] + must hg submit $num + + status Issue should be open with no reviewers. + must curl http://$server/api/$num >/tmp/x + must not grep '"closed":true' /tmp/x + must grep '"reviewers":\[\]' /tmp/x + + status Sync should close issue. + cd $clone1 + must hg sync + must curl http://$server/api/$num >/tmp/x + must grep '"closed":true' /tmp/x + must grep '"reviewers":\[\]' /tmp/x + must [ "$(firstcl)" = "" ] +} + +test_reviewer() { + status Submit without reviewer should fail. + cd $clone1 + echo dummy >dummy + must hg add dummy + echo ' +Description: + no reviewer +Files: + dummy +' | must hg change -i + num=$(firstcl) + must not hg submit $num + must hg revert dummy + must rm dummy + must hg change -d $num +} + +test_linearity() { + status Linearity of changes. + cd $clone1 + echo file1 >file1 + must hg add file1 + echo ' +Reviewer: gre@golang.org +Description: file1 +Files: file1 + ' | must hg change -i + must hg submit $(firstcl) + + cd $clone2 + echo file2 >file2 + must hg add file2 + echo ' +Reviewer: gre@golang.org +Description: file2 +Files: file2 + ' | must hg change -i + must not hg submit $(firstcl) + must hg sync + must hg submit $(firstcl) +} + +test_restrict() { + status Cannot use hg ci. + cd $clone1 + echo file1a >file1a + hg add file1a + must not hg ci -m commit file1a + must rm file1a + must hg revert file1a + + status Cannot use hg rollback. + must not hg rollback + + status Cannot use hg backout + must not hg backout -r -1 +} + +test_reviewer +test_clpatch +test_linearity +test_restrict +status ALL TESTS PASSED. |