OSDN Git Service

fix:error dlg
[pettanr/pettanr.git] / lib / test / pettan_imager_spec.rb
1 # -*- encoding: utf-8 -*-
2 #画像処理
3 require 'pettan_imager'
4
5 describe PettanImager do
6   before do
7     @f = File.dirname(__FILE__) + '/test.png'
8     @d = File.open(@f, 'rb').read
9   end
10
11   describe 'クラス変数に於いて' do
12     context 'サムネイル幅のとき' do
13       it 'デフォルトは50' do
14         r = PettanImager.tmb_w
15         r.should eq 50
16       end
17       it 'セットできる' do
18         PettanImager.tmb_w = 64
19         r = PettanImager.tmb_w
20         r.should eq 64
21       end
22     end
23     context 'サムネイル高さのとき' do
24       it 'デフォルトは50' do
25         r = PettanImager.tmb_h
26         r.should eq 50
27       end
28       it 'セットできる' do
29         PettanImager.tmb_h = 64
30         r = PettanImager.tmb_h
31         r.should eq 64
32       end
33     end
34   end
35   
36   describe 'バイナリデータの読み込みに於いて' do
37     context 'つつがなく終わるとき' do
38       it 'インスタンス化している' do
39         r = PettanImager.load @d
40         r.is_a?(PettanImager).should be_true
41       end
42       it 'バイナリデータを控えている' do
43         r = PettanImager.load @d
44         r.binary.should eq @d
45       end
46       it 'ライブラリを準備している' do
47         r = PettanImager.load @d
48         r.lib.should_not be_nil 
49       end
50     end
51     context 'ロードに失敗したとき' do
52       it 'falseを返す' do
53         r = PettanImager.load 'error data'
54         r.should be_false
55       end
56     end
57   end
58   describe 'バイナリデータの出力に於いて' do
59     before do
60       @i = PettanImager.load @d
61     end
62     context 'つつがなく終わるとき' do
63       it '控えバイナリデータを返す' do
64         r = @i.binary
65         r.should eq @d
66       end
67     end
68   end
69   describe '幅の算出に於いて' do
70     before do
71       @i = PettanImager.load @d
72       Magick::Image.any_instance.stub(:width).with(any_args).and_return(100)
73     end
74     context 'つつがなく終わるとき' do
75       it 'ライブラリに幅の取得を依頼している' do
76         Magick::Image.any_instance.should_receive(:columns).with(any_args).exactly(1)
77         r = @i.width
78       end
79       it 'データを返す' do
80         r = @i.width
81         r.should eq 100
82       end
83     end
84   end
85   describe '高さの算出に於いて' do
86     before do
87       @i = PettanImager.load @d
88       Magick::Image.any_instance.stub(:height).with(any_args).and_return(200)
89     end
90     context 'つつがなく終わるとき' do
91       it 'ライブラリに高さの取得を依頼している' do
92         Magick::Image.any_instance.should_receive(:rows).with(any_args).exactly(1)
93         r = @i.height
94       end
95       it 'データを返す' do
96         r = @i.height
97         r.should eq 50
98       end
99     end
100   end
101   describe 'ファイルサイズの算出に於いて' do
102     before do
103       @i = PettanImager.load @d
104       Magick::Image.any_instance.stub(:filesize).with(any_args).and_return(1500)
105     end
106     context 'つつがなく終わるとき' do
107       it 'ライブラリにファイルサイズの取得を依頼している' do
108         Magick::Image.any_instance.should_receive(:filesize).with(any_args).exactly(1)
109         r = @i.filesize
110       end
111       it 'データを返す' do
112         r = @i.filesize
113         r.should eq 1500
114       end
115     end
116   end
117   describe '画像フォーマットの算出に於いて' do
118     before do
119       @i = PettanImager.load @d
120       Magick::Image.any_instance.stub(:format).with(any_args).and_return('PNG')
121     end
122     context 'つつがなく終わるとき' do
123       it 'ライブラリに画像フォーマットの取得を依頼している' do
124         Magick::Image.any_instance.should_receive(:format).with(any_args).exactly(1)
125         r = @i.ext
126       end
127       it 'データを小文字で返す' do
128         r = @i.ext
129         r.should eq 'png'
130       end
131     end
132   end
133   describe 'MD5の算出に於いて' do
134     before do
135       @i = PettanImager.load @d
136     end
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)
141         r = @i.md5
142       end
143       it 'MD5を返す' do
144         r = @i.md5
145         r.size.should eq 32
146       end
147     end
148   end
149   describe '左右反転に於いて' do
150     before 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)
154     end
155     context 'つつがなく終わるとき' do
156       it 'ライブラリに左右反転を依頼している' do
157         Magick::Image.any_instance.should_receive(:flip).with(any_args).exactly(1)
158         r = @i.v
159       end
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)
163         r = @i.v
164       end
165       it 'バイナリデータを返す' do
166         Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@mflip.to_blob)
167         r = @i.v
168         r.should eq @mflip.to_blob
169       end
170     end
171   end
172   describe '上下反転に於いて' do
173     before 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)
177     end
178     context 'つつがなく終わるとき' do
179       it 'ライブラリに上下反転を依頼している' do
180         Magick::Image.any_instance.should_receive(:flop).with(any_args).exactly(1)
181         r = @i.h
182       end
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)
186         r = @i.h
187       end
188       it 'バイナリデータを返す' do
189         Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@mflop.to_blob)
190         r = @i.h
191         r.should eq @mflop.to_blob
192       end
193     end
194   end
195   describe '上下左右反転に於いて' do
196     before 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)
202     end
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)
207         r = @i.vh
208       end
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)
212         r = @i.vh
213       end
214       it 'バイナリデータを返す' do
215         Magick::Image.any_instance.stub(:to_blob).with(any_args).and_return(@mflop.to_blob)
216         r = @i.vh
217         r.should eq @mflop.to_blob
218       end
219     end
220   end
221   describe 'Gif変換に於いて' do
222     before do
223       @i = PettanImager.load @d
224     end
225     context 'つつがなく終わるとき' do
226       it 'ライブラリにGif変換を依頼している' do
227         Magick::Image.any_instance.should_receive(:format=).with(any_args).exactly(1)
228         r = @i.to_gif
229       end
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)
233         r = @i.to_gif
234       end
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)
238         r = @i.to_gif
239       end
240       it '画像処理オブジェクトを返す' do
241         r = @i.to_gif
242         r.is_a?(PettanImager).should be_true
243       end
244     end
245   end
246   describe 'サムネイル化に於いて' do
247     before 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)
251     end
252     context 'つつがなく終わるとき' do
253       it 'ライブラリにサムネイル化を依頼している' do
254         Magick::Image.any_instance.should_receive(:resize).with(any_args).exactly(1)
255         r = @i.to_thumbnail
256       end
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)
260         r = @i.to_thumbnail
261       end
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)
265         r = @i.to_thumbnail
266       end
267       it '画像処理オブジェクトを返す' do
268         r = @i.to_thumbnail
269         r.is_a?(PettanImager).should be_true
270       end
271     end
272   end
273   describe 'サムネイルサイズの算出に於いて' do
274     before do
275       @i = PettanImager.load @d
276     end
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)
281         r = @i.to_thumbnail
282       end
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)
286         r = @i.to_thumbnail
287       end
288       it '幅と高さの配列で返す' do
289         r = @i.thumbnail_size
290         r.is_a?(Array).should be_true
291         r.size.should eq 2
292       end
293     end
294   end
295   
296   describe 'サムネイルサイズの調整に於いて' do
297     before do
298       PettanImager.tmb_w=100
299       PettanImager.tmb_h=200
300     end
301     context 'サムネイルサイズより小さいとき' do
302       it 'そのまま返す' do
303         r = PettanImager.thumbnail_size 100, 200
304         r.should eq [100, 200]
305       end
306       it 'そのまま返す' do
307         r = PettanImager.thumbnail_size 99, 199
308         r.should eq [99, 199]
309       end
310     end
311     context '幅が200%のとき' do
312       it '幅がサイズに収まるように50%にして返す' do
313         r = PettanImager.thumbnail_size 200, 200
314         r.should eq [100, 100]
315       end
316     end
317     context '高さが200%のとき' do
318       it '高さがサイズに収まるように50%にして返す' do
319         r = PettanImager.thumbnail_size 100, 400
320         r.should eq [50, 200]
321       end
322     end
323     context '幅が400%と高さが200%のとき' do
324       it '幅がサイズに収まるように25%にして返す' do
325         r = PettanImager.thumbnail_size 400, 400
326         r.should eq [100, 100]
327       end
328     end
329     context '幅が200%と高さが400%のとき' do
330       it '高さがサイズに収まるように25%にして返す' do
331         r = PettanImager.thumbnail_size 200, 800
332         r.should eq [50, 200]
333       end
334     end
335   end
336   
337 end
338