From f6f136871a1361b28ad7d829a6915f642bd627c0 Mon Sep 17 00:00:00 2001 From: Toshi MARUYAMA Date: Tue, 14 Apr 2020 08:20:52 +0000 Subject: [PATCH] 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 --- test/test_helper.rb | 15 +++++++++++++++ test/unit/repository_git_test.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) 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} ", 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 -- 2.39.5