##// END OF EJS Templates
scm: git: skip non UTF-8 path encoding test of unit model test in JRuby (#5251)....
Toshi MARUYAMA -
r5885:91abe154824d
parent child
Show More
@@ -1,438 +1,452
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 # No '..' in the repository path
24 24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
25 25 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
26 26
27 27 FELIX_HEX = "Felix Sch\xC3\xA4fer"
28 28 CHAR_1_HEX = "\xc3\x9c"
29 29
30 30 ## Ruby uses ANSI api to fork a process on Windows.
31 31 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
32 32 ## and these are incompatible with ASCII.
33 33 # WINDOWS_PASS = Redmine::Platform.mswin?
34 34 WINDOWS_PASS = false
35 35
36 ## Git, Mercurial and CVS path encodings are binary.
37 ## Subversion supports URL encoding for path.
38 ## Redmine Mercurial adapter and extension use URL encoding.
39 ## Git accepts only binary path in command line parameter.
40 ## So, there is no way to use binary command line parameter in JRuby.
41 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
42 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
43
36 44 if File.directory?(REPOSITORY_PATH)
37 45 def setup
38 46 klass = Repository::Git
39 47 assert_equal "Git", klass.scm_name
40 48 assert klass.scm_adapter_class
41 49 assert_not_equal "", klass.scm_command
42 50 assert_equal true, klass.scm_available
43 51
44 52 @project = Project.find(3)
45 53 @repository = Repository::Git.create(
46 54 :project => @project,
47 55 :url => REPOSITORY_PATH,
48 56 :path_encoding => 'ISO-8859-1'
49 57 )
50 58 assert @repository
51 59 @char_1 = CHAR_1_HEX.dup
52 60 if @char_1.respond_to?(:force_encoding)
53 61 @char_1.force_encoding('UTF-8')
54 62 end
55 63 end
56 64
57 65 def test_fetch_changesets_from_scratch
58 66 assert_nil @repository.extra_info
59 67
60 68 @repository.fetch_changesets
61 69 @repository.reload
62 70
63 71 assert_equal 21, @repository.changesets.count
64 72 assert_equal 33, @repository.changes.count
65 73
66 74 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
67 75 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
68 76 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
69 77 assert_equal User.find_by_login('jsmith'), commit.user
70 78 # TODO: add a commit with commit time <> author time to the test repository
71 79 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
72 80 assert_equal "2007-12-14".to_date, commit.commit_date
73 81 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
74 82 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
75 83 assert_equal 3, commit.changes.count
76 84 change = commit.changes.sort_by(&:path).first
77 85 assert_equal "README", change.path
78 86 assert_equal "A", change.action
79 87
80 88 assert_equal 4, @repository.extra_info["branches"].size
81 89 end
82 90
83 91 def test_fetch_changesets_incremental
84 92 @repository.fetch_changesets
85 93 @repository.reload
86 94 assert_equal 21, @repository.changesets.count
87 95 assert_equal 33, @repository.changes.count
88 96 extra_info_db = @repository.extra_info["branches"]
89 97 assert_equal 4, extra_info_db.size
90 98 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
91 99 extra_info_db["latin-1-path-encoding"]["last_scmid"]
92 100 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
93 101 extra_info_db["master"]["last_scmid"]
94 102
95 103 del_revs = [
96 104 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
97 105 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
98 106 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
99 107 "deff712f05a90d96edbd70facc47d944be5897e3",
100 108 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
101 109 "7e61ac704deecde634b51e59daa8110435dcb3da",
102 110 ]
103 111 @repository.changesets.each do |rev|
104 112 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
105 113 end
106 114 @repository.reload
107 115 cs1 = @repository.changesets
108 116 assert_equal 15, cs1.count
109 117 h = @repository.extra_info.dup
110 118 h["branches"]["master"]["last_scmid"] =
111 119 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
112 120 @repository.merge_extra_info(h)
113 121 @repository.save
114 122 @repository.reload
115 123 extra_info_db_1 = @repository.extra_info["branches"]
116 124 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
117 125 extra_info_db_1["master"]["last_scmid"]
118 126
119 127 @repository.fetch_changesets
120 128 assert_equal 21, @repository.changesets.count
121 129 end
122 130
123 131 def test_fetch_changesets_invalid_rev
124 132 @repository.fetch_changesets
125 133 @repository.reload
126 134 assert_equal 21, @repository.changesets.count
127 135 assert_equal 33, @repository.changes.count
128 136 extra_info_db = @repository.extra_info["branches"]
129 137 assert_equal 4, extra_info_db.size
130 138 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
131 139 extra_info_db["latin-1-path-encoding"]["last_scmid"]
132 140 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
133 141 extra_info_db["master"]["last_scmid"]
134 142
135 143 del_revs = [
136 144 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
137 145 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
138 146 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
139 147 "deff712f05a90d96edbd70facc47d944be5897e3",
140 148 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
141 149 "7e61ac704deecde634b51e59daa8110435dcb3da",
142 150 ]
143 151 @repository.changesets.each do |rev|
144 152 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
145 153 end
146 154 @repository.reload
147 155 cs1 = @repository.changesets
148 156 assert_equal 15, cs1.count
149 157 h = @repository.extra_info.dup
150 158 h["branches"]["master"]["last_scmid"] =
151 159 "abcd1234efgh"
152 160 @repository.merge_extra_info(h)
153 161 @repository.save
154 162 @repository.reload
155 163 extra_info_db_1 = @repository.extra_info["branches"]
156 164 assert_equal "abcd1234efgh",
157 165 extra_info_db_1["master"]["last_scmid"]
158 166
159 167 @repository.fetch_changesets
160 168 assert_equal 15, @repository.changesets.count
161 169 end
162 170
163 171 def test_db_consistent_ordering_init
164 172 assert_nil @repository.extra_info
165 173 @repository.fetch_changesets
166 174 @repository.reload
167 175 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
168 176 end
169 177
170 178 def test_db_consistent_ordering_before_1_2
171 179 assert_nil @repository.extra_info
172 180 @repository.fetch_changesets
173 181 @repository.reload
174 182 assert_equal 21, @repository.changesets.count
175 183 assert_not_nil @repository.extra_info
176 184 @repository.write_attribute(:extra_info, nil)
177 185 @repository.save
178 186 assert_nil @repository.extra_info
179 187 assert_equal 21, @repository.changesets.count
180 188 @repository.fetch_changesets
181 189 @repository.reload
182 190 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
183 191
184 192 del_revs = [
185 193 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
186 194 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
187 195 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
188 196 "deff712f05a90d96edbd70facc47d944be5897e3",
189 197 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
190 198 "7e61ac704deecde634b51e59daa8110435dcb3da",
191 199 ]
192 200 @repository.changesets.each do |rev|
193 201 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
194 202 end
195 203 @repository.reload
196 204 cs1 = @repository.changesets
197 205 assert_equal 15, cs1.count
198 206 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
199 207 h = @repository.extra_info.dup
200 208 h["branches"]["master"]["last_scmid"] =
201 209 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
202 210 @repository.merge_extra_info(h)
203 211 @repository.save
204 212 @repository.reload
205 213 extra_info_db_1 = @repository.extra_info["branches"]
206 214 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
207 215 extra_info_db_1["master"]["last_scmid"]
208 216
209 217 @repository.fetch_changesets
210 218 assert_equal 21, @repository.changesets.count
211 219 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
212 220 end
213 221
214 222 def test_latest_changesets
215 223 @repository.fetch_changesets
216 224 @repository.reload
217 225 # with limit
218 226 changesets = @repository.latest_changesets('', nil, 2)
219 227 assert_equal 2, changesets.size
220 228
221 229 # with path
222 230 changesets = @repository.latest_changesets('images', nil)
223 231 assert_equal [
224 232 'deff712f05a90d96edbd70facc47d944be5897e3',
225 233 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
226 234 '7234cb2750b63f47bff735edc50a1c0a433c2518',
227 235 ], changesets.collect(&:revision)
228 236
229 237 changesets = @repository.latest_changesets('README', nil)
230 238 assert_equal [
231 239 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
232 240 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
233 241 '713f4944648826f558cf548222f813dabe7cbb04',
234 242 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
235 243 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
236 244 '7234cb2750b63f47bff735edc50a1c0a433c2518',
237 245 ], changesets.collect(&:revision)
238 246
239 247 # with path, revision and limit
240 248 changesets = @repository.latest_changesets('images', '899a15dba')
241 249 assert_equal [
242 250 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
243 251 '7234cb2750b63f47bff735edc50a1c0a433c2518',
244 252 ], changesets.collect(&:revision)
245 253
246 254 changesets = @repository.latest_changesets('images', '899a15dba', 1)
247 255 assert_equal [
248 256 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
249 257 ], changesets.collect(&:revision)
250 258
251 259 changesets = @repository.latest_changesets('README', '899a15dba')
252 260 assert_equal [
253 261 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
254 262 '7234cb2750b63f47bff735edc50a1c0a433c2518',
255 263 ], changesets.collect(&:revision)
256 264
257 265 changesets = @repository.latest_changesets('README', '899a15dba', 1)
258 266 assert_equal [
259 267 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
260 268 ], changesets.collect(&:revision)
261 269
262 270 # with path, tag and limit
263 271 changesets = @repository.latest_changesets('images', 'tag01.annotated')
264 272 assert_equal [
265 273 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
266 274 '7234cb2750b63f47bff735edc50a1c0a433c2518',
267 275 ], changesets.collect(&:revision)
268 276
269 277 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
270 278 assert_equal [
271 279 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
272 280 ], changesets.collect(&:revision)
273 281
274 282 changesets = @repository.latest_changesets('README', 'tag01.annotated')
275 283 assert_equal [
276 284 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
277 285 '7234cb2750b63f47bff735edc50a1c0a433c2518',
278 286 ], changesets.collect(&:revision)
279 287
280 288 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
281 289 assert_equal [
282 290 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
283 291 ], changesets.collect(&:revision)
284 292
285 293 # with path, branch and limit
286 294 changesets = @repository.latest_changesets('images', 'test_branch')
287 295 assert_equal [
288 296 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
289 297 '7234cb2750b63f47bff735edc50a1c0a433c2518',
290 298 ], changesets.collect(&:revision)
291 299
292 300 changesets = @repository.latest_changesets('images', 'test_branch', 1)
293 301 assert_equal [
294 302 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
295 303 ], changesets.collect(&:revision)
296 304
297 305 changesets = @repository.latest_changesets('README', 'test_branch')
298 306 assert_equal [
299 307 '713f4944648826f558cf548222f813dabe7cbb04',
300 308 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
301 309 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
302 310 '7234cb2750b63f47bff735edc50a1c0a433c2518',
303 311 ], changesets.collect(&:revision)
304 312
305 313 changesets = @repository.latest_changesets('README', 'test_branch', 2)
306 314 assert_equal [
307 315 '713f4944648826f558cf548222f813dabe7cbb04',
308 316 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
309 317 ], changesets.collect(&:revision)
310 318
311 # latin-1 encoding path
312 changesets = @repository.latest_changesets(
313 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
314 assert_equal [
319 if JRUBY_SKIP
320 puts JRUBY_SKIP_STR
321 else
322 # latin-1 encoding path
323 changesets = @repository.latest_changesets(
324 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
325 assert_equal [
315 326 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
316 327 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
317 328 ], changesets.collect(&:revision)
318 329
319 changesets = @repository.latest_changesets(
330 changesets = @repository.latest_changesets(
320 331 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
321 assert_equal [
332 assert_equal [
322 333 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
323 334 ], changesets.collect(&:revision)
335 end
324 336 end
325 337
326 338 def test_latest_changesets_latin_1_dir
327 339 if WINDOWS_PASS
328 340 #
341 elsif JRUBY_SKIP
342 puts JRUBY_SKIP_STR
329 343 else
330 344 @repository.fetch_changesets
331 345 @repository.reload
332 346 changesets = @repository.latest_changesets(
333 347 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
334 348 assert_equal [
335 349 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
336 350 ], changesets.collect(&:revision)
337 351 end
338 352 end
339 353
340 354 def test_find_changeset_by_name
341 355 @repository.fetch_changesets
342 356 @repository.reload
343 357 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
344 358 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
345 359 @repository.find_changeset_by_name(r).revision
346 360 end
347 361 end
348 362
349 363 def test_find_changeset_by_empty_name
350 364 @repository.fetch_changesets
351 365 @repository.reload
352 366 ['', ' ', nil].each do |r|
353 367 assert_nil @repository.find_changeset_by_name(r)
354 368 end
355 369 end
356 370
357 371 def test_identifier
358 372 @repository.fetch_changesets
359 373 @repository.reload
360 374 c = @repository.changesets.find_by_revision(
361 375 '7234cb2750b63f47bff735edc50a1c0a433c2518')
362 376 assert_equal c.scmid, c.identifier
363 377 end
364 378
365 379 def test_format_identifier
366 380 @repository.fetch_changesets
367 381 @repository.reload
368 382 c = @repository.changesets.find_by_revision(
369 383 '7234cb2750b63f47bff735edc50a1c0a433c2518')
370 384 assert_equal '7234cb27', c.format_identifier
371 385 end
372 386
373 387 def test_activities
374 388 c = Changeset.new(:repository => @repository,
375 389 :committed_on => Time.now,
376 390 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
377 391 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
378 392 :comments => 'test')
379 393 assert c.event_title.include?('abc7234c:')
380 394 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
381 395 end
382 396
383 397 def test_log_utf8
384 398 @repository.fetch_changesets
385 399 @repository.reload
386 400 str_felix_hex = FELIX_HEX.dup
387 401 if str_felix_hex.respond_to?(:force_encoding)
388 402 str_felix_hex.force_encoding('UTF-8')
389 403 end
390 404 c = @repository.changesets.find_by_revision(
391 405 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
392 406 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
393 407 end
394 408
395 409 def test_previous
396 410 @repository.fetch_changesets
397 411 @repository.reload
398 412 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
399 413 changeset = @repository.find_changeset_by_name(r1)
400 414 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
401 415 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
402 416 end
403 417 end
404 418 end
405 419
406 420 def test_previous_nil
407 421 @repository.fetch_changesets
408 422 @repository.reload
409 423 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
410 424 changeset = @repository.find_changeset_by_name(r1)
411 425 assert_nil changeset.previous
412 426 end
413 427 end
414 428
415 429 def test_next
416 430 @repository.fetch_changesets
417 431 @repository.reload
418 432 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
419 433 changeset = @repository.find_changeset_by_name(r2)
420 434 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
421 435 assert_equal @repository.find_changeset_by_name(r1), changeset.next
422 436 end
423 437 end
424 438 end
425 439
426 440 def test_next_nil
427 441 @repository.fetch_changesets
428 442 @repository.reload
429 443 %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
430 444 changeset = @repository.find_changeset_by_name(r1)
431 445 assert_nil changeset.next
432 446 end
433 447 end
434 448 else
435 449 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
436 450 def test_fake; assert true end
437 451 end
438 452 end
General Comments 0
You need to be logged in to leave comments. Login now