1 # -*- encoding: utf-8 -*-
3 require 'pettan_imager'
5 describe PettanImager do
7 @f = File.dirname(__FILE__) + '/test.png'
8 @d = File.open(@f, 'rb').read
11 describe 'クラス変数に於いて' do
12 context 'サムネイル幅のとき' do
14 r = PettanImager.tmb_w
18 PettanImager.tmb_w = 64
19 r = PettanImager.tmb_w
23 context 'サムネイル高さのとき' do
25 r = PettanImager.tmb_h
29 PettanImager.tmb_h = 64
30 r = PettanImager.tmb_h
36 describe 'バイナリデータの読み込みに於いて' do
37 context 'つつがなく終わるとき' do
39 r = PettanImager.load @d
40 r.is_a?(PettanImager).should be_true
43 r = PettanImager.load @d
47 r = PettanImager.load @d
48 r.lib.should_not be_nil
51 context 'ロードに失敗したとき' do
53 r = PettanImager.load 'error data'
58 describe 'バイナリデータの出力に於いて' do
60 @i = PettanImager.load @d
62 context 'つつがなく終わるとき' do
69 describe '幅の算出に於いて' do
71 @i = PettanImager.load @d
72 Magick::Image.any_instance.stub(:width).with(any_args).and_return(100)
74 context 'つつがなく終わるとき' do
75 it 'ライブラリに幅の取得を依頼している' do
76 Magick::Image.any_instance.should_receive(:columns).with(any_args).exactly(1)
85 describe '高さの算出に於いて' do
87 @i = PettanImager.load @d
88 Magick::Image.any_instance.stub(:height).with(any_args).and_return(200)
90 context 'つつがなく終わるとき' do
91 it 'ライブラリに高さの取得を依頼している' do
92 Magick::Image.any_instance.should_receive(:rows).with(any_args).exactly(1)
101 describe 'ファイルサイズの算出に於いて' do
103 @i = PettanImager.load @d
104 Magick::Image.any_instance.stub(:filesize).with(any_args).and_return(1500)
106 context 'つつがなく終わるとき' do
107 it 'ライブラリにファイルサイズの取得を依頼している' do
108 Magick::Image.any_instance.should_receive(:filesize).with(any_args).exactly(1)
117 describe '画像フォーマットの算出に於いて' do
119 @i = PettanImager.load @d
120 Magick::Image.any_instance.stub(:format).with(any_args).and_return('PNG')
122 context 'つつがなく終わるとき' do
123 it 'ライブラリに画像フォーマットの取得を依頼している' do
124 Magick::Image.any_instance.should_receive(:format).with(any_args).exactly(1)
133 describe 'MD5の算出に於いて' do
135 @i = PettanImager.load @d
137 context 'つつがなく終わるとき' do
138 it 'バイナリデータをDigest::MD5に変換依頼している' do
139 Digest::MD5.stub(:hexdigest).with(any_args).and_return('a'*32)
140 Digest::MD5.should_receive(:hexdigest).with(any_args).exactly(1)
149 describe '左右反転に於いて' do
151 @i = PettanImager.load @d
152 @mflip = Magick::Image.from_blob(@d).shift
153 Magick::Image.any_instance.stub(:flip).with(any_args).and_return(@mflip)
155 context 'つつがなく終わるとき' do
156 it 'ライブラリに左右反転を依頼している' do
157 Magick::Image.any_instance.should_receive(:flip).with(any_args).exactly(1)
160 it 'ライブラリに反転したバイナリデータの取得を依頼している' do
161 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@d)
162 Magick::Image.any_instance.should_receive(:to_blob).with(any_args).exactly(1)
166 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@mflip.to_blob)
168 r.should eq @mflip.to_blob
172 describe '上下反転に於いて' do
174 @i = PettanImager.load @d
175 @mflop = Magick::Image.from_blob(@d).shift
176 Magick::Image.any_instance.stub(:flop).with(any_args).and_return(@mflop)
178 context 'つつがなく終わるとき' do
179 it 'ライブラリに上下反転を依頼している' do
180 Magick::Image.any_instance.should_receive(:flop).with(any_args).exactly(1)
183 it 'ライブラリに反転したバイナリデータの取得を依頼している' do
184 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@d)
185 Magick::Image.any_instance.should_receive(:to_blob).with(any_args).exactly(1)
189 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@mflop.to_blob)
191 r.should eq @mflop.to_blob
195 describe '上下左右反転に於いて' do
197 @i = PettanImager.load @d
198 @mflip = Magick::Image.from_blob(@d).shift
199 @mflop = Magick::Image.from_blob(@d).shift
200 Magick::Image.any_instance.stub(:flip).with(any_args).and_return(@mflip)
201 Magick::Image.any_instance.stub(:flop).with(any_args).and_return(@mflop)
203 context 'つつがなく終わるとき' do
204 it 'ライブラリに上下左右反転を依頼している' do
205 Magick::Image.any_instance.should_receive(:flip).with(any_args).exactly(1)
206 Magick::Image.any_instance.should_receive(:flop).with(any_args).exactly(1)
209 it 'ライブラリに反転したバイナリデータの取得を依頼している' do
210 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@d)
211 Magick::Image.any_instance.should_receive(:to_blob).with(any_args).exactly(1)
215 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@mflop.to_blob)
217 r.should eq @mflop.to_blob
221 describe 'Gif変換に於いて' do
223 @i = PettanImager.load @d
225 context 'つつがなく終わるとき' do
226 it 'ライブラリにGif変換を依頼している' do
227 Magick::Image.any_instance.should_receive(:format=).with(any_args).exactly(1)
230 it 'ライブラリにGif変換したバイナリデータの取得を依頼している' do
231 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@d)
232 Magick::Image.any_instance.should_receive(:to_blob).with(any_args).exactly(1)
235 it 'バイナリデータから画像処理オブジェクトを興している' do
236 PettanImager.stub(:load).with(any_args).and_return(PettanImager.load(@d))
237 PettanImager.should_receive(:load).with(any_args).exactly(1)
240 it '画像処理オブジェクトを返す' do
242 r.is_a?(PettanImager).should be_true
246 describe 'サムネイル化に於いて' do
248 @i = PettanImager.load @d
249 @rs = Magick::Image.from_blob(@d).shift
250 Magick::Image.any_instance.stub(:resize).with(any_args).and_return(@rs)
252 context 'つつがなく終わるとき' do
253 it 'ライブラリにサムネイル化を依頼している' do
254 Magick::Image.any_instance.should_receive(:resize).with(any_args).exactly(1)
257 it 'ライブラリにサムネイル化したバイナリデータの取得を依頼している' do
258 Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@d)
259 Magick::Image.any_instance.should_receive(:to_blob).with(any_args).exactly(1)
262 it 'バイナリデータから画像処理オブジェクトを興す' do
263 PettanImager.stub(:load).with(any_args).and_return(PettanImager.load(@d))
264 PettanImager.should_receive(:load).with(any_args).exactly(1)
267 it '画像処理オブジェクトを返す' do
269 r.is_a?(PettanImager).should be_true
273 describe 'サムネイルサイズの算出に於いて' do
275 @i = PettanImager.load @d
277 context 'つつがなく終わるとき' do
278 it '自身に幅の取得を依頼している' do
279 PettanImager.any_instance.stub(:width).with(any_args).and_return(64)
280 PettanImager.any_instance.should_receive(:width).with(any_args).exactly(1)
283 it '自身に高さの取得を依頼している' do
284 PettanImager.any_instance.stub(:height).with(any_args).and_return(64)
285 PettanImager.any_instance.should_receive(:height).with(any_args).exactly(1)
289 r = @i.thumbnail_size
290 r.is_a?(Array).should be_true
296 describe 'サムネイルサイズの調整に於いて' do
298 PettanImager.tmb_w=100
299 PettanImager.tmb_h=200
301 context 'サムネイルサイズより小さいとき' do
303 r = PettanImager.thumbnail_size 100, 200
304 r.should eq [100, 200]
307 r = PettanImager.thumbnail_size 99, 199
308 r.should eq [99, 199]
311 context '幅が200%のとき' do
312 it '幅がサイズに収まるように50%にして返す' do
313 r = PettanImager.thumbnail_size 200, 200
314 r.should eq [100, 100]
317 context '高さが200%のとき' do
318 it '高さがサイズに収まるように50%にして返す' do
319 r = PettanImager.thumbnail_size 100, 400
320 r.should eq [50, 200]
323 context '幅が400%と高さが200%のとき' do
324 it '幅がサイズに収まるように25%にして返す' do
325 r = PettanImager.thumbnail_size 400, 400
326 r.should eq [100, 100]
329 context '幅が200%と高さが400%のとき' do
330 it '高さがサイズに収まるように25%にして返す' do
331 r = PettanImager.thumbnail_size 200, 800
332 r.should eq [50, 200]