##// END OF EJS Templates
scm: mercurial: split latest_changesets tag test to sub method (#14361)...
Toshi MARUYAMA -
r12491:b07c983740b8
parent child
Show More
@@ -1,486 +1,490
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2014 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 include Redmine::I18n
24 24
25 25 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
26 26 NUM_REV = 32
27 27 CHAR_1_HEX = "\xc3\x9c"
28 28
29 29 def setup
30 30 @project = Project.find(3)
31 31 @repository = Repository::Mercurial.create(
32 32 :project => @project,
33 33 :url => REPOSITORY_PATH,
34 34 :path_encoding => 'ISO-8859-1'
35 35 )
36 36 assert @repository
37 37 @char_1 = CHAR_1_HEX.dup
38 38 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
39 39 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
40 40 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
41 41 if @char_1.respond_to?(:force_encoding)
42 42 @char_1.force_encoding('UTF-8')
43 43 @tag_char_1.force_encoding('UTF-8')
44 44 @branch_char_0.force_encoding('UTF-8')
45 45 @branch_char_1.force_encoding('UTF-8')
46 46 end
47 47 end
48 48
49 49 def test_blank_path_to_repository_error_message
50 50 set_language_if_valid 'en'
51 51 repo = Repository::Mercurial.new(
52 52 :project => @project,
53 53 :identifier => 'test'
54 54 )
55 55 assert !repo.save
56 56 assert_include "Path to repository can't be blank",
57 57 repo.errors.full_messages
58 58 end
59 59
60 60 def test_blank_path_to_repository_error_message_fr
61 61 set_language_if_valid 'fr'
62 62 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)"
63 63 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
64 64 repo = Repository::Mercurial.new(
65 65 :project => @project,
66 66 :url => "",
67 67 :identifier => 'test',
68 68 :path_encoding => ''
69 69 )
70 70 assert !repo.save
71 71 assert_include str, repo.errors.full_messages
72 72 end
73 73
74 74 if File.directory?(REPOSITORY_PATH)
75 75 def test_scm_available
76 76 klass = Repository::Mercurial
77 77 assert_equal "Mercurial", klass.scm_name
78 78 assert klass.scm_adapter_class
79 79 assert_not_equal "", klass.scm_command
80 80 assert_equal true, klass.scm_available
81 81 end
82 82
83 83 def test_entries_on_tip
84 84 entries = @repository.entries
85 85 assert_kind_of Redmine::Scm::Adapters::Entries, entries
86 86 end
87 87
88 88 def test_entries_short_id
89 89 assert_equal 0, @repository.changesets.count
90 90 @repository.fetch_changesets
91 91 @project.reload
92 92 assert_equal NUM_REV, @repository.changesets.count
93 93 [2, '400bb8672109', '400', 400].each do |r|
94 94 entries1 = @repository.entries(nil, r)
95 95 assert entries1
96 96 assert_kind_of Redmine::Scm::Adapters::Entries, entries1
97 97 assert_equal 3, entries1.size
98 98 readme = entries1[2]
99 99 assert_equal '1', readme.lastrev.revision
100 100 assert_equal '9d5b5b004199', readme.lastrev.identifier
101 101 assert_equal '1', readme.changeset.revision
102 102 assert_equal '9d5b5b004199', readme.changeset.scmid
103 103 end
104 104 end
105 105
106 106 def test_entry_on_tip
107 107 entry = @repository.entry
108 108 assert_kind_of Redmine::Scm::Adapters::Entry, entry
109 109 assert_equal "", entry.path
110 110 assert_equal 'dir', entry.kind
111 111 end
112 112
113 113 def test_entry_short_id
114 114 ["README", "/README"].each do |path|
115 115 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
116 116 entry = @repository.entry(path, rev)
117 117 assert_kind_of Redmine::Scm::Adapters::Entry, entry
118 118 assert_equal "README", entry.path
119 119 assert_equal "file", entry.kind
120 120 assert_equal '0', entry.lastrev.revision
121 121 assert_equal '0885933ad4f6', entry.lastrev.identifier
122 122 end
123 123 end
124 124 ["sources", "/sources", "/sources/"].each do |path|
125 125 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
126 126 entry = @repository.entry(path, rev)
127 127 assert_kind_of Redmine::Scm::Adapters::Entry, entry
128 128 assert_equal "sources", entry.path
129 129 assert_equal "dir", entry.kind
130 130 end
131 131 end
132 132 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
133 133 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
134 134 entry = @repository.entry(path, rev)
135 135 assert_kind_of Redmine::Scm::Adapters::Entry, entry
136 136 assert_equal "sources/watchers_controller.rb", entry.path
137 137 assert_equal "file", entry.kind
138 138 assert_equal '0', entry.lastrev.revision
139 139 assert_equal '0885933ad4f6', entry.lastrev.identifier
140 140 end
141 141 end
142 142 end
143 143
144 144 def test_fetch_changesets_from_scratch
145 145 assert_equal 0, @repository.changesets.count
146 146 @repository.fetch_changesets
147 147 @project.reload
148 148 assert_equal NUM_REV, @repository.changesets.count
149 149 assert_equal 46, @repository.filechanges.count
150 150 rev0 = @repository.changesets.find_by_revision('0')
151 151 assert_equal "Initial import.\nThe repository contains 3 files.",
152 152 rev0.comments
153 153 assert_equal "0885933ad4f6", rev0.scmid
154 154 end
155 155
156 156 def test_fetch_changesets_incremental
157 157 assert_equal 0, @repository.changesets.count
158 158 @repository.fetch_changesets
159 159 @project.reload
160 160 assert_equal NUM_REV, @repository.changesets.count
161 161 # Remove changesets with revision > 2
162 162 @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
163 163 @project.reload
164 164 @repository.reload
165 165 assert_equal 3, @repository.changesets.count
166 166
167 167 @repository.fetch_changesets
168 168 @project.reload
169 169 assert_equal NUM_REV, @repository.changesets.count
170 170 end
171 171
172 172 def test_isodatesec
173 173 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
174 174 if @repository.scm.class.client_version_above?([1, 0])
175 175 assert_equal 0, @repository.changesets.count
176 176 @repository.fetch_changesets
177 177 @project.reload
178 178 assert_equal NUM_REV, @repository.changesets.count
179 179 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
180 180 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
181 181 end
182 182 end
183 183
184 184 def test_changeset_order_by_revision
185 185 assert_equal 0, @repository.changesets.count
186 186 @repository.fetch_changesets
187 187 @project.reload
188 188 assert_equal NUM_REV, @repository.changesets.count
189 189
190 190 c0 = @repository.latest_changeset
191 191 c1 = @repository.changesets.find_by_revision('0')
192 192 # sorted by revision (id), not by date
193 193 assert c0.revision.to_i > c1.revision.to_i
194 194 assert c0.committed_on < c1.committed_on
195 195 end
196 196
197 197 def test_latest_changesets
198 198 assert_equal 0, @repository.changesets.count
199 199 @repository.fetch_changesets
200 200 @project.reload
201 201 assert_equal NUM_REV, @repository.changesets.count
202 202
203 203 # with_limit
204 204 changesets = @repository.latest_changesets('', nil, 2)
205 205 assert_equal %w|31 30|, changesets.collect(&:revision)
206 206
207 207 # with_filepath
208 208 changesets = @repository.latest_changesets(
209 209 '/sql_escape/percent%dir/percent%file1.txt', nil)
210 210 assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
211 211
212 212 changesets = @repository.latest_changesets(
213 213 '/sql_escape/underscore_dir/understrike_file.txt', nil)
214 214 assert_equal %w|30 12 9|, changesets.collect(&:revision)
215 215
216 216 changesets = @repository.latest_changesets('README', nil)
217 217 assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
218 218
219 219 changesets = @repository.latest_changesets('README','8')
220 220 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
221 221
222 222 changesets = @repository.latest_changesets('README','8', 2)
223 223 assert_equal %w|8 6|, changesets.collect(&:revision)
224 224
225 225 # with_dirpath
226 226 changesets = @repository.latest_changesets('images', nil)
227 227 assert_equal %w|1 0|, changesets.collect(&:revision)
228 228
229 229 path = 'sql_escape/percent%dir'
230 230 changesets = @repository.latest_changesets(path, nil)
231 231 assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
232 232
233 233 changesets = @repository.latest_changesets(path, '11')
234 234 assert_equal %w|11 10 9|, changesets.collect(&:revision)
235 235
236 236 changesets = @repository.latest_changesets(path, '11', 2)
237 237 assert_equal %w|11 10|, changesets.collect(&:revision)
238 238
239 239 path = 'sql_escape/underscore_dir'
240 240 changesets = @repository.latest_changesets(path, nil)
241 241 assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
242 242
243 243 changesets = @repository.latest_changesets(path, '12')
244 244 assert_equal %w|12 9|, changesets.collect(&:revision)
245 245
246 246 changesets = @repository.latest_changesets(path, '12', 1)
247 247 assert_equal %w|12|, changesets.collect(&:revision)
248 248 end
249 249
250 def assert_latest_changesets_tag
251 changesets = @repository.latest_changesets('', 'tag_test.00')
252 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
253 end
254 private :assert_latest_changesets_tag
255
250 256 def test_latest_changesets_tag
251 257 assert_equal 0, @repository.changesets.count
252 258 @repository.fetch_changesets
253 259 @project.reload
254 260 assert_equal NUM_REV, @repository.changesets.count
255
256 changesets = @repository.latest_changesets('', 'tag_test.00')
257 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
261 assert_latest_changesets_tag
258 262 end
259 263
260 264 def test_latest_changesets_tag_with_path
261 265 assert_equal 0, @repository.changesets.count
262 266 @repository.fetch_changesets
263 267 @project.reload
264 268 assert_equal NUM_REV, @repository.changesets.count
265 269
266 270 changesets = @repository.latest_changesets('sources', 'tag_test.00')
267 271 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
268 272 end
269 273
270 274 def test_latest_changesets_tag_with_limit
271 275 assert_equal 0, @repository.changesets.count
272 276 @repository.fetch_changesets
273 277 @project.reload
274 278 assert_equal NUM_REV, @repository.changesets.count
275 279
276 280 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
277 281 assert_equal %w|5 4|, changesets.collect(&:revision)
278 282
279 283 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
280 284 assert_equal %w|4 3|, changesets.collect(&:revision)
281 285 end
282 286
283 287 def test_latest_changesets_branch
284 288 assert_equal 0, @repository.changesets.count
285 289 @repository.fetch_changesets
286 290 @project.reload
287 291 assert_equal NUM_REV, @repository.changesets.count
288 292
289 293 if @repository.scm.class.client_version_above?([1, 6])
290 294 changesets = @repository.latest_changesets('', @branch_char_1)
291 295 assert_equal %w|27 26|, changesets.collect(&:revision)
292 296 end
293 297
294 298 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
295 299 assert_equal %w|27|, changesets.collect(&:revision)
296 300 end
297 301
298 302 def assert_latest_changesets_default_branch
299 303 changesets = @repository.latest_changesets('', 'default')
300 304 assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
301 305 end
302 306 private :assert_latest_changesets_default_branch
303 307
304 308 def test_latest_changesets_default_branch
305 309 assert_equal 0, @repository.changesets.count
306 310 @repository.fetch_changesets
307 311 @project.reload
308 312 assert_equal NUM_REV, @repository.changesets.count
309 313 assert_latest_changesets_default_branch
310 314 end
311 315
312 316 def test_copied_files
313 317 assert_equal 0, @repository.changesets.count
314 318 @repository.fetch_changesets
315 319 @project.reload
316 320 assert_equal NUM_REV, @repository.changesets.count
317 321
318 322 cs1 = @repository.changesets.find_by_revision('13')
319 323 assert_not_nil cs1
320 324 c1 = cs1.filechanges.sort_by(&:path)
321 325 assert_equal 2, c1.size
322 326
323 327 assert_equal 'A', c1[0].action
324 328 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
325 329 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
326 330 assert_equal '3a330eb32958', c1[0].from_revision
327 331
328 332 assert_equal 'A', c1[1].action
329 333 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
330 334 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
331 335
332 336 cs2 = @repository.changesets.find_by_revision('15')
333 337 c2 = cs2.filechanges
334 338 assert_equal 1, c2.size
335 339
336 340 assert_equal 'A', c2[0].action
337 341 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
338 342 assert_equal '/README', c2[0].from_path
339 343 assert_equal '933ca60293d7', c2[0].from_revision
340 344
341 345 cs3 = @repository.changesets.find_by_revision('19')
342 346 c3 = cs3.filechanges
343 347 assert_equal 1, c3.size
344 348 assert_equal 'A', c3[0].action
345 349 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
346 350 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
347 351 assert_equal '5d9891a1b425', c3[0].from_revision
348 352 end
349 353
350 354 def test_find_changeset_by_name
351 355 assert_equal 0, @repository.changesets.count
352 356 @repository.fetch_changesets
353 357 @project.reload
354 358 assert_equal NUM_REV, @repository.changesets.count
355 359 %w|2 400bb8672109 400|.each do |r|
356 360 assert_equal '2', @repository.find_changeset_by_name(r).revision
357 361 end
358 362 end
359 363
360 364 def test_find_changeset_by_invalid_name
361 365 assert_equal 0, @repository.changesets.count
362 366 @repository.fetch_changesets
363 367 @project.reload
364 368 assert_equal NUM_REV, @repository.changesets.count
365 369 assert_nil @repository.find_changeset_by_name('100000')
366 370 end
367 371
368 372 def test_identifier
369 373 assert_equal 0, @repository.changesets.count
370 374 @repository.fetch_changesets
371 375 @project.reload
372 376 assert_equal NUM_REV, @repository.changesets.count
373 377 c = @repository.changesets.find_by_revision('2')
374 378 assert_equal c.scmid, c.identifier
375 379 end
376 380
377 381 def test_format_identifier
378 382 assert_equal 0, @repository.changesets.count
379 383 @repository.fetch_changesets
380 384 @project.reload
381 385 assert_equal NUM_REV, @repository.changesets.count
382 386 c = @repository.changesets.find_by_revision('2')
383 387 assert_equal '2:400bb8672109', c.format_identifier
384 388 end
385 389
386 390 def test_format_identifier_long_id
387 391 assert_equal 0, @repository.changesets.count
388 392 Changeset.create!(:repository => @repository,
389 393 :committed_on => Time.now,
390 394 :revision => '0',
391 395 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
392 396 :comments => 'test')
393 397 c = @repository.changesets.find_by_revision('0')
394 398 assert_equal '0:0885933ad4f6', c.format_identifier
395 399 end
396 400
397 401 def test_find_changeset_by_empty_name
398 402 assert_equal 0, @repository.changesets.count
399 403 @repository.fetch_changesets
400 404 @project.reload
401 405 assert_equal NUM_REV, @repository.changesets.count
402 406 ['', ' ', nil].each do |r|
403 407 assert_nil @repository.find_changeset_by_name(r)
404 408 end
405 409 end
406 410
407 411 def test_parents
408 412 assert_equal 0, @repository.changesets.count
409 413 @repository.fetch_changesets
410 414 @project.reload
411 415 assert_equal NUM_REV, @repository.changesets.count
412 416 r1 = @repository.changesets.find_by_revision('0')
413 417 assert_equal [], r1.parents
414 418 r2 = @repository.changesets.find_by_revision('1')
415 419 assert_equal 1, r2.parents.length
416 420 assert_equal "0885933ad4f6",
417 421 r2.parents[0].identifier
418 422 r3 = @repository.changesets.find_by_revision('30')
419 423 assert_equal 2, r3.parents.length
420 424 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
421 425 assert_equal "3a330eb32958", r4[0]
422 426 assert_equal "a94b0528f24f", r4[1]
423 427 end
424 428
425 429 def test_activities
426 430 c = Changeset.new(:repository => @repository,
427 431 :committed_on => Time.now,
428 432 :revision => '123',
429 433 :scmid => 'abc400bb8672',
430 434 :comments => 'test')
431 435 assert c.event_title.include?('123:abc400bb8672:')
432 436 assert_equal 'abc400bb8672', c.event_url[:rev]
433 437 end
434 438
435 439 def test_previous
436 440 assert_equal 0, @repository.changesets.count
437 441 @repository.fetch_changesets
438 442 @project.reload
439 443 assert_equal NUM_REV, @repository.changesets.count
440 444 %w|28 3ae45e2d177d 3ae45|.each do |r1|
441 445 changeset = @repository.find_changeset_by_name(r1)
442 446 %w|27 7bbf4c738e71 7bbf|.each do |r2|
443 447 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
444 448 end
445 449 end
446 450 end
447 451
448 452 def test_previous_nil
449 453 assert_equal 0, @repository.changesets.count
450 454 @repository.fetch_changesets
451 455 @project.reload
452 456 assert_equal NUM_REV, @repository.changesets.count
453 457 %w|0 0885933ad4f6 0885|.each do |r1|
454 458 changeset = @repository.find_changeset_by_name(r1)
455 459 assert_nil changeset.previous
456 460 end
457 461 end
458 462
459 463 def test_next
460 464 assert_equal 0, @repository.changesets.count
461 465 @repository.fetch_changesets
462 466 @project.reload
463 467 assert_equal NUM_REV, @repository.changesets.count
464 468 %w|27 7bbf4c738e71 7bbf|.each do |r2|
465 469 changeset = @repository.find_changeset_by_name(r2)
466 470 %w|28 3ae45e2d177d 3ae45|.each do |r1|
467 471 assert_equal @repository.find_changeset_by_name(r1), changeset.next
468 472 end
469 473 end
470 474 end
471 475
472 476 def test_next_nil
473 477 assert_equal 0, @repository.changesets.count
474 478 @repository.fetch_changesets
475 479 @project.reload
476 480 assert_equal NUM_REV, @repository.changesets.count
477 481 %w|31 31eeee7395c8 31eee|.each do |r1|
478 482 changeset = @repository.find_changeset_by_name(r1)
479 483 assert_nil changeset.next
480 484 end
481 485 end
482 486 else
483 487 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
484 488 def test_fake; assert true end
485 489 end
486 490 end
General Comments 0
You need to be logged in to leave comments. Login now