comparison test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb @ 441:cbce1fd3b1b7 redmine-1.2

Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author Chris Cannam
date Mon, 06 Jun 2011 14:24:13 +0100
parents 051f544170fe
children 753f1380d6bc cbb26bc654de
comparison
equal deleted inserted replaced
245:051f544170fe 441:cbce1fd3b1b7
2 begin 2 begin
3 require 'mocha' 3 require 'mocha'
4 4
5 class MercurialAdapterTest < ActiveSupport::TestCase 5 class MercurialAdapterTest < ActiveSupport::TestCase
6 6
7 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR 7 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
8 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME 8 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
9 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION 9 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
10 10
11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository' 11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') +
12 '/tmp/test/mercurial_repository'
13
14 CHAR_1_HEX = "\xc3\x9c"
12 15
13 if File.directory?(REPOSITORY_PATH) 16 if File.directory?(REPOSITORY_PATH)
14 def setup 17 def setup
15 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH) 18 adapter_class = Redmine::Scm::Adapters::MercurialAdapter
19 assert adapter_class
20 assert adapter_class.client_command
21 assert_equal true, adapter_class.client_available
22 assert_equal true, adapter_class.client_version_above?([0, 9, 5])
23
24 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
25 REPOSITORY_PATH,
26 nil,
27 nil,
28 nil,
29 'ISO-8859-1')
16 @diff_c_support = true 30 @diff_c_support = true
31 @char_1 = CHAR_1_HEX.dup
32 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
33 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
34 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
35 if @tag_char_1.respond_to?(:force_encoding)
36 @char_1.force_encoding('UTF-8')
37 @tag_char_1.force_encoding('UTF-8')
38 @branch_char_0.force_encoding('UTF-8')
39 @branch_char_1.force_encoding('UTF-8')
40 end
17 end 41 end
18 42
19 def test_hgversion 43 def test_hgversion
20 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5], 44 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
21 "Mercurial Distributed SCM (1.0)\n" => [1,0], 45 "Mercurial Distributed SCM (1.0)\n" => [1,0],
47 [REPOSITORY_PATH, REPOSITORY_PATH + "/", 71 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
48 REPOSITORY_PATH + "//"].each do |repo| 72 REPOSITORY_PATH + "//"].each do |repo|
49 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo) 73 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
50 repo_path = adp.info.root_url.gsub(/\\/, "/") 74 repo_path = adp.info.root_url.gsub(/\\/, "/")
51 assert_equal REPOSITORY_PATH, repo_path 75 assert_equal REPOSITORY_PATH, repo_path
52 assert_equal '16', adp.info.lastrev.revision 76 assert_equal '28', adp.info.lastrev.revision
53 assert_equal '4cddb4e45f52',adp.info.lastrev.scmid 77 assert_equal '3ae45e2d177d',adp.info.lastrev.scmid
54 end 78 end
55 end 79 end
56 80
57 def test_revisions 81 def test_revisions
58 revisions = @adapter.revisions(nil, 2, 4) 82 revisions = @adapter.revisions(nil, 2, 4)
95 end 119 end
96 end 120 end
97 121
98 def test_diff_made_by_revision 122 def test_diff_made_by_revision
99 if @diff_c_support 123 if @diff_c_support
100 [16, '16', '4cddb4e45f52'].each do |r1| 124 [24, '24', '4cddb4e45f52'].each do |r1|
101 diff1 = @adapter.diff(nil, r1) 125 diff1 = @adapter.diff(nil, r1)
102 assert_equal 5, diff1.size 126 assert_equal 5, diff1.size
103 buf = diff1[4].gsub(/\r\n|\r|\n/, "") 127 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
104 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf 128 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
105 end 129 end
217 # falls back to nodeid 241 # falls back to nodeid
218 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400') 242 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
219 end 243 end
220 244
221 def test_tags 245 def test_tags
222 assert_equal ['tag_test.00', 'tag-init-revision'], @adapter.tags 246 assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
223 end 247 end
224 248
225 def test_tagmap 249 def test_tagmap
226 tm = { 'tag_test.00' => '6987191f453a', 250 tm = {
227 'tag-init-revision' => '0885933ad4f6' } 251 @tag_char_1 => 'adf805632193',
252 'tag_test.00' => '6987191f453a',
253 'tag-init-revision' => '0885933ad4f6',
254 }
228 assert_equal tm, @adapter.tagmap 255 assert_equal tm, @adapter.tagmap
229 end 256 end
230 257
231 def test_branches 258 def test_branches
232 assert_equal ['default', 'branch (1)[2]&,%.-3_4', 'test-branch-00'], 259 assert_equal [
233 @adapter.branches 260 'default',
261 @branch_char_1,
262 'branch (1)[2]&,%.-3_4',
263 @branch_char_0,
264 'test_branch.latin-1',
265 'test-branch-00',
266 ], @adapter.branches
234 end 267 end
235 268
236 def test_branchmap 269 def test_branchmap
237 bm = { 'default' => '4cddb4e45f52', 270 bm = {
238 'branch (1)[2]&,%.-3_4' => '933ca60293d7', 271 'default' => '3ae45e2d177d',
239 'test-branch-00' => '3a330eb32958' } 272 'test_branch.latin-1' => 'c2ffe7da686a',
273 'branch (1)[2]&,%.-3_4' => 'afc61e85bde7',
274 'test-branch-00' => '3a330eb32958',
275 @branch_char_0 => 'c8d3e4887474',
276 @branch_char_1 => '7bbf4c738e71',
277 }
240 assert_equal bm, @adapter.branchmap 278 assert_equal bm, @adapter.branchmap
279 end
280
281 def test_path_space
282 p = 'README (1)[2]&,%.-3_4'
283 [15, '933ca60293d7'].each do |r1|
284 assert @adapter.diff(p, r1)
285 assert @adapter.cat(p, r1)
286 assert_equal 1, @adapter.annotate(p, r1).lines.length
287 [25, 'afc61e85bde7'].each do |r2|
288 assert @adapter.diff(p, r1, r2)
289 end
290 end
291 end
292
293 def test_tag_non_ascii
294 p = "latin-1-dir/test-#{@char_1}-1.txt"
295 assert @adapter.cat(p, @tag_char_1)
296 assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
297 end
298
299 def test_branch_non_ascii
300 p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
301 assert @adapter.cat(p, @branch_char_1)
302 assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
303 end
304
305 def test_nodes_in_branch
306 [
307 'default',
308 @branch_char_1,
309 'branch (1)[2]&,%.-3_4',
310 @branch_char_0,
311 'test_branch.latin-1',
312 'test-branch-00',
313 ].each do |bra|
314 nib0 = @adapter.nodes_in_branch(bra)
315 assert nib0
316 nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
317 assert_equal 1, nib1.size
318 case bra
319 when 'branch (1)[2]&,%.-3_4'
320 assert_equal 3, nib0.size
321 assert_equal nib0[0], 'afc61e85bde7'
322 nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
323 assert_equal 2, nib2.size
324 assert_equal nib2[1], '933ca60293d7'
325 when @branch_char_1
326 assert_equal 2, nib0.size
327 assert_equal nib0[1], '08ff3227303e'
328 nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
329 assert_equal 1, nib2.size
330 assert_equal nib2[0], '7bbf4c738e71'
331 end
332 end
333 end
334
335 def test_path_encoding_default_utf8
336 adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
337 REPOSITORY_PATH
338 )
339 assert_equal "UTF-8", adpt1.path_encoding
340 adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
341 REPOSITORY_PATH,
342 nil,
343 nil,
344 nil,
345 ""
346 )
347 assert_equal "UTF-8", adpt2.path_encoding
241 end 348 end
242 349
243 private 350 private
244 351
245 def test_hgversion_for(hgversion, version) 352 def test_hgversion_for(hgversion, version)
255 else 362 else
256 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!" 363 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
257 def test_fake; assert true end 364 def test_fake; assert true end
258 end 365 end
259 end 366 end
260
261 rescue LoadError 367 rescue LoadError
262 class MercurialMochaFake < ActiveSupport::TestCase 368 class MercurialMochaFake < ActiveSupport::TestCase
263 def test_fake; assert(false, "Requires mocha to run those tests") end 369 def test_fake; assert(false, "Requires mocha to run those tests") end
264 end 370 end
265 end 371 end
266