Redmine 3.4.4

This commit is contained in:
Manuel Cillero 2018-02-02 22:19:29 +01:00
commit 64924a6376
2112 changed files with 259028 additions and 0 deletions

View 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

View 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

View 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

View file

@ -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

View 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

View 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

View file

@ -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