Redmine 3.4.4
This commit is contained in:
commit
64924a6376
2112 changed files with 259028 additions and 0 deletions
218
test/unit/lib/redmine/scm/adapters/bazaar_adapter_test.rb
Normal file
218
test/unit/lib/redmine/scm/adapters/bazaar_adapter_test.rb
Normal file
|
@ -0,0 +1,218 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class BazaarAdapterTest < ActiveSupport::TestCase
|
||||
REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s
|
||||
REPOSITORY_PATH.gsub!(/\/+/, '/')
|
||||
|
||||
if File.directory?(REPOSITORY_PATH)
|
||||
def setup
|
||||
@adapter = Redmine::Scm::Adapters::BazaarAdapter.new(
|
||||
File.join(REPOSITORY_PATH, "trunk")
|
||||
)
|
||||
end
|
||||
|
||||
def test_scm_version
|
||||
to_test = { "Bazaar (bzr) 2.1.2\n" => [2,1,2],
|
||||
"2.1.1\n1.7\n1.8" => [2,1,1],
|
||||
"2.0.1\r\n1.8.1\r\n1.9.1" => [2,0,1]}
|
||||
to_test.each do |s, v|
|
||||
test_scm_version_for(s, v)
|
||||
end
|
||||
end
|
||||
|
||||
def test_cat
|
||||
cat = @adapter.cat('directory/document.txt')
|
||||
assert cat =~ /Write the contents of a file as of a given revision to standard output/
|
||||
end
|
||||
|
||||
def test_cat_path_invalid
|
||||
assert_nil @adapter.cat('invalid')
|
||||
end
|
||||
|
||||
def test_cat_revision_invalid
|
||||
assert_nil @adapter.cat('doc-mkdir.txt', '12345678')
|
||||
end
|
||||
|
||||
def test_diff
|
||||
diff1 = @adapter.diff('doc-mkdir.txt', 3, 2)
|
||||
assert_equal 21, diff1.size
|
||||
buf = diff1[14].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal "-Display more information.", buf
|
||||
end
|
||||
|
||||
def test_diff_path_invalid
|
||||
assert_equal [], @adapter.diff('invalid', 1)
|
||||
end
|
||||
|
||||
def test_diff_revision_invalid
|
||||
assert_equal [], @adapter.diff(nil, 12345678)
|
||||
assert_equal [], @adapter.diff(nil, 12345678, 87654321)
|
||||
end
|
||||
|
||||
def test_annotate
|
||||
annotate = @adapter.annotate('doc-mkdir.txt')
|
||||
assert_equal 17, annotate.lines.size
|
||||
assert_equal '1', annotate.revisions[0].identifier
|
||||
assert_equal 'jsmith@', annotate.revisions[0].author
|
||||
assert_equal 'mkdir', annotate.lines[0]
|
||||
end
|
||||
|
||||
def test_annotate_path_invalid
|
||||
assert_nil @adapter.annotate('invalid')
|
||||
end
|
||||
|
||||
def test_annotate_revision_invalid
|
||||
assert_nil @adapter.annotate('doc-mkdir.txt', '12345678')
|
||||
end
|
||||
|
||||
def test_branch_conf_path
|
||||
p = "c:\\test\\test\\"
|
||||
bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
|
||||
assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
|
||||
p = "c:\\test\\test\\.bzr"
|
||||
bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
|
||||
assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
|
||||
p = "c:\\test\\test\\.bzr\\"
|
||||
bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
|
||||
assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
|
||||
p = "c:\\test\\test"
|
||||
bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
|
||||
assert_equal File.join("c:\\test\\test", ".bzr", "branch", "branch.conf"), bcp
|
||||
p = "\\\\server\\test\\test\\"
|
||||
bcp = Redmine::Scm::Adapters::BazaarAdapter.branch_conf_path(p)
|
||||
assert_equal File.join("\\\\server\\test\\test", ".bzr", "branch", "branch.conf"), bcp
|
||||
end
|
||||
|
||||
def test_append_revisions_only_true
|
||||
assert_equal true, @adapter.append_revisions_only
|
||||
end
|
||||
|
||||
def test_append_revisions_only_false
|
||||
adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
|
||||
File.join(REPOSITORY_PATH, "empty-branch")
|
||||
)
|
||||
assert_equal false, adpt.append_revisions_only
|
||||
end
|
||||
|
||||
def test_append_revisions_only_shared_repo
|
||||
adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
|
||||
REPOSITORY_PATH
|
||||
)
|
||||
assert_equal false, adpt.append_revisions_only
|
||||
end
|
||||
|
||||
def test_info_not_nil
|
||||
assert_not_nil @adapter.info
|
||||
end
|
||||
|
||||
def test_info_nil
|
||||
adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
|
||||
"/invalid/invalid/"
|
||||
)
|
||||
assert_nil adpt.info
|
||||
end
|
||||
|
||||
def test_info
|
||||
info = @adapter.info
|
||||
assert_equal 4, info.lastrev.identifier.to_i
|
||||
end
|
||||
|
||||
def test_info_emtpy
|
||||
adpt = Redmine::Scm::Adapters::BazaarAdapter.new(
|
||||
File.join(REPOSITORY_PATH, "empty-branch")
|
||||
)
|
||||
assert_equal 0, adpt.info.lastrev.identifier.to_i
|
||||
end
|
||||
|
||||
def test_entries_path_invalid
|
||||
assert_equal [], @adapter.entries('invalid')
|
||||
end
|
||||
|
||||
def test_entries_revision_invalid
|
||||
assert_nil @adapter.entries(nil, 12345678)
|
||||
end
|
||||
|
||||
def test_revisions
|
||||
revisions = @adapter.revisions(nil, 4, 2)
|
||||
assert_equal 3, revisions.size
|
||||
assert_equal 2, revisions[2].identifier
|
||||
assert_equal 'jsmith@foo.bar-20071203175224-v0eog5d5wrgdrshg', revisions[2].scmid
|
||||
assert_equal 4, revisions[0].identifier
|
||||
assert_equal 'jsmith@foo.bar-20071203175422-t40bf8li5zz0c4cg', revisions[0].scmid
|
||||
assert_equal 2, revisions[0].paths.size
|
||||
assert_equal 'D', revisions[0].paths[0][:action]
|
||||
assert_equal '/doc-deleted.txt', revisions[0].paths[0][:path]
|
||||
assert_equal 'docdeleted.txt-20071203175320-iwwj561ojuubs3gt-1', revisions[0].paths[0][:revision]
|
||||
assert_equal 'M', revisions[0].paths[1][:action]
|
||||
assert_equal '/directory/doc-ls.txt', revisions[0].paths[1][:path]
|
||||
assert_equal 'docls.txt-20071203175005-a3hyc3mn0shl7cgu-1', revisions[0].paths[1][:revision]
|
||||
end
|
||||
|
||||
def test_revisions_path_invalid
|
||||
assert_nil @adapter.revisions('invalid')
|
||||
end
|
||||
|
||||
def test_revisions_revision_invalid
|
||||
assert_nil @adapter.revisions(nil, 12345678)
|
||||
assert_nil @adapter.revisions(nil, 12345678, 87654321)
|
||||
end
|
||||
|
||||
def test_entry
|
||||
entry = @adapter.entry()
|
||||
assert_equal "", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
entry = @adapter.entry('')
|
||||
assert_equal "", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
assert_nil @adapter.entry('invalid')
|
||||
assert_nil @adapter.entry('/invalid')
|
||||
assert_nil @adapter.entry('/invalid/')
|
||||
assert_nil @adapter.entry('invalid/invalid')
|
||||
assert_nil @adapter.entry('invalid/invalid/')
|
||||
assert_nil @adapter.entry('/invalid/invalid')
|
||||
assert_nil @adapter.entry('/invalid/invalid/')
|
||||
["doc-ls.txt", "/doc-ls.txt"].each do |path|
|
||||
entry = @adapter.entry(path, 2)
|
||||
assert_equal "doc-ls.txt", entry.path
|
||||
assert_equal "file", entry.kind
|
||||
end
|
||||
["directory", "/directory", "/directory/"].each do |path|
|
||||
entry = @adapter.entry(path, 2)
|
||||
assert_equal "directory", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
end
|
||||
["directory/document.txt", "/directory/document.txt"].each do |path|
|
||||
entry = @adapter.entry(path, 2)
|
||||
assert_equal "directory/document.txt", entry.path
|
||||
assert_equal "file", entry.kind
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def test_scm_version_for(scm_command_version, version)
|
||||
@adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
|
||||
assert_equal version, @adapter.class.scm_command_version
|
||||
end
|
||||
else
|
||||
puts "Bazaar test repository NOT FOUND. Skipping unit tests !!!"
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
106
test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb
Normal file
106
test/unit/lib/redmine/scm/adapters/cvs_adapter_test.rb
Normal file
|
@ -0,0 +1,106 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class CvsAdapterTest < ActiveSupport::TestCase
|
||||
REPOSITORY_PATH = Rails.root.join('tmp/test/cvs_repository').to_s
|
||||
REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
|
||||
MODULE_NAME = 'test'
|
||||
|
||||
if File.directory?(REPOSITORY_PATH)
|
||||
def setup
|
||||
@adapter = Redmine::Scm::Adapters::CvsAdapter.new(MODULE_NAME, REPOSITORY_PATH)
|
||||
end
|
||||
|
||||
def test_scm_version
|
||||
to_test = { "\nConcurrent Versions System (CVS) 1.12.13 (client/server)\n" => [1,12,13],
|
||||
"\r\n1.12.12\r\n1.12.11" => [1,12,12],
|
||||
"1.12.11\r\n1.12.10\r\n" => [1,12,11]}
|
||||
to_test.each do |s, v|
|
||||
test_scm_version_for(s, v)
|
||||
end
|
||||
end
|
||||
|
||||
def test_revisions_all
|
||||
cnt = 0
|
||||
@adapter.revisions('', nil, nil, :log_encoding => 'UTF-8') do |revision|
|
||||
cnt += 1
|
||||
end
|
||||
assert_equal 16, cnt
|
||||
end
|
||||
|
||||
def test_revisions_from_rev3
|
||||
rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
|
||||
cnt = 0
|
||||
@adapter.revisions('', rev3_committed_on, nil, :log_encoding => 'UTF-8') do |revision|
|
||||
cnt += 1
|
||||
end
|
||||
assert_equal 4, cnt
|
||||
end
|
||||
|
||||
def test_entries_rev3
|
||||
rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
|
||||
entries = @adapter.entries('sources', rev3_committed_on)
|
||||
assert_equal 2, entries.size
|
||||
assert_equal entries[0].name, "watchers_controller.rb"
|
||||
assert_equal entries[0].lastrev.time, Time.gm(2007, 12, 13, 16, 27, 22)
|
||||
end
|
||||
|
||||
def test_path_encoding_default_utf8
|
||||
adpt1 = Redmine::Scm::Adapters::CvsAdapter.new(
|
||||
MODULE_NAME,
|
||||
REPOSITORY_PATH
|
||||
)
|
||||
assert_equal "UTF-8", adpt1.path_encoding
|
||||
adpt2 = Redmine::Scm::Adapters::CvsAdapter.new(
|
||||
MODULE_NAME,
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
""
|
||||
)
|
||||
assert_equal "UTF-8", adpt2.path_encoding
|
||||
end
|
||||
|
||||
def test_root_url_path
|
||||
to_test = {
|
||||
':pserver:cvs_user:cvs_password@123.456.789.123:9876/repo' => '/repo',
|
||||
':pserver:cvs_user:cvs_password@123.456.789.123/repo' => '/repo',
|
||||
':pserver:cvs_user:cvs_password@cvs_server:/repo' => '/repo',
|
||||
':pserver:cvs_user:cvs_password@cvs_server:9876/repo' => '/repo',
|
||||
':pserver:cvs_user:cvs_password@cvs_server/repo' => '/repo',
|
||||
':pserver:cvs_user:cvs_password@cvs_server/path/repo' => '/path/repo',
|
||||
':ext:cvsservername:/path' => '/path'
|
||||
}
|
||||
|
||||
to_test.each do |string, expected|
|
||||
assert_equal expected, Redmine::Scm::Adapters::CvsAdapter.new('foo', string).send(:root_url_path), "#{string} failed"
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def test_scm_version_for(scm_command_version, version)
|
||||
@adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
|
||||
assert_equal version, @adapter.class.scm_command_version
|
||||
end
|
||||
else
|
||||
puts "Cvs test repository NOT FOUND. Skipping unit tests !!!"
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
60
test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb
Normal file
60
test/unit/lib/redmine/scm/adapters/darcs_adapter_test.rb
Normal file
|
@ -0,0 +1,60 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class DarcsAdapterTest < ActiveSupport::TestCase
|
||||
REPOSITORY_PATH = Rails.root.join('tmp/test/darcs_repository').to_s
|
||||
|
||||
if File.directory?(REPOSITORY_PATH)
|
||||
def setup
|
||||
@adapter = Redmine::Scm::Adapters::DarcsAdapter.new(REPOSITORY_PATH)
|
||||
end
|
||||
|
||||
def test_darcsversion
|
||||
to_test = { "1.0.9 (release)\n" => [1,0,9] ,
|
||||
"2.2.0 (release)\n" => [2,2,0] }
|
||||
to_test.each do |s, v|
|
||||
test_darcsversion_for(s, v)
|
||||
end
|
||||
end
|
||||
|
||||
def test_revisions
|
||||
id1 = '20080308225258-98289-761f654d669045eabee90b91b53a21ce5593cadf.gz'
|
||||
revs = @adapter.revisions('', nil, nil, {:with_path => true})
|
||||
assert_equal 6, revs.size
|
||||
assert_equal id1, revs[5].scmid
|
||||
paths = revs[5].paths
|
||||
assert_equal 5, paths.size
|
||||
assert_equal 'A', paths[0][:action]
|
||||
assert_equal '/README', paths[0][:path]
|
||||
assert_equal 'A', paths[1][:action]
|
||||
assert_equal '/images', paths[1][:path]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def test_darcsversion_for(darcsversion, version)
|
||||
@adapter.class.expects(:darcs_binary_version_from_command_line).returns(darcsversion)
|
||||
assert_equal version, @adapter.class.darcs_binary_version
|
||||
end
|
||||
|
||||
else
|
||||
puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,68 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class FilesystemAdapterTest < ActiveSupport::TestCase
|
||||
REPOSITORY_PATH = Rails.root.join('tmp/test/filesystem_repository').to_s
|
||||
|
||||
if File.directory?(REPOSITORY_PATH)
|
||||
def setup
|
||||
@adapter = Redmine::Scm::Adapters::FilesystemAdapter.new(REPOSITORY_PATH)
|
||||
end
|
||||
|
||||
def test_entries
|
||||
assert_equal 3, @adapter.entries.size
|
||||
assert_equal ["dir", "japanese", "test"], @adapter.entries.collect(&:name)
|
||||
assert_equal ["dir", "japanese", "test"], @adapter.entries(nil).collect(&:name)
|
||||
assert_equal ["dir", "japanese", "test"], @adapter.entries("/").collect(&:name)
|
||||
["dir", "/dir", "/dir/", "dir/"].each do |path|
|
||||
assert_equal ["subdir", "dirfile"], @adapter.entries(path).collect(&:name)
|
||||
end
|
||||
# If y try to use "..", the path is ignored
|
||||
["/../","dir/../", "..", "../", "/..", "dir/.."].each do |path|
|
||||
assert_equal ["dir", "japanese", "test"], @adapter.entries(path).collect(&:name),
|
||||
".. must be ignored in path argument"
|
||||
end
|
||||
end
|
||||
|
||||
def test_cat
|
||||
assert_equal "TEST CAT\n", @adapter.cat("test")
|
||||
assert_equal "TEST CAT\n", @adapter.cat("/test")
|
||||
# Revision number is ignored
|
||||
assert_equal "TEST CAT\n", @adapter.cat("/test", 1)
|
||||
end
|
||||
|
||||
def test_path_encoding_default_utf8
|
||||
adpt1 = Redmine::Scm::Adapters::FilesystemAdapter.new(
|
||||
REPOSITORY_PATH
|
||||
)
|
||||
assert_equal "UTF-8", adpt1.path_encoding
|
||||
adpt2 = Redmine::Scm::Adapters::FilesystemAdapter.new(
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
""
|
||||
)
|
||||
assert_equal "UTF-8", adpt2.path_encoding
|
||||
end
|
||||
else
|
||||
puts "Filesystem test repository NOT FOUND. Skipping unit tests !!! See doc/RUNNING_TESTS."
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
597
test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
Normal file
597
test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
Normal file
|
@ -0,0 +1,597 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class GitAdapterTest < ActiveSupport::TestCase
|
||||
REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
|
||||
|
||||
FELIX_HEX = "Felix Sch\xC3\xA4fer"
|
||||
CHAR_1_HEX = "\xc3\x9c"
|
||||
|
||||
## Git, Mercurial and CVS path encodings are binary.
|
||||
## Subversion supports URL encoding for path.
|
||||
## Redmine Mercurial adapter and extension use URL encoding.
|
||||
## Git accepts only binary path in command line parameter.
|
||||
## So, there is no way to use binary command line parameter in JRuby.
|
||||
JRUBY_SKIP = (RUBY_PLATFORM == 'java')
|
||||
JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
|
||||
|
||||
if File.directory?(REPOSITORY_PATH)
|
||||
## Ruby uses ANSI api to fork a process on Windows.
|
||||
## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
|
||||
## and these are incompatible with ASCII.
|
||||
## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
|
||||
## http://code.google.com/p/msysgit/issues/detail?id=80
|
||||
## So, Latin-1 path tests fail on Japanese Windows
|
||||
WINDOWS_PASS = (Redmine::Platform.mswin? &&
|
||||
Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
|
||||
WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
|
||||
|
||||
def setup
|
||||
adapter_class = Redmine::Scm::Adapters::GitAdapter
|
||||
assert adapter_class
|
||||
assert adapter_class.client_command
|
||||
assert_equal true, adapter_class.client_available
|
||||
assert_equal true, adapter_class.client_version_above?([1])
|
||||
assert_equal true, adapter_class.client_version_above?([1, 0])
|
||||
|
||||
@adapter = Redmine::Scm::Adapters::GitAdapter.new(
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
'ISO-8859-1'
|
||||
)
|
||||
assert @adapter
|
||||
@char_1 = CHAR_1_HEX.dup.force_encoding('UTF-8')
|
||||
@str_felix_hex = FELIX_HEX.dup.force_encoding('ASCII-8BIT')
|
||||
end
|
||||
|
||||
def test_scm_version
|
||||
to_test = { "git version 1.7.3.4\n" => [1,7,3,4],
|
||||
"1.6.1\n1.7\n1.8" => [1,6,1],
|
||||
"1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
|
||||
to_test.each do |s, v|
|
||||
test_scm_version_for(s, v)
|
||||
end
|
||||
end
|
||||
|
||||
def test_branches
|
||||
brs = []
|
||||
@adapter.branches.each do |b|
|
||||
brs << b
|
||||
end
|
||||
assert_equal 6, brs.length
|
||||
br_issue_8857 = brs[0]
|
||||
assert_equal 'issue-8857', br_issue_8857.to_s
|
||||
assert_equal '2a682156a3b6e77a8bf9cd4590e8db757f3c6c78', br_issue_8857.revision
|
||||
assert_equal br_issue_8857.scmid, br_issue_8857.revision
|
||||
assert_equal false, br_issue_8857.is_default
|
||||
br_latin_1_path = brs[1]
|
||||
assert_equal 'latin-1-path-encoding', br_latin_1_path.to_s
|
||||
assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', br_latin_1_path.revision
|
||||
assert_equal br_latin_1_path.scmid, br_latin_1_path.revision
|
||||
assert_equal false, br_latin_1_path.is_default
|
||||
br_master = brs[2]
|
||||
assert_equal 'master', br_master.to_s
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master.revision
|
||||
assert_equal br_master.scmid, br_master.revision
|
||||
assert_equal false, br_master.is_default
|
||||
br_master_20120212 = brs[3]
|
||||
assert_equal 'master-20120212', br_master_20120212.to_s
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', br_master_20120212.revision
|
||||
assert_equal br_master_20120212.scmid, br_master_20120212.revision
|
||||
assert_equal true, br_master_20120212.is_default
|
||||
br_latin_1 = brs[-2]
|
||||
assert_equal 'test-latin-1', br_latin_1.to_s
|
||||
assert_equal '67e7792ce20ccae2e4bb73eed09bb397819c8834', br_latin_1.revision
|
||||
assert_equal br_latin_1.scmid, br_latin_1.revision
|
||||
assert_equal false, br_latin_1.is_default
|
||||
br_test = brs[-1]
|
||||
assert_equal 'test_branch', br_test.to_s
|
||||
assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', br_test.revision
|
||||
assert_equal br_test.scmid, br_test.revision
|
||||
assert_equal false, br_test.is_default
|
||||
end
|
||||
|
||||
def test_default_branch
|
||||
assert_equal 'master-20120212', @adapter.default_branch
|
||||
end
|
||||
|
||||
def test_tags
|
||||
assert_equal [
|
||||
"tag00.lightweight",
|
||||
"tag01.annotated",
|
||||
], @adapter.tags
|
||||
end
|
||||
|
||||
def test_revisions_master_all
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, "master",{}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 15, revs1.length
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 0].identifier
|
||||
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
|
||||
|
||||
revs2 = []
|
||||
@adapter.revisions('', nil, "master",
|
||||
{:reverse => true}) do |rev|
|
||||
revs2 << rev
|
||||
end
|
||||
assert_equal 15, revs2.length
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
|
||||
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
|
||||
end
|
||||
|
||||
def test_revisions_master_merged_rev
|
||||
revs1 = []
|
||||
@adapter.revisions('',
|
||||
"713f4944648826f558cf548222f813dabe7cbb04",
|
||||
"master",
|
||||
{:reverse => true}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 8, revs1.length
|
||||
assert_equal 'fba357b886984ee71185ad2065e65fc0417d9b92', revs1[ 0].identifier
|
||||
assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 1].identifier
|
||||
# 4a07fe31b is not a child of 713f49446
|
||||
assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 2].identifier
|
||||
# Merged revision
|
||||
assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 3].identifier
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
|
||||
|
||||
revs2 = []
|
||||
@adapter.revisions('',
|
||||
"fba357b886984ee71185ad2065e65fc0417d9b92",
|
||||
"master",
|
||||
{:reverse => true}) do |rev|
|
||||
revs2 << rev
|
||||
end
|
||||
assert_equal 7, revs2.length
|
||||
assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs2[ 0].identifier
|
||||
# 4a07fe31b is not a child of fba357b8869
|
||||
assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs2[ 1].identifier
|
||||
# Merged revision
|
||||
assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs2[ 2].identifier
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs2[-1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_branch_latin_1_path_encoding_all
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, "latin-1-path-encoding",{}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 8, revs1.length
|
||||
assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[ 0].identifier
|
||||
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[-1].identifier
|
||||
|
||||
revs2 = []
|
||||
@adapter.revisions('', nil, "latin-1-path-encoding",
|
||||
{:reverse => true}) do |rev|
|
||||
revs2 << rev
|
||||
end
|
||||
assert_equal 8, revs2.length
|
||||
assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
|
||||
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs2[ 0].identifier
|
||||
end
|
||||
|
||||
def test_revisions_branch_latin_1_path_encoding_with_rev
|
||||
revs1 = []
|
||||
@adapter.revisions('',
|
||||
'7234cb2750b63f47bff735edc50a1c0a433c2518',
|
||||
"latin-1-path-encoding",
|
||||
{:reverse => true}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 7, revs1.length
|
||||
assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 0].identifier
|
||||
assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
|
||||
|
||||
revs2 = []
|
||||
@adapter.revisions('',
|
||||
'57ca437c0acbbcb749821fdf3726a1367056d364',
|
||||
"latin-1-path-encoding",
|
||||
{:reverse => true}) do |rev|
|
||||
revs2 << rev
|
||||
end
|
||||
assert_equal 3, revs2.length
|
||||
assert_equal '4fc55c43bf3d3dc2efb66145365ddc17639ce81e', revs2[ 0].identifier
|
||||
assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs2[-1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_invalid_rev
|
||||
assert_equal [], @adapter.revisions('', '1234abcd', "master")
|
||||
assert_raise Redmine::Scm::Adapters::CommandFailed do
|
||||
revs1 = []
|
||||
@adapter.revisions('',
|
||||
'1234abcd',
|
||||
"master",
|
||||
{:reverse => true}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_revisions_includes_master_two_revs
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
|
||||
:excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43']}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 2, revs1.length
|
||||
assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_includes_master_two_revs_from_origin
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['899a15dba03a3b350b89c3f537e4bbe02a03cdc9'],
|
||||
:excludes => []}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 2, revs1.length
|
||||
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518', revs1[ 0].identifier
|
||||
assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', revs1[ 1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_includes_merged_revs
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
|
||||
:excludes => ['fba357b886984ee71185ad2065e65fc0417d9b92']}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 7, revs1.length
|
||||
assert_equal '7e61ac704deecde634b51e59daa8110435dcb3da', revs1[ 0].identifier
|
||||
assert_equal '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8', revs1[ 1].identifier
|
||||
assert_equal '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf', revs1[ 2].identifier
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[-1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_includes_two_heads
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
|
||||
'1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127'],
|
||||
:excludes => ['4f26664364207fa8b1af9f8722647ab2d4ac5d43',
|
||||
'4fc55c43bf3d3dc2efb66145365ddc17639ce81e']}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 4, revs1.length
|
||||
assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
|
||||
assert_equal '64f1f3e89ad1cb57976ff0ad99a107012ba3481d', revs1[-2].identifier
|
||||
assert_equal '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127', revs1[-1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_disjointed_histories_revisions
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c',
|
||||
'92397af84d22f27389c822848ecd5b463c181583'],
|
||||
:excludes => ['95488a44bc25f7d1f97d775a31359539ff333a63',
|
||||
'4f26664364207fa8b1af9f8722647ab2d4ac5d43'] }) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 4, revs1.length
|
||||
assert_equal 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b', revs1[ 0].identifier
|
||||
assert_equal '83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', revs1[ 1].identifier
|
||||
assert_equal 'bc201c95999c4f10d018b0aa03b541cd6a2ff0ee', revs1[-2].identifier
|
||||
assert_equal '92397af84d22f27389c822848ecd5b463c181583', revs1[-1].identifier
|
||||
end
|
||||
|
||||
def test_revisions_invalid_rev_excludes
|
||||
assert_equal [],
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
|
||||
:excludes => ['0123abcd4567']})
|
||||
assert_raise Redmine::Scm::Adapters::CommandFailed do
|
||||
revs1 = []
|
||||
@adapter.revisions('', nil, nil,
|
||||
{:reverse => true,
|
||||
:includes => ['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c'],
|
||||
:excludes => ['0123abcd4567']}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_getting_revisions_with_spaces_in_filename
|
||||
assert_equal 1, @adapter.revisions("filemane with spaces.txt",
|
||||
nil, "master").length
|
||||
end
|
||||
|
||||
def test_parents
|
||||
revs1 = []
|
||||
@adapter.revisions('',
|
||||
nil,
|
||||
"master",
|
||||
{:reverse => true}) do |rev|
|
||||
revs1 << rev
|
||||
end
|
||||
assert_equal 15, revs1.length
|
||||
assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
|
||||
revs1[0].identifier
|
||||
assert_nil revs1[0].parents
|
||||
assert_equal "899a15dba03a3b350b89c3f537e4bbe02a03cdc9",
|
||||
revs1[1].identifier
|
||||
assert_equal 1, revs1[1].parents.length
|
||||
assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
|
||||
revs1[1].parents[0]
|
||||
assert_equal "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
|
||||
revs1[10].identifier
|
||||
assert_equal 2, revs1[10].parents.length
|
||||
assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
|
||||
revs1[10].parents[0]
|
||||
assert_equal "7e61ac704deecde634b51e59daa8110435dcb3da",
|
||||
revs1[10].parents[1]
|
||||
end
|
||||
|
||||
def test_getting_revisions_with_leading_and_trailing_spaces_in_filename
|
||||
assert_equal " filename with a leading space.txt ",
|
||||
@adapter.revisions(" filename with a leading space.txt ",
|
||||
nil, "master")[0].paths[0][:path]
|
||||
end
|
||||
|
||||
def test_getting_entries_with_leading_and_trailing_spaces_in_filename
|
||||
assert_equal " filename with a leading space.txt ",
|
||||
@adapter.entries('',
|
||||
'83ca5fd546063a3c7dc2e568ba3355661a9e2b2c')[3].name
|
||||
end
|
||||
|
||||
def test_annotate
|
||||
annotate = @adapter.annotate('sources/watchers_controller.rb')
|
||||
assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
|
||||
assert_equal 41, annotate.lines.size
|
||||
assert_equal "# This program is free software; you can redistribute it and/or",
|
||||
annotate.lines[4].strip
|
||||
assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518",
|
||||
annotate.revisions[4].identifier
|
||||
assert_equal "jsmith", annotate.revisions[4].author
|
||||
end
|
||||
|
||||
def test_annotate_moved_file
|
||||
annotate = @adapter.annotate('renamed_test.txt')
|
||||
assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
|
||||
assert_equal 2, annotate.lines.size
|
||||
end
|
||||
|
||||
def test_last_rev
|
||||
last_rev = @adapter.lastrev("README",
|
||||
"4f26664364207fa8b1af9f8722647ab2d4ac5d43")
|
||||
assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.scmid
|
||||
assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8", last_rev.identifier
|
||||
assert_equal "Adam Soltys <asoltys@gmail.com>", last_rev.author
|
||||
assert_equal Time.gm(2009, 6, 24, 5, 27, 38), last_rev.time
|
||||
end
|
||||
|
||||
def test_last_rev_with_spaces_in_filename
|
||||
last_rev = @adapter.lastrev("filemane with spaces.txt",
|
||||
"ed5bb786bbda2dee66a2d50faf51429dbc043a7b")
|
||||
last_rev_author = last_rev.author
|
||||
assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.scmid
|
||||
assert_equal "ed5bb786bbda2dee66a2d50faf51429dbc043a7b", last_rev.identifier
|
||||
assert_equal "#{@str_felix_hex} <felix@fachschaften.org>",
|
||||
last_rev.author
|
||||
assert_equal Time.gm(2010, 9, 18, 19, 59, 46), last_rev.time
|
||||
end
|
||||
|
||||
def test_latin_1_path
|
||||
if WINDOWS_PASS
|
||||
puts WINDOWS_SKIP_STR
|
||||
elsif JRUBY_SKIP
|
||||
puts JRUBY_SKIP_STR
|
||||
else
|
||||
p2 = "latin-1-dir/test-#{@char_1}-2.txt"
|
||||
['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
|
||||
assert @adapter.diff(p2, r1)
|
||||
assert @adapter.cat(p2, r1)
|
||||
assert_equal 1, @adapter.annotate(p2, r1).lines.length
|
||||
['64f1f3e89ad1cb57976ff0ad99a107012ba3481d', '64f1f3e89ad1cb5797'].each do |r2|
|
||||
assert @adapter.diff(p2, r1, r2)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_latin_1_user_annotate
|
||||
['83ca5fd546063a3c7dc2e568ba3355661a9e2b2c', '83ca5fd546063a'].each do |r1|
|
||||
annotate = @adapter.annotate(" filename with a leading space.txt ", r1)
|
||||
assert_kind_of Redmine::Scm::Adapters::Annotate, annotate
|
||||
assert_equal 1, annotate.lines.size
|
||||
assert_equal "And this is a file with a leading and trailing space...",
|
||||
annotate.lines[0].strip
|
||||
assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
|
||||
annotate.revisions[0].identifier
|
||||
assert_equal @str_felix_hex, annotate.revisions[0].author
|
||||
end
|
||||
end
|
||||
|
||||
def test_entries_tag
|
||||
entries1 = @adapter.entries(nil, 'tag01.annotated',
|
||||
options = {:report_last_commit => true})
|
||||
assert entries1
|
||||
assert_equal 3, entries1.size
|
||||
assert_equal 'sources', entries1[1].name
|
||||
assert_equal 'sources', entries1[1].path
|
||||
assert_equal 'dir', entries1[1].kind
|
||||
readme = entries1[2]
|
||||
assert_equal 'README', readme.name
|
||||
assert_equal 'README', readme.path
|
||||
assert_equal 'file', readme.kind
|
||||
assert_equal 27, readme.size
|
||||
assert_equal '899a15dba03a3b350b89c3f537e4bbe02a03cdc9', readme.lastrev.identifier
|
||||
assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
|
||||
end
|
||||
|
||||
def test_entries_branch
|
||||
entries1 = @adapter.entries(nil, 'test_branch',
|
||||
options = {:report_last_commit => true})
|
||||
assert entries1
|
||||
assert_equal 4, entries1.size
|
||||
assert_equal 'sources', entries1[1].name
|
||||
assert_equal 'sources', entries1[1].path
|
||||
assert_equal 'dir', entries1[1].kind
|
||||
readme = entries1[2]
|
||||
assert_equal 'README', readme.name
|
||||
assert_equal 'README', readme.path
|
||||
assert_equal 'file', readme.kind
|
||||
assert_equal 159, readme.size
|
||||
assert_equal '713f4944648826f558cf548222f813dabe7cbb04', readme.lastrev.identifier
|
||||
assert_equal Time.gm(2009, 6, 19, 4, 37, 23), readme.lastrev.time
|
||||
end
|
||||
|
||||
def test_entries_wrong_path_encoding
|
||||
adpt = Redmine::Scm::Adapters::GitAdapter.new(
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
'EUC-JP'
|
||||
)
|
||||
entries1 = adpt.entries('latin-1-dir', '64f1f3e8')
|
||||
assert entries1
|
||||
assert_equal 3, entries1.size
|
||||
f1 = entries1[1]
|
||||
assert_nil f1.name
|
||||
assert_nil f1.path
|
||||
assert_equal 'file', f1.kind
|
||||
end
|
||||
|
||||
def test_entries_latin_1_files
|
||||
entries1 = @adapter.entries('latin-1-dir', '64f1f3e8')
|
||||
assert entries1
|
||||
assert_equal 3, entries1.size
|
||||
f1 = entries1[1]
|
||||
assert_equal "test-#{@char_1}-2.txt", f1.name
|
||||
assert_equal "latin-1-dir/test-#{@char_1}-2.txt", f1.path
|
||||
assert_equal 'file', f1.kind
|
||||
end
|
||||
|
||||
def test_entries_latin_1_dir
|
||||
if WINDOWS_PASS
|
||||
puts WINDOWS_SKIP_STR
|
||||
elsif JRUBY_SKIP
|
||||
puts JRUBY_SKIP_STR
|
||||
else
|
||||
entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
|
||||
'1ca7f5ed')
|
||||
assert entries1
|
||||
assert_equal 3, entries1.size
|
||||
f1 = entries1[1]
|
||||
assert_equal "test-#{@char_1}-2.txt", f1.name
|
||||
assert_equal "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-2.txt", f1.path
|
||||
assert_equal 'file', f1.kind
|
||||
end
|
||||
end
|
||||
|
||||
def test_entry
|
||||
entry = @adapter.entry()
|
||||
assert_equal "", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
entry = @adapter.entry('')
|
||||
assert_equal "", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
assert_nil @adapter.entry('invalid')
|
||||
assert_nil @adapter.entry('/invalid')
|
||||
assert_nil @adapter.entry('/invalid/')
|
||||
assert_nil @adapter.entry('invalid/invalid')
|
||||
assert_nil @adapter.entry('invalid/invalid/')
|
||||
assert_nil @adapter.entry('/invalid/invalid')
|
||||
assert_nil @adapter.entry('/invalid/invalid/')
|
||||
["README", "/README"].each do |path|
|
||||
entry = @adapter.entry(path, '7234cb2750b63f')
|
||||
assert_equal "README", entry.path
|
||||
assert_equal "file", entry.kind
|
||||
end
|
||||
["sources", "/sources", "/sources/"].each do |path|
|
||||
entry = @adapter.entry(path, '7234cb2750b63f')
|
||||
assert_equal "sources", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
end
|
||||
["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
|
||||
entry = @adapter.entry(path, '7234cb2750b63f')
|
||||
assert_equal "sources/watchers_controller.rb", entry.path
|
||||
assert_equal "file", entry.kind
|
||||
end
|
||||
end
|
||||
|
||||
def test_path_encoding_default_utf8
|
||||
adpt1 = Redmine::Scm::Adapters::GitAdapter.new(
|
||||
REPOSITORY_PATH
|
||||
)
|
||||
assert_equal "UTF-8", adpt1.path_encoding
|
||||
adpt2 = Redmine::Scm::Adapters::GitAdapter.new(
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
""
|
||||
)
|
||||
assert_equal "UTF-8", adpt2.path_encoding
|
||||
end
|
||||
|
||||
def test_cat_path_invalid
|
||||
assert_nil @adapter.cat('invalid')
|
||||
end
|
||||
|
||||
def test_cat_revision_invalid
|
||||
assert @adapter.cat('README')
|
||||
assert_nil @adapter.cat('README', '1234abcd5678')
|
||||
end
|
||||
|
||||
def test_diff_path_invalid
|
||||
assert_equal [], @adapter.diff('invalid', '713f4944648826f5')
|
||||
end
|
||||
|
||||
def test_diff_revision_invalid
|
||||
assert_nil @adapter.diff(nil, '1234abcd5678')
|
||||
assert_nil @adapter.diff(nil, '713f4944648826f5', '1234abcd5678')
|
||||
assert_nil @adapter.diff(nil, '1234abcd5678', '713f4944648826f5')
|
||||
end
|
||||
|
||||
def test_annotate_path_invalid
|
||||
assert_nil @adapter.annotate('invalid')
|
||||
end
|
||||
|
||||
def test_annotate_revision_invalid
|
||||
assert @adapter.annotate('README')
|
||||
assert_nil @adapter.annotate('README', '1234abcd5678')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def test_scm_version_for(scm_command_version, version)
|
||||
@adapter.class.expects(:scm_version_from_command_line).returns(scm_command_version)
|
||||
assert_equal version, @adapter.class.scm_command_version
|
||||
end
|
||||
|
||||
else
|
||||
puts "Git test repository NOT FOUND. Skipping unit tests !!!"
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
485
test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
Normal file
485
test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
Normal file
|
@ -0,0 +1,485 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class MercurialAdapterTest < ActiveSupport::TestCase
|
||||
HELPERS_DIR = Redmine::Scm::Adapters::MercurialAdapter::HELPERS_DIR
|
||||
TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
|
||||
TEMPLATE_EXTENSION = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_EXTENSION
|
||||
HgCommandAborted = Redmine::Scm::Adapters::MercurialAdapter::HgCommandAborted
|
||||
HgCommandArgumentError = Redmine::Scm::Adapters::MercurialAdapter::HgCommandArgumentError
|
||||
|
||||
REPOSITORY_PATH = repository_path('mercurial')
|
||||
CHAR_1_HEX = "\xc3\x9c"
|
||||
|
||||
if File.directory?(REPOSITORY_PATH)
|
||||
def setup
|
||||
adapter_class = Redmine::Scm::Adapters::MercurialAdapter
|
||||
assert adapter_class
|
||||
assert adapter_class.client_command
|
||||
assert_equal true, adapter_class.client_available
|
||||
assert_equal true, adapter_class.client_version_above?([0, 9, 5])
|
||||
|
||||
@adapter = Redmine::Scm::Adapters::MercurialAdapter.new(
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
'ISO-8859-1')
|
||||
@diff_c_support = true
|
||||
@char_1 = CHAR_1_HEX.dup.force_encoding('UTF-8')
|
||||
@tag_char_1 = "tag-#{CHAR_1_HEX}-00".force_encoding('UTF-8')
|
||||
@branch_char_0 = "branch-#{CHAR_1_HEX}-00".force_encoding('UTF-8')
|
||||
@branch_char_1 = "branch-#{CHAR_1_HEX}-01".force_encoding('UTF-8')
|
||||
end
|
||||
|
||||
def test_hgversion
|
||||
to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
|
||||
"Mercurial Distributed SCM (1.0)\n" => [1,0],
|
||||
"Mercurial Distributed SCM (1e4ddc9ac9f7+20080325)\n" => nil,
|
||||
"Mercurial Distributed SCM (1.0.1+20080525)\n" => [1,0,1],
|
||||
"Mercurial Distributed SCM (1916e629a29d)\n" => nil,
|
||||
"Mercurial SCM Distribuito (versione 0.9.5)\n" => [0,9,5],
|
||||
"(1.6)\n(1.7)\n(1.8)" => [1,6],
|
||||
"(1.7.1)\r\n(1.8.1)\r\n(1.9.1)" => [1,7,1]}
|
||||
|
||||
to_test.each do |s, v|
|
||||
test_hgversion_for(s, v)
|
||||
end
|
||||
end
|
||||
|
||||
def test_template_path
|
||||
to_test = {
|
||||
[1,2] => "1.0",
|
||||
[] => "1.0",
|
||||
[1,2,1] => "1.0",
|
||||
[1,7] => "1.0",
|
||||
[1,7,1] => "1.0",
|
||||
[2,0] => "1.0",
|
||||
}
|
||||
to_test.each do |v, template|
|
||||
test_template_path_for(v, template)
|
||||
end
|
||||
end
|
||||
|
||||
def test_info
|
||||
[REPOSITORY_PATH, REPOSITORY_PATH + "/",
|
||||
REPOSITORY_PATH + "//"].each do |repo|
|
||||
adp = Redmine::Scm::Adapters::MercurialAdapter.new(repo)
|
||||
repo_path = adp.info.root_url.gsub(/\\/, "/")
|
||||
assert_equal REPOSITORY_PATH, repo_path
|
||||
assert_equal '33', adp.info.lastrev.revision
|
||||
assert_equal '2e6d546429230f377d7d19c2078abd2dd909f235',adp.info.lastrev.scmid
|
||||
end
|
||||
end
|
||||
|
||||
def test_revisions
|
||||
revisions = @adapter.revisions(nil, 2, 4)
|
||||
assert_equal 3, revisions.size
|
||||
assert_equal '2', revisions[0].revision
|
||||
assert_equal '400bb86721098697c7d17b3724c794c57636de70', revisions[0].scmid
|
||||
assert_equal '4', revisions[2].revision
|
||||
assert_equal 'def6d2f1254a56fb8fbe9ec3b5c0451674dbd8b8', revisions[2].scmid
|
||||
|
||||
revisions = @adapter.revisions(nil, 2, 4, {:limit => 2})
|
||||
assert_equal 2, revisions.size
|
||||
assert_equal '2', revisions[0].revision
|
||||
assert_equal '400bb86721098697c7d17b3724c794c57636de70', revisions[0].scmid
|
||||
end
|
||||
|
||||
def test_parents
|
||||
revs1 = @adapter.revisions(nil, 0, 0)
|
||||
assert_equal 1, revs1.size
|
||||
assert_equal [], revs1[0].parents
|
||||
revs2 = @adapter.revisions(nil, 1, 1)
|
||||
assert_equal 1, revs2.size
|
||||
assert_equal 1, revs2[0].parents.size
|
||||
assert_equal "0885933ad4f68d77c2649cd11f8311276e7ef7ce", revs2[0].parents[0]
|
||||
revs3 = @adapter.revisions(nil, 30, 30)
|
||||
assert_equal 1, revs3.size
|
||||
assert_equal 2, revs3[0].parents.size
|
||||
assert_equal "a94b0528f24fe05ebaef496ae0500bb050772e36", revs3[0].parents[0]
|
||||
assert_equal "3a330eb329586ea2adb3f83237c23310e744ebe9", revs3[0].parents[1]
|
||||
end
|
||||
|
||||
def test_diff
|
||||
if @adapter.class.client_version_above?([1, 2])
|
||||
assert_nil @adapter.diff(nil, '100000')
|
||||
end
|
||||
assert_nil @adapter.diff(nil, '100000', '200000')
|
||||
[2, '400bb8672109', '400', 400].each do |r1|
|
||||
diff1 = @adapter.diff(nil, r1)
|
||||
if @diff_c_support
|
||||
assert_equal 28, diff1.size
|
||||
buf = diff1[24].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal "+ return true unless klass.respond_to?('watched_by')", buf
|
||||
else
|
||||
assert_equal 0, diff1.size
|
||||
end
|
||||
[4, 'def6d2f1254a'].each do |r2|
|
||||
diff2 = @adapter.diff(nil, r1, r2)
|
||||
assert_equal 49, diff2.size
|
||||
buf = diff2[41].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal "+class WelcomeController < ApplicationController", buf
|
||||
diff3 = @adapter.diff('sources/watchers_controller.rb', r1, r2)
|
||||
assert_equal 20, diff3.size
|
||||
buf = diff3[12].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal "+ @watched.remove_watcher(user)", buf
|
||||
|
||||
diff4 = @adapter.diff(nil, r2, r1)
|
||||
assert_equal 49, diff4.size
|
||||
buf = diff4[41].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal "-class WelcomeController < ApplicationController", buf
|
||||
diff5 = @adapter.diff('sources/watchers_controller.rb', r2, r1)
|
||||
assert_equal 20, diff5.size
|
||||
buf = diff5[9].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal "- @watched.remove_watcher(user)", buf
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_diff_made_by_revision
|
||||
if @diff_c_support
|
||||
[24, '24', '4cddb4e45f52'].each do |r1|
|
||||
diff1 = @adapter.diff(nil, r1)
|
||||
assert_equal 5, diff1.size
|
||||
buf = diff1[4].gsub(/\r\n|\r|\n/, "")
|
||||
assert_equal '+0885933ad4f68d77c2649cd11f8311276e7ef7ce tag-init-revision', buf
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_cat
|
||||
[2, '400bb8672109', '400', 400].each do |r|
|
||||
buf = @adapter.cat('sources/welcome_controller.rb', r)
|
||||
assert buf
|
||||
lines = buf.split("\r\n")
|
||||
assert_equal 25, lines.length
|
||||
assert_equal 'class WelcomeController < ApplicationController', lines[17]
|
||||
end
|
||||
assert_nil @adapter.cat('sources/welcome_controller.rb')
|
||||
end
|
||||
|
||||
def test_annotate
|
||||
assert_equal [], @adapter.annotate("sources/welcome_controller.rb").lines
|
||||
[2, '400bb8672109', '400', 400].each do |r|
|
||||
ann = @adapter.annotate('sources/welcome_controller.rb', r)
|
||||
assert ann
|
||||
assert_equal '1', ann.revisions[17].revision
|
||||
assert_equal '9d5b5b004199', ann.revisions[17].identifier
|
||||
assert_equal 'jsmith', ann.revisions[0].author
|
||||
assert_equal 25, ann.lines.length
|
||||
assert_equal 'class WelcomeController < ApplicationController', ann.lines[17]
|
||||
end
|
||||
end
|
||||
|
||||
def test_entries
|
||||
assert_nil @adapter.entries(nil, '100000')
|
||||
|
||||
assert_equal 1, @adapter.entries("sources", 3).size
|
||||
assert_equal 1, @adapter.entries("sources", 'b3a615152df8').size
|
||||
|
||||
[2, '400bb8672109', '400', 400].each do |r|
|
||||
entries1 = @adapter.entries(nil, r)
|
||||
assert entries1
|
||||
assert_equal 3, entries1.size
|
||||
assert_equal 'sources', entries1[1].name
|
||||
assert_equal 'sources', entries1[1].path
|
||||
assert_equal 'dir', entries1[1].kind
|
||||
readme = entries1[2]
|
||||
assert_equal 'README', readme.name
|
||||
assert_equal 'README', readme.path
|
||||
assert_equal 'file', readme.kind
|
||||
assert_equal 27, readme.size
|
||||
assert_equal '1', readme.lastrev.revision
|
||||
assert_equal '9d5b5b00419901478496242e0768deba1ce8c51e', readme.lastrev.identifier
|
||||
# 2007-12-14 10:24:01 +0100
|
||||
assert_equal Time.gm(2007, 12, 14, 9, 24, 1), readme.lastrev.time
|
||||
|
||||
entries2 = @adapter.entries('sources', r)
|
||||
assert entries2
|
||||
assert_equal 2, entries2.size
|
||||
assert_equal 'watchers_controller.rb', entries2[0].name
|
||||
assert_equal 'sources/watchers_controller.rb', entries2[0].path
|
||||
assert_equal 'file', entries2[0].kind
|
||||
assert_equal 'welcome_controller.rb', entries2[1].name
|
||||
assert_equal 'sources/welcome_controller.rb', entries2[1].path
|
||||
assert_equal 'file', entries2[1].kind
|
||||
end
|
||||
end
|
||||
|
||||
def test_entries_tag
|
||||
entries1 = @adapter.entries(nil, 'tag_test.00')
|
||||
assert entries1
|
||||
assert_equal 3, entries1.size
|
||||
assert_equal 'sources', entries1[1].name
|
||||
assert_equal 'sources', entries1[1].path
|
||||
assert_equal 'dir', entries1[1].kind
|
||||
readme = entries1[2]
|
||||
assert_equal 'README', readme.name
|
||||
assert_equal 'README', readme.path
|
||||
assert_equal 'file', readme.kind
|
||||
assert_equal 21, readme.size
|
||||
assert_equal '0', readme.lastrev.revision
|
||||
assert_equal '0885933ad4f68d77c2649cd11f8311276e7ef7ce', readme.lastrev.identifier
|
||||
# 2007-12-14 10:22:52 +0100
|
||||
assert_equal Time.gm(2007, 12, 14, 9, 22, 52), readme.lastrev.time
|
||||
end
|
||||
|
||||
def test_entries_branch
|
||||
entries1 = @adapter.entries(nil, 'test-branch-00')
|
||||
assert entries1
|
||||
assert_equal 5, entries1.size
|
||||
assert_equal 'sql_escape', entries1[2].name
|
||||
assert_equal 'sql_escape', entries1[2].path
|
||||
assert_equal 'dir', entries1[2].kind
|
||||
readme = entries1[4]
|
||||
assert_equal 'README', readme.name
|
||||
assert_equal 'README', readme.path
|
||||
assert_equal 'file', readme.kind
|
||||
assert_equal 365, readme.size
|
||||
assert_equal '8', readme.lastrev.revision
|
||||
assert_equal 'c51f5bb613cd60793c2a9fe9df29332e74bb949f', readme.lastrev.identifier
|
||||
# 2001-02-01 00:00:00 -0900
|
||||
assert_equal Time.gm(2001, 2, 1, 9, 0, 0), readme.lastrev.time
|
||||
end
|
||||
|
||||
def test_entry
|
||||
entry = @adapter.entry()
|
||||
assert_equal "", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
entry = @adapter.entry('')
|
||||
assert_equal "", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
assert_nil @adapter.entry('invalid')
|
||||
assert_nil @adapter.entry('/invalid')
|
||||
assert_nil @adapter.entry('/invalid/')
|
||||
assert_nil @adapter.entry('invalid/invalid')
|
||||
assert_nil @adapter.entry('invalid/invalid/')
|
||||
assert_nil @adapter.entry('/invalid/invalid')
|
||||
assert_nil @adapter.entry('/invalid/invalid/')
|
||||
["README", "/README"].each do |path|
|
||||
["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
|
||||
entry = @adapter.entry(path, rev)
|
||||
assert_equal "README", entry.path
|
||||
assert_equal "file", entry.kind
|
||||
assert_equal '0', entry.lastrev.revision
|
||||
assert_equal '0885933ad4f68d77c2649cd11f8311276e7ef7ce', entry.lastrev.identifier
|
||||
end
|
||||
end
|
||||
["sources", "/sources", "/sources/"].each do |path|
|
||||
["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
|
||||
entry = @adapter.entry(path, rev)
|
||||
assert_equal "sources", entry.path
|
||||
assert_equal "dir", entry.kind
|
||||
end
|
||||
end
|
||||
["sources/watchers_controller.rb", "/sources/watchers_controller.rb"].each do |path|
|
||||
["0", "0885933ad4f6", "0885933ad4f68d77c2649cd11f8311276e7ef7ce"].each do |rev|
|
||||
entry = @adapter.entry(path, rev)
|
||||
assert_equal "sources/watchers_controller.rb", entry.path
|
||||
assert_equal "file", entry.kind
|
||||
assert_equal '0', entry.lastrev.revision
|
||||
assert_equal '0885933ad4f68d77c2649cd11f8311276e7ef7ce', entry.lastrev.identifier
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_locate_on_outdated_repository
|
||||
assert_equal 1, @adapter.entries("images", 0).size
|
||||
assert_equal 2, @adapter.entries("images").size
|
||||
assert_equal 2, @adapter.entries("images", 2).size
|
||||
end
|
||||
|
||||
def test_access_by_nodeid
|
||||
path = 'sources/welcome_controller.rb'
|
||||
assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400bb8672109')
|
||||
end
|
||||
|
||||
def test_access_by_fuzzy_nodeid
|
||||
path = 'sources/welcome_controller.rb'
|
||||
# falls back to nodeid
|
||||
assert_equal @adapter.cat(path, 2), @adapter.cat(path, '400')
|
||||
end
|
||||
|
||||
def test_tags
|
||||
assert_equal [@tag_char_1, 'tag_test.00', 'tag-init-revision'], @adapter.tags
|
||||
end
|
||||
|
||||
def test_tagmap
|
||||
tm = {
|
||||
@tag_char_1 => 'adf805632193500ad3b615cd04f58f9b0769f576',
|
||||
'tag_test.00' => '6987191f453a5f6557018d522feea2c450d5588d',
|
||||
'tag-init-revision' => '0885933ad4f68d77c2649cd11f8311276e7ef7ce',
|
||||
}
|
||||
assert_equal tm, @adapter.tagmap
|
||||
end
|
||||
|
||||
def test_branches
|
||||
brs = []
|
||||
@adapter.branches.each do |b|
|
||||
brs << b
|
||||
end
|
||||
assert_equal 7, brs.length
|
||||
assert_equal 'default', brs[0].to_s
|
||||
assert_equal '31', brs[0].revision
|
||||
assert_equal '31eeee7395c8c78e66dd54c50addd078d10b2355', brs[0].scmid
|
||||
assert_equal 'test-branch-01', brs[1].to_s
|
||||
assert_equal '30', brs[1].revision
|
||||
assert_equal 'ad4dc4f80284a4f9168b77e0b6de288e5d207ee7', brs[1].scmid
|
||||
assert_equal @branch_char_1, brs[2].to_s
|
||||
assert_equal '27', brs[2].revision
|
||||
assert_equal '7bbf4c738e7145149d2e5eb1eed1d3a8ddd3b914', brs[2].scmid
|
||||
assert_equal 'branch (1)[2]&,%.-3_4', brs[3].to_s
|
||||
assert_equal '25', brs[3].revision
|
||||
assert_equal 'afc61e85bde74de930e5846c8451bd55b5bafc9c', brs[3].scmid
|
||||
assert_equal @branch_char_0, brs[4].to_s
|
||||
assert_equal '23', brs[4].revision
|
||||
assert_equal 'c8d3e4887474af6a589190140508037ebaa9d9c3', brs[4].scmid
|
||||
assert_equal 'test_branch.latin-1', brs[5].to_s
|
||||
assert_equal '22', brs[5].revision
|
||||
assert_equal 'c2ffe7da686aa3d956e59f2a2854cf8980a8b768', brs[5].scmid
|
||||
assert_equal 'test-branch-00', brs[6].to_s
|
||||
assert_equal '13', brs[6].revision
|
||||
assert_equal '3a330eb329586ea2adb3f83237c23310e744ebe9', brs[6].scmid
|
||||
end
|
||||
|
||||
def test_branchmap
|
||||
bm = {
|
||||
'default' => '31eeee7395c8c78e66dd54c50addd078d10b2355',
|
||||
'test_branch.latin-1' => 'c2ffe7da686aa3d956e59f2a2854cf8980a8b768',
|
||||
'branch (1)[2]&,%.-3_4' => 'afc61e85bde74de930e5846c8451bd55b5bafc9c',
|
||||
'test-branch-00' => '3a330eb329586ea2adb3f83237c23310e744ebe9',
|
||||
"test-branch-01" => 'ad4dc4f80284a4f9168b77e0b6de288e5d207ee7',
|
||||
@branch_char_0 => 'c8d3e4887474af6a589190140508037ebaa9d9c3',
|
||||
@branch_char_1 => '7bbf4c738e7145149d2e5eb1eed1d3a8ddd3b914',
|
||||
}
|
||||
assert_equal bm, @adapter.branchmap
|
||||
end
|
||||
|
||||
def test_path_space
|
||||
p = 'README (1)[2]&,%.-3_4'
|
||||
[15, '933ca60293d7'].each do |r1|
|
||||
assert @adapter.diff(p, r1)
|
||||
assert @adapter.cat(p, r1)
|
||||
assert_equal 1, @adapter.annotate(p, r1).lines.length
|
||||
[25, 'afc61e85bde7'].each do |r2|
|
||||
assert @adapter.diff(p, r1, r2)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_tag_non_ascii
|
||||
p = "latin-1-dir/test-#{@char_1}-1.txt"
|
||||
assert @adapter.cat(p, @tag_char_1)
|
||||
assert_equal 1, @adapter.annotate(p, @tag_char_1).lines.length
|
||||
end
|
||||
|
||||
def test_branch_non_ascii
|
||||
p = "latin-1-dir/test-#{@char_1}-subdir/test-#{@char_1}-1.txt"
|
||||
assert @adapter.cat(p, @branch_char_1)
|
||||
assert_equal 1, @adapter.annotate(p, @branch_char_1).lines.length
|
||||
end
|
||||
|
||||
def test_nodes_in_branch
|
||||
[
|
||||
'default',
|
||||
@branch_char_1,
|
||||
'branch (1)[2]&,%.-3_4',
|
||||
@branch_char_0,
|
||||
'test_branch.latin-1',
|
||||
'test-branch-00',
|
||||
].each do |bra|
|
||||
nib0 = @adapter.nodes_in_branch(bra)
|
||||
assert nib0
|
||||
nib1 = @adapter.nodes_in_branch(bra, :limit => 1)
|
||||
assert_equal 1, nib1.size
|
||||
case bra
|
||||
when 'branch (1)[2]&,%.-3_4'
|
||||
if @adapter.class.client_version_above?([1, 6])
|
||||
assert_equal 3, nib0.size
|
||||
assert_equal 'afc61e85bde74de930e5846c8451bd55b5bafc9c', nib0[0]
|
||||
nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
|
||||
assert_equal 2, nib2.size
|
||||
assert_equal '933ca60293d78f7c7979dd123cc0c02431683575', nib2[1]
|
||||
end
|
||||
when @branch_char_1
|
||||
if @adapter.class.client_version_above?([1, 6])
|
||||
assert_equal 2, nib0.size
|
||||
assert_equal '08ff3227303ec0dfcc818efa8e9cc652fe81859f', nib0[1]
|
||||
nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
|
||||
assert_equal 1, nib2.size
|
||||
assert_equal '7bbf4c738e7145149d2e5eb1eed1d3a8ddd3b914', nib2[0]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_path_encoding_default_utf8
|
||||
adpt1 = Redmine::Scm::Adapters::MercurialAdapter.new(
|
||||
REPOSITORY_PATH
|
||||
)
|
||||
assert_equal "UTF-8", adpt1.path_encoding
|
||||
adpt2 = Redmine::Scm::Adapters::MercurialAdapter.new(
|
||||
REPOSITORY_PATH,
|
||||
nil,
|
||||
nil,
|
||||
nil,
|
||||
""
|
||||
)
|
||||
assert_equal "UTF-8", adpt2.path_encoding
|
||||
end
|
||||
|
||||
def test_bad_early_options
|
||||
assert_nil @adapter.diff('sources/welcome_controller.rb',
|
||||
'--config=alias.rhdiff=!xterm')
|
||||
assert_raise HgCommandArgumentError do
|
||||
@adapter.entries('--debugger')
|
||||
end
|
||||
assert_raise HgCommandAborted do
|
||||
@adapter.revisions(nil, nil, nil, limit: '--repo=otherrepo')
|
||||
end
|
||||
assert_raise HgCommandAborted do
|
||||
@adapter.nodes_in_branch('default', limit: '--repository=otherrepo')
|
||||
end
|
||||
assert_raise HgCommandAborted do
|
||||
@adapter.nodes_in_branch('-Rotherrepo')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def test_hgversion_for(hgversion, version)
|
||||
@adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
|
||||
if version
|
||||
assert_equal version, @adapter.class.hgversion
|
||||
else
|
||||
assert_nil @adapter.class.hgversion
|
||||
end
|
||||
end
|
||||
|
||||
def test_template_path_for(version, template)
|
||||
assert_equal "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
|
||||
@adapter.class.template_path_for(version)
|
||||
assert File.exist?(@adapter.class.template_path_for(version))
|
||||
end
|
||||
else
|
||||
puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,63 @@
|
|||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||
|
||||
class SubversionAdapterTest < ActiveSupport::TestCase
|
||||
|
||||
if repository_configured?('subversion')
|
||||
def setup
|
||||
@adapter = Redmine::Scm::Adapters::SubversionAdapter.new(self.class.subversion_repository_url)
|
||||
end
|
||||
|
||||
def test_client_version
|
||||
v = Redmine::Scm::Adapters::SubversionAdapter.client_version
|
||||
assert v.is_a?(Array)
|
||||
end
|
||||
|
||||
def test_scm_version
|
||||
to_test = { "svn, version 1.6.13 (r1002816)\n" => [1,6,13],
|
||||
"svn, versione 1.6.13 (r1002816)\n" => [1,6,13],
|
||||
"1.6.1\n1.7\n1.8" => [1,6,1],
|
||||
"1.6.2\r\n1.8.1\r\n1.9.1" => [1,6,2]}
|
||||
to_test.each do |s, v|
|
||||
test_scm_version_for(s, v)
|
||||
end
|
||||
end
|
||||
|
||||
def test_info_not_nil
|
||||
assert_not_nil @adapter.info
|
||||
end
|
||||
|
||||
def test_info_nil
|
||||
adpt = Redmine::Scm::Adapters::SubversionAdapter.new(
|
||||
"file:///invalid/invalid/"
|
||||
)
|
||||
assert_nil adpt.info
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def test_scm_version_for(scm_version, version)
|
||||
@adapter.class.expects(:scm_version_from_command_line).returns(scm_version)
|
||||
assert_equal version, @adapter.class.svn_binary_version
|
||||
end
|
||||
else
|
||||
puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
|
||||
def test_fake; assert true end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue