From b945c757c831c2c8b7da9c2e8b46d412265b577d Mon Sep 17 00:00:00 2001 From: r888888888 Date: Mon, 5 Aug 2013 15:43:55 -0700 Subject: [PATCH] fixes #1905 --- Gemfile | 2 +- Gemfile.lock | 3 ++- test/factories/upload.rb | 16 ++++++++++++++++ test/files/test-blank.jpg | Bin 0 -> 1024 bytes test/files/test-exif-small.jpg | Bin 0 -> 40000 bytes test/unit/upload_test.rb | 16 +++++++++++++++- 6 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 test/files/test-blank.jpg create mode 100644 test/files/test-exif-small.jpg diff --git a/Gemfile b/Gemfile index 68b608248..afb3dfb7f 100644 --- a/Gemfile +++ b/Gemfile @@ -40,7 +40,7 @@ gem 'bcrypt-ruby', :require => "bcrypt" gem 'aws-s3', :require => "aws/s3" gem 'awesome_print' gem 'statistics2' -gem 'ruby-imagespec', :require => "image_spec", :git => "https://github.com/r888888888/ruby-imagespec.git" +gem 'ruby-imagespec', :require => "image_spec", :git => "https://github.com/r888888888/ruby-imagespec.git", :branch => "exif-fixes" group :production do gem 'unicorn', :platforms => :ruby diff --git a/Gemfile.lock b/Gemfile.lock index e4aceb911..05e3541bd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -25,7 +25,8 @@ GIT GIT remote: https://github.com/r888888888/ruby-imagespec.git - revision: 41859ac5808cd64f2385082171ee2cc9f80bfcd1 + revision: 2dab9811f4abb4fbaeea66feb42e388ba545b2d8 + branch: exif-fixes specs: ruby-imagespec (0.3.1) diff --git a/test/factories/upload.rb b/test/factories/upload.rb index 7aa0b5f43..ca7071479 100644 --- a/test/factories/upload.rb +++ b/test/factories/upload.rb @@ -22,6 +22,22 @@ FactoryGirl.define do end end + factory(:exif_jpg_upload) do + content_type "image/jpeg" + file_path do + FileUtils.cp("#{Rails.root}/test/files/test-exif-small.jpg", "#{Rails.root}/tmp") + "#{Rails.root}/tmp/test-exif-small.jpg" + end + end + + factory(:blank_jpg_upload) do + content_type "image/jpeg" + file_path do + FileUtils.cp("#{Rails.root}/test/files/test-blank.jpg", "#{Rails.root}/tmp") + "#{Rails.root}/tmp/test-blank.jpg" + end + end + factory(:large_jpg_upload) do file_ext "jpg" content_type "image/jpeg" diff --git a/test/files/test-blank.jpg b/test/files/test-blank.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05ba8958075deb002d91b29cd3f0e49ee24e54ff GIT binary patch literal 1024 zcmex=`F;lRW~B@xaKjT09dDT{7Ac+pAhVUV#3*T6q74oOXY6jx zb^N@d%Kf&l6h0!Shn`diLmQBJ}F&b zcY$b&NpU1hE#rq3eD$e}*TQNn0%TL2kNo>J*YUv47xK9#?2+Zyztv04Vs0!BJ~4m& z-z{I7*M7e!x^%zhu|)+hidfM`sk`BwOkecmzodqv1RWSH-tumN$S7E98oz?FYx9oTk9lgGycH^ypNAvFO zQLD_*SUIOIX3sQ7P5*Ew$qmjsb^SEz1T0n`+VpUH`kkLTvGq^u3v=&p+HuNmOTZ<& zgxY0?i%-qnd0m5j&Em6Dw^gtFu-Eav0)J0`t4H^u=||-DTG_rod~9{K-*Y*O@8Lfq z^0ssI2 literal 0 HcmV?d00001 diff --git a/test/files/test-exif-small.jpg b/test/files/test-exif-small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7169cd4d1aa97e8aeabbfe3411f31a2b90268d96 GIT binary patch literal 40000 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 Ug$wcZ291~I>E5^eQF6)^07}uSe*gdg literal 0 HcmV?d00001 diff --git a/test/unit/upload_test.rb b/test/unit/upload_test.rb index a8324810a..831ed739f 100644 --- a/test/unit/upload_test.rb +++ b/test/unit/upload_test.rb @@ -69,13 +69,27 @@ class UploadTest < ActiveSupport::TestCase assert_equal(756, @upload.image_height) end - should "discover the dimensions for a JPG" do + should "discover the dimensions for a JPG with JFIF data" do @upload = FactoryGirl.create(:jpg_upload) assert_nothing_raised {@upload.calculate_dimensions(@upload.file_path)} assert_equal(500, @upload.image_width) assert_equal(335, @upload.image_height) end + should "discover the dimensions for a JPG with EXIF data" do + @upload = FactoryGirl.create(:exif_jpg_upload) + assert_nothing_raised {@upload.calculate_dimensions(@upload.file_path)} + assert_equal(529, @upload.image_width) + assert_equal(600, @upload.image_height) + end + + should "discover the dimensions for a JPG with no header data" do + @upload = FactoryGirl.create(:blank_jpg_upload) + assert_nothing_raised {@upload.calculate_dimensions(@upload.file_path)} + assert_equal(668, @upload.image_width) + assert_equal(996, @upload.image_height) + end + should "discover the dimensions for a PNG" do @upload = FactoryGirl.create(:png_upload) assert_nothing_raised {@upload.calculate_dimensions(@upload.file_path)}