From 5b5298bac05ac272d6aafee73990d6b098c35bce Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Sat, 4 May 2019 10:26:31 +0000 Subject: [PATCH] Merged r18122 from trunk to 4.0-stable (#29259). git-svn-id: http://svn.redmine.org/redmine/branches/4.0-stable@18123 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/attachment.rb | 2 +- lib/redmine/syntax_highlighting.rb | 14 +++++++++++++- test/fixtures/files/hello.js | 1 + test/unit/attachment_test.rb | 17 +++++++++++++++++ .../redmine/syntax_highlighting/rouge_test.rb | 12 ++++++++++++ 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/files/hello.js diff --git a/app/models/attachment.rb b/app/models/attachment.rb index cc9b5f930..3affca0ba 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -235,7 +235,7 @@ class Attachment < ActiveRecord::Base end def is_text? - Redmine::MimeType.is_type?('text', filename) + Redmine::MimeType.is_type?('text', filename) || Redmine::SyntaxHighlighting.filename_supported?(filename) end def is_image? diff --git a/lib/redmine/syntax_highlighting.rb b/lib/redmine/syntax_highlighting.rb index 400f805ec..6232228ce 100644 --- a/lib/redmine/syntax_highlighting.rb +++ b/lib/redmine/syntax_highlighting.rb @@ -50,6 +50,14 @@ module Redmine rescue false end + + def filename_supported?(filename) + if highlighter.respond_to? :filename_supported? + highlighter.filename_supported? filename + else + false + end + end end module Rouge @@ -99,7 +107,11 @@ module Redmine def language_supported?(language) find_lexer(language.to_s.downcase) ? true : false end - + + def filename_supported?(filename) + !::Rouge::Lexer.guesses(:filename => filename).empty? + end + private # Alias names used by CodeRay and not supported by Rouge LANG_ALIASES = { diff --git a/test/fixtures/files/hello.js b/test/fixtures/files/hello.js new file mode 100644 index 000000000..c0380dc44 --- /dev/null +++ b/test/fixtures/files/hello.js @@ -0,0 +1 @@ +document.write('Hello, World!'); diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb index 2bee67ed2..4e90ee03e 100644 --- a/test/unit/attachment_test.rb +++ b/test/unit/attachment_test.rb @@ -444,4 +444,21 @@ class AttachmentTest < ActiveSupport::TestCase puts '(ImageMagick convert not available)' end + def test_is_text + js_attachment = Attachment.new( + :container => Issue.find(1), + :file => uploaded_test_file('hello.js', 'application/javascript'), + :author => User.find(1)) + + to_test = { + js_attachment => true, # hello.js (application/javascript) + attachments(:attachments_003) => false, # logo.gif (image/gif) + attachments(:attachments_004) => true, # source.rb (application/x-ruby) + attachments(:attachments_015) => true, # private.diff (text/x-diff) + attachments(:attachments_016) => false, # testfile.png (image/png) + } + to_test.each do |attachment, expected| + assert_equal expected, attachment.is_text?, attachment.inspect + end + end end diff --git a/test/unit/lib/redmine/syntax_highlighting/rouge_test.rb b/test/unit/lib/redmine/syntax_highlighting/rouge_test.rb index 0bee260e1..862c3afca 100644 --- a/test/unit/lib/redmine/syntax_highlighting/rouge_test.rb +++ b/test/unit/lib/redmine/syntax_highlighting/rouge_test.rb @@ -20,6 +20,18 @@ require File.expand_path('../../../../../test_helper', __FILE__) class Redmine::SyntaxHighlighting::RougeTest < ActiveSupport::TestCase + def test_filename_supported + to_test = { + 'application.js' => true, + 'Gemfile' => true, + 'AUTOEXEC.BAT' => false, # Rouge does not support BAT files + 'HELLO.C' => true + } + to_test.each do |filename, expected| + assert_equal expected, Redmine::SyntaxHighlighting::Rouge.filename_supported?(filename) + end + end + def test_highlight_by_filename_should_distinguish_perl_and_prolog raw_perl = <<'RAW_PERL' #!/usr/bin/perl -- 2.39.5