summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>2020-04-14 08:20:52 +0000
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>2020-04-14 08:20:52 +0000
commitf6f136871a1361b28ad7d829a6915f642bd627c0 (patch)
treebfb86ead3eb70c3b9b427fd68962ca31b9a0adc5
parent6cdd161ba12e860cce0ab4ae643067f7b16a094e (diff)
downloadredmine-f6f136871a1361b28ad7d829a6915f642bd627c0.tar.gz
redmine-f6f136871a1361b28ad7d829a6915f642bd627c0.zip
scm: git: add test of UTF-8 Emoji committer and comments (#24030)
git-svn-id: http://svn.redmine.org/redmine/trunk@19699 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--test/test_helper.rb15
-rw-r--r--test/unit/repository_git_test.rb31
2 files changed, 46 insertions, 0 deletions
diff --git a/test/test_helper.rb b/test/test_helper.rb
index aeea0e216..07464b2ff 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -163,6 +163,21 @@ class ActiveSupport::TestCase
File.directory?(repository_path(vendor))
end
+ def self.is_mysql_utf8mb4
+ return false unless Redmine::Database::mysql?
+ character_sets = %w[
+ character_set_connection
+ character_set_database
+ character_set_results
+ character_set_server
+ ]
+ ActiveRecord::Base.connection.
+ select_rows('show variables like "character%"').each do |r|
+ return false if character_sets.include?(r[0]) && r[1] != "utf8mb4"
+ end
+ return true
+ end
+
def repository_path_hash(arr)
hs = {}
hs[:path] = arr.join("/")
diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb
index 7c0d40b65..88d16679e 100644
--- a/test/unit/repository_git_test.rb
+++ b/test/unit/repository_git_test.rb
@@ -27,6 +27,9 @@ class RepositoryGitTest < ActiveSupport::TestCase
REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
+ REPOSITORY_UTF8_PATH = Rails.root.join('tmp/test/git_utf8_repository').to_s
+ REPOSITORY_UTF8_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
+
NUM_REV = 28
NUM_HEAD = 8
@@ -587,4 +590,32 @@ class RepositoryGitTest < ActiveSupport::TestCase
puts "Git test repository NOT FOUND. Skipping unit tests !!!"
def test_fake; assert true end
end
+
+ if File.directory?(REPOSITORY_UTF8_PATH) &&
+ !(Redmine::Database::mysql? && !is_mysql_utf8mb4)
+ def test_utf8_emoji
+ repo = Repository::Git.create(
+ :project => @project,
+ :url => REPOSITORY_UTF8_PATH,
+ :identifier => 'utf8',
+ :path_encoding => 'UTF-8'
+ )
+ assert repo
+ assert_equal 0, repo.changesets.count
+ repo.fetch_changesets
+ @project.reload
+ assert_equal 1, repo.changesets.count
+ changeset = repo.find_changeset_by_name('9da6b5c6748cc62ee26616718c9bb0e9acfb3e15')
+ assert_equal "U+1F603\u{1F603} <none@none>", changeset.committer
+ assert_equal "U+1F603\u{1F603}", changeset.comments
+ end
+ elsif !File.directory?(REPOSITORY_UTF8_PATH)
+ puts "Git UTF-8 test repository NOT FOUND. Skipping unit tests !!!"
+ def test_fake; assert true end
+ else
+ puts "Git UTF-8 test repository contains Emoji."
+ puts "Tests connot run on NOT utf8mb4 MySQL."
+ puts "Skipping unit tests !!!"
+ def test_fake; assert true end
+ end
end