annotate test/unit/repository_mercurial_test.rb @ 1628:9c5f8e24dadc live tip

Quieten this cron script
author Chris Cannam
date Tue, 25 Aug 2020 11:38:49 +0100
parents fb9a13467253
children
rev   line source
Chris@441 1 # Redmine - project management software
Chris@1494 2 # Copyright (C) 2006-2014 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@441 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@441 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class RepositoryMercurialTest < ActiveSupport::TestCase
Chris@0 21 fixtures :projects
Chris@441 22
Chris@1115 23 include Redmine::I18n
Chris@1115 24
Chris@909 25 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
Chris@1494 26 NUM_REV = 34
Chris@441 27 CHAR_1_HEX = "\xc3\x9c"
Chris@245 28
Chris@1115 29 def setup
Chris@1115 30 @project = Project.find(3)
Chris@1115 31 @repository = Repository::Mercurial.create(
Chris@1115 32 :project => @project,
Chris@1115 33 :url => REPOSITORY_PATH,
Chris@1115 34 :path_encoding => 'ISO-8859-1'
Chris@1115 35 )
Chris@1115 36 assert @repository
Chris@1115 37 @char_1 = CHAR_1_HEX.dup
Chris@1115 38 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
Chris@1115 39 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
Chris@1115 40 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
Chris@1115 41 if @char_1.respond_to?(:force_encoding)
Chris@1115 42 @char_1.force_encoding('UTF-8')
Chris@1115 43 @tag_char_1.force_encoding('UTF-8')
Chris@1115 44 @branch_char_0.force_encoding('UTF-8')
Chris@1115 45 @branch_char_1.force_encoding('UTF-8')
Chris@1115 46 end
Chris@1115 47 end
Chris@1115 48
Chris@1115 49 def test_blank_path_to_repository_error_message
Chris@1115 50 set_language_if_valid 'en'
Chris@1115 51 repo = Repository::Mercurial.new(
Chris@1115 52 :project => @project,
Chris@1115 53 :identifier => 'test'
Chris@1115 54 )
Chris@1115 55 assert !repo.save
Chris@1115 56 assert_include "Path to repository can't be blank",
Chris@1115 57 repo.errors.full_messages
Chris@1115 58 end
Chris@1115 59
Chris@1115 60 def test_blank_path_to_repository_error_message_fr
Chris@1115 61 set_language_if_valid 'fr'
Chris@1115 62 str = "Chemin du d\xc3\xa9p\xc3\xb4t doit \xc3\xaatre renseign\xc3\xa9(e)"
Chris@1115 63 str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
Chris@1115 64 repo = Repository::Mercurial.new(
Chris@1115 65 :project => @project,
Chris@1115 66 :url => "",
Chris@1115 67 :identifier => 'test',
Chris@1115 68 :path_encoding => ''
Chris@1115 69 )
Chris@1115 70 assert !repo.save
Chris@1115 71 assert_include str, repo.errors.full_messages
Chris@1115 72 end
Chris@1115 73
Chris@441 74 if File.directory?(REPOSITORY_PATH)
Chris@1115 75 def test_scm_available
Chris@441 76 klass = Repository::Mercurial
Chris@441 77 assert_equal "Mercurial", klass.scm_name
Chris@441 78 assert klass.scm_adapter_class
Chris@441 79 assert_not_equal "", klass.scm_command
Chris@441 80 assert_equal true, klass.scm_available
Chris@1115 81 end
Chris@441 82
Chris@1517 83 def test_entries_on_tip
Chris@1115 84 entries = @repository.entries
Chris@1115 85 assert_kind_of Redmine::Scm::Adapters::Entries, entries
Chris@441 86 end
Chris@441 87
Chris@1517 88 def assert_entries(is_short_scmid=true)
Chris@1517 89 hex = "9d5b5b00419901478496242e0768deba1ce8c51e"
Chris@1517 90 scmid = scmid_for_assert(hex, is_short_scmid)
Chris@1517 91 [2, '400bb8672109', '400', 400].each do |r|
Chris@1517 92 entries1 = @repository.entries(nil, r)
Chris@1517 93 assert entries1
Chris@1517 94 assert_kind_of Redmine::Scm::Adapters::Entries, entries1
Chris@1517 95 assert_equal 3, entries1.size
Chris@1517 96 readme = entries1[2]
Chris@1517 97 assert_equal '1', readme.lastrev.revision
Chris@1517 98 assert_equal scmid, readme.lastrev.identifier
Chris@1517 99 assert_equal '1', readme.changeset.revision
Chris@1517 100 assert_equal scmid, readme.changeset.scmid
Chris@1517 101 end
Chris@1517 102 end
Chris@1517 103 private :assert_entries
Chris@1517 104
Chris@1517 105 def test_entries_short_id
Chris@1517 106 assert_equal 0, @repository.changesets.count
Chris@1517 107 create_rev0_short_id
Chris@1517 108 assert_equal 1, @repository.changesets.count
Chris@1517 109 @repository.fetch_changesets
Chris@1517 110 @project.reload
Chris@1517 111 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 112 assert_entries(true)
Chris@1517 113 end
Chris@1517 114
Chris@1517 115 def test_entries_long_id
Chris@1517 116 assert_equal 0, @repository.changesets.count
Chris@1517 117 @repository.fetch_changesets
Chris@1517 118 @project.reload
Chris@1517 119 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 120 assert_entries(false)
Chris@1517 121 end
Chris@1517 122
Chris@1517 123 def test_entry_on_tip
Chris@1517 124 entry = @repository.entry
Chris@1517 125 assert_kind_of Redmine::Scm::Adapters::Entry, entry
Chris@1517 126 assert_equal "", entry.path
Chris@1517 127 assert_equal 'dir', entry.kind
Chris@1517 128 end
Chris@1517 129
Chris@1517 130 def assert_entry(is_short_scmid=true)
Chris@1517 131 hex = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
Chris@1517 132 scmid = scmid_for_assert(hex, is_short_scmid)
Chris@1517 133 ["README", "/README"].each do |path|
Chris@1517 134 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
Chris@1517 135 entry = @repository.entry(path, rev)
Chris@1517 136 assert_kind_of Redmine::Scm::Adapters::Entry, entry
Chris@1517 137 assert_equal "README", entry.path
Chris@1517 138 assert_equal "file", entry.kind
Chris@1517 139 assert_equal '0', entry.lastrev.revision
Chris@1517 140 assert_equal scmid, entry.lastrev.identifier
Chris@1517 141 end
Chris@1517 142 end
Chris@1517 143 ["sources", "/sources", "/sources/"].each do |path|
Chris@1517 144 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
Chris@1517 145 entry = @repository.entry(path, rev)
Chris@1517 146 assert_kind_of Redmine::Scm::Adapters::Entry, entry
Chris@1517 147 assert_equal "sources", entry.path
Chris@1517 148 assert_equal "dir", entry.kind
Chris@1517 149 end
Chris@1517 150 end
Chris@1517 151 ["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
Chris@1517 152 ["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
Chris@1517 153 entry = @repository.entry(path, rev)
Chris@1517 154 assert_kind_of Redmine::Scm::Adapters::Entry, entry
Chris@1517 155 assert_equal "sources/watchers_controller.rb", entry.path
Chris@1517 156 assert_equal "file", entry.kind
Chris@1517 157 assert_equal '0', entry.lastrev.revision
Chris@1517 158 assert_equal scmid, entry.lastrev.identifier
Chris@1517 159 end
Chris@1517 160 end
Chris@1517 161 end
Chris@1517 162 private :assert_entry
Chris@1517 163
Chris@1517 164 def test_entry_short_id
Chris@1517 165 assert_equal 0, @repository.changesets.count
Chris@1517 166 create_rev0_short_id
Chris@1517 167 assert_equal 1, @repository.changesets.count
Chris@1517 168 assert_entry(true)
Chris@1517 169 end
Chris@1517 170
Chris@1517 171 def test_entry_long_id
Chris@1517 172 assert_entry(false)
Chris@1517 173 end
Chris@1517 174
Chris@0 175 def test_fetch_changesets_from_scratch
Chris@909 176 assert_equal 0, @repository.changesets.count
Chris@0 177 @repository.fetch_changesets
Chris@909 178 @project.reload
Chris@909 179 assert_equal NUM_REV, @repository.changesets.count
Chris@1115 180 assert_equal 46, @repository.filechanges.count
Chris@1517 181 rev0 = @repository.changesets.find_by_revision('0')
Chris@119 182 assert_equal "Initial import.\nThe repository contains 3 files.",
Chris@1517 183 rev0.comments
Chris@1517 184 assert_equal "0885933ad4f68d77c2649cd11f8311276e7ef7ce", rev0.scmid
Chris@1517 185 first_rev = @repository.changesets.first
Chris@1517 186 last_rev = @repository.changesets.last
Chris@1517 187 assert_equal "#{NUM_REV - 1}", first_rev.revision
Chris@1517 188 assert_equal "0", last_rev.revision
Chris@1517 189 end
Chris@1517 190
Chris@1517 191 def test_fetch_changesets_keep_short_id
Chris@1517 192 assert_equal 0, @repository.changesets.count
Chris@1517 193 create_rev0_short_id
Chris@1517 194 assert_equal 1, @repository.changesets.count
Chris@1517 195 @repository.fetch_changesets
Chris@1517 196 @project.reload
Chris@1517 197 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 198 rev1 = @repository.changesets.find_by_revision('1')
Chris@1517 199 assert_equal "9d5b5b004199", rev1.scmid
Chris@1517 200 end
Chris@1517 201
Chris@1517 202 def test_fetch_changesets_keep_long_id
Chris@1517 203 assert_equal 0, @repository.changesets.count
Chris@1517 204 Changeset.create!(:repository => @repository,
Chris@1517 205 :committed_on => Time.now,
Chris@1517 206 :revision => '0',
Chris@1517 207 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
Chris@1517 208 :comments => 'test')
Chris@1517 209 assert_equal 1, @repository.changesets.count
Chris@1517 210 @repository.fetch_changesets
Chris@1517 211 @project.reload
Chris@1517 212 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 213 rev1 = @repository.changesets.find_by_revision('1')
Chris@1517 214 assert_equal "9d5b5b00419901478496242e0768deba1ce8c51e", rev1.scmid
Chris@0 215 end
Chris@245 216
Chris@0 217 def test_fetch_changesets_incremental
Chris@909 218 assert_equal 0, @repository.changesets.count
Chris@0 219 @repository.fetch_changesets
Chris@909 220 @project.reload
Chris@909 221 assert_equal NUM_REV, @repository.changesets.count
Chris@0 222 # Remove changesets with revision > 2
Chris@1517 223 @repository.changesets.each {|c| c.destroy if c.revision.to_i > 2}
Chris@909 224 @project.reload
Chris@1517 225 @repository.reload
Chris@0 226 assert_equal 3, @repository.changesets.count
Chris@441 227
Chris@0 228 @repository.fetch_changesets
Chris@909 229 @project.reload
Chris@909 230 assert_equal NUM_REV, @repository.changesets.count
Chris@0 231 end
Chris@0 232
Chris@119 233 def test_isodatesec
Chris@119 234 # Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
Chris@119 235 if @repository.scm.class.client_version_above?([1, 0])
Chris@909 236 assert_equal 0, @repository.changesets.count
Chris@119 237 @repository.fetch_changesets
Chris@909 238 @project.reload
Chris@909 239 assert_equal NUM_REV, @repository.changesets.count
Chris@119 240 rev0_committed_on = Time.gm(2007, 12, 14, 9, 22, 52)
Chris@119 241 assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
Chris@119 242 end
Chris@0 243 end
Chris@0 244
Chris@119 245 def test_changeset_order_by_revision
Chris@909 246 assert_equal 0, @repository.changesets.count
Chris@119 247 @repository.fetch_changesets
Chris@909 248 @project.reload
Chris@909 249 assert_equal NUM_REV, @repository.changesets.count
Chris@119 250
Chris@119 251 c0 = @repository.latest_changeset
Chris@119 252 c1 = @repository.changesets.find_by_revision('0')
Chris@119 253 # sorted by revision (id), not by date
Chris@119 254 assert c0.revision.to_i > c1.revision.to_i
Chris@119 255 assert c0.committed_on < c1.committed_on
Chris@119 256 end
Chris@119 257
Chris@119 258 def test_latest_changesets
Chris@909 259 assert_equal 0, @repository.changesets.count
Chris@119 260 @repository.fetch_changesets
Chris@909 261 @project.reload
Chris@909 262 assert_equal NUM_REV, @repository.changesets.count
Chris@119 263
Chris@119 264 # with_limit
Chris@119 265 changesets = @repository.latest_changesets('', nil, 2)
Chris@1494 266 assert_equal ["#{NUM_REV - 1}", "#{NUM_REV - 2}"], changesets.collect(&:revision)
Chris@119 267
Chris@119 268 # with_filepath
Chris@441 269 changesets = @repository.latest_changesets(
Chris@441 270 '/sql_escape/percent%dir/percent%file1.txt', nil)
Chris@909 271 assert_equal %w|30 11 10 9|, changesets.collect(&:revision)
Chris@119 272
Chris@441 273 changesets = @repository.latest_changesets(
Chris@441 274 '/sql_escape/underscore_dir/understrike_file.txt', nil)
Chris@909 275 assert_equal %w|30 12 9|, changesets.collect(&:revision)
Chris@441 276
Chris@441 277 changesets = @repository.latest_changesets('README', nil)
Chris@909 278 assert_equal %w|31 30 28 17 8 6 1 0|, changesets.collect(&:revision)
Chris@441 279
Chris@441 280 changesets = @repository.latest_changesets('README','8')
Chris@441 281 assert_equal %w|8 6 1 0|, changesets.collect(&:revision)
Chris@441 282
Chris@441 283 changesets = @repository.latest_changesets('README','8', 2)
Chris@441 284 assert_equal %w|8 6|, changesets.collect(&:revision)
Chris@441 285
Chris@441 286 # with_dirpath
Chris@441 287 changesets = @repository.latest_changesets('images', nil)
Chris@441 288 assert_equal %w|1 0|, changesets.collect(&:revision)
Chris@441 289
Chris@441 290 path = 'sql_escape/percent%dir'
Chris@441 291 changesets = @repository.latest_changesets(path, nil)
Chris@909 292 assert_equal %w|30 13 11 10 9|, changesets.collect(&:revision)
Chris@441 293
Chris@441 294 changesets = @repository.latest_changesets(path, '11')
Chris@441 295 assert_equal %w|11 10 9|, changesets.collect(&:revision)
Chris@441 296
Chris@441 297 changesets = @repository.latest_changesets(path, '11', 2)
Chris@441 298 assert_equal %w|11 10|, changesets.collect(&:revision)
Chris@441 299
Chris@441 300 path = 'sql_escape/underscore_dir'
Chris@441 301 changesets = @repository.latest_changesets(path, nil)
Chris@909 302 assert_equal %w|30 13 12 9|, changesets.collect(&:revision)
Chris@441 303
Chris@441 304 changesets = @repository.latest_changesets(path, '12')
Chris@441 305 assert_equal %w|12 9|, changesets.collect(&:revision)
Chris@441 306
Chris@441 307 changesets = @repository.latest_changesets(path, '12', 1)
Chris@441 308 assert_equal %w|12|, changesets.collect(&:revision)
Chris@1517 309 end
Chris@441 310
Chris@1517 311 def assert_latest_changesets_tag
Chris@441 312 changesets = @repository.latest_changesets('', 'tag_test.00')
Chris@441 313 assert_equal %w|5 4 3 2 1 0|, changesets.collect(&:revision)
Chris@1517 314 end
Chris@1517 315 private :assert_latest_changesets_tag
Chris@1517 316
Chris@1517 317 def test_latest_changesets_tag
Chris@1517 318 assert_equal 0, @repository.changesets.count
Chris@1517 319 @repository.fetch_changesets
Chris@1517 320 @project.reload
Chris@1517 321 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 322 assert_latest_changesets_tag
Chris@1517 323 end
Chris@1517 324
Chris@1517 325 def test_latest_changesets_tag_short_id
Chris@1517 326 assert_equal 0, @repository.changesets.count
Chris@1517 327 create_rev0_short_id
Chris@1517 328 assert_equal 1, @repository.changesets.count
Chris@1517 329 @repository.fetch_changesets
Chris@1517 330 @project.reload
Chris@1517 331 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 332 assert_latest_changesets_tag
Chris@1517 333 end
Chris@1517 334
Chris@1517 335 def test_latest_changesets_tag_with_path
Chris@1517 336 assert_equal 0, @repository.changesets.count
Chris@1517 337 @repository.fetch_changesets
Chris@1517 338 @project.reload
Chris@1517 339 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 340
Chris@1517 341 changesets = @repository.latest_changesets('sources', 'tag_test.00')
Chris@1517 342 assert_equal %w|4 3 2 1 0|, changesets.collect(&:revision)
Chris@1517 343 end
Chris@1517 344
Chris@1517 345 def test_latest_changesets_tag_with_limit
Chris@1517 346 assert_equal 0, @repository.changesets.count
Chris@1517 347 @repository.fetch_changesets
Chris@1517 348 @project.reload
Chris@1517 349 assert_equal NUM_REV, @repository.changesets.count
Chris@441 350
Chris@441 351 changesets = @repository.latest_changesets('', 'tag_test.00', 2)
Chris@441 352 assert_equal %w|5 4|, changesets.collect(&:revision)
Chris@441 353
Chris@441 354 changesets = @repository.latest_changesets('sources', 'tag_test.00', 2)
Chris@441 355 assert_equal %w|4 3|, changesets.collect(&:revision)
Chris@1517 356 end
Chris@441 357
Chris@1517 358 def test_latest_changesets_branch
Chris@1517 359 assert_equal 0, @repository.changesets.count
Chris@1517 360 @repository.fetch_changesets
Chris@1517 361 @project.reload
Chris@1517 362 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 363
Chris@909 364 if @repository.scm.class.client_version_above?([1, 6])
Chris@909 365 changesets = @repository.latest_changesets('', @branch_char_1)
Chris@909 366 assert_equal %w|27 26|, changesets.collect(&:revision)
Chris@909 367 end
Chris@441 368
Chris@441 369 changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
Chris@441 370 assert_equal %w|27|, changesets.collect(&:revision)
Chris@119 371 end
Chris@119 372
Chris@1517 373 def assert_latest_changesets_default_branch
Chris@1517 374 changesets = @repository.latest_changesets('', 'default')
Chris@1517 375 assert_equal %w|31 28 24 6 4 3 2 1 0|, changesets.collect(&:revision)
Chris@1517 376 end
Chris@1517 377 private :assert_latest_changesets_default_branch
Chris@1517 378
Chris@1517 379 def test_latest_changesets_default_branch
Chris@909 380 assert_equal 0, @repository.changesets.count
Chris@119 381 @repository.fetch_changesets
Chris@909 382 @project.reload
Chris@909 383 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 384 assert_latest_changesets_default_branch
Chris@1517 385 end
Chris@119 386
Chris@1517 387 def test_latest_changesets_default_branch_short_id
Chris@1517 388 assert_equal 0, @repository.changesets.count
Chris@1517 389 create_rev0_short_id
Chris@1517 390 assert_equal 1, @repository.changesets.count
Chris@1517 391 @repository.fetch_changesets
Chris@1517 392 @project.reload
Chris@1517 393 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 394 assert_latest_changesets_default_branch
Chris@1517 395 end
Chris@1517 396
Chris@1517 397 def assert_copied_files(is_short_scmid=true)
Chris@119 398 cs1 = @repository.changesets.find_by_revision('13')
Chris@119 399 assert_not_nil cs1
Chris@1115 400 c1 = cs1.filechanges.sort_by(&:path)
Chris@119 401 assert_equal 2, c1.size
Chris@119 402
Chris@1517 403 hex1 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
Chris@1517 404 scmid1 = scmid_for_assert(hex1, is_short_scmid)
Chris@119 405 assert_equal 'A', c1[0].action
Chris@119 406 assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
Chris@119 407 assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
Chris@1517 408 assert_equal scmid1, c1[0].from_revision
Chris@119 409
Chris@119 410 assert_equal 'A', c1[1].action
Chris@119 411 assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
Chris@119 412 assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
Chris@119 413
Chris@119 414 cs2 = @repository.changesets.find_by_revision('15')
Chris@1115 415 c2 = cs2.filechanges
Chris@119 416 assert_equal 1, c2.size
Chris@119 417
Chris@1517 418 hex2 = "933ca60293d78f7c7979dd123cc0c02431683575"
Chris@1517 419 scmid2 = scmid_for_assert(hex2, is_short_scmid)
Chris@119 420 assert_equal 'A', c2[0].action
Chris@119 421 assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
Chris@119 422 assert_equal '/README', c2[0].from_path
Chris@1517 423 assert_equal scmid2, c2[0].from_revision
Chris@441 424
Chris@441 425 cs3 = @repository.changesets.find_by_revision('19')
Chris@1115 426 c3 = cs3.filechanges
Chris@1517 427
Chris@1517 428 hex3 = "5d9891a1b4258ea256552aa856e388f2da28256a"
Chris@1517 429 scmid3 = scmid_for_assert(hex3, is_short_scmid)
Chris@441 430 assert_equal 1, c3.size
Chris@441 431 assert_equal 'A', c3[0].action
Chris@441 432 assert_equal "/latin-1-dir/test-#{@char_1}-1.txt", c3[0].path
Chris@441 433 assert_equal "/latin-1-dir/test-#{@char_1}.txt", c3[0].from_path
Chris@1517 434 assert_equal scmid3, c3[0].from_revision
Chris@1517 435 end
Chris@1517 436 private :assert_copied_files
Chris@1517 437
Chris@1517 438 def test_copied_files_short_id
Chris@1517 439 assert_equal 0, @repository.changesets.count
Chris@1517 440 create_rev0_short_id
Chris@1517 441 assert_equal 1, @repository.changesets.count
Chris@1517 442 @repository.fetch_changesets
Chris@1517 443 @project.reload
Chris@1517 444 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 445 assert_copied_files(true)
Chris@1517 446 end
Chris@1517 447
Chris@1517 448 def test_copied_files_long_id
Chris@1517 449 assert_equal 0, @repository.changesets.count
Chris@1517 450 @repository.fetch_changesets
Chris@1517 451 @project.reload
Chris@1517 452 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 453 assert_copied_files(false)
Chris@119 454 end
Chris@119 455
Chris@119 456 def test_find_changeset_by_name
Chris@909 457 assert_equal 0, @repository.changesets.count
Chris@119 458 @repository.fetch_changesets
Chris@909 459 @project.reload
Chris@909 460 assert_equal NUM_REV, @repository.changesets.count
Chris@119 461 %w|2 400bb8672109 400|.each do |r|
Chris@119 462 assert_equal '2', @repository.find_changeset_by_name(r).revision
Chris@119 463 end
Chris@119 464 end
Chris@119 465
Chris@119 466 def test_find_changeset_by_invalid_name
Chris@909 467 assert_equal 0, @repository.changesets.count
Chris@119 468 @repository.fetch_changesets
Chris@909 469 @project.reload
Chris@909 470 assert_equal NUM_REV, @repository.changesets.count
Chris@119 471 assert_nil @repository.find_changeset_by_name('100000')
Chris@119 472 end
Chris@119 473
Chris@119 474 def test_identifier
Chris@909 475 assert_equal 0, @repository.changesets.count
Chris@119 476 @repository.fetch_changesets
Chris@909 477 @project.reload
Chris@909 478 assert_equal NUM_REV, @repository.changesets.count
Chris@119 479 c = @repository.changesets.find_by_revision('2')
Chris@119 480 assert_equal c.scmid, c.identifier
Chris@119 481 end
Chris@119 482
Chris@119 483 def test_format_identifier
Chris@909 484 assert_equal 0, @repository.changesets.count
Chris@119 485 @repository.fetch_changesets
Chris@909 486 @project.reload
Chris@909 487 assert_equal NUM_REV, @repository.changesets.count
Chris@119 488 c = @repository.changesets.find_by_revision('2')
Chris@119 489 assert_equal '2:400bb8672109', c.format_identifier
Chris@119 490 end
Chris@119 491
Chris@1517 492 def test_format_identifier_long_id
Chris@1517 493 assert_equal 0, @repository.changesets.count
Chris@1517 494 Changeset.create!(:repository => @repository,
Chris@1517 495 :committed_on => Time.now,
Chris@1517 496 :revision => '0',
Chris@1517 497 :scmid => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
Chris@1517 498 :comments => 'test')
Chris@1517 499 c = @repository.changesets.find_by_revision('0')
Chris@1517 500 assert_equal '0:0885933ad4f6', c.format_identifier
Chris@1517 501 end
Chris@1517 502
Chris@119 503 def test_find_changeset_by_empty_name
Chris@909 504 assert_equal 0, @repository.changesets.count
Chris@119 505 @repository.fetch_changesets
Chris@909 506 @project.reload
Chris@909 507 assert_equal NUM_REV, @repository.changesets.count
Chris@119 508 ['', ' ', nil].each do |r|
Chris@119 509 assert_nil @repository.find_changeset_by_name(r)
Chris@119 510 end
Chris@119 511 end
Chris@119 512
Chris@1517 513 def assert_parents(is_short_scmid=true)
Chris@1517 514 r1 = @repository.changesets.find_by_revision('0')
Chris@1517 515 assert_equal [], r1.parents
Chris@1517 516 r2 = @repository.changesets.find_by_revision('1')
Chris@1517 517 hex2 = "0885933ad4f68d77c2649cd11f8311276e7ef7ce"
Chris@1517 518 scmid2 = scmid_for_assert(hex2, is_short_scmid)
Chris@1517 519 assert_equal 1, r2.parents.length
Chris@1517 520 assert_equal scmid2, r2.parents[0].identifier
Chris@1517 521 r3 = @repository.changesets.find_by_revision('30')
Chris@1517 522 assert_equal 2, r3.parents.length
Chris@1517 523 r4 = [r3.parents[0].identifier, r3.parents[1].identifier].sort
Chris@1517 524 hex41 = "3a330eb329586ea2adb3f83237c23310e744ebe9"
Chris@1517 525 scmid41 = scmid_for_assert(hex41, is_short_scmid)
Chris@1517 526 hex42 = "a94b0528f24fe05ebaef496ae0500bb050772e36"
Chris@1517 527 scmid42 = scmid_for_assert(hex42, is_short_scmid)
Chris@1517 528 assert_equal scmid41, r4[0]
Chris@1517 529 assert_equal scmid42, r4[1]
Chris@1517 530 end
Chris@1517 531 private :assert_parents
Chris@1517 532
Chris@1517 533 def test_parents_short_id
Chris@1517 534 assert_equal 0, @repository.changesets.count
Chris@1517 535 create_rev0_short_id
Chris@1517 536 assert_equal 1, @repository.changesets.count
Chris@1517 537 @repository.fetch_changesets
Chris@1517 538 @project.reload
Chris@1517 539 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 540 assert_parents(true)
Chris@1517 541 end
Chris@1517 542
Chris@1517 543 def test_parents_long_id
Chris@909 544 assert_equal 0, @repository.changesets.count
Chris@909 545 @repository.fetch_changesets
Chris@909 546 @project.reload
Chris@909 547 assert_equal NUM_REV, @repository.changesets.count
Chris@1517 548 assert_parents(false)
Chris@909 549 end
Chris@909 550
Chris@119 551 def test_activities
Chris@119 552 c = Changeset.new(:repository => @repository,
Chris@119 553 :committed_on => Time.now,
Chris@119 554 :revision => '123',
Chris@119 555 :scmid => 'abc400bb8672',
Chris@119 556 :comments => 'test')
Chris@119 557 assert c.event_title.include?('123:abc400bb8672:')
Chris@119 558 assert_equal 'abc400bb8672', c.event_url[:rev]
Chris@119 559 end
Chris@245 560
Chris@441 561 def test_previous
Chris@909 562 assert_equal 0, @repository.changesets.count
Chris@245 563 @repository.fetch_changesets
Chris@909 564 @project.reload
Chris@909 565 assert_equal NUM_REV, @repository.changesets.count
Chris@441 566 %w|28 3ae45e2d177d 3ae45|.each do |r1|
Chris@441 567 changeset = @repository.find_changeset_by_name(r1)
Chris@441 568 %w|27 7bbf4c738e71 7bbf|.each do |r2|
Chris@441 569 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
Chris@441 570 end
Chris@441 571 end
Chris@245 572 end
Chris@245 573
Chris@441 574 def test_previous_nil
Chris@909 575 assert_equal 0, @repository.changesets.count
Chris@245 576 @repository.fetch_changesets
Chris@909 577 @project.reload
Chris@909 578 assert_equal NUM_REV, @repository.changesets.count
Chris@441 579 %w|0 0885933ad4f6 0885|.each do |r1|
Chris@441 580 changeset = @repository.find_changeset_by_name(r1)
Chris@441 581 assert_nil changeset.previous
Chris@441 582 end
Chris@245 583 end
Chris@245 584
Chris@441 585 def test_next
Chris@909 586 assert_equal 0, @repository.changesets.count
Chris@245 587 @repository.fetch_changesets
Chris@909 588 @project.reload
Chris@909 589 assert_equal NUM_REV, @repository.changesets.count
Chris@441 590 %w|27 7bbf4c738e71 7bbf|.each do |r2|
Chris@441 591 changeset = @repository.find_changeset_by_name(r2)
Chris@441 592 %w|28 3ae45e2d177d 3ae45|.each do |r1|
Chris@441 593 assert_equal @repository.find_changeset_by_name(r1), changeset.next
Chris@441 594 end
Chris@441 595 end
Chris@441 596 end
Chris@245 597
Chris@441 598 def test_next_nil
Chris@909 599 assert_equal 0, @repository.changesets.count
Chris@441 600 @repository.fetch_changesets
Chris@909 601 @project.reload
Chris@909 602 assert_equal NUM_REV, @repository.changesets.count
Chris@1494 603 ["#{NUM_REV - 1}", "2e6d54642923", "2e6d5"].each do |r1|
Chris@441 604 changeset = @repository.find_changeset_by_name(r1)
Chris@441 605 assert_nil changeset.next
Chris@441 606 end
Chris@245 607 end
Chris@1517 608
Chris@1517 609 def test_scmid_for_inserting_db_short_id
Chris@1517 610 assert_equal 0, @repository.changesets.count
Chris@1517 611 create_rev0_short_id
Chris@1517 612 assert_equal 1, @repository.changesets.count
Chris@1517 613 rev = "0123456789012345678901234567890123456789"
Chris@1517 614 assert_equal 12, @repository.scmid_for_inserting_db(rev).length
Chris@1517 615 end
Chris@1517 616
Chris@1517 617 def test_scmid_for_inserting_db_long_id
Chris@1517 618 rev = "0123456789012345678901234567890123456789"
Chris@1517 619 assert_equal 0, @repository.changesets.count
Chris@1517 620 assert_equal 40, @repository.scmid_for_inserting_db(rev).length
Chris@1517 621 Changeset.create!(:repository => @repository,
Chris@1517 622 :committed_on => Time.now,
Chris@1517 623 :revision => '0',
Chris@1517 624 :scmid => rev,
Chris@1517 625 :comments => 'test')
Chris@1517 626 assert_equal 1, @repository.changesets.count
Chris@1517 627 assert_equal 40, @repository.scmid_for_inserting_db(rev).length
Chris@1517 628 end
Chris@1517 629
Chris@1517 630 def test_scmid_for_assert
Chris@1517 631 rev = "0123456789012345678901234567890123456789"
Chris@1517 632 assert_equal rev, scmid_for_assert(rev, false)
Chris@1517 633 assert_equal "012345678901", scmid_for_assert(rev, true)
Chris@1517 634 end
Chris@1517 635
Chris@1517 636 private
Chris@1517 637
Chris@1517 638 def scmid_for_assert(hex, is_short=true)
Chris@1517 639 is_short ? hex[0, 12] : hex
Chris@1517 640 end
Chris@1517 641
Chris@1517 642 def create_rev0_short_id
Chris@1517 643 Changeset.create!(:repository => @repository,
Chris@1517 644 :committed_on => Time.now,
Chris@1517 645 :revision => '0',
Chris@1517 646 :scmid => '0885933ad4f6',
Chris@1517 647 :comments => 'test')
Chris@1517 648 end
Chris@0 649 else
Chris@0 650 puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
Chris@0 651 def test_fake; assert true end
Chris@0 652 end
Chris@0 653 end