summaryrefslogtreecommitdiff
path: root/lib/codereview/test.sh
blob: 4bef9b6c5d5bca7c3cee68a1dd61c1a3a51aa6fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#!/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 --port 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]
testing=true
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 --tbr 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
	# dev_appserver.py used to crash with UTF-8 input.
	if true; 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 --tbr gre@golang.org $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 --tbr gre@golang.org $(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 --tbr gre@golang.org $(firstcl)
	must hg sync
	must hg submit --tbr gre@golang.org $(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.