fix inconsistent image filename extensions (#9638)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7891 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
68f3e91bd7
commit
9be9c5f565
|
@ -537,7 +537,7 @@ module ApplicationHelper
|
|||
# when using an image link, try to use an attachment, if possible
|
||||
if options[:attachments] || (obj && obj.respond_to?(:attachments))
|
||||
attachments = nil
|
||||
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
|
||||
text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpe|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
|
||||
filename, ext, alt, alttext = $1.downcase, $2, $3, $4
|
||||
attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse
|
||||
# search for the picture in attachments
|
||||
|
|
|
@ -123,7 +123,7 @@ class Attachment < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def image?
|
||||
self.filename =~ /\.(jpe?g|gif|png)$/i
|
||||
self.filename =~ /\.(bmp|gif|jpg|jpe|jpeg|png)$/i
|
||||
end
|
||||
|
||||
def is_text?
|
||||
|
|
|
@ -77,6 +77,17 @@ class ActiveSupport::TestCase
|
|||
self.class.mock_file
|
||||
end
|
||||
|
||||
def mock_file_with_options(options={})
|
||||
file = ''
|
||||
file.stubs(:size).returns(32)
|
||||
original_filename = options[:original_filename] || nil
|
||||
file.stubs(:original_filename).returns(original_filename)
|
||||
content_type = options[:content_type] || nil
|
||||
file.stubs(:content_type).returns(content_type)
|
||||
file.stubs(:read).returns(false)
|
||||
file
|
||||
end
|
||||
|
||||
# Use a temporary directory for attachment related tests
|
||||
def set_tmp_attachments_directory
|
||||
Dir.mkdir "#{Rails.root}/tmp/test" unless File.directory?("#{Rails.root}/tmp/test")
|
||||
|
|
|
@ -129,6 +129,59 @@ RAW
|
|||
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => attachments) }
|
||||
end
|
||||
|
||||
def test_attached_images_filename_extension
|
||||
set_tmp_attachments_directory
|
||||
a1 = Attachment.new(
|
||||
:container => Issue.find(1),
|
||||
:file => mock_file_with_options({:original_filename => "testtest.JPG"}),
|
||||
:author => User.find(1))
|
||||
assert a1.save
|
||||
assert_equal "testtest.JPG", a1.filename
|
||||
assert_equal "image/jpeg", a1.content_type
|
||||
assert a1.image?
|
||||
|
||||
a2 = Attachment.new(
|
||||
:container => Issue.find(1),
|
||||
:file => mock_file_with_options({:original_filename => "testtest.jpeg"}),
|
||||
:author => User.find(1))
|
||||
assert a2.save
|
||||
assert_equal "testtest.jpeg", a2.filename
|
||||
assert_equal "image/jpeg", a2.content_type
|
||||
assert a2.image?
|
||||
|
||||
a3 = Attachment.new(
|
||||
:container => Issue.find(1),
|
||||
:file => mock_file_with_options({:original_filename => "testtest.JPE"}),
|
||||
:author => User.find(1))
|
||||
assert a3.save
|
||||
assert_equal "testtest.JPE", a3.filename
|
||||
assert_equal "image/jpeg", a3.content_type
|
||||
assert a3.image?
|
||||
|
||||
a4 = Attachment.new(
|
||||
:container => Issue.find(1),
|
||||
:file => mock_file_with_options({:original_filename => "Testtest.BMP"}),
|
||||
:author => User.find(1))
|
||||
assert a4.save
|
||||
assert_equal "Testtest.BMP", a4.filename
|
||||
assert_equal "image/x-ms-bmp", a4.content_type
|
||||
assert a4.image?
|
||||
|
||||
to_test = {
|
||||
'Inline image: !testtest.jpg!' =>
|
||||
'Inline image: <img src="/attachments/download/' + a1.id.to_s + '" alt="" />',
|
||||
'Inline image: !testtest.jpeg!' =>
|
||||
'Inline image: <img src="/attachments/download/' + a2.id.to_s + '" alt="" />',
|
||||
'Inline image: !testtest.jpe!' =>
|
||||
'Inline image: <img src="/attachments/download/' + a3.id.to_s + '" alt="" />',
|
||||
'Inline image: !testtest.bmp!' =>
|
||||
'Inline image: <img src="/attachments/download/' + a4.id.to_s + '" alt="" />',
|
||||
}
|
||||
|
||||
attachments = [a1, a2, a3, a4]
|
||||
to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :attachments => attachments) }
|
||||
end
|
||||
|
||||
def test_textile_external_links
|
||||
to_test = {
|
||||
'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
|
||||
|
|
Loading…
Reference in New Issue