spec/morandi_spec.rb in morandi-0.11.3 vs spec/morandi_spec.rb in morandi-0.12.0

- old
+ new

@@ -1,144 +1,207 @@ +# frozen_string_literal: true + +require 'fileutils' require 'morandi' -RSpec.describe Morandi, "#process" do - context "in command mode" do - it "should create ouptut" do - Morandi.process("sample/sample.jpg", {}, out="sample/out_plain.jpg") +RSpec.describe Morandi, '#process' do + context 'in command mode' do + it 'should create ouptut' do + Morandi.process('sample/sample.jpg', {}, out = 'sample/out_plain.jpg') expect(File.exist?(out)) end - it "should do rotation of images" do - original = Gdk::Pixbuf.get_file_info("sample/sample.jpg") - Morandi.process("sample/sample.jpg", { - 'angle' => 90 - }, out="sample/out_rotate90.jpg") + context "with a big image and a bigger cropped area to fill" do + it 'should create ouptut' do + settings = { + "crop"=>"0,477,15839,18804", + "angle"=>90, + "fx"=>"colour", + "straighten"=>0.0, + "gamma"=>0.98, + "redeye"=>[] + } + + Morandi.process('sample/100_mb_image.jpg', settings, out = 'sample/out_100_mb_image.jpg') + expect(File.exist?(out)) + end + end + + it 'should do rotation of images' do + original = GdkPixbuf::Pixbuf.get_file_info('sample/sample.jpg') + Morandi.process('sample/sample.jpg', { + 'angle' => 90 + }, out = 'sample/out_rotate90.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(original[1]).to eq(h) - expect(original[2]).to eq(w) + _, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(original[1]).to eq(height) + expect(original[2]).to eq(width) end - it "should accept pixbufs as an argument" do - pixbuf = Gdk::Pixbuf.new("sample/sample.jpg") + it 'should accept pixbufs as an argument' do + pixbuf = GdkPixbuf::Pixbuf.new(file: 'sample/sample.jpg') pro = Morandi::ImageProcessor.new(pixbuf, {}, {}) pro.process! expect(pixbuf.width).to eq(pro.result.width) end - it "should do cropping of images" do - Morandi.process("sample/sample.jpg", { - 'crop' => [10,10,300,300] - }, out="sample/out_crop.jpg") + it 'should do cropping of images' do + Morandi.process('sample/sample.jpg', { + 'crop' => [10, 10, 300, 300] + }, out = 'sample/out_crop.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(w).to eq(300) - expect(h).to eq(300) + _, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(width).to eq(300) + expect(height).to eq(300) end - it "should use user supplied path.icc" do + it 'should use user supplied path.icc' do src = 'sample/sample.jpg' icc = '/tmp/this-is-secure-thing.jpg' default_icc = Morandi::ImageProcessor.default_icc_path(src) out = 'sample/out_icc.jpg' - File.unlink(default_icc) rescue nil - Morandi.process(src, { }, out, { 'path.icc' => icc }) + FileUtils.rm_f(default_icc) + Morandi.process(src, {}, out, 'path.icc' => icc) expect(File).to exist(icc) expect(File).not_to exist(default_icc) end - it "should ignore user supplied path.icc" do + it 'should ignore user supplied path.icc' do src = 'sample/sample.jpg' icc = '/tmp/this-is-insecure-thing.jpg' default_icc = Morandi::ImageProcessor.default_icc_path(src) - File.unlink(icc) rescue 0 - File.unlink(default_icc) rescue 0 + FileUtils.rm_f(icc) + FileUtils.rm_f(default_icc) out = 'sample/out_icc.jpg' Morandi.process(src, { 'path.icc' => icc, 'output.max' => 200 }, out) expect(File).not_to exist(icc) expect(File).to exist(default_icc) end - it "should do cropping of images with a string" do - Morandi.process("sample/sample.jpg", { - 'crop' => "10,10,300,300" - }, out="sample/out_crop.jpg") + it 'should do cropping of images with a string' do + Morandi.process('sample/sample.jpg', { + 'crop' => '10,10,300,300' + }, out = 'sample/out_crop.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(w).to eq(300) - expect(h).to eq(300) + _, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(width).to eq(300) + expect(height).to eq(300) end - it "should reduce the size of images" do - Morandi.process("sample/sample.jpg", { - 'output.max' => 200 - }, out="sample/out_reduce.jpg") + it 'should reduce the size of images' do + Morandi.process('sample/sample.jpg', { + 'output.max' => 200 + }, out = 'sample/out_reduce.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(w).to be <= 200 - expect(h).to be <= 200 + _, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(width).to be <= 200 + expect(height).to be <= 200 end - it "should reduce the straighten images" do - Morandi.process("sample/sample.jpg", { - 'straighten' => 5 - }, out="sample/out_straighten.jpg") + it 'should reduce the straighten images' do + Morandi.process('sample/sample.jpg', { + 'straighten' => 5 + }, out = 'sample/out_straighten.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(_.name).to eq('jpeg') + info, _, _ = GdkPixbuf::Pixbuf.get_file_info(out) + expect(info.name).to eq('jpeg') end - it "should reduce the gamma correct images" do - Morandi.process("sample/sample.jpg", { - 'gamma' => 1.2 - }, out="sample/out_gamma.jpg") + it 'should reduce the gamma correct images' do + Morandi.process('sample/sample.jpg', { + 'gamma' => 1.2 + }, out = 'sample/out_gamma.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(_.name).to eq('jpeg') + info, _, _ = GdkPixbuf::Pixbuf.get_file_info(out) + expect(info.name).to eq('jpeg') end - it "should reduce the size of images" do - Morandi.process("sample/sample.jpg", { - 'fx' => 'sepia' - }, out="sample/out_sepia.jpg") + it 'should reduce the size of images' do + Morandi.process('sample/sample.jpg', { + 'fx' => 'sepia' + }, out = 'sample/out_sepia.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(_.name).to eq('jpeg') + info, _, _ = GdkPixbuf::Pixbuf.get_file_info(out) + expect(info.name).to eq('jpeg') end - it "should output at the specified size" do - Morandi.process("sample/sample.jpg", { - 'output.width' => 300, - 'output.height' => 200, - 'image.auto-crop' => true, - 'output.limit' => true - }, out="sample/out_at_size.jpg") + it 'should output at the specified size' do + Morandi.process('sample/sample.jpg', { + 'output.width' => 300, + 'output.height' => 200, + 'image.auto-crop' => true, + 'output.limit' => true + }, out = 'sample/out_at_size.jpg') expect(File.exist?(out)) - _,w,h = Gdk::Pixbuf.get_file_info(out) - expect(_.name).to eq('jpeg') - expect(h).to be <= 200 - expect(w).to be <= 300 + info, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(info.name).to eq('jpeg') + expect(width).to be <= 300 + expect(height).to be <= 200 end + + it 'should blur the image' do + Morandi.process('sample/sample.jpg', { + 'sharpen' => -3 + }, out = 'sample/out_blur.jpg') + expect(File.exist?(out)) + end + + it 'should apply a border and maintain the target size' do + Morandi.process('sample/sample.jpg', { + 'border-style' => 'square', + 'background-style' => 'dominant', + 'border-size-mm' => 5, + 'output.width' => 800, + 'output.height' => 650 + }, out = 'sample/out_border.jpg') + expect(File.exist?(out)) + + info, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(info.name).to eq('jpeg') + expect(width).to eq 800 + expect(height).to eq 650 + end + + it 'should apply multiple transformations' do + Morandi.process('sample/sample.jpg', { + 'brighten' => 5, + 'contrast' => 5, + 'sharpen' => 2, + 'fx' => 'greyscale', + 'border-style' => 'solid', + 'background-style' => '#00FF00', + 'crop' => [50, 0, 750, 650], + 'output.width' => 300, + 'output.height' => 260, + 'output.limit' => true + }, out = 'sample/out_various.jpg') + expect(File.exist?(out)) + + info, width, height = GdkPixbuf::Pixbuf.get_file_info(out) + expect(info.name).to eq('jpeg') + expect(width).to eq 300 + expect(height).to eq 260 + end end context 'with increasing quality settings' do let(:max_quality_file_size) do - Morandi.process("sample/sample.jpg", { 'quality' => 100 }, "sample/out-100.jpg") - File.size("sample/out-100.jpg") + Morandi.process('sample/sample.jpg', { 'quality' => 100 }, 'sample/out-100.jpg') + File.size('sample/out-100.jpg') end let(:default_of_97_quality) do - Morandi.process("sample/sample.jpg", {}, "sample/out-97.jpg") - File.size("sample/out-97.jpg") + Morandi.process('sample/sample.jpg', {}, 'sample/out-97.jpg') + File.size('sample/out-97.jpg') end let(:quality_of_40_by_options_args) do - Morandi.process("sample/sample.jpg", { 'quality' => 40 }, "sample/out-40.jpg") - File.size("sample/out-40.jpg") + Morandi.process('sample/sample.jpg', { 'quality' => 40 }, 'sample/out-40.jpg') + File.size('sample/out-40.jpg') end # Sort the output files' sizes and expect them to match to quality order - it "creates files of increasing size" do + it 'creates files of increasing size' do created_file_sizes = [default_of_97_quality, max_quality_file_size, quality_of_40_by_options_args].sort expect(created_file_sizes).to eq([quality_of_40_by_options_args, default_of_97_quality, max_quality_file_size]) end end end