]> source.dussan.org Git - redmine.git/commitdiff
Merged r18122 from trunk to 4.0-stable (#29259).
authorGo MAEDA <maeda@farend.jp>
Sat, 4 May 2019 10:26:31 +0000 (10:26 +0000)
committerGo MAEDA <maeda@farend.jp>
Sat, 4 May 2019 10:26:31 +0000 (10:26 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/4.0-stable@18123 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/attachment.rb
lib/redmine/syntax_highlighting.rb
test/fixtures/files/hello.js [new file with mode: 0644]
test/unit/attachment_test.rb
test/unit/lib/redmine/syntax_highlighting/rouge_test.rb

index cc9b5f930f8c3984833a122f88699978ddbbda41..3affca0ba8603437a17dfbac17a4a06073982a55 100644 (file)
@@ -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?
index 400f805ec6ca1bb84ea7a3313073b194d3e278e9..6232228ce1623e59c8dae7aa2d79fc819143bfd2 100644 (file)
@@ -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 (file)
index 0000000..c0380dc
--- /dev/null
@@ -0,0 +1 @@
+document.write('Hello, World!');
index 2bee67ed2a46ef00002fa6b4b630f44de75f86f6..4e90ee03ea9b9fd5572fe1a1531934bf81294e80 100644 (file)
@@ -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
index 0bee260e185af1b71e07df94a86584a63200b3d0..862c3afca36a76a09a8495ebed8e6c1bc1f1ed72 100644 (file)
 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