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