##// END OF EJS Templates
scm: git: update test repository (#10207)...
Toshi MARUYAMA -
r8735:804482ef2b5e
parent child
Show More
1 NO CONTENT: modified file, binary diff hidden
@@ -1,524 +1,528
1 1 # encoding: utf-8
2 2
3 3 # This file includes UTF-8 "Felix Schäfer".
4 4 # We need to consider Ruby 1.9 compatibility.
5 5
6 6 require File.expand_path('../../../../../../test_helper', __FILE__)
7 7 begin
8 8 require 'mocha'
9 9
10 10 class GitAdapterTest < ActiveSupport::TestCase
11 11 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
12 12
13 13 FELIX_UTF8 = "Felix Schäfer"
14 14 FELIX_HEX = "Felix Sch\xC3\xA4fer"
15 15 CHAR_1_HEX = "\xc3\x9c"
16 16
17 17 ## Ruby uses ANSI api to fork a process on Windows.
18 18 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
19 19 ## and these are incompatible with ASCII.
20 20 # WINDOWS_PASS = Redmine::Platform.mswin?
21 21 WINDOWS_PASS = false
22 22
23 23 ## Git, Mercurial and CVS path encodings are binary.
24 24 ## Subversion supports URL encoding for path.
25 25 ## Redmine Mercurial adapter and extension use URL encoding.
26 26 ## Git accepts only binary path in command line parameter.
27 27 ## So, there is no way to use binary command line parameter in JRuby.
28 28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
29 29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
30 30
31 31 if File.directory?(REPOSITORY_PATH)
32 32 def setup
33 33 adapter_class = Redmine::Scm::Adapters::GitAdapter
34 34 assert adapter_class
35 35 assert adapter_class.client_command
36 36 assert_equal true, adapter_class.client_available
37 37 assert_equal true, adapter_class.client_version_above?([1])
38 38 assert_equal true, adapter_class.client_version_above?([1, 0])
39 39
40 40 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
41 41 REPOSITORY_PATH,
42 42 nil,
43 43 nil,
44 44 nil,
45 45 'ISO-8859-1'
46 46 )
47 47 assert @adapter
48 48 @char_1 = CHAR_1_HEX.dup
49 49 if @char_1.respond_to?(:force_encoding)
50 50 @char_1.force_encoding('UTF-8')
51 51 end
52 52 end
53 53
54 54 def test_scm_version
55 55 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
56 56 "1.6.1\n1.7\n1.8" => [1,6,1],
57 57 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
58 58 to_test.each do |s, v|
59 59 test_scm_version_for(s, v)
60 60 end
61 61 end
62 62
63 63 def test_branches
64 64 brs = []
65 65 @adapter.branches.each do |b|
66 66 brs << b
67 67 end
68 assert_equal 5, brs.length
69 br_issue_8857 = brs[-5]
68 assert_equal 6, brs.length
69 br_issue_8857 = brs[0]
70 70 assert_equal 'issue-8857', br_issue_8857.to_s
71 71 assert_equal '2a682156a3b6e77a8bf9cd4590e8db757f3c6c78', br_issue_8857.revision
72 72 assert_equal br_issue_8857.scmid, br_issue_8857.revision
73 br_latin_1_path = brs[-4]
73 br_latin_1_path = brs[1]
74 74 assert_equal 'latin-1-path-encoding', br_latin_1_path.to_s
75 75 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', br_latin_1_path.revision
76 76 assert_equal br_latin_1_path.scmid, br_latin_1_path.revision
77 br_master = brs[-3]
77 br_master = brs[2]
78 78 assert_equal 'master', br_master.to_s
79 79 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master.revision
80 80 assert_equal br_master.scmid, br_master.revision
81 br_master_20120212 = brs[3]
82 assert_equal 'master-20120212', br_master_20120212.to_s
83 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master_20120212.revision
84 assert_equal br_master_20120212.scmid, br_master_20120212.revision
81 85 br_latin_1 = brs[-2]
82 86 assert_equal 'test-latin-1', br_latin_1.to_s
83 87 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', br_latin_1.revision
84 88 assert_equal br_latin_1.scmid, br_latin_1.revision
85 89 br_test = brs[-1]
86 90 assert_equal 'test_branch', br_test.to_s
87 91 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', br_test.revision
88 92 assert_equal br_test.scmid, br_test.revision
89 93 end
90 94
91 95 def test_tags
92 96 assert_equal [
93 97 "tag00.lightweight",
94 98 "tag01.annotated",
95 99 ], @adapter.tags
96 100 end
97 101
98 102 def test_revisions_master_all
99 103 revs1 = []
100 104 @adapter.revisions('', nil, "master",{}) do |rev|
101 105 revs1 << rev
102 106 end
103 107 assert_equal 15, revs1.length
104 108 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
105 109 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
106 110
107 111 revs2 = []
108 112 @adapter.revisions('', nil, "master",
109 113 {:reverse => true}) do |rev|
110 114 revs2 << rev
111 115 end
112 116 assert_equal 15, revs2.length
113 117 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
114 118 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
115 119 end
116 120
117 121 def test_revisions_master_merged_rev
118 122 revs1 = []
119 123 @adapter.revisions('',
120 124 "713f4944648826f558cf548222f813dabe7cbb04",
121 125 "master",
122 126 {:reverse => true}) do |rev|
123 127 revs1 << rev
124 128 end
125 129 assert_equal 8, revs1.length
126 130 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
127 131 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
128 132 # 4a07fe31b is not a child of 713f49446
129 133 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
130 134 # Merged revision
131 135 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
132 136 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
133 137
134 138 revs2 = []
135 139 @adapter.revisions('',
136 140 "fba357b886984ee71185ad2065e65fc0417d9b92",
137 141 "master",
138 142 {:reverse => true}) do |rev|
139 143 revs2 << rev
140 144 end
141 145 assert_equal 7, revs2.length
142 146 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
143 147 # 4a07fe31b is not a child of fba357b8869
144 148 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
145 149 # Merged revision
146 150 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
147 151 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
148 152 end
149 153
150 154 def test_revisions_branch_latin_1_path_encoding_all
151 155 revs1 = []
152 156 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
153 157 revs1 << rev
154 158 end
155 159 assert_equal 8, revs1.length
156 160 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
157 161 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
158 162
159 163 revs2 = []
160 164 @adapter.revisions('', nil, "latin-1-path-encoding",
161 165 {:reverse => true}) do |rev|
162 166 revs2 << rev
163 167 end
164 168 assert_equal 8, revs2.length
165 169 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
166 170 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
167 171 end
168 172
169 173 def test_revisions_branch_latin_1_path_encoding_with_rev
170 174 revs1 = []
171 175 @adapter.revisions('',
172 176 '7234cb2750b63f47bff735edc50a1c0a433c2518',
173 177 "latin-1-path-encoding",
174 178 {:reverse => true}) do |rev|
175 179 revs1 << rev
176 180 end
177 181 assert_equal 7, revs1.length
178 182 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
179 183 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
180 184
181 185 revs2 = []
182 186 @adapter.revisions('',
183 187 '57ca437c0acbbcb749821fdf3726a1367056d364',
184 188 "latin-1-path-encoding",
185 189 {:reverse => true}) do |rev|
186 190 revs2 << rev
187 191 end
188 192 assert_equal 3, revs2.length
189 193 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
190 194 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
191 195 end
192 196
193 197 def test_revisions_invalid_rev
194 198 assert_equal [], @adapter.revisions('', '1234abcd', "master")
195 199 assert_raise Redmine::Scm::Adapters::CommandFailed do
196 200 revs1 = []
197 201 @adapter.revisions('',
198 202 '1234abcd',
199 203 "master",
200 204 {:reverse => true}) do |rev|
201 205 revs1 << rev
202 206 end
203 207 end
204 208 end
205 209
206 210 def test_revisions_includes_master_two_revs
207 211 revs1 = []
208 212 @adapter.revisions('', nil, nil,
209 213 {:reverse => true,
210 214 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
211 215 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43']}) do |rev|
212 216 revs1 << rev
213 217 end
214 218 assert_equal 2, revs1.length
215 219 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
216 220 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
217 221 end
218 222
219 223 def test_revisions_includes_master_two_revs_from_origin
220 224 revs1 = []
221 225 @adapter.revisions('', nil, nil,
222 226 {:reverse => true,
223 227 :includes => ['899a15dba03a3b350b89c3f537e4bbe02a03cdc9'],
224 228 :excludes => []}) do |rev|
225 229 revs1 << rev
226 230 end
227 231 assert_equal 2, revs1.length
228 232 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[ 0].identifier
229 233 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 1].identifier
230 234 end
231 235
232 236 def test_revisions_includes_merged_revs
233 237 revs1 = []
234 238 @adapter.revisions('', nil, nil,
235 239 {:reverse => true,
236 240 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
237 241 :excludes => ['fba357b886984ee71185ad2065e65fc0417d9b92']}) do |rev|
238 242 revs1 << rev
239 243 end
240 244 assert_equal 7, revs1.length
241 245 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 0].identifier
242 246 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 1].identifier
243 247 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 2].identifier
244 248 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
245 249 end
246 250
247 251 def test_revisions_includes_two_heads
248 252 revs1 = []
249 253 @adapter.revisions('', nil, nil,
250 254 {:reverse => true,
251 255 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
252 256 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127'],
253 257 :excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43',
254 258 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e']}) do |rev|
255 259 revs1 << rev
256 260 end
257 261 assert_equal 4, revs1.length
258 262 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
259 263 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
260 264 assert_equal '64f1f3e89ad1cb57976ff0ad99a107012ba3481d', revs1[-2].identifier
261 265 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
262 266 end
263 267
264 268 def test_revisions_disjointed_histories_revisions
265 269 revs1 = []
266 270 @adapter.revisions('', nil, nil,
267 271 {:reverse => true,
268 272 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
269 273 '92397af84d22f27389c822848ecd5b463c181583'],
270 274 :excludes => ['95488a44bc25f7d1f97d775a31359539ff333a63',
271 275 '4f26664364207fa8b1af9f8722647ab2d4ac5d43'] }) do |rev|
272 276 revs1 << rev
273 277 end
274 278 assert_equal 4, revs1.length
275 279 assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
276 280 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
277 281 assert_equal 'bc201c95999c4f10d018b0aa03b541cd6a2ff0ee', revs1[-2].identifier
278 282 assert_equal '92397af84d22f27389c822848ecd5b463c181583', revs1[-1].identifier
279 283 end
280 284
281 285 def test_revisions_invalid_rev_excludes
282 286 assert_equal [],
283 287 @adapter.revisions('', nil, nil,
284 288 {:reverse => true,
285 289 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
286 290 :excludes => ['0123abcd4567']})
287 291 assert_raise Redmine::Scm::Adapters::CommandFailed do
288 292 revs1 = []
289 293 @adapter.revisions('', nil, nil,
290 294 {:reverse => true,
291 295 :includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
292 296 :excludes => ['0123abcd4567']}) do |rev|
293 297 revs1 << rev
294 298 end
295 299 end
296 300 end
297 301
298 302 def test_getting_revisions_with_spaces_in_filename
299 303 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
300 304 nil, "master").length
301 305 end
302 306
303 307 def test_parents
304 308 revs1 = []
305 309 @adapter.revisions('',
306 310 nil,
307 311 "master",
308 312 {:reverse => true}) do |rev|
309 313 revs1 << rev
310 314 end
311 315 assert_equal 15, revs1.length
312 316 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
313 317 revs1[0].identifier
314 318 assert_equal nil, revs1[0].parents
315 319 assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
316 320 revs1[1].identifier
317 321 assert_equal 1, revs1[1].parents.length
318 322 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
319 323 revs1[1].parents[0]
320 324 assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
321 325 revs1[10].identifier
322 326 assert_equal 2, revs1[10].parents.length
323 327 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
324 328 revs1[10].parents[0]
325 329 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
326 330 revs1[10].parents[1]
327 331 end
328 332
329 333 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
330 334 assert_equal " filename with a leading space.txt ",
331 335 @adapter.revisions(" filename with a leading space.txt ",
332 336 nil, "master")[0].paths[0][:path]
333 337 end
334 338
335 339 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
336 340 assert_equal " filename with a leading space.txt ",
337 341 @adapter.entries('',
338 342 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
339 343 end
340 344
341 345 def test_annotate
342 346 annotate = @adapter.annotate('sources/watchers_controller.rb')
343 347 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
344 348 assert_equal 41, annotate.lines.size
345 349 assert_equal "# This program is free software; you can redistribute it and/or",
346 350 annotate.lines[4].strip
347 351 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
348 352 annotate.revisions[4].identifier
349 353 assert_equal "jsmith", annotate.revisions[4].author
350 354 end
351 355
352 356 def test_annotate_moved_file
353 357 annotate = @adapter.annotate('renamed_test.txt')
354 358 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
355 359 assert_equal 2, annotate.lines.size
356 360 end
357 361
358 362 def test_last_rev
359 363 last_rev = @adapter.lastrev("README",
360 364 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
361 365 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
362 366 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
363 367 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
364 368 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
365 369 end
366 370
367 371 def test_last_rev_with_spaces_in_filename
368 372 last_rev = @adapter.lastrev("filemane with spaces.txt",
369 373 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
370 374 str_felix_utf8 = FELIX_UTF8.dup
371 375 str_felix_hex = FELIX_HEX.dup
372 376 last_rev_author = last_rev.author
373 377 if last_rev_author.respond_to?(:force_encoding)
374 378 last_rev_author.force_encoding('UTF-8')
375 379 end
376 380 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
377 381 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
378 382 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
379 383 last_rev.author
380 384 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
381 385 last_rev.author
382 386 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
383 387 end
384 388
385 389 def test_latin_1_path
386 390 if WINDOWS_PASS
387 391 #
388 392 elsif JRUBY_SKIP
389 393 puts JRUBY_SKIP_STR
390 394 else
391 395 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
392 396 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
393 397 assert @adapter.diff(p2, r1)
394 398 assert @adapter.cat(p2, r1)
395 399 assert_equal 1, @adapter.annotate(p2, r1).lines.length
396 400 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
397 401 assert @adapter.diff(p2, r1, r2)
398 402 end
399 403 end
400 404 end
401 405 end
402 406
403 407 def test_entries_tag
404 408 entries1 = @adapter.entries(nil, 'tag01.annotated',
405 409 options = {:report_last_commit => true})
406 410 assert entries1
407 411 assert_equal 3, entries1.size
408 412 assert_equal 'sources', entries1[1].name
409 413 assert_equal 'sources', entries1[1].path
410 414 assert_equal 'dir', entries1[1].kind
411 415 readme = entries1[2]
412 416 assert_equal 'README', readme.name
413 417 assert_equal 'README', readme.path
414 418 assert_equal 'file', readme.kind
415 419 assert_equal 27, readme.size
416 420 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
417 421 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
418 422 end
419 423
420 424 def test_entries_branch
421 425 entries1 = @adapter.entries(nil, 'test_branch',
422 426 options = {:report_last_commit => true})
423 427 assert entries1
424 428 assert_equal 4, entries1.size
425 429 assert_equal 'sources', entries1[1].name
426 430 assert_equal 'sources', entries1[1].path
427 431 assert_equal 'dir', entries1[1].kind
428 432 readme = entries1[2]
429 433 assert_equal 'README', readme.name
430 434 assert_equal 'README', readme.path
431 435 assert_equal 'file', readme.kind
432 436 assert_equal 159, readme.size
433 437 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
434 438 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
435 439 end
436 440
437 441 def test_entries_latin_1_files
438 442 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
439 443 assert entries1
440 444 assert_equal 3, entries1.size
441 445 f1 = entries1[1]
442 446 assert_equal "test-#{@char_1}-2.txt", f1.name
443 447 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
444 448 assert_equal 'file', f1.kind
445 449 end
446 450
447 451 def test_entries_latin_1_dir
448 452 if WINDOWS_PASS
449 453 #
450 454 elsif JRUBY_SKIP
451 455 puts JRUBY_SKIP_STR
452 456 else
453 457 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
454 458 '1ca7f5ed')
455 459 assert entries1
456 460 assert_equal 3, entries1.size
457 461 f1 = entries1[1]
458 462 assert_equal "test-#{@char_1}-2.txt", f1.name
459 463 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
460 464 assert_equal 'file', f1.kind
461 465 end
462 466 end
463 467
464 468 def test_path_encoding_default_utf8
465 469 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
466 470 REPOSITORY_PATH
467 471 )
468 472 assert_equal "UTF-8", adpt1.path_encoding
469 473 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
470 474 REPOSITORY_PATH,
471 475 nil,
472 476 nil,
473 477 nil,
474 478 ""
475 479 )
476 480 assert_equal "UTF-8", adpt2.path_encoding
477 481 end
478 482
479 483 def test_cat_path_invalid
480 484 assert_nil @adapter.cat('invalid')
481 485 end
482 486
483 487 def test_cat_revision_invalid
484 488 assert @adapter.cat('README')
485 489 assert_nil @adapter.cat('README', 'abcd1234efgh')
486 490 end
487 491
488 492 def test_diff_path_invalid
489 493 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
490 494 end
491 495
492 496 def test_diff_revision_invalid
493 497 assert_nil @adapter.diff(nil, 'abcd1234efgh')
494 498 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
495 499 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
496 500 end
497 501
498 502 def test_annotate_path_invalid
499 503 assert_nil @adapter.annotate('invalid')
500 504 end
501 505
502 506 def test_annotate_revision_invalid
503 507 assert @adapter.annotate('README')
504 508 assert_nil @adapter.annotate('README', 'abcd1234efgh')
505 509 end
506 510
507 511 private
508 512
509 513 def test_scm_version_for(scm_command_version, version)
510 514 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
511 515 assert_equal version, @adapter.class.scm_command_version
512 516 end
513 517
514 518 else
515 519 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
516 520 def test_fake; assert true end
517 521 end
518 522 end
519 523
520 524 rescue LoadError
521 525 class GitMochaFake < ActiveSupport::TestCase
522 526 def test_fake; assert(false, "Requires mocha to run those tests") end
523 527 end
524 528 end
@@ -1,523 +1,524
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 RepositoryGitTest < ActiveSupport::TestCase
21 21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
22 22
23 23 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
24 24 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
25 25
26 26 NUM_REV = 28
27 NUM_HEAD = 6
27 28
28 29 FELIX_HEX = "Felix Sch\xC3\xA4fer"
29 30 CHAR_1_HEX = "\xc3\x9c"
30 31
31 32 ## Ruby uses ANSI api to fork a process on Windows.
32 33 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
33 34 ## and these are incompatible with ASCII.
34 35 # WINDOWS_PASS = Redmine::Platform.mswin?
35 36 WINDOWS_PASS = false
36 37
37 38 ## Git, Mercurial and CVS path encodings are binary.
38 39 ## Subversion supports URL encoding for path.
39 40 ## Redmine Mercurial adapter and extension use URL encoding.
40 41 ## Git accepts only binary path in command line parameter.
41 42 ## So, there is no way to use binary command line parameter in JRuby.
42 43 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
43 44 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
44 45
45 46 if File.directory?(REPOSITORY_PATH)
46 47 def setup
47 48 klass = Repository::Git
48 49 assert_equal "Git", klass.scm_name
49 50 assert klass.scm_adapter_class
50 51 assert_not_equal "", klass.scm_command
51 52 assert_equal true, klass.scm_available
52 53
53 54 @project = Project.find(3)
54 55 @repository = Repository::Git.create(
55 56 :project => @project,
56 57 :url => REPOSITORY_PATH,
57 58 :path_encoding => 'ISO-8859-1'
58 59 )
59 60 assert @repository
60 61 @char_1 = CHAR_1_HEX.dup
61 62 if @char_1.respond_to?(:force_encoding)
62 63 @char_1.force_encoding('UTF-8')
63 64 end
64 65 end
65 66
66 67 def test_fetch_changesets_from_scratch
67 68 assert_nil @repository.extra_info
68 69
69 70 assert_equal 0, @repository.changesets.count
70 71 @repository.fetch_changesets
71 72 @project.reload
72 73
73 74 assert_equal NUM_REV, @repository.changesets.count
74 75 assert_equal 39, @repository.changes.count
75 76
76 77 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
77 78 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
78 79 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
79 80 assert_equal User.find_by_login('jsmith'), commit.user
80 81 # TODO: add a commit with commit time <> author time to the test repository
81 82 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
82 83 assert_equal "2007-12-14".to_date, commit.commit_date
83 84 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
84 85 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
85 86 assert_equal 3, commit.changes.count
86 87 change = commit.changes.sort_by(&:path).first
87 88 assert_equal "README", change.path
88 89 assert_equal "A", change.action
89 90
90 assert_equal 5, @repository.extra_info["heads"].size
91 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
91 92 end
92 93
93 94 def test_fetch_changesets_incremental
94 95 assert_equal 0, @repository.changesets.count
95 96 @repository.fetch_changesets
96 97 @project.reload
97 98 assert_equal NUM_REV, @repository.changesets.count
98 99 extra_info_heads = @repository.extra_info["heads"].dup
99 assert_equal 5, extra_info_heads.size
100 assert_equal NUM_HEAD, extra_info_heads.size
100 101 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
101 102 assert_equal 4, extra_info_heads.size
102 103
103 104 del_revs = [
104 105 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
105 106 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
106 107 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
107 108 "deff712f05a90d96edbd70facc47d944be5897e3",
108 109 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
109 110 "7e61ac704deecde634b51e59daa8110435dcb3da",
110 111 ]
111 112 @repository.changesets.each do |rev|
112 113 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
113 114 end
114 115 @project.reload
115 116 cs1 = @repository.changesets
116 117 assert_equal NUM_REV - 6, cs1.count
117 118 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
118 119 h = {}
119 120 h["heads"] = extra_info_heads
120 121 @repository.merge_extra_info(h)
121 122 @repository.save
122 123 @project.reload
123 124 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
124 125 @repository.fetch_changesets
125 126 @project.reload
126 127 assert_equal NUM_REV, @repository.changesets.count
127 assert_equal 5, @repository.extra_info["heads"].size
128 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
128 129 assert @repository.extra_info["heads"].index("83ca5fd546063a3c7dc2e568ba3355661a9e2b2c")
129 130 end
130 131
131 132 def test_fetch_changesets_history_editing
132 133 assert_equal 0, @repository.changesets.count
133 134 @repository.fetch_changesets
134 135 @project.reload
135 136 assert_equal NUM_REV, @repository.changesets.count
136 137 extra_info_heads = @repository.extra_info["heads"].dup
137 assert_equal 5, extra_info_heads.size
138 assert_equal NUM_HEAD, extra_info_heads.size
138 139 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
139 140 assert_equal 4, extra_info_heads.size
140 141
141 142 del_revs = [
142 143 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
143 144 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
144 145 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
145 146 "deff712f05a90d96edbd70facc47d944be5897e3",
146 147 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
147 148 "7e61ac704deecde634b51e59daa8110435dcb3da",
148 149 ]
149 150 @repository.changesets.each do |rev|
150 151 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
151 152 end
152 153 @project.reload
153 154 assert_equal NUM_REV - 6, @repository.changesets.count
154 155
155 156 c = Changeset.new(:repository => @repository,
156 157 :committed_on => Time.now,
157 158 :revision => "abcd1234efgh",
158 159 :scmid => "abcd1234efgh",
159 160 :comments => 'test')
160 161 assert c.save
161 162 @project.reload
162 163 assert_equal NUM_REV - 5, @repository.changesets.count
163 164
164 165 extra_info_heads << "abcd1234efgh"
165 166 h = {}
166 167 h["heads"] = extra_info_heads
167 168 @repository.merge_extra_info(h)
168 169 @repository.save
169 170 @project.reload
170 171 h1 = @repository.extra_info["heads"].dup
171 172 assert h1.index("abcd1234efgh")
172 173 assert_equal 5, h1.size
173 174
174 175 @repository.fetch_changesets
175 176 @project.reload
176 177 assert_equal NUM_REV - 5, @repository.changesets.count
177 178 h2 = @repository.extra_info["heads"].dup
178 179 assert_equal h1, h2
179 180 end
180 181
181 182 def test_parents
182 183 assert_equal 0, @repository.changesets.count
183 184 @repository.fetch_changesets
184 185 @project.reload
185 186 assert_equal NUM_REV, @repository.changesets.count
186 187 r1 = @repository.find_changeset_by_name("7234cb2750b63")
187 188 assert_equal [], r1.parents
188 189 r2 = @repository.find_changeset_by_name("899a15dba03a3")
189 190 assert_equal 1, r2.parents.length
190 191 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
191 192 r2.parents[0].identifier
192 193 r3 = @repository.find_changeset_by_name("32ae898b720c2")
193 194 assert_equal 2, r3.parents.length
194 195 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
195 196 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", r4[0]
196 197 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da", r4[1]
197 198 end
198 199
199 200 def test_db_consistent_ordering_init
200 201 assert_nil @repository.extra_info
201 202 assert_equal 0, @repository.changesets.count
202 203 @repository.fetch_changesets
203 204 @project.reload
204 205 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
205 206 end
206 207
207 208 def test_db_consistent_ordering_before_1_2
208 209 assert_nil @repository.extra_info
209 210 assert_equal 0, @repository.changesets.count
210 211 @repository.fetch_changesets
211 212 @project.reload
212 213 assert_equal NUM_REV, @repository.changesets.count
213 214 assert_not_nil @repository.extra_info
214 215 @repository.write_attribute(:extra_info, nil)
215 216 @repository.save
216 217 assert_nil @repository.extra_info
217 218 assert_equal NUM_REV, @repository.changesets.count
218 219 @repository.fetch_changesets
219 220 @project.reload
220 221 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
221 222
222 223 extra_info_heads = @repository.extra_info["heads"].dup
223 224 extra_info_heads.delete_if { |x| x == "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c" }
224 225 del_revs = [
225 226 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
226 227 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
227 228 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
228 229 "deff712f05a90d96edbd70facc47d944be5897e3",
229 230 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
230 231 "7e61ac704deecde634b51e59daa8110435dcb3da",
231 232 ]
232 233 @repository.changesets.each do |rev|
233 234 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
234 235 end
235 236 @project.reload
236 237 cs1 = @repository.changesets
237 238 assert_equal NUM_REV - 6, cs1.count
238 239 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
239 240
240 241 extra_info_heads << "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
241 242 h = {}
242 243 h["heads"] = extra_info_heads
243 244 @repository.merge_extra_info(h)
244 245 @repository.save
245 246 @project.reload
246 247 assert @repository.extra_info["heads"].index("4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8")
247 248 @repository.fetch_changesets
248 249 @project.reload
249 250 assert_equal NUM_REV, @repository.changesets.count
250 assert_equal 5, @repository.extra_info["heads"].size
251 assert_equal NUM_HEAD, @repository.extra_info["heads"].size
251 252
252 253 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
253 254 end
254 255
255 256 def test_heads_from_branches_hash
256 257 assert_nil @repository.extra_info
257 258 assert_equal 0, @repository.changesets.count
258 259 assert_equal [], @repository.heads_from_branches_hash
259 260 h = {}
260 261 h["branches"] = {}
261 262 h["branches"]["test1"] = {}
262 263 h["branches"]["test1"]["last_scmid"] = "1234abcd"
263 264 h["branches"]["test2"] = {}
264 265 h["branches"]["test2"]["last_scmid"] = "abcd1234"
265 266 @repository.merge_extra_info(h)
266 267 @repository.save
267 268 @project.reload
268 269 assert_equal ["1234abcd", "abcd1234"], @repository.heads_from_branches_hash.sort
269 270 end
270 271
271 272 def test_latest_changesets
272 273 assert_equal 0, @repository.changesets.count
273 274 @repository.fetch_changesets
274 275 @project.reload
275 276 assert_equal NUM_REV, @repository.changesets.count
276 277 # with limit
277 278 changesets = @repository.latest_changesets('', 'master', 2)
278 279 assert_equal 2, changesets.size
279 280
280 281 # with path
281 282 changesets = @repository.latest_changesets('images', 'master')
282 283 assert_equal [
283 284 'deff712f05a90d96edbd70facc47d944be5897e3',
284 285 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
285 286 '7234cb2750b63f47bff735edc50a1c0a433c2518',
286 287 ], changesets.collect(&:revision)
287 288
288 289 changesets = @repository.latest_changesets('README', nil)
289 290 assert_equal [
290 291 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
291 292 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
292 293 '713f4944648826f558cf548222f813dabe7cbb04',
293 294 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
294 295 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
295 296 '7234cb2750b63f47bff735edc50a1c0a433c2518',
296 297 ], changesets.collect(&:revision)
297 298
298 299 # with path, revision and limit
299 300 changesets = @repository.latest_changesets('images', '899a15dba')
300 301 assert_equal [
301 302 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
302 303 '7234cb2750b63f47bff735edc50a1c0a433c2518',
303 304 ], changesets.collect(&:revision)
304 305
305 306 changesets = @repository.latest_changesets('images', '899a15dba', 1)
306 307 assert_equal [
307 308 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
308 309 ], changesets.collect(&:revision)
309 310
310 311 changesets = @repository.latest_changesets('README', '899a15dba')
311 312 assert_equal [
312 313 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
313 314 '7234cb2750b63f47bff735edc50a1c0a433c2518',
314 315 ], changesets.collect(&:revision)
315 316
316 317 changesets = @repository.latest_changesets('README', '899a15dba', 1)
317 318 assert_equal [
318 319 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
319 320 ], changesets.collect(&:revision)
320 321
321 322 # with path, tag and limit
322 323 changesets = @repository.latest_changesets('images', 'tag01.annotated')
323 324 assert_equal [
324 325 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
325 326 '7234cb2750b63f47bff735edc50a1c0a433c2518',
326 327 ], changesets.collect(&:revision)
327 328
328 329 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
329 330 assert_equal [
330 331 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
331 332 ], changesets.collect(&:revision)
332 333
333 334 changesets = @repository.latest_changesets('README', 'tag01.annotated')
334 335 assert_equal [
335 336 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
336 337 '7234cb2750b63f47bff735edc50a1c0a433c2518',
337 338 ], changesets.collect(&:revision)
338 339
339 340 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
340 341 assert_equal [
341 342 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
342 343 ], changesets.collect(&:revision)
343 344
344 345 # with path, branch and limit
345 346 changesets = @repository.latest_changesets('images', 'test_branch')
346 347 assert_equal [
347 348 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
348 349 '7234cb2750b63f47bff735edc50a1c0a433c2518',
349 350 ], changesets.collect(&:revision)
350 351
351 352 changesets = @repository.latest_changesets('images', 'test_branch', 1)
352 353 assert_equal [
353 354 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
354 355 ], changesets.collect(&:revision)
355 356
356 357 changesets = @repository.latest_changesets('README', 'test_branch')
357 358 assert_equal [
358 359 '713f4944648826f558cf548222f813dabe7cbb04',
359 360 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
360 361 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
361 362 '7234cb2750b63f47bff735edc50a1c0a433c2518',
362 363 ], changesets.collect(&:revision)
363 364
364 365 changesets = @repository.latest_changesets('README', 'test_branch', 2)
365 366 assert_equal [
366 367 '713f4944648826f558cf548222f813dabe7cbb04',
367 368 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
368 369 ], changesets.collect(&:revision)
369 370
370 371 if JRUBY_SKIP
371 372 puts JRUBY_SKIP_STR
372 373 else
373 374 # latin-1 encoding path
374 375 changesets = @repository.latest_changesets(
375 376 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
376 377 assert_equal [
377 378 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
378 379 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
379 380 ], changesets.collect(&:revision)
380 381
381 382 changesets = @repository.latest_changesets(
382 383 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
383 384 assert_equal [
384 385 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
385 386 ], changesets.collect(&:revision)
386 387 end
387 388 end
388 389
389 390 def test_latest_changesets_latin_1_dir
390 391 if WINDOWS_PASS
391 392 #
392 393 elsif JRUBY_SKIP
393 394 puts JRUBY_SKIP_STR
394 395 else
395 396 assert_equal 0, @repository.changesets.count
396 397 @repository.fetch_changesets
397 398 @project.reload
398 399 assert_equal NUM_REV, @repository.changesets.count
399 400 changesets = @repository.latest_changesets(
400 401 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
401 402 assert_equal [
402 403 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
403 404 ], changesets.collect(&:revision)
404 405 end
405 406 end
406 407
407 408 def test_find_changeset_by_name
408 409 assert_equal 0, @repository.changesets.count
409 410 @repository.fetch_changesets
410 411 @project.reload
411 412 assert_equal NUM_REV, @repository.changesets.count
412 413 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
413 414 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
414 415 @repository.find_changeset_by_name(r).revision
415 416 end
416 417 end
417 418
418 419 def test_find_changeset_by_empty_name
419 420 assert_equal 0, @repository.changesets.count
420 421 @repository.fetch_changesets
421 422 @project.reload
422 423 assert_equal NUM_REV, @repository.changesets.count
423 424 ['', ' ', nil].each do |r|
424 425 assert_nil @repository.find_changeset_by_name(r)
425 426 end
426 427 end
427 428
428 429 def test_identifier
429 430 assert_equal 0, @repository.changesets.count
430 431 @repository.fetch_changesets
431 432 @project.reload
432 433 assert_equal NUM_REV, @repository.changesets.count
433 434 c = @repository.changesets.find_by_revision(
434 435 '7234cb2750b63f47bff735edc50a1c0a433c2518')
435 436 assert_equal c.scmid, c.identifier
436 437 end
437 438
438 439 def test_format_identifier
439 440 assert_equal 0, @repository.changesets.count
440 441 @repository.fetch_changesets
441 442 @project.reload
442 443 assert_equal NUM_REV, @repository.changesets.count
443 444 c = @repository.changesets.find_by_revision(
444 445 '7234cb2750b63f47bff735edc50a1c0a433c2518')
445 446 assert_equal '7234cb27', c.format_identifier
446 447 end
447 448
448 449 def test_activities
449 450 c = Changeset.new(:repository => @repository,
450 451 :committed_on => Time.now,
451 452 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
452 453 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
453 454 :comments => 'test')
454 455 assert c.event_title.include?('abc7234c:')
455 456 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
456 457 end
457 458
458 459 def test_log_utf8
459 460 assert_equal 0, @repository.changesets.count
460 461 @repository.fetch_changesets
461 462 @project.reload
462 463 assert_equal NUM_REV, @repository.changesets.count
463 464 str_felix_hex = FELIX_HEX.dup
464 465 if str_felix_hex.respond_to?(:force_encoding)
465 466 str_felix_hex.force_encoding('UTF-8')
466 467 end
467 468 c = @repository.changesets.find_by_revision(
468 469 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
469 470 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
470 471 end
471 472
472 473 def test_previous
473 474 assert_equal 0, @repository.changesets.count
474 475 @repository.fetch_changesets
475 476 @project.reload
476 477 assert_equal NUM_REV, @repository.changesets.count
477 478 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
478 479 changeset = @repository.find_changeset_by_name(r1)
479 480 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
480 481 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
481 482 end
482 483 end
483 484 end
484 485
485 486 def test_previous_nil
486 487 assert_equal 0, @repository.changesets.count
487 488 @repository.fetch_changesets
488 489 @project.reload
489 490 assert_equal NUM_REV, @repository.changesets.count
490 491 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb275|.each do |r1|
491 492 changeset = @repository.find_changeset_by_name(r1)
492 493 assert_nil changeset.previous
493 494 end
494 495 end
495 496
496 497 def test_next
497 498 assert_equal 0, @repository.changesets.count
498 499 @repository.fetch_changesets
499 500 @project.reload
500 501 assert_equal NUM_REV, @repository.changesets.count
501 502 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
502 503 changeset = @repository.find_changeset_by_name(r2)
503 504 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
504 505 assert_equal @repository.find_changeset_by_name(r1), changeset.next
505 506 end
506 507 end
507 508 end
508 509
509 510 def test_next_nil
510 511 assert_equal 0, @repository.changesets.count
511 512 @repository.fetch_changesets
512 513 @project.reload
513 514 assert_equal NUM_REV, @repository.changesets.count
514 515 %w|2a682156a3b6e77a8bf9cd4590e8db757f3c6c78 2a682156a3b6e77a|.each do |r1|
515 516 changeset = @repository.find_changeset_by_name(r1)
516 517 assert_nil changeset.next
517 518 end
518 519 end
519 520 else
520 521 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
521 522 def test_fake; assert true end
522 523 end
523 524 end
General Comments 0
You need to be logged in to leave comments. Login now