summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2019-05-04 10:26:31 +0000
committerGo MAEDA <maeda@farend.jp>2019-05-04 10:26:31 +0000
commit5b5298bac05ac272d6aafee73990d6b098c35bce (patch)
treee2ed1143af2282e087657843cc601ff2a1e1cc0e
parentb4562c3989804da8214211fa34221fd8e8067b8e (diff)
downloadredmine-5b5298bac05ac272d6aafee73990d6b098c35bce.tar.gz
redmine-5b5298bac05ac272d6aafee73990d6b098c35bce.zip
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
-rw-r--r--app/models/attachment.rb2
-rw-r--r--lib/redmine/syntax_highlighting.rb14
-rw-r--r--test/fixtures/files/hello.js1
-rw-r--r--test/unit/attachment_test.rb17
-rw-r--r--test/unit/lib/redmine/syntax_highlighting/rouge_test.rb12
5 files changed, 44 insertions, 2 deletions
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