annotate test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb @ 245:051f544170fe

* Update to SVN trunk revision 4993
author Chris Cannam
date Thu, 03 Mar 2011 11:42:28 +0000
parents 0579821a129a
children eeebe205a056 cbce1fd3b1b7
rev   line source
Chris@119 1 require File.expand_path('../../../../../../test_helper', __FILE__)
Chris@0 2 begin
Chris@0 3 require 'mocha'
Chris@119 4
Chris@0 5 class MercurialAdapterTest < ActiveSupport::TestCase
Chris@119 6
Chris@245 7 HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
Chris@0 8 TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
Chris@0 9 TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
Chris@119 10
Chris@0 11 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
Chris@119 12
Chris@119 13 if File.directory?(REPOSITORY_PATH)
Chris@119 14 def setup
Chris@119 15 @adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
Chris@245 16 @diff_c_support = true
Chris@0 17 end
Chris@119 18
Chris@119 19 def test_hgversion
Chris@119 20 to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
Chris@119 21 "Mercurial Distributed SCM (1.0)\n" => [1,0],
Chris@119 22 "Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
Chris@119 23 "Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
Chris@119 24 "Mercurial Distributed SCM (1916e629a29d)\n" => nil,
Chris@119 25 "Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
Chris@119 26 "(1.6)\n(1.7)\n(1.8)" => [1,6],
Chris@119 27 "(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
Chris@119 28
Chris@119 29 to_test.each do |s, v|
Chris@119 30 test_hgversion_for(s, v)
Chris@119 31 end
Chris@0 32 end
Chris@119 33
Chris@119 34 def test_template_path
Chris@119 35 to_test = { [0,9,5] => "0.9.5",
Chris@119 36 [1,0] => "1.0",
Chris@119 37 [] => "1.0",
Chris@119 38 [1,0,1] => "1.0",
Chris@119 39 [1,7] => "1.0",
Chris@119 40 [1,7,1] => "1.0" }
Chris@119 41 to_test.each do |v, template|
Chris@119 42 test_template_path_for(v, template)
Chris@119 43 end
Chris@119 44 end
Chris@119 45
Chris@245 46 def test_info
Chris@245 47 [REPOSITORY_PATH, REPOSITORY_PATH + "/",
Chris@245 48 REPOSITORY_PATH + "//"].each do |repo|
Chris@245 49 adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
Chris@245 50 repo_path = adp.info.root_url.gsub(/\\/, "/")
Chris@245 51 assert_equal REPOSITORY_PATH, repo_path
Chris@245 52 assert_equal '16', adp.info.lastrev.revision
Chris@245 53 assert_equal '4cddb4e45f52',adp.info.lastrev.scmid
Chris@245 54 end
Chris@245 55 end
Chris@245 56
Chris@245 57 def test_revisions
Chris@245 58 revisions = @adapter.revisions(nil, 2, 4)
Chris@245 59 assert_equal 3, revisions.size
Chris@245 60 assert_equal '2', revisions[0].revision
Chris@245 61 assert_equal '400bb8672109', revisions[0].scmid
Chris@245 62 assert_equal '4', revisions[2].revision
Chris@245 63 assert_equal 'def6d2f1254a', revisions[2].scmid
Chris@245 64
Chris@245 65 revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
Chris@245 66 assert_equal 2, revisions.size
Chris@245 67 assert_equal '2', revisions[0].revision
Chris@245 68 assert_equal '400bb8672109', revisions[0].scmid
Chris@245 69 end
Chris@245 70
Chris@119 71 def test_diff
Chris@119 72 if @adapter.class.client_version_above?([1, 2])
Chris@119 73 assert_nil @adapter.diff(nil, '100000')
Chris@119 74 end
Chris@119 75 assert_nil @adapter.diff(nil, '100000', '200000')
Chris@119 76 [2, '400bb8672109', '400', 400].each do |r1|
Chris@119 77 diff1 = @adapter.diff(nil, r1)
Chris@245 78 if @diff_c_support
Chris@119 79 assert_equal 28, diff1.size
Chris@119 80 buf = diff1[24].gsub(/\r\n|\r|\n/, "")
Chris@119 81 assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
Chris@119 82 else
Chris@119 83 assert_equal 0, diff1.size
Chris@119 84 end
Chris@119 85 [4, 'def6d2f1254a'].each do |r2|
Chris@119 86 diff2 = @adapter.diff(nil,r1,r2)
Chris@119 87 assert_equal 49, diff2.size
Chris@119 88 buf = diff2[41].gsub(/\r\n|\r|\n/, "")
Chris@119 89 assert_equal "+class WelcomeController < ApplicationController", buf
Chris@119 90 diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
Chris@119 91 assert_equal 20, diff3.size
Chris@119 92 buf = diff3[12].gsub(/\r\n|\r|\n/, "")
Chris@119 93 assert_equal "+ @watched.remove_watcher(user)", buf
Chris@119 94 end
Chris@119 95 end
Chris@119 96 end
Chris@119 97
Chris@210 98 def test_diff_made_by_revision
Chris@245 99 if @diff_c_support
Chris@210 100 [16, '16', '4cddb4e45f52'].each do |r1|
Chris@210 101 diff1 = @adapter.diff(nil, r1)
Chris@210 102 assert_equal 5, diff1.size
Chris@210 103 buf = diff1[4].gsub(/\r\n|\r|\n/, "")
Chris@210 104 assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
Chris@210 105 end
Chris@210 106 end
Chris@210 107 end
Chris@210 108
Chris@119 109 def test_cat
Chris@119 110 [2, '400bb8672109', '400', 400].each do |r|
Chris@119 111 buf = @adapter.cat('sources/welcome_controller.rb', r)
Chris@119 112 assert buf
Chris@119 113 lines = buf.split("\r\n")
Chris@119 114 assert_equal 25, lines.length
Chris@119 115 assert_equal 'class WelcomeController < ApplicationController', lines[17]
Chris@119 116 end
Chris@119 117 assert_nil @adapter.cat('sources/welcome_controller.rb')
Chris@119 118 end
Chris@119 119
Chris@119 120 def test_annotate
Chris@119 121 assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
Chris@119 122 [2, '400bb8672109', '400', 400].each do |r|
Chris@119 123 ann = @adapter.annotate('sources/welcome_controller.rb', r)
Chris@119 124 assert ann
Chris@119 125 assert_equal '1', ann.revisions[17].revision
Chris@119 126 assert_equal '9d5b5b004199', ann.revisions[17].identifier
Chris@119 127 assert_equal 'jsmith', ann.revisions[0].author
Chris@119 128 assert_equal 25, ann.lines.length
Chris@119 129 assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
Chris@119 130 end
Chris@119 131 end
Chris@119 132
Chris@119 133 def test_entries
Chris@119 134 assert_nil @adapter.entries(nil, '100000')
Chris@245 135
Chris@245 136 assert_equal 1, @adapter.entries("sources", 3).size
Chris@245 137 assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
Chris@245 138
Chris@119 139 [2, '400bb8672109', '400', 400].each do |r|
Chris@119 140 entries1 = @adapter.entries(nil, r)
Chris@119 141 assert entries1
Chris@119 142 assert_equal 3, entries1.size
Chris@119 143 assert_equal 'sources', entries1[1].name
Chris@119 144 assert_equal 'sources', entries1[1].path
Chris@119 145 assert_equal 'dir', entries1[1].kind
Chris@245 146 readme = entries1[2]
Chris@245 147 assert_equal 'README', readme.name
Chris@245 148 assert_equal 'README', readme.path
Chris@245 149 assert_equal 'file', readme.kind
Chris@245 150 assert_equal 27, readme.size
Chris@245 151 assert_equal '1', readme.lastrev.revision
Chris@245 152 assert_equal '9d5b5b004199', readme.lastrev.identifier
Chris@245 153 # 2007-12-14 10:24:01 +0100
Chris@245 154 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
Chris@119 155
Chris@119 156 entries2 = @adapter.entries('sources', r)
Chris@119 157 assert entries2
Chris@119 158 assert_equal 2, entries2.size
Chris@119 159 assert_equal 'watchers_controller.rb', entries2[0].name
Chris@119 160 assert_equal 'sources/watchers_controller.rb', entries2[0].path
Chris@119 161 assert_equal 'file', entries2[0].kind
Chris@119 162 assert_equal 'welcome_controller.rb', entries2[1].name
Chris@119 163 assert_equal 'sources/welcome_controller.rb', entries2[1].path
Chris@119 164 assert_equal 'file', entries2[1].kind
Chris@119 165 end
Chris@119 166 end
Chris@119 167
Chris@245 168 def test_entries_tag
Chris@245 169 entries1 = @adapter.entries(nil, 'tag_test.00')
Chris@245 170 assert entries1
Chris@245 171 assert_equal 3, entries1.size
Chris@245 172 assert_equal 'sources', entries1[1].name
Chris@245 173 assert_equal 'sources', entries1[1].path
Chris@245 174 assert_equal 'dir', entries1[1].kind
Chris@245 175 readme = entries1[2]
Chris@245 176 assert_equal 'README', readme.name
Chris@245 177 assert_equal 'README', readme.path
Chris@245 178 assert_equal 'file', readme.kind
Chris@245 179 assert_equal 21, readme.size
Chris@245 180 assert_equal '0', readme.lastrev.revision
Chris@245 181 assert_equal '0885933ad4f6', readme.lastrev.identifier
Chris@245 182 # 2007-12-14 10:22:52 +0100
Chris@245 183 assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
Chris@245 184 end
Chris@245 185
Chris@245 186 def test_entries_branch
Chris@245 187 entries1 = @adapter.entries(nil, 'test-branch-00')
Chris@245 188 assert entries1
Chris@245 189 assert_equal 5, entries1.size
Chris@245 190 assert_equal 'sql_escape', entries1[2].name
Chris@245 191 assert_equal 'sql_escape', entries1[2].path
Chris@245 192 assert_equal 'dir', entries1[2].kind
Chris@245 193 readme = entries1[4]
Chris@245 194 assert_equal 'README', readme.name
Chris@245 195 assert_equal 'README', readme.path
Chris@245 196 assert_equal 'file', readme.kind
Chris@245 197 assert_equal 365, readme.size
Chris@245 198 assert_equal '8', readme.lastrev.revision
Chris@245 199 assert_equal 'c51f5bb613cd', readme.lastrev.identifier
Chris@245 200 # 2001-02-01 00:00:00 -0900
Chris@245 201 assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
Chris@245 202 end
Chris@245 203
Chris@245 204 def test_locate_on_outdated_repository
Chris@245 205 assert_equal 1, @adapter.entries("images", 0).size
Chris@245 206 assert_equal 2, @adapter.entries("images").size
Chris@245 207 assert_equal 2, @adapter.entries("images", 2).size
Chris@245 208 end
Chris@245 209
Chris@119 210 def test_access_by_nodeid
Chris@119 211 path = 'sources/welcome_controller.rb'
Chris@119 212 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
Chris@119 213 end
Chris@119 214
Chris@119 215 def test_access_by_fuzzy_nodeid
Chris@119 216 path = 'sources/welcome_controller.rb'
Chris@119 217 # falls back to nodeid
Chris@119 218 assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
Chris@119 219 end
Chris@119 220
Chris@245 221 def test_tags
Chris@245 222 assert_equal ['tag_test.00', 'tag-init-revision'], @adapter.tags
Chris@245 223 end
Chris@245 224
Chris@245 225 def test_tagmap
Chris@245 226 tm = { 'tag_test.00' => '6987191f453a',
Chris@245 227 'tag-init-revision' => '0885933ad4f6' }
Chris@245 228 assert_equal tm, @adapter.tagmap
Chris@245 229 end
Chris@245 230
Chris@245 231 def test_branches
Chris@245 232 assert_equal ['default', 'branch (1)[2]&,%.-3_4', 'test-branch-00'],
Chris@245 233 @adapter.branches
Chris@245 234 end
Chris@245 235
Chris@245 236 def test_branchmap
Chris@245 237 bm = { 'default' => '4cddb4e45f52',
Chris@245 238 'branch (1)[2]&,%.-3_4' => '933ca60293d7',
Chris@245 239 'test-branch-00' => '3a330eb32958' }
Chris@245 240 assert_equal bm, @adapter.branchmap
Chris@245 241 end
Chris@245 242
Chris@119 243 private
Chris@119 244
Chris@119 245 def test_hgversion_for(hgversion, version)
Chris@119 246 @adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
Chris@119 247 assert_equal version, @adapter.class.hgversion
Chris@119 248 end
Chris@119 249
Chris@119 250 def test_template_path_for(version, template)
Chris@245 251 assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
Chris@119 252 @adapter.class.template_path_for(version)
Chris@119 253 assert File.exist?(@adapter.class.template_path_for(version))
Chris@119 254 end
Chris@119 255 else
Chris@119 256 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
Chris@119 257 def test_fake; assert true end
Chris@0 258 end
Chris@0 259 end
Chris@119 260
Chris@0 261 rescue LoadError
Chris@119 262 class MercurialMochaFake < ActiveSupport::TestCase
Chris@119 263 def test_fake; assert(false, "Requires mocha to run those tests") end
Chris@119 264 end
Chris@0 265 end
Chris@119 266