##// END OF EJS Templates
scm: mercurial: update test repository (#5501)...
Toshi MARUYAMA -
r7542:476c3d54b711
parent child
Show More
1 NO CONTENT: modified file, binary diff hidden
@@ -1,505 +1,505
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19 require 'repositories_controller'
20 20
21 21 # Re-raise errors caught by the controller.
22 22 class RepositoriesController; def rescue_action(e) raise e end; end
23 23
24 24 class RepositoriesMercurialControllerTest < ActionController::TestCase
25 25 fixtures :projects, :users, :roles, :members, :member_roles,
26 26 :repositories, :enabled_modules
27 27
28 28 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
29 29 CHAR_1_HEX = "\xc3\x9c"
30 30 PRJ_ID = 3
31 NUM_REV = 29
31 NUM_REV = 32
32 32
33 33 ruby19_non_utf8_pass =
34 34 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
35 35
36 36 def setup
37 37 @controller = RepositoriesController.new
38 38 @request = ActionController::TestRequest.new
39 39 @response = ActionController::TestResponse.new
40 40 User.current = nil
41 41 @project = Project.find(PRJ_ID)
42 42 @repository = Repository::Mercurial.create(
43 43 :project => @project,
44 44 :url => REPOSITORY_PATH,
45 45 :path_encoding => 'ISO-8859-1'
46 46 )
47 47 assert @repository
48 48 @diff_c_support = true
49 49 @char_1 = CHAR_1_HEX.dup
50 50 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
51 51 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
52 52 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
53 53 if @char_1.respond_to?(:force_encoding)
54 54 @char_1.force_encoding('UTF-8')
55 55 @tag_char_1.force_encoding('UTF-8')
56 56 @branch_char_0.force_encoding('UTF-8')
57 57 @branch_char_1.force_encoding('UTF-8')
58 58 end
59 59 end
60 60
61 61 if ruby19_non_utf8_pass
62 62 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
63 63 "and Encoding.default_external is not UTF-8. " +
64 64 "Current value is '#{Encoding.default_external.to_s}'"
65 65 def test_fake; assert true end
66 66 elsif File.directory?(REPOSITORY_PATH)
67 67 def test_show_root
68 68 assert_equal 0, @repository.changesets.count
69 69 @repository.fetch_changesets
70 70 @project.reload
71 71 assert_equal NUM_REV, @repository.changesets.count
72 72 get :show, :id => PRJ_ID
73 73 assert_response :success
74 74 assert_template 'show'
75 75 assert_not_nil assigns(:entries)
76 76 assert_equal 4, assigns(:entries).size
77 77 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
78 78 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
79 79 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
80 80 assert_not_nil assigns(:changesets)
81 81 assert assigns(:changesets).size > 0
82 82 end
83 83
84 84 def test_show_directory
85 85 assert_equal 0, @repository.changesets.count
86 86 @repository.fetch_changesets
87 87 @project.reload
88 88 assert_equal NUM_REV, @repository.changesets.count
89 89 get :show, :id => PRJ_ID, :path => ['images']
90 90 assert_response :success
91 91 assert_template 'show'
92 92 assert_not_nil assigns(:entries)
93 93 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
94 94 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
95 95 assert_not_nil entry
96 96 assert_equal 'file', entry.kind
97 97 assert_equal 'images/edit.png', entry.path
98 98 assert_not_nil assigns(:changesets)
99 99 assert assigns(:changesets).size > 0
100 100 end
101 101
102 102 def test_show_at_given_revision
103 103 assert_equal 0, @repository.changesets.count
104 104 @repository.fetch_changesets
105 105 @project.reload
106 106 assert_equal NUM_REV, @repository.changesets.count
107 107 [0, '0', '0885933ad4f6'].each do |r1|
108 108 get :show, :id => PRJ_ID, :path => ['images'], :rev => r1
109 109 assert_response :success
110 110 assert_template 'show'
111 111 assert_not_nil assigns(:entries)
112 112 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
113 113 assert_not_nil assigns(:changesets)
114 114 assert assigns(:changesets).size > 0
115 115 end
116 116 end
117 117
118 118 def test_show_directory_sql_escape_percent
119 119 assert_equal 0, @repository.changesets.count
120 120 @repository.fetch_changesets
121 121 @project.reload
122 122 assert_equal NUM_REV, @repository.changesets.count
123 123 [13, '13', '3a330eb32958'].each do |r1|
124 124 get :show, :id => PRJ_ID, :path => ['sql_escape', 'percent%dir'],
125 125 :rev => r1
126 126 assert_response :success
127 127 assert_template 'show'
128 128
129 129 assert_not_nil assigns(:entries)
130 130 assert_equal ['percent%file1.txt', 'percentfile1.txt'],
131 131 assigns(:entries).collect(&:name)
132 132 changesets = assigns(:changesets)
133 133 assert_not_nil changesets
134 134 assert assigns(:changesets).size > 0
135 135 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
136 136 end
137 137 end
138 138
139 139 def test_show_directory_latin_1_path
140 140 assert_equal 0, @repository.changesets.count
141 141 @repository.fetch_changesets
142 142 @project.reload
143 143 assert_equal NUM_REV, @repository.changesets.count
144 144 [21, '21', 'adf805632193'].each do |r1|
145 145 get :show, :id => PRJ_ID, :path => ['latin-1-dir'], :rev => r1
146 146 assert_response :success
147 147 assert_template 'show'
148 148
149 149 assert_not_nil assigns(:entries)
150 150 assert_equal ["make-latin-1-file.rb",
151 151 "test-#{@char_1}-1.txt",
152 152 "test-#{@char_1}-2.txt",
153 153 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
154 154 changesets = assigns(:changesets)
155 155 assert_not_nil changesets
156 156 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
157 157 end
158 158 end
159 159
160 160 def test_show_branch
161 161 assert_equal 0, @repository.changesets.count
162 162 @repository.fetch_changesets
163 163 @project.reload
164 164 assert_equal NUM_REV, @repository.changesets.count
165 165 [
166 166 'default',
167 167 @branch_char_1,
168 168 'branch (1)[2]&,%.-3_4',
169 169 @branch_char_0,
170 170 'test_branch.latin-1',
171 171 'test-branch-00',
172 172 ].each do |bra|
173 173 get :show, :id => PRJ_ID, :rev => bra
174 174 assert_response :success
175 175 assert_template 'show'
176 176 assert_not_nil assigns(:entries)
177 177 assert assigns(:entries).size > 0
178 178 assert_not_nil assigns(:changesets)
179 179 assert assigns(:changesets).size > 0
180 180 end
181 181 end
182 182
183 183 def test_show_tag
184 184 assert_equal 0, @repository.changesets.count
185 185 @repository.fetch_changesets
186 186 @project.reload
187 187 assert_equal NUM_REV, @repository.changesets.count
188 188 [
189 189 @tag_char_1,
190 190 'tag_test.00',
191 191 'tag-init-revision'
192 192 ].each do |tag|
193 193 get :show, :id => PRJ_ID, :rev => tag
194 194 assert_response :success
195 195 assert_template 'show'
196 196 assert_not_nil assigns(:entries)
197 197 assert assigns(:entries).size > 0
198 198 assert_not_nil assigns(:changesets)
199 199 assert assigns(:changesets).size > 0
200 200 end
201 201 end
202 202
203 203 def test_changes
204 204 get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
205 205 assert_response :success
206 206 assert_template 'changes'
207 207 assert_tag :tag => 'h2', :content => 'edit.png'
208 208 end
209 209
210 210 def test_entry_show
211 211 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
212 212 assert_response :success
213 213 assert_template 'entry'
214 214 # Line 10
215 215 assert_tag :tag => 'th',
216 216 :content => '10',
217 217 :attributes => { :class => 'line-num' },
218 218 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
219 219 end
220 220
221 221 def test_entry_show_latin_1_path
222 222 [21, '21', 'adf805632193'].each do |r1|
223 223 get :entry, :id => PRJ_ID,
224 224 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
225 225 assert_response :success
226 226 assert_template 'entry'
227 227 assert_tag :tag => 'th',
228 228 :content => '1',
229 229 :attributes => { :class => 'line-num' },
230 230 :sibling => { :tag => 'td',
231 231 :content => /Mercurial is a distributed version control system/ }
232 232 end
233 233 end
234 234
235 235 def test_entry_show_latin_1_contents
236 236 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
237 237 [27, '27', '7bbf4c738e71'].each do |r1|
238 238 get :entry, :id => PRJ_ID,
239 239 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
240 240 assert_response :success
241 241 assert_template 'entry'
242 242 assert_tag :tag => 'th',
243 243 :content => '1',
244 244 :attributes => { :class => 'line-num' },
245 245 :sibling => { :tag => 'td',
246 246 :content => /test-#{@char_1}.txt/ }
247 247 end
248 248 end
249 249 end
250 250
251 251 def test_entry_download
252 252 get :entry, :id => PRJ_ID,
253 253 :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
254 254 assert_response :success
255 255 # File content
256 256 assert @response.body.include?('WITHOUT ANY WARRANTY')
257 257 end
258 258
259 259 def test_entry_binary_force_download
260 260 get :entry, :id => PRJ_ID, :rev => 1, :path => ['images', 'edit.png']
261 261 assert_response :success
262 262 assert_equal 'image/png', @response.content_type
263 263 end
264 264
265 265 def test_directory_entry
266 266 get :entry, :id => PRJ_ID, :path => ['sources']
267 267 assert_response :success
268 268 assert_template 'show'
269 269 assert_not_nil assigns(:entry)
270 270 assert_equal 'sources', assigns(:entry).name
271 271 end
272 272
273 273 def test_diff
274 274 assert_equal 0, @repository.changesets.count
275 275 @repository.fetch_changesets
276 276 @project.reload
277 277 assert_equal NUM_REV, @repository.changesets.count
278 278 [4, '4', 'def6d2f1254a'].each do |r1|
279 279 # Full diff of changeset 4
280 280 ['inline', 'sbs'].each do |dt|
281 281 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
282 282 assert_response :success
283 283 assert_template 'diff'
284 284 if @diff_c_support
285 285 # Line 22 removed
286 286 assert_tag :tag => 'th',
287 287 :content => '22',
288 288 :sibling => { :tag => 'td',
289 289 :attributes => { :class => /diff_out/ },
290 290 :content => /def remove/ }
291 291 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
292 292 end
293 293 end
294 294 end
295 295 end
296 296
297 297 def test_diff_two_revs
298 298 assert_equal 0, @repository.changesets.count
299 299 @repository.fetch_changesets
300 300 @project.reload
301 301 assert_equal NUM_REV, @repository.changesets.count
302 302 [2, '400bb8672109', '400', 400].each do |r1|
303 303 [4, 'def6d2f1254a'].each do |r2|
304 304 ['inline', 'sbs'].each do |dt|
305 305 get :diff,
306 306 :id => PRJ_ID,
307 307 :rev => r1,
308 308 :rev_to => r2,
309 309 :type => dt
310 310 assert_response :success
311 311 assert_template 'diff'
312 312 diff = assigns(:diff)
313 313 assert_not_nil diff
314 314 assert_tag :tag => 'h2',
315 315 :content => /4:def6d2f1254a 2:400bb8672109/
316 316 end
317 317 end
318 318 end
319 319 end
320 320
321 321 def test_diff_latin_1_path
322 322 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
323 323 [21, 'adf805632193'].each do |r1|
324 324 ['inline', 'sbs'].each do |dt|
325 325 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
326 326 assert_response :success
327 327 assert_template 'diff'
328 328 assert_tag :tag => 'thead',
329 329 :descendant => {
330 330 :tag => 'th',
331 331 :attributes => { :class => 'filename' } ,
332 332 :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
333 333 },
334 334 :sibling => {
335 335 :tag => 'tbody',
336 336 :descendant => {
337 337 :tag => 'td',
338 338 :attributes => { :class => /diff_in/ },
339 339 :content => /It is written in Python/
340 340 }
341 341 }
342 342 end
343 343 end
344 344 end
345 345 end
346 346
347 347 def test_annotate
348 348 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
349 349 assert_response :success
350 350 assert_template 'annotate'
351 351 # Line 23, revision 4:def6d2f1254a
352 352 assert_tag :tag => 'th',
353 353 :content => '23',
354 354 :attributes => { :class => 'line-num' },
355 355 :sibling =>
356 356 {
357 357 :tag => 'td',
358 358 :attributes => { :class => 'revision' },
359 359 :child => { :tag => 'a', :content => '4:def6d2f1254a' }
360 360 }
361 361 assert_tag :tag => 'th',
362 362 :content => '23',
363 363 :attributes => { :class => 'line-num' },
364 364 :sibling =>
365 365 {
366 366 :tag => 'td' ,
367 367 :content => 'jsmith' ,
368 368 :attributes => { :class => 'author' },
369 369 }
370 370 assert_tag :tag => 'th',
371 371 :content => '23',
372 372 :attributes => { :class => 'line-num' },
373 373 :sibling => { :tag => 'td', :content => /watcher =/ }
374 374 end
375 375
376 376 def test_annotate_not_in_tip
377 377 assert_equal 0, @repository.changesets.count
378 378 @repository.fetch_changesets
379 379 @project.reload
380 380 assert_equal NUM_REV, @repository.changesets.count
381 381
382 382 get :annotate, :id => PRJ_ID,
383 383 :path => ['sources', 'welcome_controller.rb']
384 384 assert_response 404
385 385 assert_error_tag :content => /was not found/
386 386 end
387 387
388 388 def test_annotate_at_given_revision
389 389 assert_equal 0, @repository.changesets.count
390 390 @repository.fetch_changesets
391 391 @project.reload
392 392 assert_equal NUM_REV, @repository.changesets.count
393 393 [2, '400bb8672109', '400', 400].each do |r1|
394 394 get :annotate, :id => PRJ_ID, :rev => r1,
395 395 :path => ['sources', 'watchers_controller.rb']
396 396 assert_response :success
397 397 assert_template 'annotate'
398 398 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
399 399 end
400 400 end
401 401
402 402 def test_annotate_latin_1_path
403 403 [21, '21', 'adf805632193'].each do |r1|
404 404 get :annotate, :id => PRJ_ID,
405 405 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
406 406 assert_response :success
407 407 assert_template 'annotate'
408 408 assert_tag :tag => 'th',
409 409 :content => '1',
410 410 :attributes => { :class => 'line-num' },
411 411 :sibling =>
412 412 {
413 413 :tag => 'td',
414 414 :attributes => { :class => 'revision' },
415 415 :child => { :tag => 'a', :content => '20:709858aafd1b' }
416 416 }
417 417 assert_tag :tag => 'th',
418 418 :content => '1',
419 419 :attributes => { :class => 'line-num' },
420 420 :sibling =>
421 421 {
422 422 :tag => 'td' ,
423 423 :content => 'jsmith' ,
424 424 :attributes => { :class => 'author' },
425 425 }
426 426 assert_tag :tag => 'th',
427 427 :content => '1',
428 428 :attributes => { :class => 'line-num' },
429 429 :sibling => { :tag => 'td',
430 430 :content => /Mercurial is a distributed version control system/ }
431 431
432 432 end
433 433 end
434 434
435 435 def test_annotate_latin_1_contents
436 436 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
437 437 [27, '7bbf4c738e71'].each do |r1|
438 438 get :annotate, :id => PRJ_ID,
439 439 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
440 440 assert_tag :tag => 'th',
441 441 :content => '1',
442 442 :attributes => { :class => 'line-num' },
443 443 :sibling => { :tag => 'td',
444 444 :content => /test-#{@char_1}.txt/ }
445 445 end
446 446 end
447 447 end
448 448
449 449 def test_empty_revision
450 450 assert_equal 0, @repository.changesets.count
451 451 @repository.fetch_changesets
452 452 @project.reload
453 453 assert_equal NUM_REV, @repository.changesets.count
454 454 ['', ' ', nil].each do |r|
455 455 get :revision, :id => PRJ_ID, :rev => r
456 456 assert_response 404
457 457 assert_error_tag :content => /was not found/
458 458 end
459 459 end
460 460
461 461 def test_destroy_valid_repository
462 462 @request.session[:user_id] = 1 # admin
463 463 assert_equal 0, @repository.changesets.count
464 464 @repository.fetch_changesets
465 465 @project.reload
466 466 assert_equal NUM_REV, @repository.changesets.count
467 467
468 468 get :destroy, :id => PRJ_ID
469 469 assert_response 302
470 470 @project.reload
471 471 assert_nil @project.repository
472 472 end
473 473
474 474 def test_destroy_invalid_repository
475 475 @request.session[:user_id] = 1 # admin
476 476 assert_equal 0, @repository.changesets.count
477 477 @repository.fetch_changesets
478 478 @project.reload
479 479 assert_equal NUM_REV, @repository.changesets.count
480 480
481 481 get :destroy, :id => PRJ_ID
482 482 assert_response 302
483 483 @project.reload
484 484 assert_nil @project.repository
485 485
486 486 @repository = Repository::Mercurial.create(
487 487 :project => Project.find(PRJ_ID),
488 488 :url => "/invalid",
489 489 :path_encoding => 'ISO-8859-1'
490 490 )
491 491 assert @repository
492 492 @repository.fetch_changesets
493 493 @project.reload
494 494 assert_equal 0, @repository.changesets.count
495 495
496 496 get :destroy, :id => PRJ_ID
497 497 assert_response 302
498 498 @project.reload
499 499 assert_nil @project.repository
500 500 end
501 501 else
502 502 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
503 503 def test_fake; assert true end
504 504 end
505 505 end
@@ -1,374 +1,376
1 1 require File.expand_path('../../../../../../test_helper', __FILE__)
2 2 begin
3 3 require 'mocha'
4 4
5 5 class MercurialAdapterTest < ActiveSupport::TestCase
6 6 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
7 7 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
8 8 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
9 9
10 10 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
11 11 CHAR_1_HEX = "\xc3\x9c"
12 12
13 13 if File.directory?(REPOSITORY_PATH)
14 14 def setup
15 15 adapter_class = Redmine::Scm::Adapters::MercurialAdapter
16 16 assert adapter_class
17 17 assert adapter_class.client_command
18 18 assert_equal true, adapter_class.client_available
19 19 assert_equal true, adapter_class.client_version_above?([0, 9, 5])
20 20
21 21 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
22 22 REPOSITORY_PATH,
23 23 nil,
24 24 nil,
25 25 nil,
26 26 'ISO-8859-1')
27 27 @diff_c_support = true
28 28 @char_1 = CHAR_1_HEX.dup
29 29 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
30 30 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
31 31 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
32 32 if @tag_char_1.respond_to?(:force_encoding)
33 33 @char_1.force_encoding('UTF-8')
34 34 @tag_char_1.force_encoding('UTF-8')
35 35 @branch_char_0.force_encoding('UTF-8')
36 36 @branch_char_1.force_encoding('UTF-8')
37 37 end
38 38 end
39 39
40 40 def test_hgversion
41 41 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
42 42 "Mercurial Distributed SCM (1.0)\n" => [1,0],
43 43 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
44 44 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
45 45 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
46 46 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
47 47 "(1.6)\n(1.7)\n(1.8)" => [1,6],
48 48 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
49 49
50 50 to_test.each do |s, v|
51 51 test_hgversion_for(s, v)
52 52 end
53 53 end
54 54
55 55 def test_template_path
56 56 to_test = {
57 57 [1,2] => "1.0",
58 58 [] => "1.0",
59 59 [1,2,1] => "1.0",
60 60 [1,7] => "1.0",
61 61 [1,7,1] => "1.0",
62 62 [2,0] => "1.0",
63 63 }
64 64 to_test.each do |v, template|
65 65 test_template_path_for(v, template)
66 66 end
67 67 end
68 68
69 69 def test_info
70 70 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
71 71 REPOSITORY_PATH + "//"].each do |repo|
72 72 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
73 73 repo_path = adp.info.root_url.gsub(/\\/, "/")
74 74 assert_equal REPOSITORY_PATH, repo_path
75 assert_equal '28', adp.info.lastrev.revision
76 assert_equal '3ae45e2d177d',adp.info.lastrev.scmid
75 assert_equal '31', adp.info.lastrev.revision
76 assert_equal '31eeee7395c8',adp.info.lastrev.scmid
77 77 end
78 78 end
79 79
80 80 def test_revisions
81 81 revisions = @adapter.revisions(nil, 2, 4)
82 82 assert_equal 3, revisions.size
83 83 assert_equal '2', revisions[0].revision
84 84 assert_equal '400bb8672109', revisions[0].scmid
85 85 assert_equal '4', revisions[2].revision
86 86 assert_equal 'def6d2f1254a', revisions[2].scmid
87 87
88 88 revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
89 89 assert_equal 2, revisions.size
90 90 assert_equal '2', revisions[0].revision
91 91 assert_equal '400bb8672109', revisions[0].scmid
92 92 end
93 93
94 94 def test_diff
95 95 if @adapter.class.client_version_above?([1, 2])
96 96 assert_nil @adapter.diff(nil, '100000')
97 97 end
98 98 assert_nil @adapter.diff(nil, '100000', '200000')
99 99 [2, '400bb8672109', '400', 400].each do |r1|
100 100 diff1 = @adapter.diff(nil, r1)
101 101 if @diff_c_support
102 102 assert_equal 28, diff1.size
103 103 buf = diff1[24].gsub(/\r\n|\r|\n/, "")
104 104 assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
105 105 else
106 106 assert_equal 0, diff1.size
107 107 end
108 108 [4, 'def6d2f1254a'].each do |r2|
109 109 diff2 = @adapter.diff(nil,r1,r2)
110 110 assert_equal 49, diff2.size
111 111 buf = diff2[41].gsub(/\r\n|\r|\n/, "")
112 112 assert_equal "+class WelcomeController < ApplicationController", buf
113 113 diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
114 114 assert_equal 20, diff3.size
115 115 buf = diff3[12].gsub(/\r\n|\r|\n/, "")
116 116 assert_equal "+ @watched.remove_watcher(user)", buf
117 117 end
118 118 end
119 119 end
120 120
121 121 def test_diff_made_by_revision
122 122 if @diff_c_support
123 123 [24, '24', '4cddb4e45f52'].each do |r1|
124 124 diff1 = @adapter.diff(nil, r1)
125 125 assert_equal 5, diff1.size
126 126 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
127 127 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
128 128 end
129 129 end
130 130 end
131 131
132 132 def test_cat
133 133 [2, '400bb8672109', '400', 400].each do |r|
134 134 buf = @adapter.cat('sources/welcome_controller.rb', r)
135 135 assert buf
136 136 lines = buf.split("\r\n")
137 137 assert_equal 25, lines.length
138 138 assert_equal 'class WelcomeController < ApplicationController', lines[17]
139 139 end
140 140 assert_nil @adapter.cat('sources/welcome_controller.rb')
141 141 end
142 142
143 143 def test_annotate
144 144 assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
145 145 [2, '400bb8672109', '400', 400].each do |r|
146 146 ann = @adapter.annotate('sources/welcome_controller.rb', r)
147 147 assert ann
148 148 assert_equal '1', ann.revisions[17].revision
149 149 assert_equal '9d5b5b004199', ann.revisions[17].identifier
150 150 assert_equal 'jsmith', ann.revisions[0].author
151 151 assert_equal 25, ann.lines.length
152 152 assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
153 153 end
154 154 end
155 155
156 156 def test_entries
157 157 assert_nil @adapter.entries(nil, '100000')
158 158
159 159 assert_equal 1, @adapter.entries("sources", 3).size
160 160 assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
161 161
162 162 [2, '400bb8672109', '400', 400].each do |r|
163 163 entries1 = @adapter.entries(nil, r)
164 164 assert entries1
165 165 assert_equal 3, entries1.size
166 166 assert_equal 'sources', entries1[1].name
167 167 assert_equal 'sources', entries1[1].path
168 168 assert_equal 'dir', entries1[1].kind
169 169 readme = entries1[2]
170 170 assert_equal 'README', readme.name
171 171 assert_equal 'README', readme.path
172 172 assert_equal 'file', readme.kind
173 173 assert_equal 27, readme.size
174 174 assert_equal '1', readme.lastrev.revision
175 175 assert_equal '9d5b5b004199', readme.lastrev.identifier
176 176 # 2007-12-14 10:24:01 +0100
177 177 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
178 178
179 179 entries2 = @adapter.entries('sources', r)
180 180 assert entries2
181 181 assert_equal 2, entries2.size
182 182 assert_equal 'watchers_controller.rb', entries2[0].name
183 183 assert_equal 'sources/watchers_controller.rb', entries2[0].path
184 184 assert_equal 'file', entries2[0].kind
185 185 assert_equal 'welcome_controller.rb', entries2[1].name
186 186 assert_equal 'sources/welcome_controller.rb', entries2[1].path
187 187 assert_equal 'file', entries2[1].kind
188 188 end
189 189 end
190 190
191 191 def test_entries_tag
192 192 entries1 = @adapter.entries(nil, 'tag_test.00')
193 193 assert entries1
194 194 assert_equal 3, entries1.size
195 195 assert_equal 'sources', entries1[1].name
196 196 assert_equal 'sources', entries1[1].path
197 197 assert_equal 'dir', entries1[1].kind
198 198 readme = entries1[2]
199 199 assert_equal 'README', readme.name
200 200 assert_equal 'README', readme.path
201 201 assert_equal 'file', readme.kind
202 202 assert_equal 21, readme.size
203 203 assert_equal '0', readme.lastrev.revision
204 204 assert_equal '0885933ad4f6', readme.lastrev.identifier
205 205 # 2007-12-14 10:22:52 +0100
206 206 assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
207 207 end
208 208
209 209 def test_entries_branch
210 210 entries1 = @adapter.entries(nil, 'test-branch-00')
211 211 assert entries1
212 212 assert_equal 5, entries1.size
213 213 assert_equal 'sql_escape', entries1[2].name
214 214 assert_equal 'sql_escape', entries1[2].path
215 215 assert_equal 'dir', entries1[2].kind
216 216 readme = entries1[4]
217 217 assert_equal 'README', readme.name
218 218 assert_equal 'README', readme.path
219 219 assert_equal 'file', readme.kind
220 220 assert_equal 365, readme.size
221 221 assert_equal '8', readme.lastrev.revision
222 222 assert_equal 'c51f5bb613cd', readme.lastrev.identifier
223 223 # 2001-02-01 00:00:00 -0900
224 224 assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
225 225 end
226 226
227 227 def test_locate_on_outdated_repository
228 228 assert_equal 1, @adapter.entries("images", 0).size
229 229 assert_equal 2, @adapter.entries("images").size
230 230 assert_equal 2, @adapter.entries("images", 2).size
231 231 end
232 232
233 233 def test_access_by_nodeid
234 234 path = 'sources/welcome_controller.rb'
235 235 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
236 236 end
237 237
238 238 def test_access_by_fuzzy_nodeid
239 239 path = 'sources/welcome_controller.rb'
240 240 # falls back to nodeid
241 241 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
242 242 end
243 243
244 244 def test_tags
245 245 assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
246 246 end
247 247
248 248 def test_tagmap
249 249 tm = {
250 250 @tag_char_1 => 'adf805632193',
251 251 'tag_test.00' => '6987191f453a',
252 252 'tag-init-revision' => '0885933ad4f6',
253 253 }
254 254 assert_equal tm, @adapter.tagmap
255 255 end
256 256
257 257 def test_branches
258 258 assert_equal [
259 259 'default',
260 'test-branch-01',
260 261 @branch_char_1,
261 262 'branch (1)[2]&,%.-3_4',
262 263 @branch_char_0,
263 264 'test_branch.latin-1',
264 265 'test-branch-00',
265 266 ], @adapter.branches
266 267 end
267 268
268 269 def test_branchmap
269 270 bm = {
270 'default' => '3ae45e2d177d',
271 'default' => '31eeee7395c8',
271 272 'test_branch.latin-1' => 'c2ffe7da686a',
272 273 'branch (1)[2]&,%.-3_4' => 'afc61e85bde7',
273 274 'test-branch-00' => '3a330eb32958',
275 "test-branch-01" => 'ad4dc4f80284',
274 276 @branch_char_0 => 'c8d3e4887474',
275 277 @branch_char_1 => '7bbf4c738e71',
276 278 }
277 279 assert_equal bm, @adapter.branchmap
278 280 end
279 281
280 282 def test_path_space
281 283 p = 'README (1)[2]&,%.-3_4'
282 284 [15, '933ca60293d7'].each do |r1|
283 285 assert @adapter.diff(p, r1)
284 286 assert @adapter.cat(p, r1)
285 287 assert_equal 1, @adapter.annotate(p, r1).lines.length
286 288 [25, 'afc61e85bde7'].each do |r2|
287 289 assert @adapter.diff(p, r1, r2)
288 290 end
289 291 end
290 292 end
291 293
292 294 def test_tag_non_ascii
293 295 p = "latin-1-dir/test-#{@char_1}-1.txt"
294 296 assert @adapter.cat(p, @tag_char_1)
295 297 assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
296 298 end
297 299
298 300 def test_branch_non_ascii
299 301 p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
300 302 assert @adapter.cat(p, @branch_char_1)
301 303 assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
302 304 end
303 305
304 306 def test_nodes_in_branch
305 307 [
306 308 'default',
307 309 @branch_char_1,
308 310 'branch (1)[2]&,%.-3_4',
309 311 @branch_char_0,
310 312 'test_branch.latin-1',
311 313 'test-branch-00',
312 314 ].each do |bra|
313 315 nib0 = @adapter.nodes_in_branch(bra)
314 316 assert nib0
315 317 nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
316 318 assert_equal 1, nib1.size
317 319 case bra
318 320 when 'branch (1)[2]&,%.-3_4'
319 321 if @adapter.class.client_version_above?([1, 6])
320 322 assert_equal 3, nib0.size
321 323 assert_equal nib0[0], 'afc61e85bde7'
322 324 nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
323 325 assert_equal 2, nib2.size
324 326 assert_equal nib2[1], '933ca60293d7'
325 327 end
326 328 when @branch_char_1
327 329 if @adapter.class.client_version_above?([1, 6])
328 330 assert_equal 2, nib0.size
329 331 assert_equal nib0[1], '08ff3227303e'
330 332 nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
331 333 assert_equal 1, nib2.size
332 334 assert_equal nib2[0], '7bbf4c738e71'
333 335 end
334 336 end
335 337 end
336 338 end
337 339
338 340 def test_path_encoding_default_utf8
339 341 adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
340 342 REPOSITORY_PATH
341 343 )
342 344 assert_equal "UTF-8", adpt1.path_encoding
343 345 adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
344 346 REPOSITORY_PATH,
345 347 nil,
346 348 nil,
347 349 nil,
348 350 ""
349 351 )
350 352 assert_equal "UTF-8", adpt2.path_encoding
351 353 end
352 354
353 355 private
354 356
355 357 def test_hgversion_for(hgversion, version)
356 358 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
357 359 assert_equal version, @adapter.class.hgversion
358 360 end
359 361
360 362 def test_template_path_for(version, template)
361 363 assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
362 364 @adapter.class.template_path_for(version)
363 365 assert File.exist?(@adapter.class.template_path_for(version))
364 366 end
365 367 else
366 368 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
367 369 def test_fake; assert true end
368 370 end
369 371 end
370 372 rescue LoadError
371 373 class MercurialMochaFake < ActiveSupport::TestCase
372 374 def test_fake; assert(false, "Requires mocha to run those tests") end
373 375 end
374 376 end
@@ -1,324 +1,324
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 20 class RepositoryMercurialTest < ActiveSupport::TestCase
21 21 fixtures :projects
22 22
23 23 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
24 NUM_REV = 29
24 NUM_REV = 32
25 25 CHAR_1_HEX = "\xc3\x9c"
26 26
27 27 if File.directory?(REPOSITORY_PATH)
28 28 def setup
29 29 klass = Repository::Mercurial
30 30 assert_equal "Mercurial", klass.scm_name
31 31 assert klass.scm_adapter_class
32 32 assert_not_equal "", klass.scm_command
33 33 assert_equal true, klass.scm_available
34 34
35 35 @project = Project.find(3)
36 36 @repository = Repository::Mercurial.create(
37 37 :project => @project,
38 38 :url => REPOSITORY_PATH,
39 39 :path_encoding => 'ISO-8859-1'
40 40 )
41 41 assert @repository
42 42 @char_1 = CHAR_1_HEX.dup
43 43 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
44 44 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
45 45 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
46 46 if @char_1.respond_to?(:force_encoding)
47 47 @char_1.force_encoding('UTF-8')
48 48 @tag_char_1.force_encoding('UTF-8')
49 49 @branch_char_0.force_encoding('UTF-8')
50 50 @branch_char_1.force_encoding('UTF-8')
51 51 end
52 52 end
53 53
54 54 def test_fetch_changesets_from_scratch
55 55 assert_equal 0, @repository.changesets.count
56 56 @repository.fetch_changesets
57 57 @project.reload
58 58 assert_equal NUM_REV, @repository.changesets.count
59 assert_equal 37, @repository.changes.count
59 assert_equal 46, @repository.changes.count
60 60 assert_equal "Initial import.\nThe repository contains 3 files.",
61 61 @repository.changesets.find_by_revision('0').comments
62 62 end
63 63
64 64 def test_fetch_changesets_incremental
65 65 assert_equal 0, @repository.changesets.count
66 66 @repository.fetch_changesets
67 67 @project.reload
68 68 assert_equal NUM_REV, @repository.changesets.count
69 69 # Remove changesets with revision > 2
70 70 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
71 71 @project.reload
72 72 assert_equal 3, @repository.changesets.count
73 73
74 74 @repository.fetch_changesets
75 75 @project.reload
76 76 assert_equal NUM_REV, @repository.changesets.count
77 77 end
78 78
79 79 def test_isodatesec
80 80 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
81 81 if @repository.scm.class.client_version_above?([1, 0])
82 82 assert_equal 0, @repository.changesets.count
83 83 @repository.fetch_changesets
84 84 @project.reload
85 85 assert_equal NUM_REV, @repository.changesets.count
86 86 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
87 87 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
88 88 end
89 89 end
90 90
91 91 def test_changeset_order_by_revision
92 92 assert_equal 0, @repository.changesets.count
93 93 @repository.fetch_changesets
94 94 @project.reload
95 95 assert_equal NUM_REV, @repository.changesets.count
96 96
97 97 c0 = @repository.latest_changeset
98 98 c1 = @repository.changesets.find_by_revision('0')
99 99 # sorted by revision (id), not by date
100 100 assert c0.revision.to_i > c1.revision.to_i
101 101 assert c0.committed_on < c1.committed_on
102 102 end
103 103
104 104 def test_latest_changesets
105 105 assert_equal 0, @repository.changesets.count
106 106 @repository.fetch_changesets
107 107 @project.reload
108 108 assert_equal NUM_REV, @repository.changesets.count
109 109
110 110 # with_limit
111 111 changesets = @repository.latest_changesets('', nil, 2)
112 assert_equal %w|28 27|, changesets.collect(&:revision)
112 assert_equal %w|31 30|, changesets.collect(&:revision)
113 113
114 114 # with_filepath
115 115 changesets = @repository.latest_changesets(
116 116 '/sql_escape/percent%dir/percent%file1.txt', nil)
117 assert_equal %w|11 10 9|, changesets.collect(&:revision)
117 assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
118 118
119 119 changesets = @repository.latest_changesets(
120 120 '/sql_escape/underscore_dir/understrike_file.txt', nil)
121 assert_equal %w|12 9|, changesets.collect(&:revision)
121 assert_equal %w|30 12 9|, changesets.collect(&:revision)
122 122
123 123 changesets = @repository.latest_changesets('README', nil)
124 assert_equal %w|28 17 8 6 1 0|, changesets.collect(&:revision)
124 assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
125 125
126 126 changesets = @repository.latest_changesets('README','8')
127 127 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
128 128
129 129 changesets = @repository.latest_changesets('README','8', 2)
130 130 assert_equal %w|8 6|, changesets.collect(&:revision)
131 131
132 132 # with_dirpath
133 133 changesets = @repository.latest_changesets('images', nil)
134 134 assert_equal %w|1 0|, changesets.collect(&:revision)
135 135
136 136 path = 'sql_escape/percent%dir'
137 137 changesets = @repository.latest_changesets(path, nil)
138 assert_equal %w|13 11 10 9|, changesets.collect(&:revision)
138 assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
139 139
140 140 changesets = @repository.latest_changesets(path, '11')
141 141 assert_equal %w|11 10 9|, changesets.collect(&:revision)
142 142
143 143 changesets = @repository.latest_changesets(path, '11', 2)
144 144 assert_equal %w|11 10|, changesets.collect(&:revision)
145 145
146 146 path = 'sql_escape/underscore_dir'
147 147 changesets = @repository.latest_changesets(path, nil)
148 assert_equal %w|13 12 9|, changesets.collect(&:revision)
148 assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
149 149
150 150 changesets = @repository.latest_changesets(path, '12')
151 151 assert_equal %w|12 9|, changesets.collect(&:revision)
152 152
153 153 changesets = @repository.latest_changesets(path, '12', 1)
154 154 assert_equal %w|12|, changesets.collect(&:revision)
155 155
156 156 # tag
157 157 changesets = @repository.latest_changesets('', 'tag_test.00')
158 158 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
159 159
160 160 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
161 161 assert_equal %w|5 4|, changesets.collect(&:revision)
162 162
163 163 changesets = @repository.latest_changesets('sources', 'tag_test.00')
164 164 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
165 165
166 166 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
167 167 assert_equal %w|4 3|, changesets.collect(&:revision)
168 168
169 169 # named branch
170 170 if @repository.scm.class.client_version_above?([1, 6])
171 171 changesets = @repository.latest_changesets('', @branch_char_1)
172 172 assert_equal %w|27 26|, changesets.collect(&:revision)
173 173 end
174 174
175 175 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
176 176 assert_equal %w|27|, changesets.collect(&:revision)
177 177 end
178 178
179 179 def test_copied_files
180 180 assert_equal 0, @repository.changesets.count
181 181 @repository.fetch_changesets
182 182 @project.reload
183 183 assert_equal NUM_REV, @repository.changesets.count
184 184
185 185 cs1 = @repository.changesets.find_by_revision('13')
186 186 assert_not_nil cs1
187 187 c1 = cs1.changes.sort_by(&:path)
188 188 assert_equal 2, c1.size
189 189
190 190 assert_equal 'A', c1[0].action
191 191 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
192 192 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
193 193 assert_equal '3a330eb32958', c1[0].from_revision
194 194
195 195 assert_equal 'A', c1[1].action
196 196 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
197 197 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
198 198
199 199 cs2 = @repository.changesets.find_by_revision('15')
200 200 c2 = cs2.changes
201 201 assert_equal 1, c2.size
202 202
203 203 assert_equal 'A', c2[0].action
204 204 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
205 205 assert_equal '/README', c2[0].from_path
206 206 assert_equal '933ca60293d7', c2[0].from_revision
207 207
208 208 cs3 = @repository.changesets.find_by_revision('19')
209 209 c3 = cs3.changes
210 210 assert_equal 1, c3.size
211 211 assert_equal 'A', c3[0].action
212 212 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
213 213 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
214 214 assert_equal '5d9891a1b425', c3[0].from_revision
215 215 end
216 216
217 217 def test_find_changeset_by_name
218 218 assert_equal 0, @repository.changesets.count
219 219 @repository.fetch_changesets
220 220 @project.reload
221 221 assert_equal NUM_REV, @repository.changesets.count
222 222 %w|2 400bb8672109 400|.each do |r|
223 223 assert_equal '2', @repository.find_changeset_by_name(r).revision
224 224 end
225 225 end
226 226
227 227 def test_find_changeset_by_invalid_name
228 228 assert_equal 0, @repository.changesets.count
229 229 @repository.fetch_changesets
230 230 @project.reload
231 231 assert_equal NUM_REV, @repository.changesets.count
232 232 assert_nil @repository.find_changeset_by_name('100000')
233 233 end
234 234
235 235 def test_identifier
236 236 assert_equal 0, @repository.changesets.count
237 237 @repository.fetch_changesets
238 238 @project.reload
239 239 assert_equal NUM_REV, @repository.changesets.count
240 240 c = @repository.changesets.find_by_revision('2')
241 241 assert_equal c.scmid, c.identifier
242 242 end
243 243
244 244 def test_format_identifier
245 245 assert_equal 0, @repository.changesets.count
246 246 @repository.fetch_changesets
247 247 @project.reload
248 248 assert_equal NUM_REV, @repository.changesets.count
249 249 c = @repository.changesets.find_by_revision('2')
250 250 assert_equal '2:400bb8672109', c.format_identifier
251 251 end
252 252
253 253 def test_find_changeset_by_empty_name
254 254 assert_equal 0, @repository.changesets.count
255 255 @repository.fetch_changesets
256 256 @project.reload
257 257 assert_equal NUM_REV, @repository.changesets.count
258 258 ['', ' ', nil].each do |r|
259 259 assert_nil @repository.find_changeset_by_name(r)
260 260 end
261 261 end
262 262
263 263 def test_activities
264 264 c = Changeset.new(:repository => @repository,
265 265 :committed_on => Time.now,
266 266 :revision => '123',
267 267 :scmid => 'abc400bb8672',
268 268 :comments => 'test')
269 269 assert c.event_title.include?('123:abc400bb8672:')
270 270 assert_equal 'abc400bb8672', c.event_url[:rev]
271 271 end
272 272
273 273 def test_previous
274 274 assert_equal 0, @repository.changesets.count
275 275 @repository.fetch_changesets
276 276 @project.reload
277 277 assert_equal NUM_REV, @repository.changesets.count
278 278 %w|28 3ae45e2d177d 3ae45|.each do |r1|
279 279 changeset = @repository.find_changeset_by_name(r1)
280 280 %w|27 7bbf4c738e71 7bbf|.each do |r2|
281 281 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
282 282 end
283 283 end
284 284 end
285 285
286 286 def test_previous_nil
287 287 assert_equal 0, @repository.changesets.count
288 288 @repository.fetch_changesets
289 289 @project.reload
290 290 assert_equal NUM_REV, @repository.changesets.count
291 291 %w|0 0885933ad4f6 0885|.each do |r1|
292 292 changeset = @repository.find_changeset_by_name(r1)
293 293 assert_nil changeset.previous
294 294 end
295 295 end
296 296
297 297 def test_next
298 298 assert_equal 0, @repository.changesets.count
299 299 @repository.fetch_changesets
300 300 @project.reload
301 301 assert_equal NUM_REV, @repository.changesets.count
302 302 %w|27 7bbf4c738e71 7bbf|.each do |r2|
303 303 changeset = @repository.find_changeset_by_name(r2)
304 304 %w|28 3ae45e2d177d 3ae45|.each do |r1|
305 305 assert_equal @repository.find_changeset_by_name(r1), changeset.next
306 306 end
307 307 end
308 308 end
309 309
310 310 def test_next_nil
311 311 assert_equal 0, @repository.changesets.count
312 312 @repository.fetch_changesets
313 313 @project.reload
314 314 assert_equal NUM_REV, @repository.changesets.count
315 %w|28 3ae45e2d177d 3ae45|.each do |r1|
315 %w|31 31eeee7395c8 31eee|.each do |r1|
316 316 changeset = @repository.find_changeset_by_name(r1)
317 317 assert_nil changeset.next
318 318 end
319 319 end
320 320 else
321 321 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
322 322 def test_fake; assert true end
323 323 end
324 324 end
General Comments 0
You need to be logged in to leave comments. Login now