##// END OF EJS Templates
scm: mercurial: run both of "inline" and "side by side" diff in functional test_diff_latin_1_path test....
Toshi MARUYAMA -
r5865:901a93705391
parent child
Show More
@@ -1,427 +1,429
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19 require 'repositories_controller'
19 require 'repositories_controller'
20
20
21 # Re-raise errors caught by the controller.
21 # Re-raise errors caught by the controller.
22 class RepositoriesController; def rescue_action(e) raise e end; end
22 class RepositoriesController; def rescue_action(e) raise e end; end
23
23
24 class RepositoriesMercurialControllerTest < ActionController::TestCase
24 class RepositoriesMercurialControllerTest < ActionController::TestCase
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
26
26
27 # No '..' in the repository path
27 # No '..' in the repository path
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
29 '/tmp/test/mercurial_repository'
29 '/tmp/test/mercurial_repository'
30 CHAR_1_HEX = "\xc3\x9c"
30 CHAR_1_HEX = "\xc3\x9c"
31 PRJ_ID = 3
31 PRJ_ID = 3
32
32
33 ruby19_non_utf8_pass =
33 ruby19_non_utf8_pass =
34 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
34 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
35
35
36 def setup
36 def setup
37 @controller = RepositoriesController.new
37 @controller = RepositoriesController.new
38 @request = ActionController::TestRequest.new
38 @request = ActionController::TestRequest.new
39 @response = ActionController::TestResponse.new
39 @response = ActionController::TestResponse.new
40 User.current = nil
40 User.current = nil
41 @repository = Repository::Mercurial.create(
41 @repository = Repository::Mercurial.create(
42 :project => Project.find(PRJ_ID),
42 :project => Project.find(PRJ_ID),
43 :url => REPOSITORY_PATH,
43 :url => REPOSITORY_PATH,
44 :path_encoding => 'ISO-8859-1'
44 :path_encoding => 'ISO-8859-1'
45 )
45 )
46 assert @repository
46 assert @repository
47 @diff_c_support = true
47 @diff_c_support = true
48 @char_1 = CHAR_1_HEX.dup
48 @char_1 = CHAR_1_HEX.dup
49 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
49 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
50 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
50 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
51 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
51 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
52 if @char_1.respond_to?(:force_encoding)
52 if @char_1.respond_to?(:force_encoding)
53 @char_1.force_encoding('UTF-8')
53 @char_1.force_encoding('UTF-8')
54 @tag_char_1.force_encoding('UTF-8')
54 @tag_char_1.force_encoding('UTF-8')
55 @branch_char_0.force_encoding('UTF-8')
55 @branch_char_0.force_encoding('UTF-8')
56 @branch_char_1.force_encoding('UTF-8')
56 @branch_char_1.force_encoding('UTF-8')
57 end
57 end
58 end
58 end
59
59
60 if ruby19_non_utf8_pass
60 if ruby19_non_utf8_pass
61 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
61 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
62 "and Encoding.default_external is not UTF-8. " +
62 "and Encoding.default_external is not UTF-8. " +
63 "Current value is '#{Encoding.default_external.to_s}'"
63 "Current value is '#{Encoding.default_external.to_s}'"
64 def test_fake; assert true end
64 def test_fake; assert true end
65 elsif File.directory?(REPOSITORY_PATH)
65 elsif File.directory?(REPOSITORY_PATH)
66 def test_show_root
66 def test_show_root
67 @repository.fetch_changesets
67 @repository.fetch_changesets
68 @repository.reload
68 @repository.reload
69 get :show, :id => PRJ_ID
69 get :show, :id => PRJ_ID
70 assert_response :success
70 assert_response :success
71 assert_template 'show'
71 assert_template 'show'
72 assert_not_nil assigns(:entries)
72 assert_not_nil assigns(:entries)
73 assert_equal 4, assigns(:entries).size
73 assert_equal 4, assigns(:entries).size
74 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
74 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
75 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
75 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
76 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
76 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
77 assert_not_nil assigns(:changesets)
77 assert_not_nil assigns(:changesets)
78 assigns(:changesets).size > 0
78 assigns(:changesets).size > 0
79 end
79 end
80
80
81 def test_show_directory
81 def test_show_directory
82 @repository.fetch_changesets
82 @repository.fetch_changesets
83 @repository.reload
83 @repository.reload
84 get :show, :id => PRJ_ID, :path => ['images']
84 get :show, :id => PRJ_ID, :path => ['images']
85 assert_response :success
85 assert_response :success
86 assert_template 'show'
86 assert_template 'show'
87 assert_not_nil assigns(:entries)
87 assert_not_nil assigns(:entries)
88 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
88 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
89 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
89 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
90 assert_not_nil entry
90 assert_not_nil entry
91 assert_equal 'file', entry.kind
91 assert_equal 'file', entry.kind
92 assert_equal 'images/edit.png', entry.path
92 assert_equal 'images/edit.png', entry.path
93 assert_not_nil assigns(:changesets)
93 assert_not_nil assigns(:changesets)
94 assigns(:changesets).size > 0
94 assigns(:changesets).size > 0
95 end
95 end
96
96
97 def test_show_at_given_revision
97 def test_show_at_given_revision
98 @repository.fetch_changesets
98 @repository.fetch_changesets
99 @repository.reload
99 @repository.reload
100 [0, '0', '0885933ad4f6'].each do |r1|
100 [0, '0', '0885933ad4f6'].each do |r1|
101 get :show, :id => PRJ_ID, :path => ['images'], :rev => r1
101 get :show, :id => PRJ_ID, :path => ['images'], :rev => r1
102 assert_response :success
102 assert_response :success
103 assert_template 'show'
103 assert_template 'show'
104 assert_not_nil assigns(:entries)
104 assert_not_nil assigns(:entries)
105 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
105 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
106 assert_not_nil assigns(:changesets)
106 assert_not_nil assigns(:changesets)
107 assigns(:changesets).size > 0
107 assigns(:changesets).size > 0
108 end
108 end
109 end
109 end
110
110
111 def test_show_directory_sql_escape_percent
111 def test_show_directory_sql_escape_percent
112 @repository.fetch_changesets
112 @repository.fetch_changesets
113 @repository.reload
113 @repository.reload
114 [13, '13', '3a330eb32958'].each do |r1|
114 [13, '13', '3a330eb32958'].each do |r1|
115 get :show, :id => PRJ_ID, :path => ['sql_escape', 'percent%dir'],
115 get :show, :id => PRJ_ID, :path => ['sql_escape', 'percent%dir'],
116 :rev => r1
116 :rev => r1
117 assert_response :success
117 assert_response :success
118 assert_template 'show'
118 assert_template 'show'
119
119
120 assert_not_nil assigns(:entries)
120 assert_not_nil assigns(:entries)
121 assert_equal ['percent%file1.txt', 'percentfile1.txt'],
121 assert_equal ['percent%file1.txt', 'percentfile1.txt'],
122 assigns(:entries).collect(&:name)
122 assigns(:entries).collect(&:name)
123 changesets = assigns(:changesets)
123 changesets = assigns(:changesets)
124 assert_not_nil changesets
124 assert_not_nil changesets
125 assigns(:changesets).size > 0
125 assigns(:changesets).size > 0
126 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
126 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
127 end
127 end
128 end
128 end
129
129
130 def test_show_directory_latin_1_path
130 def test_show_directory_latin_1_path
131 @repository.fetch_changesets
131 @repository.fetch_changesets
132 @repository.reload
132 @repository.reload
133 [21, '21', 'adf805632193'].each do |r1|
133 [21, '21', 'adf805632193'].each do |r1|
134 get :show, :id => PRJ_ID, :path => ['latin-1-dir'], :rev => r1
134 get :show, :id => PRJ_ID, :path => ['latin-1-dir'], :rev => r1
135 assert_response :success
135 assert_response :success
136 assert_template 'show'
136 assert_template 'show'
137
137
138 assert_not_nil assigns(:entries)
138 assert_not_nil assigns(:entries)
139 assert_equal ["make-latin-1-file.rb",
139 assert_equal ["make-latin-1-file.rb",
140 "test-#{@char_1}-1.txt",
140 "test-#{@char_1}-1.txt",
141 "test-#{@char_1}-2.txt",
141 "test-#{@char_1}-2.txt",
142 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
142 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
143 changesets = assigns(:changesets)
143 changesets = assigns(:changesets)
144 assert_not_nil changesets
144 assert_not_nil changesets
145 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
145 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
146 end
146 end
147 end
147 end
148
148
149 def test_show_branch
149 def test_show_branch
150 @repository.fetch_changesets
150 @repository.fetch_changesets
151 @repository.reload
151 @repository.reload
152 [
152 [
153 'default',
153 'default',
154 @branch_char_1,
154 @branch_char_1,
155 'branch (1)[2]&,%.-3_4',
155 'branch (1)[2]&,%.-3_4',
156 @branch_char_0,
156 @branch_char_0,
157 'test_branch.latin-1',
157 'test_branch.latin-1',
158 'test-branch-00',
158 'test-branch-00',
159 ].each do |bra|
159 ].each do |bra|
160 get :show, :id => PRJ_ID, :rev => bra
160 get :show, :id => PRJ_ID, :rev => bra
161 assert_response :success
161 assert_response :success
162 assert_template 'show'
162 assert_template 'show'
163 assert_not_nil assigns(:entries)
163 assert_not_nil assigns(:entries)
164 assert assigns(:entries).size > 0
164 assert assigns(:entries).size > 0
165 assert_not_nil assigns(:changesets)
165 assert_not_nil assigns(:changesets)
166 assigns(:changesets).size > 0
166 assigns(:changesets).size > 0
167 end
167 end
168 end
168 end
169
169
170 def test_show_tag
170 def test_show_tag
171 @repository.fetch_changesets
171 @repository.fetch_changesets
172 @repository.reload
172 @repository.reload
173 [
173 [
174 @tag_char_1,
174 @tag_char_1,
175 'tag_test.00',
175 'tag_test.00',
176 'tag-init-revision'
176 'tag-init-revision'
177 ].each do |tag|
177 ].each do |tag|
178 get :show, :id => PRJ_ID, :rev => tag
178 get :show, :id => PRJ_ID, :rev => tag
179 assert_response :success
179 assert_response :success
180 assert_template 'show'
180 assert_template 'show'
181 assert_not_nil assigns(:entries)
181 assert_not_nil assigns(:entries)
182 assert assigns(:entries).size > 0
182 assert assigns(:entries).size > 0
183 assert_not_nil assigns(:changesets)
183 assert_not_nil assigns(:changesets)
184 assigns(:changesets).size > 0
184 assigns(:changesets).size > 0
185 end
185 end
186 end
186 end
187
187
188 def test_changes
188 def test_changes
189 get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
189 get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
190 assert_response :success
190 assert_response :success
191 assert_template 'changes'
191 assert_template 'changes'
192 assert_tag :tag => 'h2', :content => 'edit.png'
192 assert_tag :tag => 'h2', :content => 'edit.png'
193 end
193 end
194
194
195 def test_entry_show
195 def test_entry_show
196 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
196 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
197 assert_response :success
197 assert_response :success
198 assert_template 'entry'
198 assert_template 'entry'
199 # Line 10
199 # Line 10
200 assert_tag :tag => 'th',
200 assert_tag :tag => 'th',
201 :content => '10',
201 :content => '10',
202 :attributes => { :class => 'line-num' },
202 :attributes => { :class => 'line-num' },
203 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
203 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
204 end
204 end
205
205
206 def test_entry_show_latin_1_path
206 def test_entry_show_latin_1_path
207 [21, '21', 'adf805632193'].each do |r1|
207 [21, '21', 'adf805632193'].each do |r1|
208 get :entry, :id => PRJ_ID,
208 get :entry, :id => PRJ_ID,
209 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
209 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
210 assert_response :success
210 assert_response :success
211 assert_template 'entry'
211 assert_template 'entry'
212 assert_tag :tag => 'th',
212 assert_tag :tag => 'th',
213 :content => '1',
213 :content => '1',
214 :attributes => { :class => 'line-num' },
214 :attributes => { :class => 'line-num' },
215 :sibling => { :tag => 'td',
215 :sibling => { :tag => 'td',
216 :content => /Mercurial is a distributed version control system/ }
216 :content => /Mercurial is a distributed version control system/ }
217 end
217 end
218 end
218 end
219
219
220 def test_entry_show_latin_1_contents
220 def test_entry_show_latin_1_contents
221 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
221 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
222 [27, '27', '7bbf4c738e71'].each do |r1|
222 [27, '27', '7bbf4c738e71'].each do |r1|
223 get :entry, :id => PRJ_ID,
223 get :entry, :id => PRJ_ID,
224 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
224 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
225 assert_response :success
225 assert_response :success
226 assert_template 'entry'
226 assert_template 'entry'
227 assert_tag :tag => 'th',
227 assert_tag :tag => 'th',
228 :content => '1',
228 :content => '1',
229 :attributes => { :class => 'line-num' },
229 :attributes => { :class => 'line-num' },
230 :sibling => { :tag => 'td',
230 :sibling => { :tag => 'td',
231 :content => /test-#{@char_1}.txt/ }
231 :content => /test-#{@char_1}.txt/ }
232 end
232 end
233 end
233 end
234 end
234 end
235
235
236 def test_entry_download
236 def test_entry_download
237 get :entry, :id => PRJ_ID,
237 get :entry, :id => PRJ_ID,
238 :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
238 :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
239 assert_response :success
239 assert_response :success
240 # File content
240 # File content
241 assert @response.body.include?('WITHOUT ANY WARRANTY')
241 assert @response.body.include?('WITHOUT ANY WARRANTY')
242 end
242 end
243
243
244 def test_entry_binary_force_download
244 def test_entry_binary_force_download
245 get :entry, :id => PRJ_ID, :rev => 1, :path => ['images', 'edit.png']
245 get :entry, :id => PRJ_ID, :rev => 1, :path => ['images', 'edit.png']
246 assert_response :success
246 assert_response :success
247 assert_equal 'image/png', @response.content_type
247 assert_equal 'image/png', @response.content_type
248 end
248 end
249
249
250 def test_directory_entry
250 def test_directory_entry
251 get :entry, :id => PRJ_ID, :path => ['sources']
251 get :entry, :id => PRJ_ID, :path => ['sources']
252 assert_response :success
252 assert_response :success
253 assert_template 'show'
253 assert_template 'show'
254 assert_not_nil assigns(:entry)
254 assert_not_nil assigns(:entry)
255 assert_equal 'sources', assigns(:entry).name
255 assert_equal 'sources', assigns(:entry).name
256 end
256 end
257
257
258 def test_diff
258 def test_diff
259 @repository.fetch_changesets
259 @repository.fetch_changesets
260 @repository.reload
260 @repository.reload
261 [4, '4', 'def6d2f1254a'].each do |r1|
261 [4, '4', 'def6d2f1254a'].each do |r1|
262 # Full diff of changeset 4
262 # Full diff of changeset 4
263 ['inline', 'sbs'].each do |dt|
263 ['inline', 'sbs'].each do |dt|
264 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
264 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
265 assert_response :success
265 assert_response :success
266 assert_template 'diff'
266 assert_template 'diff'
267 if @diff_c_support
267 if @diff_c_support
268 # Line 22 removed
268 # Line 22 removed
269 assert_tag :tag => 'th',
269 assert_tag :tag => 'th',
270 :content => '22',
270 :content => '22',
271 :sibling => { :tag => 'td',
271 :sibling => { :tag => 'td',
272 :attributes => { :class => /diff_out/ },
272 :attributes => { :class => /diff_out/ },
273 :content => /def remove/ }
273 :content => /def remove/ }
274 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
274 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
275 end
275 end
276 end
276 end
277 end
277 end
278 end
278 end
279
279
280 def test_diff_two_revs
280 def test_diff_two_revs
281 @repository.fetch_changesets
281 @repository.fetch_changesets
282 @repository.reload
282 @repository.reload
283 [2, '400bb8672109', '400', 400].each do |r1|
283 [2, '400bb8672109', '400', 400].each do |r1|
284 [4, 'def6d2f1254a'].each do |r2|
284 [4, 'def6d2f1254a'].each do |r2|
285 ['inline', 'sbs'].each do |dt|
285 ['inline', 'sbs'].each do |dt|
286 get :diff,
286 get :diff,
287 :id => PRJ_ID,
287 :id => PRJ_ID,
288 :rev => r1,
288 :rev => r1,
289 :rev_to => r2,
289 :rev_to => r2,
290 :type => dt
290 :type => dt
291 assert_response :success
291 assert_response :success
292 assert_template 'diff'
292 assert_template 'diff'
293 diff = assigns(:diff)
293 diff = assigns(:diff)
294 assert_not_nil diff
294 assert_not_nil diff
295 assert_tag :tag => 'h2',
295 assert_tag :tag => 'h2',
296 :content => /4:def6d2f1254a 2:400bb8672109/
296 :content => /4:def6d2f1254a 2:400bb8672109/
297 end
297 end
298 end
298 end
299 end
299 end
300 end
300 end
301
301
302 def test_diff_latin_1_path
302 def test_diff_latin_1_path
303 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
303 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
304 [21, 'adf805632193'].each do |r1|
304 [21, 'adf805632193'].each do |r1|
305 get :diff, :id => PRJ_ID, :rev => r1
305 ['inline', 'sbs'].each do |dt|
306 assert_response :success
306 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
307 assert_template 'diff'
307 assert_response :success
308 assert_tag :tag => 'thead',
308 assert_template 'diff'
309 :descendant => {
309 assert_tag :tag => 'thead',
310 :tag => 'th',
311 :attributes => { :class => 'filename' } ,
312 :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
313 },
314 :sibling => {
315 :tag => 'tbody',
316 :descendant => {
310 :descendant => {
317 :tag => 'td',
311 :tag => 'th',
318 :attributes => { :class => /diff_in/ },
312 :attributes => { :class => 'filename' } ,
319 :content => /It is written in Python/
313 :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
314 },
315 :sibling => {
316 :tag => 'tbody',
317 :descendant => {
318 :tag => 'td',
319 :attributes => { :class => /diff_in/ },
320 :content => /It is written in Python/
321 }
320 }
322 }
321 }
323 end
322 end
324 end
323 end
325 end
324 end
326 end
325
327
326 def test_annotate
328 def test_annotate
327 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
329 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
328 assert_response :success
330 assert_response :success
329 assert_template 'annotate'
331 assert_template 'annotate'
330 # Line 23, revision 4:def6d2f1254a
332 # Line 23, revision 4:def6d2f1254a
331 assert_tag :tag => 'th',
333 assert_tag :tag => 'th',
332 :content => '23',
334 :content => '23',
333 :attributes => { :class => 'line-num' },
335 :attributes => { :class => 'line-num' },
334 :sibling =>
336 :sibling =>
335 {
337 {
336 :tag => 'td',
338 :tag => 'td',
337 :attributes => { :class => 'revision' },
339 :attributes => { :class => 'revision' },
338 :child => { :tag => 'a', :content => '4:def6d2f1254a' }
340 :child => { :tag => 'a', :content => '4:def6d2f1254a' }
339 }
341 }
340 assert_tag :tag => 'th',
342 assert_tag :tag => 'th',
341 :content => '23',
343 :content => '23',
342 :attributes => { :class => 'line-num' },
344 :attributes => { :class => 'line-num' },
343 :sibling =>
345 :sibling =>
344 {
346 {
345 :tag => 'td' ,
347 :tag => 'td' ,
346 :content => 'jsmith' ,
348 :content => 'jsmith' ,
347 :attributes => { :class => 'author' },
349 :attributes => { :class => 'author' },
348 }
350 }
349 assert_tag :tag => 'th',
351 assert_tag :tag => 'th',
350 :content => '23',
352 :content => '23',
351 :attributes => { :class => 'line-num' },
353 :attributes => { :class => 'line-num' },
352 :sibling => { :tag => 'td', :content => /watcher =/ }
354 :sibling => { :tag => 'td', :content => /watcher =/ }
353 end
355 end
354
356
355 def test_annotate_at_given_revision
357 def test_annotate_at_given_revision
356 @repository.fetch_changesets
358 @repository.fetch_changesets
357 @repository.reload
359 @repository.reload
358 [2, '400bb8672109', '400', 400].each do |r1|
360 [2, '400bb8672109', '400', 400].each do |r1|
359 get :annotate, :id => PRJ_ID, :rev => r1,
361 get :annotate, :id => PRJ_ID, :rev => r1,
360 :path => ['sources', 'watchers_controller.rb']
362 :path => ['sources', 'watchers_controller.rb']
361 assert_response :success
363 assert_response :success
362 assert_template 'annotate'
364 assert_template 'annotate'
363 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
365 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
364 end
366 end
365 end
367 end
366
368
367 def test_annotate_latin_1_path
369 def test_annotate_latin_1_path
368 [21, '21', 'adf805632193'].each do |r1|
370 [21, '21', 'adf805632193'].each do |r1|
369 get :annotate, :id => PRJ_ID,
371 get :annotate, :id => PRJ_ID,
370 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
372 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
371 assert_response :success
373 assert_response :success
372 assert_template 'annotate'
374 assert_template 'annotate'
373 assert_tag :tag => 'th',
375 assert_tag :tag => 'th',
374 :content => '1',
376 :content => '1',
375 :attributes => { :class => 'line-num' },
377 :attributes => { :class => 'line-num' },
376 :sibling =>
378 :sibling =>
377 {
379 {
378 :tag => 'td',
380 :tag => 'td',
379 :attributes => { :class => 'revision' },
381 :attributes => { :class => 'revision' },
380 :child => { :tag => 'a', :content => '20:709858aafd1b' }
382 :child => { :tag => 'a', :content => '20:709858aafd1b' }
381 }
383 }
382 assert_tag :tag => 'th',
384 assert_tag :tag => 'th',
383 :content => '1',
385 :content => '1',
384 :attributes => { :class => 'line-num' },
386 :attributes => { :class => 'line-num' },
385 :sibling =>
387 :sibling =>
386 {
388 {
387 :tag => 'td' ,
389 :tag => 'td' ,
388 :content => 'jsmith' ,
390 :content => 'jsmith' ,
389 :attributes => { :class => 'author' },
391 :attributes => { :class => 'author' },
390 }
392 }
391 assert_tag :tag => 'th',
393 assert_tag :tag => 'th',
392 :content => '1',
394 :content => '1',
393 :attributes => { :class => 'line-num' },
395 :attributes => { :class => 'line-num' },
394 :sibling => { :tag => 'td',
396 :sibling => { :tag => 'td',
395 :content => /Mercurial is a distributed version control system/ }
397 :content => /Mercurial is a distributed version control system/ }
396
398
397 end
399 end
398 end
400 end
399
401
400 def test_annotate_latin_1_contents
402 def test_annotate_latin_1_contents
401 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
403 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
402 [27, '7bbf4c738e71'].each do |r1|
404 [27, '7bbf4c738e71'].each do |r1|
403 get :annotate, :id => PRJ_ID,
405 get :annotate, :id => PRJ_ID,
404 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
406 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
405 assert_tag :tag => 'th',
407 assert_tag :tag => 'th',
406 :content => '1',
408 :content => '1',
407 :attributes => { :class => 'line-num' },
409 :attributes => { :class => 'line-num' },
408 :sibling => { :tag => 'td',
410 :sibling => { :tag => 'td',
409 :content => /test-#{@char_1}.txt/ }
411 :content => /test-#{@char_1}.txt/ }
410 end
412 end
411 end
413 end
412 end
414 end
413
415
414 def test_empty_revision
416 def test_empty_revision
415 @repository.fetch_changesets
417 @repository.fetch_changesets
416 @repository.reload
418 @repository.reload
417 ['', ' ', nil].each do |r|
419 ['', ' ', nil].each do |r|
418 get :revision, :id => PRJ_ID, :rev => r
420 get :revision, :id => PRJ_ID, :rev => r
419 assert_response 404
421 assert_response 404
420 assert_error_tag :content => /was not found/
422 assert_error_tag :content => /was not found/
421 end
423 end
422 end
424 end
423 else
425 else
424 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
426 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
425 def test_fake; assert true end
427 def test_fake; assert true end
426 end
428 end
427 end
429 end
General Comments 0
You need to be logged in to leave comments. Login now