annotate test/unit/lib/redmine/scm/adapters/git_adapter_test.rb @ 1469:c77ab1edff6b bug_563

Close obsolete branch bug_563
author Chris Cannam
date Wed, 23 Jan 2013 14:12:47 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@119 1 # encoding: utf-8
Chris@119 2
Chris@245 3 # This file includes UTF-8 "Felix Schäfer".
Chris@245 4 # We need to consider Ruby 1.9 compatibility.
Chris@245 5
Chris@119 6 require File.expand_path('../../../../../../test_helper', __FILE__)
Chris@245 7 begin
Chris@245 8 require 'mocha'
Chris@0 9
Chris@245 10 class GitAdapterTest < ActiveSupport::TestCase
Chris@909 11 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
Chris@0 12
Chris@245 13 FELIX_UTF8 = "Felix Schäfer"
Chris@245 14 FELIX_HEX = "Felix Sch\xC3\xA4fer"
Chris@441 15 CHAR_1_HEX = "\xc3\x9c"
Chris@441 16
Chris@441 17 ## Ruby uses ANSI api to fork a process on Windows.
Chris@441 18 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
Chris@441 19 ## and these are incompatible with ASCII.
Chris@441 20 # WINDOWS_PASS = Redmine::Platform.mswin?
Chris@441 21 WINDOWS_PASS = false
Chris@245 22
Chris@909 23 ## Git, Mercurial and CVS path encodings are binary.
Chris@909 24 ## Subversion supports URL encoding for path.
Chris@909 25 ## Redmine Mercurial adapter and extension use URL encoding.
Chris@909 26 ## Git accepts only binary path in command line parameter.
Chris@909 27 ## So, there is no way to use binary command line parameter in JRuby.
Chris@909 28 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
Chris@909 29 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
Chris@909 30
Chris@245 31 if File.directory?(REPOSITORY_PATH)
Chris@245 32 def setup
Chris@441 33 adapter_class = Redmine::Scm::Adapters::GitAdapter
Chris@441 34 assert adapter_class
Chris@441 35 assert adapter_class.client_command
Chris@441 36 assert_equal true, adapter_class.client_available
Chris@441 37 assert_equal true, adapter_class.client_version_above?([1])
Chris@441 38 assert_equal true, adapter_class.client_version_above?([1, 0])
Chris@441 39
Chris@441 40 @adapter = Redmine::Scm::Adapters::GitAdapter.new(
Chris@441 41 REPOSITORY_PATH,
Chris@441 42 nil,
Chris@441 43 nil,
Chris@441 44 nil,
Chris@441 45 'ISO-8859-1'
Chris@441 46 )
Chris@441 47 assert @adapter
Chris@441 48 @char_1 = CHAR_1_HEX.dup
Chris@441 49 if @char_1.respond_to?(:force_encoding)
Chris@441 50 @char_1.force_encoding('UTF-8')
Chris@441 51 end
Chris@245 52 end
Chris@245 53
Chris@245 54 def test_scm_version
Chris@245 55 to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
Chris@245 56 "1.6.1\n1.7\n1.8" => [1,6,1],
Chris@245 57 "1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
Chris@245 58 to_test.each do |s, v|
Chris@245 59 test_scm_version_for(s, v)
Chris@245 60 end
Chris@245 61 end
Chris@245 62
Chris@245 63 def test_branches
Chris@909 64 brs = []
Chris@909 65 @adapter.branches.each do |b|
Chris@909 66 brs << b
Chris@909 67 end
Chris@909 68 assert_equal 4, brs.length
Chris@909 69 assert_equal 'latin-1-path-encoding', brs[0].to_s
Chris@909 70 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', brs[0].revision
Chris@909 71 assert_equal brs[0].scmid, brs[0].revision
Chris@909 72 assert_equal 'master', brs[1].to_s
Chris@909 73 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', brs[1].revision
Chris@909 74 assert_equal brs[1].scmid, brs[1].revision
Chris@909 75 assert_equal 'test-latin-1', brs[2].to_s
Chris@909 76 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', brs[2].revision
Chris@909 77 assert_equal brs[2].scmid, brs[2].revision
Chris@909 78 assert_equal 'test_branch', brs[3].to_s
Chris@909 79 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', brs[3].revision
Chris@909 80 assert_equal brs[3].scmid, brs[3].revision
Chris@441 81 end
Chris@441 82
Chris@441 83 def test_tags
Chris@441 84 assert_equal [
Chris@441 85 "tag00.lightweight",
Chris@441 86 "tag01.annotated",
Chris@441 87 ], @adapter.tags
Chris@245 88 end
Chris@245 89
Chris@245 90 def test_getting_all_revisions
Chris@441 91 assert_equal 21, @adapter.revisions('',nil,nil,:all => true).length
Chris@245 92 end
Chris@245 93
Chris@245 94 def test_getting_certain_revisions
Chris@245 95 assert_equal 1, @adapter.revisions('','899a15d^','899a15d').length
Chris@245 96 end
Chris@245 97
Chris@441 98 def test_revisions_reverse
Chris@441 99 revs1 = @adapter.revisions('',nil,nil,{:all => true, :reverse => true })
Chris@441 100 assert_equal 21, revs1.length
Chris@441 101 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[0].identifier
Chris@441 102 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[20].identifier
Chris@441 103 end
Chris@441 104
Chris@441 105 def test_revisions_reverse_with_time
Chris@441 106 since2 = Time.gm(2010, 9, 30, 0, 0, 0)
Chris@441 107 revs2 = @adapter.revisions('', nil, nil,
Chris@441 108 {:all => true, :since => since2, :reverse => true})
Chris@441 109 assert_equal 6, revs2.length
Chris@441 110 assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', revs2[0].identifier
Chris@441 111 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[5].identifier
Chris@441 112 end
Chris@441 113
Chris@441 114 def test_revisions_master_all
Chris@441 115 revs1 = []
Chris@441 116 @adapter.revisions('', nil, "master",{}) do |rev|
Chris@441 117 revs1 << rev
Chris@441 118 end
Chris@441 119 assert_equal 15, revs1.length
Chris@441 120 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
Chris@441 121 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
Chris@441 122
Chris@441 123 revs2 = []
Chris@441 124 @adapter.revisions('', nil, "master",
Chris@441 125 {:reverse => true}) do |rev|
Chris@441 126 revs2 << rev
Chris@441 127 end
Chris@441 128 assert_equal 15, revs2.length
Chris@441 129 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
Chris@441 130 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
Chris@441 131 end
Chris@441 132
Chris@441 133 def test_revisions_master_merged_rev
Chris@441 134 revs1 = []
Chris@441 135 @adapter.revisions('',
Chris@441 136 "713f4944648826f558cf548222f813dabe7cbb04",
Chris@441 137 "master",
Chris@441 138 {:reverse => true}) do |rev|
Chris@441 139 revs1 << rev
Chris@441 140 end
Chris@441 141 assert_equal 8, revs1.length
Chris@441 142 assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
Chris@441 143 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
Chris@441 144 # 4a07fe31b is not a child of 713f49446
Chris@441 145 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
Chris@441 146 # Merged revision
Chris@441 147 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
Chris@441 148 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
Chris@441 149
Chris@441 150 revs2 = []
Chris@441 151 @adapter.revisions('',
Chris@441 152 "fba357b886984ee71185ad2065e65fc0417d9b92",
Chris@441 153 "master",
Chris@441 154 {:reverse => true}) do |rev|
Chris@441 155 revs2 << rev
Chris@441 156 end
Chris@441 157 assert_equal 7, revs2.length
Chris@441 158 assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
Chris@441 159 # 4a07fe31b is not a child of fba357b8869
Chris@441 160 assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
Chris@441 161 # Merged revision
Chris@441 162 assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
Chris@441 163 assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
Chris@441 164 end
Chris@441 165
Chris@441 166 def test_revisions_branch_latin_1_path_encoding_all
Chris@441 167 revs1 = []
Chris@441 168 @adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
Chris@441 169 revs1 << rev
Chris@441 170 end
Chris@441 171 assert_equal 8, revs1.length
Chris@441 172 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
Chris@441 173 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
Chris@441 174
Chris@441 175 revs2 = []
Chris@441 176 @adapter.revisions('', nil, "latin-1-path-encoding",
Chris@441 177 {:reverse => true}) do |rev|
Chris@441 178 revs2 << rev
Chris@441 179 end
Chris@441 180 assert_equal 8, revs2.length
Chris@441 181 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
Chris@441 182 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
Chris@441 183 end
Chris@441 184
Chris@441 185 def test_revisions_branch_latin_1_path_encoding_with_rev
Chris@441 186 revs1 = []
Chris@441 187 @adapter.revisions('',
Chris@441 188 '7234cb2750b63f47bff735edc50a1c0a433c2518',
Chris@441 189 "latin-1-path-encoding",
Chris@441 190 {:reverse => true}) do |rev|
Chris@441 191 revs1 << rev
Chris@441 192 end
Chris@441 193 assert_equal 7, revs1.length
Chris@441 194 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
Chris@441 195 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
Chris@441 196
Chris@441 197 revs2 = []
Chris@441 198 @adapter.revisions('',
Chris@441 199 '57ca437c0acbbcb749821fdf3726a1367056d364',
Chris@441 200 "latin-1-path-encoding",
Chris@441 201 {:reverse => true}) do |rev|
Chris@441 202 revs2 << rev
Chris@441 203 end
Chris@441 204 assert_equal 3, revs2.length
Chris@441 205 assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
Chris@441 206 assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
Chris@441 207 end
Chris@441 208
Chris@441 209 def test_revisions_invalid_rev
Chris@441 210 revs1 = []
Chris@441 211 @adapter.revisions('',
Chris@441 212 '1234abcd',
Chris@441 213 "master",
Chris@441 214 {:reverse => true}) do |rev|
Chris@441 215 revs1 << rev
Chris@441 216 end
Chris@441 217 assert_equal [], revs1
Chris@441 218 end
Chris@441 219
Chris@245 220 def test_getting_revisions_with_spaces_in_filename
Chris@245 221 assert_equal 1, @adapter.revisions("filemane with spaces.txt",
Chris@245 222 nil, nil, :all => true).length
Chris@245 223 end
Chris@245 224
Chris@909 225 def test_parents
Chris@909 226 revs1 = []
Chris@909 227 @adapter.revisions('',
Chris@909 228 nil,
Chris@909 229 "master",
Chris@909 230 {:reverse => true}) do |rev|
Chris@909 231 revs1 << rev
Chris@909 232 end
Chris@909 233 assert_equal 15, revs1.length
Chris@909 234 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
Chris@909 235 revs1[0].identifier
Chris@909 236 assert_equal nil, revs1[0].parents
Chris@909 237 assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
Chris@909 238 revs1[1].identifier
Chris@909 239 assert_equal 1, revs1[1].parents.length
Chris@909 240 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
Chris@909 241 revs1[1].parents[0]
Chris@909 242 assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
Chris@909 243 revs1[10].identifier
Chris@909 244 assert_equal 2, revs1[10].parents.length
Chris@909 245 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
Chris@909 246 revs1[10].parents[0]
Chris@909 247 assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
Chris@909 248 revs1[10].parents[1]
Chris@909 249 end
Chris@909 250
Chris@245 251 def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
Chris@245 252 assert_equal " filename with a leading space.txt ",
Chris@245 253 @adapter.revisions(" filename with a leading space.txt ",
Chris@245 254 nil, nil, :all => true)[0].paths[0][:path]
Chris@245 255 end
Chris@245 256
Chris@245 257 def test_getting_entries_with_leading_and_trailing_spaces_in_filename
Chris@245 258 assert_equal " filename with a leading space.txt ",
Chris@245 259 @adapter.entries('',
Chris@245 260 '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
Chris@245 261 end
Chris@245 262
Chris@245 263 def test_annotate
Chris@245 264 annotate = @adapter.annotate('sources/watchers_controller.rb')
Chris@245 265 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
Chris@245 266 assert_equal 41, annotate.lines.size
Chris@441 267 assert_equal "# This program is free software; you can redistribute it and/or",
Chris@441 268 annotate.lines[4].strip
Chris@245 269 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
Chris@245 270 annotate.revisions[4].identifier
Chris@245 271 assert_equal "jsmith", annotate.revisions[4].author
Chris@245 272 end
Chris@245 273
Chris@245 274 def test_annotate_moved_file
Chris@245 275 annotate = @adapter.annotate('renamed_test.txt')
Chris@245 276 assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
Chris@245 277 assert_equal 2, annotate.lines.size
Chris@245 278 end
Chris@245 279
Chris@245 280 def test_last_rev
Chris@245 281 last_rev = @adapter.lastrev("README",
Chris@245 282 "4f26664364207fa8b1af9f8722647ab2d4ac5d43")
Chris@245 283 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
Chris@245 284 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
Chris@245 285 assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
Chris@245 286 assert_equal "2009-06-24 05:27:38".to_time, last_rev.time
Chris@245 287 end
Chris@245 288
Chris@245 289 def test_last_rev_with_spaces_in_filename
Chris@245 290 last_rev = @adapter.lastrev("filemane with spaces.txt",
Chris@245 291 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
Chris@441 292 str_felix_utf8 = FELIX_UTF8.dup
Chris@441 293 str_felix_hex = FELIX_HEX.dup
Chris@245 294 last_rev_author = last_rev.author
Chris@245 295 if last_rev_author.respond_to?(:force_encoding)
Chris@245 296 last_rev_author.force_encoding('UTF-8')
Chris@245 297 end
Chris@245 298 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
Chris@245 299 assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
Chris@245 300 assert_equal "#{str_felix_utf8} <felix@fachschaften.org>",
Chris@245 301 last_rev.author
Chris@245 302 assert_equal "#{str_felix_hex} <felix@fachschaften.org>",
Chris@245 303 last_rev.author
Chris@245 304 assert_equal "2010-09-18 19:59:46".to_time, last_rev.time
Chris@245 305 end
Chris@245 306
Chris@441 307 def test_latin_1_path
Chris@441 308 if WINDOWS_PASS
Chris@441 309 #
Chris@909 310 elsif JRUBY_SKIP
Chris@909 311 puts JRUBY_SKIP_STR
Chris@441 312 else
Chris@441 313 p2 = "latin-1-dir/test-#{@char_1}-2.txt"
Chris@441 314 ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
Chris@441 315 assert @adapter.diff(p2, r1)
Chris@441 316 assert @adapter.cat(p2, r1)
Chris@441 317 assert_equal 1, @adapter.annotate(p2, r1).lines.length
Chris@441 318 ['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
Chris@441 319 assert @adapter.diff(p2, r1, r2)
Chris@441 320 end
Chris@441 321 end
Chris@441 322 end
Chris@441 323 end
Chris@441 324
Chris@441 325 def test_entries_tag
Chris@441 326 entries1 = @adapter.entries(nil, 'tag01.annotated',
Chris@441 327 options = {:report_last_commit => true})
Chris@441 328 assert entries1
Chris@441 329 assert_equal 3, entries1.size
Chris@441 330 assert_equal 'sources', entries1[1].name
Chris@441 331 assert_equal 'sources', entries1[1].path
Chris@441 332 assert_equal 'dir', entries1[1].kind
Chris@441 333 readme = entries1[2]
Chris@441 334 assert_equal 'README', readme.name
Chris@441 335 assert_equal 'README', readme.path
Chris@441 336 assert_equal 'file', readme.kind
Chris@441 337 assert_equal 27, readme.size
Chris@441 338 assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
Chris@441 339 assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
Chris@441 340 end
Chris@441 341
Chris@441 342 def test_entries_branch
Chris@441 343 entries1 = @adapter.entries(nil, 'test_branch',
Chris@441 344 options = {:report_last_commit => true})
Chris@441 345 assert entries1
Chris@441 346 assert_equal 4, entries1.size
Chris@441 347 assert_equal 'sources', entries1[1].name
Chris@441 348 assert_equal 'sources', entries1[1].path
Chris@441 349 assert_equal 'dir', entries1[1].kind
Chris@441 350 readme = entries1[2]
Chris@441 351 assert_equal 'README', readme.name
Chris@441 352 assert_equal 'README', readme.path
Chris@441 353 assert_equal 'file', readme.kind
Chris@441 354 assert_equal 159, readme.size
Chris@441 355 assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
Chris@441 356 assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
Chris@441 357 end
Chris@441 358
Chris@441 359 def test_entries_latin_1_files
Chris@441 360 entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
Chris@441 361 assert entries1
Chris@441 362 assert_equal 3, entries1.size
Chris@441 363 f1 = entries1[1]
Chris@441 364 assert_equal "test-#{@char_1}-2.txt", f1.name
Chris@441 365 assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
Chris@441 366 assert_equal 'file', f1.kind
Chris@441 367 end
Chris@441 368
Chris@441 369 def test_entries_latin_1_dir
Chris@441 370 if WINDOWS_PASS
Chris@441 371 #
Chris@909 372 elsif JRUBY_SKIP
Chris@909 373 puts JRUBY_SKIP_STR
Chris@441 374 else
Chris@441 375 entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
Chris@441 376 '1ca7f5ed')
Chris@441 377 assert entries1
Chris@441 378 assert_equal 3, entries1.size
Chris@441 379 f1 = entries1[1]
Chris@441 380 assert_equal "test-#{@char_1}-2.txt", f1.name
Chris@441 381 assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
Chris@441 382 assert_equal 'file', f1.kind
Chris@441 383 end
Chris@441 384 end
Chris@441 385
Chris@441 386 def test_path_encoding_default_utf8
Chris@441 387 adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
Chris@441 388 REPOSITORY_PATH
Chris@441 389 )
Chris@441 390 assert_equal "UTF-8", adpt1.path_encoding
Chris@441 391 adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
Chris@441 392 REPOSITORY_PATH,
Chris@441 393 nil,
Chris@441 394 nil,
Chris@441 395 nil,
Chris@441 396 ""
Chris@441 397 )
Chris@441 398 assert_equal "UTF-8", adpt2.path_encoding
Chris@441 399 end
Chris@441 400
Chris@909 401 def test_cat_path_invalid
Chris@909 402 assert_nil @adapter.cat('invalid')
Chris@909 403 end
Chris@909 404
Chris@909 405 def test_cat_revision_invalid
Chris@909 406 assert @adapter.cat('README')
Chris@909 407 assert_nil @adapter.cat('README', 'abcd1234efgh')
Chris@909 408 end
Chris@909 409
Chris@909 410 def test_diff_path_invalid
Chris@909 411 assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
Chris@909 412 end
Chris@909 413
Chris@909 414 def test_diff_revision_invalid
Chris@909 415 assert_nil @adapter.diff(nil, 'abcd1234efgh')
Chris@909 416 assert_nil @adapter.diff(nil, '713f4944648826f5', 'abcd1234efgh')
Chris@909 417 assert_nil @adapter.diff(nil, 'abcd1234efgh', '713f4944648826f5')
Chris@909 418 end
Chris@909 419
Chris@909 420 def test_annotate_path_invalid
Chris@909 421 assert_nil @adapter.annotate('invalid')
Chris@909 422 end
Chris@909 423
Chris@909 424 def test_annotate_revision_invalid
Chris@909 425 assert @adapter.annotate('README')
Chris@909 426 assert_nil @adapter.annotate('README', 'abcd1234efgh')
Chris@909 427 end
Chris@909 428
Chris@245 429 private
Chris@245 430
Chris@245 431 def test_scm_version_for(scm_command_version, version)
Chris@245 432 @adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
Chris@245 433 assert_equal version, @adapter.class.scm_command_version
Chris@245 434 end
Chris@245 435
Chris@245 436 else
Chris@245 437 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
Chris@245 438 def test_fake; assert true end
Chris@0 439 end
Chris@245 440 end
Chris@0 441
Chris@245 442 rescue LoadError
Chris@245 443 class GitMochaFake < ActiveSupport::TestCase
Chris@245 444 def test_fake; assert(false, "Requires mocha to run those tests") end
Chris@0 445 end
Chris@0 446 end