##// END OF EJS Templates
scm: mercurial: refactor mercurial unit test....
Toshi MARUYAMA -
r4509:e86b8febdc79
parent child
Show More
@@ -1,60 +1,73
1 1 require File.expand_path('../../../../../../test_helper', __FILE__)
2 2 begin
3 3 require 'mocha'
4 4
5 5 class MercurialAdapterTest < ActiveSupport::TestCase
6 6
7 7 TEMPLATES_DIR = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATES_DIR
8 8 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
9 9 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
10 10
11 11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
12 12
13 if File.directory?(REPOSITORY_PATH)
14 def setup
15 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
16 end
17
13 18 def test_hgversion
14 19 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
15 20 "Mercurial Distributed SCM (1.0)\n" => [1,0],
16 21 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
17 22 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
18 23 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
19 24 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
20 25 "(1.6)\n(1.7)\n(1.8)" => [1,6],
21 26 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
22 27
23 28 to_test.each do |s, v|
24 29 test_hgversion_for(s, v)
25 30 end
26 31 end
27 32
28 33 def test_template_path
29 34 to_test = { [0,9,5] => "0.9.5",
30 35 [1,0] => "1.0",
31 36 [] => "1.0",
32 37 [1,0,1] => "1.0",
33 38 [1,7] => "1.0",
34 39 [1,7,1] => "1.0"}
35 40 to_test.each do |v, template|
36 41 test_template_path_for(v, template)
37 42 end
38 43 end
39 44
45 def test_cat
46 assert @adapter.cat("sources/welcome_controller.rb", 2)
47 assert_nil @adapter.cat("sources/welcome_controller.rb")
48 end
49
40 50 private
41 51
42 52 def test_hgversion_for(hgversion, version)
43 Redmine::Scm::Adapters::MercurialAdapter.expects(:hgversion_from_command_line).returns(hgversion)
44 adapter = Redmine::Scm::Adapters::MercurialAdapter
45 assert_equal version, adapter.hgversion
53 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
54 assert_equal version, @adapter.class.hgversion
46 55 end
47 56
48 57 def test_template_path_for(version, template)
49 adapter = Redmine::Scm::Adapters::MercurialAdapter
50 assert_equal "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}", adapter.template_path_for(version)
51 assert File.exist?(adapter.template_path_for(version))
58 assert_equal "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
59 @adapter.class.template_path_for(version)
60 assert File.exist?(@adapter.class.template_path_for(version))
61 end
62 else
63 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
64 def test_fake; assert true end
52 65 end
53 66 end
54 67
55 68 rescue LoadError
56 69 class MercurialMochaFake < ActiveSupport::TestCase
57 70 def test_fake; assert(false, "Requires mocha to run those tests") end
58 71 end
59 72 end
60 73
@@ -1,94 +1,87
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 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 # No '..' in the repository path
24 24 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
25 25
26 26 def setup
27 27 @project = Project.find(1)
28 28 assert @repository = Repository::Mercurial.create(:project => @project, :url => REPOSITORY_PATH)
29 29 end
30 30
31 31 if File.directory?(REPOSITORY_PATH)
32 32 def test_fetch_changesets_from_scratch
33 33 @repository.fetch_changesets
34 34 @repository.reload
35 35
36 36 assert_equal 6, @repository.changesets.count
37 37 assert_equal 11, @repository.changes.count
38 38 assert_equal "Initial import.\nThe repository contains 3 files.", @repository.changesets.find_by_revision('0').comments
39 39 end
40 40
41 41 def test_fetch_changesets_incremental
42 42 @repository.fetch_changesets
43 43 # Remove changesets with revision > 2
44 44 @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 2}
45 45 @repository.reload
46 46 assert_equal 3, @repository.changesets.count
47 47
48 48 @repository.fetch_changesets
49 49 assert_equal 6, @repository.changesets.count
50 50 end
51 51
52 52 def test_entries
53 53 assert_equal 2, @repository.entries("sources", 2).size
54 54 assert_equal 1, @repository.entries("sources", 3).size
55 55 end
56 56
57 57 def test_locate_on_outdated_repository
58 # Change the working dir state
59 %x{hg -R #{REPOSITORY_PATH} up -r 0}
60 58 assert_equal 1, @repository.entries("images", 0).size
61 59 assert_equal 2, @repository.entries("images").size
62 60 assert_equal 2, @repository.entries("images", 2).size
63 61 end
64 62
65 def test_cat
66 assert @repository.scm.cat("sources/welcome_controller.rb", 2)
67 assert_nil @repository.scm.cat("sources/welcome_controller.rb")
68 end
69
70 63 def test_isodatesec
71 64 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
72 65 if @repository.scm.class.client_version_above?([1, 0])
73 66 @repository.fetch_changesets
74 67 @repository.reload
75 68 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
76 69 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
77 70 end
78 71 end
79 72
80 73 def test_changeset_order_by_revision
81 74 @repository.fetch_changesets
82 75 @repository.reload
83 76
84 77 c0 = @repository.latest_changeset
85 78 c1 = @repository.changesets.find_by_revision('0')
86 79 # sorted by revision (id), not by date
87 80 assert c0.revision.to_i > c1.revision.to_i
88 81 assert c0.committed_on < c1.committed_on
89 82 end
90 83 else
91 84 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
92 85 def test_fake; assert true end
93 86 end
94 87 end
General Comments 0
You need to be logged in to leave comments. Login now