rmagick 2.13.1 → 2.13.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +57 -0
  4. data/CONTRIBUTING.md +22 -0
  5. data/ChangeLog +49 -2
  6. data/Gemfile +7 -0
  7. data/LICENSE +20 -0
  8. data/README.textile +161 -0
  9. data/Rakefile +176 -0
  10. data/before_install_linux.sh +12 -0
  11. data/before_install_osx.sh +2 -0
  12. data/doc/.cvsignore +1 -0
  13. data/doc/comtasks.html +2 -2
  14. data/doc/constants.html +2 -2
  15. data/doc/draw.html +2 -2
  16. data/doc/ex/PreserveAspectRatio.rb +0 -0
  17. data/doc/ex/ViewBox.rb +0 -0
  18. data/doc/ex/adaptive_threshold.rb +0 -0
  19. data/doc/ex/add_noise.rb +0 -0
  20. data/doc/ex/affine.rb +0 -0
  21. data/doc/ex/affine_transform.rb +0 -0
  22. data/doc/ex/arc.rb +0 -0
  23. data/doc/ex/arcpath.rb +0 -0
  24. data/doc/ex/average.rb +0 -0
  25. data/doc/ex/axes.rb +0 -0
  26. data/doc/ex/bilevel_channel.rb +0 -0
  27. data/doc/ex/blur_image.rb +0 -0
  28. data/doc/ex/border.rb +0 -0
  29. data/doc/ex/bounding_box.rb +0 -0
  30. data/doc/ex/cbezier1.rb +0 -0
  31. data/doc/ex/cbezier2.rb +0 -0
  32. data/doc/ex/cbezier3.rb +0 -0
  33. data/doc/ex/cbezier4.rb +0 -0
  34. data/doc/ex/cbezier5.rb +0 -0
  35. data/doc/ex/cbezier6.rb +0 -0
  36. data/doc/ex/channel.rb +0 -0
  37. data/doc/ex/charcoal.rb +0 -0
  38. data/doc/ex/chop.rb +0 -0
  39. data/doc/ex/circle.rb +0 -0
  40. data/doc/ex/clip_path.rb +0 -0
  41. data/doc/ex/coalesce.rb +0 -0
  42. data/doc/ex/color_fill_to_border.rb +0 -0
  43. data/doc/ex/color_floodfill.rb +0 -0
  44. data/doc/ex/color_histogram.rb +0 -0
  45. data/doc/ex/color_reset.rb +0 -0
  46. data/doc/ex/colorize.rb +0 -0
  47. data/doc/ex/colors.rb +0 -0
  48. data/doc/ex/composite.rb +0 -0
  49. data/doc/ex/composite_layers.rb +0 -0
  50. data/doc/ex/contrast.rb +0 -0
  51. data/doc/ex/crop.rb +0 -0
  52. data/doc/ex/cycle_colormap.rb +0 -0
  53. data/doc/ex/drawcomp.rb +0 -0
  54. data/doc/ex/drop_shadow.rb +0 -0
  55. data/doc/ex/edge.rb +0 -0
  56. data/doc/ex/ellipse.rb +0 -0
  57. data/doc/ex/emboss.rb +0 -0
  58. data/doc/ex/enhance.rb +0 -0
  59. data/doc/ex/equalize.rb +0 -0
  60. data/doc/ex/evenodd.rb +0 -0
  61. data/doc/ex/flatten_images.rb +0 -0
  62. data/doc/ex/flip.rb +0 -0
  63. data/doc/ex/flop.rb +0 -0
  64. data/doc/ex/fonts.rb +0 -0
  65. data/doc/ex/frame.rb +0 -0
  66. data/doc/ex/gaussian_blur.rb +0 -0
  67. data/doc/ex/get_pixels.rb +0 -0
  68. data/doc/ex/gradientfill.rb +0 -0
  69. data/doc/ex/grav.rb +0 -0
  70. data/doc/ex/gravity.rb +0 -0
  71. data/doc/ex/hatchfill.rb +0 -0
  72. data/doc/ex/images/image_with_profile.jpg +0 -0
  73. data/doc/ex/images/logo400x83.gif +0 -0
  74. data/doc/ex/implode.rb +0 -0
  75. data/doc/ex/level.rb +0 -0
  76. data/doc/ex/line.rb +0 -0
  77. data/doc/ex/mask.rb +1 -1
  78. data/doc/ex/matte_fill_to_border.rb +0 -0
  79. data/doc/ex/matte_floodfill.rb +0 -0
  80. data/doc/ex/matte_replace.rb +0 -0
  81. data/doc/ex/median_filter.rb +0 -0
  82. data/doc/ex/modulate.rb +0 -0
  83. data/doc/ex/mono.rb +0 -0
  84. data/doc/ex/morph.rb +0 -0
  85. data/doc/ex/mosaic.rb +0 -0
  86. data/doc/ex/motion_blur.rb +0 -0
  87. data/doc/ex/negate.rb +0 -0
  88. data/doc/ex/nested_rvg.rb +0 -0
  89. data/doc/ex/nonzero.rb +0 -0
  90. data/doc/ex/normalize.rb +0 -0
  91. data/doc/ex/oil_paint.rb +0 -0
  92. data/doc/ex/opacity.rb +0 -0
  93. data/doc/ex/ordered_dither.rb +0 -0
  94. data/doc/ex/path.rb +0 -0
  95. data/doc/ex/pattern1.rb +0 -0
  96. data/doc/ex/pattern2.rb +0 -0
  97. data/doc/ex/polygon.rb +0 -0
  98. data/doc/ex/polyline.rb +0 -0
  99. data/doc/ex/preview.rb +0 -0
  100. data/doc/ex/qbezierpath.rb +0 -0
  101. data/doc/ex/quantize-m.rb +0 -0
  102. data/doc/ex/radial_blur.rb +0 -0
  103. data/doc/ex/raise.rb +0 -0
  104. data/doc/ex/rectangle.rb +0 -0
  105. data/doc/ex/reduce_noise.rb +0 -0
  106. data/doc/ex/roll.rb +0 -0
  107. data/doc/ex/rotate.rb +0 -0
  108. data/doc/ex/rotate_f.rb +0 -0
  109. data/doc/ex/roundrect.rb +0 -0
  110. data/doc/ex/rubyname.rb +0 -0
  111. data/doc/ex/rvg_linecap.rb +0 -0
  112. data/doc/ex/rvg_linejoin.rb +0 -0
  113. data/doc/ex/rvg_opacity.rb +0 -0
  114. data/doc/ex/rvg_stroke_dasharray.rb +0 -0
  115. data/doc/ex/segment.rb +0 -0
  116. data/doc/ex/shade.rb +0 -0
  117. data/doc/ex/shave.rb +0 -0
  118. data/doc/ex/shear.rb +0 -0
  119. data/doc/ex/sketch.rb +0 -0
  120. data/doc/ex/skewx.rb +0 -0
  121. data/doc/ex/skewy.rb +0 -0
  122. data/doc/ex/smile.rb +0 -0
  123. data/doc/ex/solarize.rb +0 -0
  124. data/doc/ex/spread.rb +0 -0
  125. data/doc/ex/stegano.rb +0 -0
  126. data/doc/ex/stroke_dasharray.rb +0 -0
  127. data/doc/ex/stroke_fill.rb +0 -0
  128. data/doc/ex/stroke_linecap.rb +0 -0
  129. data/doc/ex/stroke_linejoin.rb +0 -0
  130. data/doc/ex/stroke_width.rb +0 -0
  131. data/doc/ex/swirl.rb +0 -0
  132. data/doc/ex/text.rb +0 -0
  133. data/doc/ex/text_align.rb +0 -0
  134. data/doc/ex/text_antialias.rb +0 -0
  135. data/doc/ex/text_undercolor.rb +0 -0
  136. data/doc/ex/texture_fill_to_border.rb +0 -0
  137. data/doc/ex/texture_floodfill.rb +0 -0
  138. data/doc/ex/texturefill.rb +0 -0
  139. data/doc/ex/threshold.rb +0 -0
  140. data/doc/ex/to_blob.rb +0 -0
  141. data/doc/ex/translate.rb +0 -0
  142. data/doc/ex/transparent.rb +0 -0
  143. data/doc/ex/unsharp_mask.rb +0 -0
  144. data/doc/ex/wave.rb +0 -0
  145. data/doc/ilist.html +2 -2
  146. data/doc/image1.html +2 -2
  147. data/doc/image2.html +2 -2
  148. data/doc/image3.html +2 -2
  149. data/doc/imageattrs.html +2 -2
  150. data/doc/imusage.html +2 -2
  151. data/doc/index.html +3 -3
  152. data/doc/info.html +2 -2
  153. data/doc/magick.html +2 -2
  154. data/doc/optequiv.html +2 -2
  155. data/doc/rvg.html +2 -2
  156. data/doc/rvgclip.html +2 -2
  157. data/doc/rvggroup.html +2 -2
  158. data/doc/rvgimage.html +2 -2
  159. data/doc/rvgpattern.html +2 -2
  160. data/doc/rvgshape.html +2 -2
  161. data/doc/rvgstyle.html +2 -2
  162. data/doc/rvgtext.html +2 -2
  163. data/doc/rvgtspan.html +2 -2
  164. data/doc/rvgtut.html +2 -2
  165. data/doc/rvguse.html +2 -2
  166. data/doc/rvgxform.html +2 -2
  167. data/doc/struct.html +2 -2
  168. data/doc/usage.html +2 -2
  169. data/examples/crop_with_gravity.rb +0 -0
  170. data/examples/demo.rb +0 -0
  171. data/examples/describe.rb +0 -0
  172. data/examples/identify.rb +1 -1
  173. data/examples/rotating_text.rb +0 -0
  174. data/ext/RMagick/extconf.rb +62 -31
  175. data/ext/RMagick/rmagick.c +15 -15
  176. data/ext/RMagick/rmagick.h +9 -7
  177. data/ext/RMagick/rmdraw.c +12 -12
  178. data/ext/RMagick/rmenum.c +2 -2
  179. data/ext/RMagick/rmfill.c +25 -25
  180. data/ext/RMagick/rmilist.c +121 -104
  181. data/ext/RMagick/rmimage.c +743 -548
  182. data/ext/RMagick/rminfo.c +15 -15
  183. data/ext/RMagick/rmmain.c +27 -3
  184. data/ext/RMagick/rmpixel.c +25 -27
  185. data/ext/RMagick/rmstruct.c +1 -1
  186. data/ext/RMagick/rmutil.c +18 -18
  187. data/lib/RMagick.rb +1 -1962
  188. data/lib/rmagick/version.rb +5 -0
  189. data/lib/rmagick.rb +1 -0
  190. data/lib/rmagick_internal.rb +1964 -0
  191. data/rmagick.gemspec +21 -9
  192. data/test/Draw.rb +121 -0
  193. data/test/Image1.rb +763 -0
  194. data/test/Image2.rb +1312 -0
  195. data/test/Image3.rb +1033 -0
  196. data/test/ImageList1.rb +808 -0
  197. data/test/ImageList2.rb +389 -0
  198. data/test/Image_attributes.rb +700 -0
  199. data/test/Import_Export.rb +126 -0
  200. data/test/Info.rb +349 -0
  201. data/test/Magick.rb +324 -0
  202. data/test/Pixel.rb +119 -0
  203. data/test/Preview.rb +62 -0
  204. data/test/cmyk.icm +0 -0
  205. data/test/srgb.icm +0 -0
  206. data/test/test_all_basic.rb +34 -0
  207. data/test/tmpnam_test.rb +50 -0
  208. metadata +395 -352
  209. data/README-Mac-OSX.txt +0 -1
  210. data/README.html +0 -10
  211. data/build_tarball.rake +0 -215
  212. data/ext/RMagick/MANIFEST +0 -358
  213. data/metaconfig +0 -7
  214. data/post-clean.rb +0 -12
  215. data/post-install.rb +0 -50
  216. data/post-setup.rb +0 -254
  217. data/setup.rb +0 -1585
  218. data/uninstall.rb +0 -74
data/test/Image2.rb ADDED
@@ -0,0 +1,1312 @@
1
+ #! /usr/local/bin/ruby -w
2
+
3
+ require 'RMagick'
4
+ require 'test/unit'
5
+ require 'test/unit/ui/console/testrunner' if !RUBY_VERSION[/^1\.9|^2/]
6
+
7
+ # TODO: improve exif tests - need a benchmark image with EXIF data
8
+
9
+
10
+ class Image2_UT < Test::Unit::TestCase
11
+ FreezeError = RUBY_VERSION[/^1\.9|^2/] ? RuntimeError : TypeError
12
+
13
+ def setup
14
+ @img = Magick::Image.new(20, 20)
15
+ end
16
+
17
+ def test_composite!
18
+ img1 = Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first
19
+ img2 = Magick::Image.read(IMAGES_DIR+'/Button_1.gif').first
20
+ assert_nothing_raised do
21
+ res = img1.composite!(img2, Magick::NorthWestGravity, Magick::OverCompositeOp)
22
+ assert_same(img1, res)
23
+ end
24
+ img1.freeze
25
+ assert_raise(FreezeError) { img1.composite!(img2, Magick::NorthWestGravity, Magick::OverCompositeOp) }
26
+ end
27
+
28
+ def test_composite_affine
29
+ affine = Magick::AffineMatrix.new(1, 0, 1, 0, 0, 0)
30
+ img1 = Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first
31
+ img2 = Magick::Image.read(IMAGES_DIR+'/Button_1.gif').first
32
+ assert_nothing_raised do
33
+ res = img1.composite_affine(img2, affine)
34
+ assert_instance_of(Magick::Image, res)
35
+ assert_not_same(@img, res)
36
+ end
37
+ end
38
+
39
+ def test_composite_mathematics
40
+ bg = Magick::Image.new(50, 50)
41
+ fg = Magick::Image.new(50, 50) {self.background_color = "black" }
42
+ res = nil
43
+ assert_nothing_raised { res = bg.composite_mathematics(fg, 1, 0, 0, 0, Magick::CenterGravity) }
44
+ assert_instance_of(Magick::Image, res)
45
+ assert_not_same(bg, res)
46
+ assert_not_same(fg, res)
47
+ assert_nothing_raised { res = bg.composite_mathematics(fg, 1, 0, 0, 0, 0.0, 0.0) }
48
+ assert_nothing_raised { res = bg.composite_mathematics(fg, 1, 0, 0, 0, Magick::CenterGravity, 0.0, 0.0) }
49
+
50
+ # too few arguments
51
+ assert_raise(ArgumentError) { bg.composite_mathematics(fg, 1, 0, 0, 0) }
52
+ # too many arguments
53
+ assert_raise(ArgumentError) { bg.composite_mathematics(fg, 1, 0, 0, 0, Magick::CenterGravity, 0.0, 0.0, 'x') }
54
+ end
55
+
56
+ def test_composite_tiled
57
+ bg = Magick::Image.new(200,200)
58
+ fg = Magick::Image.new(50,100) { self.background_color = "black" }
59
+ res = nil
60
+ assert_nothing_raised do
61
+ res = bg.composite_tiled(fg)
62
+ end
63
+ assert_instance_of(Magick::Image, res)
64
+ assert_not_same(bg, res)
65
+ assert_not_same(fg, res)
66
+ assert_nothing_raised { bg.composite_tiled!(fg) }
67
+ assert_nothing_raised { bg.composite_tiled(fg, Magick::AtopCompositeOp) }
68
+ assert_nothing_raised { bg.composite_tiled(fg, Magick::OverCompositeOp) }
69
+ assert_nothing_raised { bg.composite_tiled(fg, Magick::RedChannel) }
70
+ assert_nothing_raised { bg.composite_tiled(fg, Magick::RedChannel, Magick::GreenChannel) }
71
+
72
+ fg.destroy!
73
+ assert_raise(Magick::DestroyedImageError) { bg.composite_tiled(fg) }
74
+ end
75
+
76
+ def test_compress_colormap!
77
+ # DirectClass images are converted to PseudoClass
78
+ assert_equal(Magick::DirectClass, @img.class_type)
79
+ assert_nothing_raised { @img.compress_colormap! }
80
+ assert_equal(Magick::PseudoClass, @img.class_type)
81
+ img = Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first
82
+ assert_equal(Magick::PseudoClass, @img.class_type)
83
+ assert_nothing_raised { @img.compress_colormap! }
84
+ end
85
+
86
+ def test_contrast
87
+ assert_nothing_raised do
88
+ res = @img.contrast
89
+ assert_instance_of(Magick::Image, res)
90
+ assert_not_same(@img, res)
91
+ end
92
+ assert_nothing_raised { @img.contrast(true) }
93
+ assert_raise(ArgumentError) { @img.contrast(true, 2) }
94
+ end
95
+
96
+ def test_contrast_stretch_channel
97
+ assert_nothing_raised do
98
+ res = @img.contrast_stretch_channel(25)
99
+ assert_instance_of(Magick::Image, res)
100
+ assert_not_same(@img, res)
101
+ end
102
+ assert_nothing_raised { @img.contrast_stretch_channel(25, 50) }
103
+ assert_nothing_raised { @img.contrast_stretch_channel('10%') }
104
+ assert_nothing_raised { @img.contrast_stretch_channel('10%', '50%') }
105
+ assert_nothing_raised { @img.contrast_stretch_channel(25, 50, Magick::RedChannel) }
106
+ assert_nothing_raised { @img.contrast_stretch_channel(25, 50, Magick::RedChannel, Magick::GreenChannel) }
107
+ assert_raise(TypeError) { @img.contrast_stretch_channel(25, 50, 'x') }
108
+ assert_raise(ArgumentError) { @img.contrast_stretch_channel }
109
+ assert_raise(ArgumentError) { @img.contrast_stretch_channel('x') }
110
+ assert_raise(ArgumentError) { @img.contrast_stretch_channel(25, 'x') }
111
+
112
+ end
113
+
114
+ def test_convolve
115
+ kernel = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
116
+ order = 3
117
+ assert_nothing_raised do
118
+ res = @img.convolve(order, kernel)
119
+ assert_instance_of(Magick::Image, res)
120
+ assert_not_same(@img, res)
121
+ end
122
+ assert_raise(ArgumentError) { @img.convolve }
123
+ assert_raise(ArgumentError) { @img.convolve(order) }
124
+ assert_raise(IndexError) { @img.convolve(5, kernel) }
125
+ assert_raise(IndexError) { @img.convolve(order, "x") }
126
+ assert_raise(TypeError) { @img.convolve(3, [1.0, 1.0, 1.0, 1.0, 'x', 1.0, 1.0, 1.0, 1.0]) }
127
+ assert_raise(Magick::ImageMagickError) { @img.convolve(-1, [1.0, 1.0, 1.0, 1.0]) }
128
+ end
129
+
130
+ def test_convolve_channel
131
+ assert_raise(ArgumentError) { @img.convolve_channel }
132
+ assert_raise(ArgumentError) { @img.convolve_channel(3) }
133
+ kernel = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
134
+ order = 3
135
+ assert_nothing_raised do
136
+ res = @img.convolve_channel(order, kernel, Magick::RedChannel)
137
+ assert_instance_of(Magick::Image, res)
138
+ assert_not_same(@img, res)
139
+ end
140
+
141
+ assert_nothing_raised { @img.convolve_channel(order, kernel, Magick::RedChannel, Magick:: BlueChannel) }
142
+ assert_raise(TypeError) { @img.convolve_channel(order, kernel, Magick::RedChannel, 2) }
143
+ end
144
+
145
+ def test_copy
146
+ assert_nothing_raised do
147
+ ditto = @img.copy
148
+ assert_equal(@img, ditto)
149
+ end
150
+ ditto = @img.copy
151
+ assert_equal(@img.tainted?, ditto.tainted?)
152
+ @img.taint
153
+ ditto = @img.copy
154
+ assert_equal(@img.tainted?, ditto.tainted?)
155
+ end
156
+
157
+ def test_crop
158
+ assert_raise(ArgumentError) { @img.crop }
159
+ assert_raise(ArgumentError) { @img.crop(0, 0) }
160
+ assert_nothing_raised do
161
+ res = @img.crop(0, 0, @img.columns/2, @img.rows/2)
162
+ assert_instance_of(Magick::Image, res)
163
+ assert_not_same(@img, res)
164
+ end
165
+ gravity = [
166
+ Magick::NorthEastGravity,
167
+ Magick::EastGravity,
168
+ Magick::SouthWestGravity,
169
+ Magick::SouthGravity,
170
+ Magick::SouthEastGravity]
171
+
172
+ # 3-argument form
173
+ gravity.each do |grav|
174
+ assert_nothing_raised { @img.crop(grav, @img.columns/2, @img.rows/2) }
175
+ end
176
+ assert_raise(TypeError) { @img.crop(2, @img.columns/2, @img.rows/2) }
177
+ assert_raise(TypeError) { @img.crop(Magick::NorthWestGravity, @img.columns/2, @img.rows/2, 2) }
178
+
179
+ # 4-argument form
180
+ assert_raise(TypeError) { @img.crop(0, 0, @img.columns/2, 'x') }
181
+ assert_raise(TypeError) { @img.crop(0, 0, 'x', @img.rows/2) }
182
+ assert_raise(TypeError) { @img.crop(0, 'x', @img.columns/2, @img.rows/2) }
183
+ assert_raise(TypeError) { @img.crop('x', 0, @img.columns/2, @img.rows/2) }
184
+ assert_raise(TypeError) { @img.crop(0, 0, @img.columns/2, @img.rows/2, 2) }
185
+
186
+ # 5-argument form
187
+ gravity.each do |grav|
188
+ assert_nothing_raised { @img.crop(grav, 0, 0, @img.columns/2, @img.rows/2) }
189
+ end
190
+
191
+ assert_raise(ArgumentError) { @img.crop(Magick::NorthWestGravity, 0, 0, @img.columns/2, @img.rows/2, 2) }
192
+ end
193
+
194
+ def test_crop!
195
+ assert_nothing_raised do
196
+ res = @img.crop!(0, 0, @img.columns/2, @img.rows/2)
197
+ assert_same(@img, res)
198
+ end
199
+ end
200
+
201
+ def test_cycle_colormap
202
+ assert_nothing_raised do
203
+ res = @img.cycle_colormap(5)
204
+ assert_instance_of(Magick::Image, res)
205
+ assert_not_same(@img, res)
206
+ assert_equal(Magick::PseudoClass, res.class_type)
207
+ end
208
+ end
209
+
210
+ def test_decipher # tests encipher, too.
211
+ res = res2 = nil
212
+ assert_nothing_raised do
213
+ res = @img.encipher "passphrase"
214
+ res2 = res.decipher "passphrase"
215
+ end
216
+ assert_instance_of(Magick::Image, res)
217
+ assert_not_same(@img, res)
218
+ assert_equal(@img.columns, res.columns)
219
+ assert_equal(@img.rows, res.rows)
220
+ assert_instance_of(Magick::Image, res2)
221
+ assert_not_same(@img, res2)
222
+ assert_equal(@img.columns, res2.columns)
223
+ assert_equal(@img.rows, res2.rows)
224
+ assert_equal(@img, res2)
225
+ end
226
+
227
+ def test_define
228
+ assert_nothing_raised { @img.define("deskew:auto-crop", 40) }
229
+ assert_nothing_raised { @img.undefine("deskew:auto-crop") }
230
+ end
231
+
232
+ def test_deskew
233
+ assert_nothing_raised do
234
+ res = @img.deskew
235
+ assert_instance_of(Magick::Image, res)
236
+ assert_not_same(@img, res)
237
+ end
238
+
239
+ assert_nothing_raised { @img.deskew(0.10) }
240
+ assert_nothing_raised { @img.deskew("95%") }
241
+ assert_raise(ArgumentError) { @img.deskew("x") }
242
+ assert_raise(TypeError) {@img.deskew(0.40, "x") }
243
+ assert_raise(ArgumentError) {@img.deskew(0.40, 20, [1]) }
244
+ end
245
+
246
+ def test_despeckle
247
+ assert_nothing_raised do
248
+ res = @img.despeckle
249
+ assert_instance_of(Magick::Image, res)
250
+ assert_not_same(@img, res)
251
+ end
252
+ end
253
+
254
+ # ensure methods detect destroyed images
255
+ def test_destroy
256
+ methods = Magick::Image.instance_methods(false).sort
257
+ if RUBY_VERSION[/^1\.9|^2/]
258
+ methods -= [:__display__, :destroy!, :destroyed?, :inspect, :cur_image, :marshal_load]
259
+ else
260
+ methods -= %w{ __display__ destroy! destroyed? inspect cur_image marshal_load}
261
+ end
262
+
263
+ assert_equal(false, @img.destroyed?)
264
+ @img.destroy!
265
+ assert_equal(true, @img.destroyed?)
266
+ assert_raises(Magick::DestroyedImageError) { @img.check_destroyed }
267
+
268
+ methods.each do |method|
269
+ arity = @img.method(method).arity
270
+ method = method.to_s
271
+
272
+ case
273
+ when method == "[]="
274
+ assert_raises(Magick::DestroyedImageError) { @img['foo'] = 1 }
275
+ when method == "difference"
276
+ other = Magick::Image.new(20,20)
277
+ assert_raises(Magick::DestroyedImageError) { @img.difference(other) }
278
+ when method == "get_iptc_dataset"
279
+ assert_raises(Magick::DestroyedImageError) { @img.get_iptc_dataset('x') }
280
+ when method == "profile!"
281
+ assert_raises(Magick::DestroyedImageError) { @img.profile!('x', 'y') }
282
+ when /=\Z/.match(method)
283
+ assert_raises(Magick::DestroyedImageError) { @img.send(method, 1) }
284
+ when arity == 0
285
+ assert_raises(Magick::DestroyedImageError) { @img.send(method) }
286
+ when arity < 0
287
+ args = (1..(-arity)).to_a
288
+ assert_raises(Magick::DestroyedImageError) { @img.send(method, *args) }
289
+ when arity > 0
290
+ args = (1..(arity)).to_a
291
+ assert_raises(Magick::DestroyedImageError) { @img.send(method, *args) }
292
+ else
293
+ # Don't know how to test!
294
+ flunk("don't know how to test method #{method}" )
295
+ end
296
+ end
297
+ end
298
+
299
+ # ensure destroy! works
300
+ def test_destroy2
301
+ begin # ensure Magick.trace_proc gets set to nil even if this test asserts
302
+ images = {}
303
+ GC.disable
304
+ Magick.trace_proc = Proc.new do |which, id, addr, method|
305
+ m = id.split(/ /)
306
+ name = File.basename m[0]
307
+ format = m[1]
308
+ size = m[2]
309
+ geometry = m[3]
310
+ image_class = m[4]
311
+
312
+ assert(which == :c || which == :d, "unexpected value for which: #{which}")
313
+ assert_equal(:destroy!, method) if which == :d
314
+ if which == :c
315
+ assert(!images.has_key?(addr), "duplicate image addresses")
316
+ images[addr] = name
317
+ else
318
+ assert(images.has_key?(addr), "destroying image that was not created")
319
+ assert_equal(name, images[addr])
320
+ end
321
+ end
322
+ unmapped = Magick::ImageList.new(IMAGES_DIR+"/Hot_Air_Balloons.jpg", IMAGES_DIR+"/Violin.jpg", IMAGES_DIR+"/Polynesia.jpg")
323
+ map = Magick::ImageList.new "netscape:"
324
+ mapped = unmapped.map map, false
325
+ unmapped.each {|i| i.destroy!}
326
+ map.destroy!
327
+ mapped.each {|i| i.destroy!}
328
+ ensure
329
+ GC.enable
330
+ Magick.trace_proc = nil
331
+ end
332
+ end
333
+
334
+ def test_difference
335
+ img1 = Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first
336
+ img2 = Magick::Image.read(IMAGES_DIR+'/Button_1.gif').first
337
+ assert_nothing_raised do
338
+ res = img1.difference(img2)
339
+ assert_instance_of(Array, res)
340
+ assert_equal(3, res.length)
341
+ assert_instance_of(Float, res[0])
342
+ assert_instance_of(Float, res[1])
343
+ assert_instance_of(Float, res[2])
344
+ end
345
+
346
+ assert_raise(NoMethodError) { img1.difference(2) }
347
+ img2.destroy!
348
+ assert_raise(Magick::DestroyedImageError) { img1.difference(img2) }
349
+ end
350
+
351
+ def test_displace
352
+ @img2 = Magick::Image.new(20,20) {self.background_color = "black"}
353
+ assert_nothing_raised { @img.displace(@img2, 25) }
354
+ res = @img.displace(@img2, 25)
355
+ assert_instance_of(Magick::Image, res)
356
+ assert_not_same(@img, res)
357
+ assert_nothing_raised { @img.displace(@img2, 25, 25) }
358
+ assert_nothing_raised { @img.displace(@img2, 25, 25, 10) }
359
+ assert_nothing_raised { @img.displace(@img2, 25, 25, 10, 10) }
360
+ assert_nothing_raised { @img.displace(@img2, 25, 25, Magick::CenterGravity) }
361
+ assert_nothing_raised { @img.displace(@img2, 25, 25, Magick::CenterGravity, 10) }
362
+ assert_nothing_raised { @img.displace(@img2, 25, 25, Magick::CenterGravity, 10, 10) }
363
+ assert_raise(ArgumentError) { @img.displace }
364
+ assert_raise(TypeError) { @img.displace(@img2, 'x') }
365
+ assert_raise(TypeError) { @img.displace(@img2, 25, []) }
366
+ assert_raise(TypeError) { @img.displace(@img2, 25, 25, 'x') }
367
+ assert_raise(TypeError) { @img.displace(@img2, 25, 25, Magick::CenterGravity, 'x') }
368
+ assert_raise(TypeError) { @img.displace(@img2, 25, 25, Magick::CenterGravity, 10, []) }
369
+
370
+ @img2.destroy!
371
+ assert_raise(Magick::DestroyedImageError) { @img.displace(@img2, 25, 25) }
372
+ end
373
+
374
+ def test_dissolve
375
+ src = Magick::Image.new(@img.columns, @img.rows)
376
+ src_list = Magick::ImageList.new
377
+ src_list << src.copy
378
+ assert_nothing_raised { @img.dissolve(src, 0.50 ) }
379
+ assert_nothing_raised { @img.dissolve(src_list, 0.50) }
380
+ assert_nothing_raised { @img.dissolve(src, '50%') }
381
+ assert_nothing_raised { @img.dissolve(src, 0.50, 0.10) }
382
+ assert_nothing_raised { @img.dissolve(src, 0.50, 0.10, 10) }
383
+ assert_nothing_raised { @img.dissolve(src, 0.50, 0.10, Magick::NorthEastGravity) }
384
+ assert_nothing_raised { @img.dissolve(src, 0.50, 0.10, Magick::NorthEastGravity, 10) }
385
+ assert_nothing_raised { @img.dissolve(src, 0.50, 0.10, Magick::NorthEastGravity, 10, 10) }
386
+
387
+ assert_raise(ArgumentError) { @img.dissolve(src, 'x') }
388
+ assert_raise(ArgumentError) { @img.dissolve(src, 0.50, 'x') }
389
+ assert_raise(TypeError) { @img.dissolve(src, 0.50, Magick::NorthEastGravity, 'x') }
390
+ assert_raise(TypeError) { @img.dissolve(src, 0.50, Magick::NorthEastGravity, 10, 'x') }
391
+
392
+ src.destroy!
393
+ assert_raise(Magick::DestroyedImageError) { @img.dissolve(src, 0.50) }
394
+ end
395
+
396
+ def test_distort
397
+ @img = Magick::Image.new(200, 200)
398
+ assert_nothing_raised { @img.distort(Magick::AffineDistortion, [2,60, 2,60, 32,60, 32,60, 2,30, 17,35]) }
399
+ assert_nothing_raised { @img.distort(Magick::AffineProjectionDistortion, [1,0,0,1,0,0]) }
400
+ assert_nothing_raised { @img.distort(Magick::BilinearDistortion, [7,40, 4,30, 4,124, 4,123, 85,122, 100,123, 85,2, 100,30]) }
401
+ assert_nothing_raised { @img.distort(Magick::PerspectiveDistortion, [7,40, 4,30, 4,124, 4,123, 85,122, 100,123, 85,2, 100,30]) }
402
+ assert_nothing_raised { @img.distort(Magick::ScaleRotateTranslateDistortion, [28,24, 0.4,0.8 -110, 37.5,60]) }
403
+ assert_raise(ArgumentError) { @img.distort }
404
+ assert_raise(ArgumentError) { @img.distort(Magick::AffineDistortion) }
405
+ assert_raise(TypeError) { @img.distort(1, [1]) }
406
+ end
407
+
408
+ def test_distortion_channel
409
+ assert_nothing_raised do
410
+ metric = @img.distortion_channel(@img, Magick::MeanAbsoluteErrorMetric)
411
+ assert_instance_of(Float, metric)
412
+ assert_equal(0.0, metric)
413
+ end
414
+ assert_nothing_raised { @img.distortion_channel(@img, Magick::MeanSquaredErrorMetric) }
415
+ assert_nothing_raised { @img.distortion_channel(@img, Magick::PeakAbsoluteErrorMetric) }
416
+ assert_nothing_raised { @img.distortion_channel(@img, Magick::PeakSignalToNoiseRatioMetric) }
417
+ assert_nothing_raised { @img.distortion_channel(@img, Magick::RootMeanSquaredErrorMetric) }
418
+ assert_nothing_raised { @img.distortion_channel(@img, Magick::MeanSquaredErrorMetric, Magick::RedChannel, Magick:: BlueChannel) }
419
+ assert_raise(TypeError) { @img.distortion_channel(@img, 2) }
420
+ assert_raise(TypeError) { @img.distortion_channel(@img, Magick::RootMeanSquaredErrorMetric, 2) }
421
+ assert_raise(ArgumentError) { @img.distortion_channel }
422
+ assert_raise(ArgumentError) { @img.distortion_channel(@img) }
423
+
424
+ img = Magick::Image.new(20,20)
425
+ img.destroy!
426
+ assert_raise(Magick::DestroyedImageError) { @img.distortion_channel(img, Magick::MeanSquaredErrorMetric) }
427
+ end
428
+
429
+ def test_dup
430
+ assert_nothing_raised do
431
+ ditto = @img.dup
432
+ assert_equal(@img, ditto)
433
+ end
434
+ ditto = @img.dup
435
+ assert_equal(@img.tainted?, ditto.tainted?)
436
+ @img.taint
437
+ ditto = @img.dup
438
+ assert_equal(@img.tainted?, ditto.tainted?)
439
+ end
440
+
441
+ def test_each_profile
442
+ @img.iptc_profile = "test profile"
443
+ assert_nothing_raised do
444
+ @img.each_profile do |name, value|
445
+ assert_equal("iptc", name)
446
+ # As of 6.3.1
447
+ if IM_VERSION < Gem::Version.new("6.6.4") || (IM_VERSION == Gem::Version.new("6.6.4") && IM_REVISION < Gem::Version.new("5"))
448
+ assert_equal("8BIM\004\004\000\000\000\000\001\340test profile", value)
449
+ else
450
+ assert_equal("test profile", value)
451
+ end
452
+ end
453
+ end
454
+ end
455
+
456
+ def test_edge
457
+ assert_nothing_raised do
458
+ res = @img.edge
459
+ assert_instance_of(Magick::Image, res)
460
+ assert_not_same(@img, res)
461
+ end
462
+ assert_nothing_raised { @img.edge(2.0) }
463
+ assert_raise(ArgumentError) { @img.edge(2.0, 2) }
464
+ assert_raise(TypeError) { @img.edge('x') }
465
+ end
466
+
467
+ def test_emboss
468
+ assert_nothing_raised do
469
+ res = @img.emboss
470
+ assert_instance_of(Magick::Image, res)
471
+ assert_not_same(@img, res)
472
+ end
473
+ assert_nothing_raised { @img.emboss(1.0) }
474
+ assert_nothing_raised { @img.emboss(1.0, 0.5) }
475
+ assert_raise(ArgumentError) { @img.emboss(1.0, 0.5, 2) }
476
+ assert_raise(TypeError) { @img.emboss(1.0, 'x') }
477
+ assert_raise(TypeError) { @img.emboss('x', 1.0) }
478
+ end
479
+
480
+ def test_enhance
481
+ assert_nothing_raised do
482
+ res = @img.enhance
483
+ assert_instance_of(Magick::Image, res)
484
+ assert_not_same(@img, res)
485
+ end
486
+ end
487
+
488
+
489
+ def test_equalize
490
+ assert_nothing_raised do
491
+ res = @img.equalize
492
+ assert_instance_of(Magick::Image, res)
493
+ assert_not_same(@img, res)
494
+ end
495
+ end
496
+
497
+ def test_equalize_channel
498
+ assert_nothing_raised do
499
+ res = @img.equalize_channel
500
+ assert_instance_of(Magick::Image, res)
501
+ assert_not_same(@img, res)
502
+ end
503
+ assert_nothing_raised { @img.equalize_channel }
504
+ assert_nothing_raised { @img.equalize_channel(Magick::RedChannel) }
505
+ assert_nothing_raised { @img.equalize_channel(Magick::RedChannel, Magick::BlueChannel) }
506
+ assert_raise(TypeError) { @img.equalize_channel(Magick::RedChannel, 2) }
507
+ end
508
+
509
+ def test_erase!
510
+ assert_nothing_raised do
511
+ res = @img.erase!
512
+ assert_same(@img, res)
513
+ end
514
+ end
515
+
516
+ def test_excerpt
517
+ res = nil
518
+ img = Magick::Image.new(200, 200)
519
+ assert_nothing_raised { res = @img.excerpt(20,20,50,100) }
520
+ assert_not_same(img, res)
521
+ assert_equal(50, res.columns)
522
+ assert_equal(100, res.rows)
523
+
524
+ assert_nothing_raised { img.excerpt!(20,20,50,100) }
525
+ assert_equal(50, img.columns)
526
+ assert_equal(100, img.rows)
527
+ end
528
+
529
+ def test_export_pixels
530
+ assert_nothing_raised do
531
+ res = @img.export_pixels
532
+ assert_instance_of(Array, res)
533
+ assert_equal(@img.columns*@img.rows*"RGB".length, res.length)
534
+ res.each do |p|
535
+ assert_kind_of(Integer, p)
536
+ end
537
+ end
538
+ assert_nothing_raised { res = @img.export_pixels(0) }
539
+ assert_nothing_raised { res = @img.export_pixels(0, 0) }
540
+ assert_nothing_raised { res = @img.export_pixels(0, 0, 10) }
541
+ assert_nothing_raised { res = @img.export_pixels(0, 0, 10, 10) }
542
+ assert_nothing_raised do
543
+ res = @img.export_pixels(0, 0, 10, 10, 'RGBA')
544
+ assert_equal(10*10*"RGBA".length, res.length)
545
+ end
546
+ assert_nothing_raised do
547
+ res = @img.export_pixels(0, 0, 10, 10, 'I')
548
+ assert_equal(10*10*"I".length, res.length)
549
+ end
550
+
551
+ # too many arguments
552
+ assert_raise(ArgumentError) { @img.export_pixels(0, 0, 10, 10, 'I', 2) }
553
+
554
+ end
555
+
556
+ def test_export_pixels_to_str
557
+ assert_nothing_raised do
558
+ res = @img.export_pixels_to_str
559
+ assert_instance_of(String, res)
560
+ assert_equal(@img.columns*@img.rows*"RGB".length, res.length)
561
+ end
562
+ assert_nothing_raised { @img.export_pixels_to_str(0) }
563
+ assert_nothing_raised { @img.export_pixels_to_str(0, 0) }
564
+ assert_nothing_raised { @img.export_pixels_to_str(0, 0, 10) }
565
+ assert_nothing_raised { @img.export_pixels_to_str(0, 0, 10, 10) }
566
+ assert_nothing_raised do
567
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "RGBA")
568
+ assert_equal(10*10*"RGBA".length, res.length)
569
+ end
570
+ assert_nothing_raised do
571
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I")
572
+ assert_equal(10*10*"I".length, res.length)
573
+ end
574
+
575
+ assert_nothing_raised do
576
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::CharPixel)
577
+ assert_equal(10*10*1, res.length)
578
+ end
579
+ assert_nothing_raised do
580
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::ShortPixel)
581
+ assert_equal(10*10*2, res.length)
582
+ end
583
+ assert_nothing_raised do
584
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::IntegerPixel)
585
+ assert_equal(10*10*4, res.length)
586
+ end
587
+ assert_nothing_raised do
588
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::LongPixel)
589
+ assert_equal(10*10*[1].pack("L!").length, res.length)
590
+ end
591
+ assert_nothing_raised do
592
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::FloatPixel)
593
+ assert_equal(10*10*4, res.length)
594
+ end
595
+ assert_nothing_raised do
596
+ res = @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::DoublePixel)
597
+ assert_equal(10*10*8, res.length)
598
+ end
599
+ assert_nothing_raised { @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::QuantumPixel) }
600
+
601
+ # too many arguments
602
+ assert_raise(ArgumentError) { @img.export_pixels_to_str(0, 0, 10, 10, "I", Magick::QuantumPixel, 1) }
603
+ # last arg s/b StorageType
604
+ assert_raise(TypeError) { @img.export_pixels_to_str(0, 0, 10, 10, "I", 2) }
605
+ end
606
+
607
+ def test_extent
608
+ assert_nothing_raised { @img.extent(40, 40) }
609
+ res = @img.extent(40, 40)
610
+ assert_instance_of(Magick::Image, res)
611
+ assert_not_same(@img, res)
612
+ assert_equal(40, res.columns)
613
+ assert_equal(40, res.rows)
614
+ assert_nothing_raised { @img.extent(40, 40, 5) }
615
+ assert_nothing_raised { @img.extent(40, 40, 5, 5) }
616
+ assert_raises(ArgumentError) { @img.extent(-40, 40) }
617
+ assert_raises(ArgumentError) { @img.extent(40, -40) }
618
+ assert_raises(TypeError) { @img.extent('x', 40) }
619
+ assert_raises(TypeError) { @img.extent(40, 'x') }
620
+ assert_raises(TypeError) { @img.extent(40, 40, 'x') }
621
+ assert_raises(TypeError) { @img.extent(40, 40, 5, 'x') }
622
+ end
623
+
624
+ def test_find_similar_region
625
+ girl = Magick::Image.read(IMAGES_DIR+"/Flower_Hat.jpg").first
626
+ region = girl.crop(10, 10, 50, 50)
627
+ assert_nothing_raised do
628
+ x, y = girl.find_similar_region(region)
629
+ assert_not_nil(x)
630
+ assert_not_nil(y)
631
+ assert_equal(10, x)
632
+ assert_equal(10, y)
633
+ end
634
+ assert_nothing_raised do
635
+ x, y = girl.find_similar_region(region, 0)
636
+ assert_equal(10, x)
637
+ assert_equal(10, y)
638
+ end
639
+ assert_nothing_raised do
640
+ x, y = girl.find_similar_region(region, 0, 0)
641
+ assert_equal(10, x)
642
+ assert_equal(10, y)
643
+ end
644
+
645
+ list = Magick::ImageList.new
646
+ list << region
647
+ assert_nothing_raised do
648
+ x, y = girl.find_similar_region(list, 0, 0)
649
+ assert_equal(10, x)
650
+ assert_equal(10, y)
651
+ end
652
+
653
+
654
+ x = girl.find_similar_region(@img)
655
+ assert_nil(x)
656
+
657
+ assert_raise(ArgumentError) { girl.find_similar_region(region, 10, 10, 10) }
658
+ assert_raise(TypeError) { girl.find_similar_region(region, 10, 'x') }
659
+ assert_raise(TypeError) { girl.find_similar_region(region, 'x') }
660
+
661
+ region.destroy!
662
+ assert_raise(Magick::DestroyedImageError) { girl.find_similar_region(region) }
663
+
664
+ end
665
+
666
+ def test_flip
667
+ assert_nothing_raised do
668
+ res = @img.flip
669
+ assert_instance_of(Magick::Image, res)
670
+ assert_not_same(@img, res)
671
+ end
672
+ end
673
+
674
+ def test_flip!
675
+ assert_nothing_raised do
676
+ res = @img.flip!
677
+ assert_same(@img, res)
678
+ end
679
+ end
680
+
681
+ def test_flop
682
+ assert_nothing_raised do
683
+ res = @img.flop
684
+ assert_instance_of(Magick::Image, res)
685
+ assert_not_same(@img, res)
686
+ end
687
+ end
688
+
689
+ def test_flop!
690
+ assert_nothing_raised do
691
+ res = @img.flop!
692
+ assert_same(@img, res)
693
+ end
694
+ end
695
+
696
+ def test_frame
697
+ assert_nothing_raised do
698
+ res = @img.frame
699
+ assert_instance_of(Magick::Image, res)
700
+ assert_not_same(@img, res)
701
+ end
702
+ assert_nothing_raised { @img.frame(50) }
703
+ assert_nothing_raised { @img.frame(50, 50) }
704
+ assert_nothing_raised { @img.frame(50, 50, 25) }
705
+ assert_nothing_raised { @img.frame(50, 50, 25, 25) }
706
+ assert_nothing_raised { @img.frame(50, 50, 25, 25, 6) }
707
+ assert_nothing_raised { @img.frame(50, 50, 25, 25, 6, 6) }
708
+ assert_nothing_raised { @img.frame(50, 50, 25, 25, 6, 6, 'red') }
709
+ red = Magick::Pixel.new(Magick::QuantumRange)
710
+ assert_nothing_raised { @img.frame(50, 50, 25, 25, 6, 6, red) }
711
+ assert_raise(TypeError) { @img.frame(50, 50, 25, 25, 6, 6, 2) }
712
+ end
713
+
714
+ def test_gamma_channel
715
+ assert_nothing_raised do
716
+ res = @img.gamma_channel(0.8)
717
+ assert_instance_of(Magick::Image, res)
718
+ assert_not_same(@img, res)
719
+ end
720
+ assert_raise(ArgumentError) { @img.gamma_channel }
721
+ assert_nothing_raised { @img.gamma_channel(0.8, Magick::RedChannel) }
722
+ assert_nothing_raised { @img.gamma_channel(0.8, Magick::RedChannel, Magick::BlueChannel) }
723
+ assert_raise(TypeError) { @img.gamma_channel(0.8, Magick::RedChannel, 2) }
724
+ end
725
+
726
+ def test_function_channel
727
+ img = Magick::Image.read("gradient:") {self.size = "20x600"}
728
+ img = img.first
729
+ img.rotate!(90)
730
+ assert_nothing_raised { img.function_channel Magick::PolynomialFunction, 0.33 }
731
+ assert_nothing_raised { img.function_channel Magick::PolynomialFunction, 4, -1.5 }
732
+ assert_nothing_raised { img.function_channel Magick::PolynomialFunction, 4, -4, 1 }
733
+ assert_nothing_raised { img.function_channel Magick::PolynomialFunction, -25, 53, -36, 8.3, 0.2 }
734
+
735
+ assert_nothing_raised { img.function_channel Magick::SinusoidFunction, 1 }
736
+ assert_nothing_raised { img.function_channel Magick::SinusoidFunction, 1, 90 }
737
+ assert_nothing_raised { img.function_channel Magick::SinusoidFunction, 5, 90, 0.25, 0.75 }
738
+
739
+ assert_nothing_raised { img.function_channel Magick::ArcsinFunction, 1 }
740
+ assert_nothing_raised { img.function_channel Magick::ArcsinFunction, 0.5 }
741
+ assert_nothing_raised { img.function_channel Magick::ArcsinFunction, 0.4, 0.7 }
742
+ assert_nothing_raised { img.function_channel Magick::ArcsinFunction, 0.5, 0.5, 0.5, 0.5 }
743
+
744
+ assert_nothing_raised { img.function_channel Magick::ArctanFunction, 1 }
745
+ assert_nothing_raised { img.function_channel Magick::ArctanFunction, 10, 0.7 }
746
+ assert_nothing_raised { img.function_channel Magick::ArctanFunction, 5, 0.7, 1.2 }
747
+ assert_nothing_raised { img.function_channel Magick::ArctanFunction, 15, 0.7, 0.5, 0.75 }
748
+
749
+ # with channel args
750
+ assert_nothing_raised { img.function_channel Magick::PolynomialFunction, 0.33, Magick::RedChannel }
751
+ assert_nothing_raised { img.function_channel Magick::SinusoidFunction, 1, Magick::RedChannel, Magick::BlueChannel }
752
+
753
+ # invalid args
754
+ assert_raise(ArgumentError) { img.function_channel }
755
+ assert_raise(TypeError) { img.function_channel 1 }
756
+ assert_raise(ArgumentError) { img.function_channel Magick::PolynomialFunction }
757
+ assert_raise(TypeError) { img.function_channel Magick::PolynomialFunction, [] }
758
+ assert_raise(ArgumentError) { img.function_channel Magick::SinusoidFunction, 5, 90, 0.25, 0.75, 0.1 }
759
+ assert_raise(ArgumentError) { img.function_channel Magick::ArcsinFunction, 0.5, 0.5, 0.5, 0.5, 0.1 }
760
+ assert_raise(ArgumentError) { img.function_channel Magick::ArctanFunction, 15, 0.7, 0.5, 0.75, 0.1 }
761
+ end
762
+
763
+ def test_gramma_correct
764
+ assert_raise(ArgumentError) { @img.gamma_correct }
765
+ # All 4 arguments can't default to 1.0
766
+ assert_raise(ArgumentError) { @img.gamma_correct(1.0) }
767
+ assert_nothing_raised do
768
+ res = @img.gamma_correct(0.8)
769
+ assert_instance_of(Magick::Image, res)
770
+ assert_not_same(@img, res)
771
+ end
772
+ assert_nothing_raised { @img.gamma_correct(0.8, 0.9) }
773
+ assert_nothing_raised { @img.gamma_correct(0.8, 0.9, 1.0) }
774
+ assert_nothing_raised { @img.gamma_correct(0.8, 0.9, 1.0, 1.1) }
775
+ # too many arguments
776
+ assert_raise(ArgumentError) { @img.gamma_correct(0.8, 0.9, 1.0, 1.1, 2) }
777
+ end
778
+
779
+ def test_gaussian_blur
780
+ assert_nothing_raised do
781
+ res = @img.gaussian_blur
782
+ assert_instance_of(Magick::Image, res)
783
+ assert_not_same(@img, res)
784
+ end
785
+ assert_nothing_raised { @img.gaussian_blur(0.0) }
786
+ assert_nothing_raised { @img.gaussian_blur(0.0, 3.0) }
787
+ # sigma must be != 0.0
788
+ assert_raise(ArgumentError) { @img.gaussian_blur(1.0, 0.0) }
789
+ assert_raise(ArgumentError) { @img.gaussian_blur(1.0, 3.0, 2) }
790
+ end
791
+
792
+ def test_gaussian_blur_channel
793
+ assert_nothing_raised do
794
+ res = @img.gaussian_blur_channel
795
+ assert_instance_of(Magick::Image, res)
796
+ assert_not_same(@img, res)
797
+ end
798
+ assert_nothing_raised { @img.gaussian_blur_channel(0.0) }
799
+ assert_nothing_raised { @img.gaussian_blur_channel(0.0, 3.0) }
800
+ assert_nothing_raised { @img.gaussian_blur_channel(0.0, 3.0, Magick::RedChannel) }
801
+ assert_nothing_raised { @img.gaussian_blur_channel(0.0, 3.0, Magick::RedChannel, Magick::BlueChannel) }
802
+ assert_raise(TypeError) { @img.gaussian_blur_channel(0.0, 3.0, Magick::RedChannel, 2) }
803
+ end
804
+
805
+ def test_get_exif_by_entry
806
+ assert_nothing_raised do
807
+ res = @img.get_exif_by_entry
808
+ assert_instance_of(Array, res)
809
+ end
810
+ end
811
+
812
+ def test_get_exif_by_number
813
+ assert_nothing_raised do
814
+ res = @img.get_exif_by_number
815
+ assert_instance_of(Hash, res)
816
+ end
817
+ end
818
+
819
+ def test_get_pixels
820
+ assert_nothing_raised do
821
+ pixels = @img.get_pixels(0, 0, @img.columns, 1)
822
+ assert_instance_of(Array, pixels)
823
+ assert_equal(@img.columns, pixels.length)
824
+ assert_block do
825
+ pixels.all? { |p| p.is_a? Magick::Pixel }
826
+ end
827
+ end
828
+ assert_raise(RangeError) { @img.get_pixels( 0, 0, -1, 1) }
829
+ assert_raise(RangeError) { @img.get_pixels( 0, 0, @img.columns, -1) }
830
+ assert_raise(RangeError) { @img.get_pixels( 0, 0, @img.columns+1, 1) }
831
+ assert_raise(RangeError) { @img.get_pixels( 0, 0, @img.columns, @img.rows+1) }
832
+ end
833
+
834
+ def test_gray?
835
+ gray = Magick::Image.new(20, 20) { self.background_color = 'gray50' }
836
+ assert(gray.gray?)
837
+ red = Magick::Image.new(20, 20) { self.background_color = 'red' }
838
+ assert(!red.gray?)
839
+ end
840
+
841
+ def test_histogram?
842
+ assert_nothing_raised { @img.histogram? }
843
+ assert(@img.histogram?)
844
+ end
845
+
846
+ def test_implode
847
+ assert_nothing_raised do
848
+ res = @img.implode(0.5)
849
+ assert_instance_of(Magick::Image, res)
850
+ assert_not_same(@img, res)
851
+ end
852
+ end
853
+
854
+ def test_import_pixels
855
+ pixels = @img.export_pixels(0, 0, @img.columns, 1, "RGB")
856
+ assert_nothing_raised do
857
+ res = @img.import_pixels(0, 0, @img.columns, 1, "RGB", pixels)
858
+ assert_same(@img, res)
859
+ end
860
+ assert_raise(ArgumentError) { @img.import_pixels }
861
+ assert_raise(ArgumentError) { @img.import_pixels(0) }
862
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0) }
863
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, @img.columns) }
864
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, @img.columns, 1) }
865
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, @img.columns, 1, "RGB") }
866
+ assert_raise(TypeError) { @img.import_pixels('x', 0, @img.columns, 1, "RGB", pixels) }
867
+ assert_raise(TypeError) { @img.import_pixels(0, 'x', @img.columns, 1, "RGB", pixels) }
868
+ assert_raise(TypeError) { @img.import_pixels(0, 0, 'x', 1, "RGB", pixels) }
869
+ assert_raise(TypeError) { @img.import_pixels(0, 0, @img.columns, 'x', "RGB", pixels) }
870
+ assert_raise(TypeError) { @img.import_pixels(0, 0, @img.columns, 1, [2], pixels) }
871
+ assert_raise(ArgumentError) { @img.import_pixels(-1, 0, @img.columns, 1, "RGB", pixels) }
872
+ assert_raise(ArgumentError) { @img.import_pixels(0, -1, @img.columns, 1, "RGB", pixels) }
873
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, -1, 1, "RGB", pixels) }
874
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, @img.columns, -1, "RGB", pixels) }
875
+
876
+ # pixel array is too small
877
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, @img.columns, 2, "RGB", pixels) }
878
+ # pixel array doesn't contain a multiple of the map length
879
+ pixels.shift
880
+ assert_raise(ArgumentError) { @img.import_pixels(0, 0, @img.columns, 1, "RGB", pixels) }
881
+ end
882
+
883
+ def test_level
884
+ assert_nothing_raised do
885
+ res = @img.level
886
+ assert_instance_of(Magick::Image, res)
887
+ assert_not_same(@img, res)
888
+ end
889
+ assert_nothing_raised { @img.level(0.0) }
890
+ assert_nothing_raised { @img.level(0.0, 1.0) }
891
+ assert_nothing_raised { @img.level(0.0, 1.0, Magick::QuantumRange) }
892
+ assert_raise(ArgumentError) { @img.level(0.0, 1.0, Magick::QuantumRange, 2) }
893
+ assert_raise(ArgumentError) { @img.level('x') }
894
+ assert_raise(ArgumentError) { @img.level(0.0, 'x') }
895
+ assert_raise(ArgumentError) { @img.level(0.0, 1.0, 'x') }
896
+ end
897
+
898
+ # Ensure that #level properly swaps old-style arg list
899
+ def test_level2
900
+ img1 = @img.level(10, 2, 200)
901
+ img2 = @img.level(10, 200, 2)
902
+ assert_equal(img2, img1)
903
+
904
+ # Ensure that level2 uses new arg order
905
+ img1 = @img.level2(10, 200, 2)
906
+ assert_equal(img2, img1)
907
+ end
908
+
909
+ def test_level_channel
910
+ assert_raise(ArgumentError) { @img.level_channel }
911
+ assert_nothing_raised do
912
+ res = @img.level_channel(Magick::RedChannel)
913
+ assert_instance_of(Magick::Image, res)
914
+ assert_not_same(@img, res)
915
+ end
916
+
917
+ assert_nothing_raised { @img.level_channel(Magick::RedChannel, 0.0) }
918
+ assert_nothing_raised { @img.level_channel(Magick::RedChannel, 0.0, 1.0) }
919
+ assert_nothing_raised { @img.level_channel(Magick::RedChannel, 0.0, 1.0, Magick::QuantumRange) }
920
+
921
+ assert_raise(ArgumentError) { @img.level_channel(Magick::RedChannel, 0.0, 1.0, Magick::QuantumRange, 2) }
922
+ assert_raise(TypeError) { @img.level_channel(2) }
923
+ assert_raise(TypeError) { @img.level_channel(Magick::RedChannel, 'x') }
924
+ assert_raise(TypeError) { @img.level_channel(Magick::RedChannel, 0.0, 'x') }
925
+ assert_raise(TypeError) { @img.level_channel(Magick::RedChannel, 0.0, 1.0, 'x') }
926
+ end
927
+
928
+ def level_colors
929
+ res = nil
930
+ assert_nothing_raised do
931
+ res = @img.level_colors()
932
+ end
933
+ assert_instance_of(Magick::Image, res)
934
+ assert_not_same(@img, res)
935
+
936
+ assert_nothing_raised { @img.level_colors("black") }
937
+ assert_nothing_raised { @img.level_colors("black", Pixel.new(0,0,0)) }
938
+ assert_nothing_raised { @img.level_colors(Pixel.new(0,0,0), Pixel.new(Magick::QuantumRange,Magick::QuantumRange,Magick::QuantumRange)) }
939
+ assert_nothing_raised { @img.level_colors("black", "white") }
940
+ assert_nothing_raised { @img.level_colors("black", "white", false) }
941
+ # too many arguments
942
+ assert_raises(ArgumentError) { @img.level_colors("black", "white", false, 1) }
943
+ # not a pixel or a string
944
+ assert_raises(ArgumentError) { @img.level_colors([]) }
945
+ # not a color name
946
+ assert_raises(ArgumentError) { @img.level_colors("xxx") }
947
+ end
948
+
949
+ def levelize_channel
950
+ res = nil
951
+ assert_nothing_raised do
952
+ res = @img.levelize_channel(0, Magick::QuantumRange)
953
+ end
954
+ assert_instance_of(Magick::Image, res)
955
+ assert_not_same(@img, res)
956
+
957
+ assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange, 0.5) }
958
+ assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange, 0.5, Magick::RedChannel) }
959
+ assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange, 0.5, Magick::RedChannel, Magick::BlueChannel) }
960
+ # too many arguments
961
+ assert_raise(ArgumentError) { @img.levelize_channel(0, Magick::QuantumRange, 0.5, 1, Magick::RedChannel) }
962
+ # not enough arguments
963
+ assert_raise(ArgumentError) { @img.levelize_channel() }
964
+ end
965
+
966
+ =begin
967
+ def test_liquid_rescale
968
+ begin
969
+ @img.liquid_rescale(15,15)
970
+ rescue NotImplementedError
971
+ puts "liquid_rescale not implemented."
972
+ return
973
+ end
974
+
975
+ res = nil
976
+ assert_nothing_raised do
977
+ res = @img.liquid_rescale(15, 15)
978
+ end
979
+ assert_equal(15, res.columns)
980
+ assert_equal(15, res.rows)
981
+ assert_nothing_raised { @img.liquid_rescale(15, 15, 0, 0) }
982
+ assert_raise(ArgumentError) { @img.liquid_rescale(15) }
983
+ assert_raise(ArgumentError) { @img.liquid_rescale(15, 15, 0, 0, 0) }
984
+ assert_raise(TypeError) { @img.liquid_rescale([], 15) }
985
+ assert_raise(TypeError) { @img.liquid_rescale(15, []) }
986
+ assert_raise(TypeError) { @img.liquid_rescale(15, 15, []) }
987
+ assert_raise(TypeError) { @img.liquid_rescale(15, 15, 0, []) }
988
+ end
989
+ =end
990
+
991
+ def test_magnify
992
+ assert_nothing_raised do
993
+ res = @img.magnify
994
+ assert_instance_of(Magick::Image, res)
995
+ assert_not_same(@img, res)
996
+ end
997
+
998
+ res = @img.magnify!
999
+ assert_same(@img, res)
1000
+ end
1001
+
1002
+ def test_map
1003
+ map = Magick::Image.read("netscape:").first
1004
+ assert_nothing_raised do
1005
+ res = @img.map(map)
1006
+ assert_instance_of(Magick::Image, res)
1007
+ assert_not_same(@img, res)
1008
+ end
1009
+ assert_nothing_raised { @img.map(map, true) }
1010
+ assert_raise(NoMethodError) { @img.map(2) }
1011
+ assert_raise(ArgumentError) { @img.map(map, true, 2) }
1012
+ assert_raise(ArgumentError) { @img.map }
1013
+ map.destroy!
1014
+ assert_raise(Magick::DestroyedImageError) { @img.map(map, true) }
1015
+ end
1016
+
1017
+ def test_marshal
1018
+ img = Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first
1019
+ d = nil
1020
+ img2 = nil
1021
+ assert_nothing_raised { d = Marshal.dump(img) }
1022
+ assert_nothing_raised { img2 = Marshal.load(d) }
1023
+ assert_equal(img, img2)
1024
+ end
1025
+
1026
+ def test_mask
1027
+ cimg = Magick::Image.new(10,10)
1028
+ assert_nothing_raised { @img.mask(cimg) }
1029
+ res = nil
1030
+ assert_nothing_raised { res = @img.mask }
1031
+ assert_not_nil(res)
1032
+ assert_not_same(cimg, res)
1033
+ assert_equal(20, res.columns)
1034
+ assert_equal(20, res.rows)
1035
+
1036
+ # mask expects an Image and calls `cur_image'
1037
+ assert_raise(NoMethodError) { @img.mask = 2 }
1038
+
1039
+ img = @img.copy.freeze
1040
+ assert_raise(FreezeError) { img.mask cimg }
1041
+
1042
+ @img.destroy!
1043
+ assert_raise(Magick::DestroyedImageError) { @img.mask cimg }
1044
+ end
1045
+
1046
+ def test_matte_fill_to_border
1047
+ assert_nothing_raised do
1048
+ res = @img.matte_fill_to_border(@img.columns/2, @img.rows/2)
1049
+ assert_instance_of(Magick::Image, res)
1050
+ assert_not_same(@img, res)
1051
+ end
1052
+ assert_nothing_raised { @img.matte_fill_to_border(@img.columns, @img.rows) }
1053
+ assert_raise(ArgumentError) { @img.matte_fill_to_border(@img.columns+1, @img.rows) }
1054
+ assert_raise(ArgumentError) { @img.matte_fill_to_border(@img.columns, @img.rows+1) }
1055
+ end
1056
+
1057
+ def test_matte_floodfill
1058
+ assert_nothing_raised do
1059
+ res = @img.matte_floodfill(@img.columns/2, @img.rows/2)
1060
+ assert_instance_of(Magick::Image, res)
1061
+ assert_not_same(@img, res)
1062
+ end
1063
+ assert_nothing_raised { @img.matte_floodfill(@img.columns, @img.rows) }
1064
+ assert_raise(ArgumentError) { @img.matte_floodfill(@img.columns+1, @img.rows) }
1065
+ assert_raise(ArgumentError) { @img.matte_floodfill(@img.columns, @img.rows+1) }
1066
+ end
1067
+
1068
+ def test_matte_replace
1069
+ assert_nothing_raised do
1070
+ res = @img.matte_replace(@img.columns/2, @img.rows/2)
1071
+ assert_instance_of(Magick::Image, res)
1072
+ assert_not_same(@img, res)
1073
+ end
1074
+ end
1075
+
1076
+ def test_matte_reset!
1077
+ assert_nothing_raised do
1078
+ res = @img.matte_reset!
1079
+ assert_same(@img, res)
1080
+ end
1081
+ end
1082
+
1083
+ def test_median_filter
1084
+ assert_nothing_raised do
1085
+ res = @img.median_filter
1086
+ assert_instance_of(Magick::Image, res)
1087
+ assert_not_same(@img, res)
1088
+ end
1089
+ assert_nothing_raised { @img.median_filter(0.5) }
1090
+ assert_raise(ArgumentError) { @img.median_filter(0.5, 'x') }
1091
+ assert_raise(TypeError) { @img.median_filter('x') }
1092
+ end
1093
+
1094
+ def test_minify
1095
+ assert_nothing_raised do
1096
+ res = @img.minify
1097
+ assert_instance_of(Magick::Image, res)
1098
+ assert_not_same(@img, res)
1099
+ end
1100
+
1101
+ res = @img.minify!
1102
+ assert_same(@img, res)
1103
+ end
1104
+
1105
+ def test_modulate
1106
+ assert_nothing_raised do
1107
+ res = @img.modulate
1108
+ assert_instance_of(Magick::Image, res)
1109
+ assert_not_same(@img, res)
1110
+ end
1111
+ assert_nothing_raised { @img.modulate(0.5) }
1112
+ assert_nothing_raised { @img.modulate(0.5, 0.5) }
1113
+ assert_nothing_raised { @img.modulate(0.5, 0.5, 0.5) }
1114
+ assert_raise(ArgumentError) { @img.modulate(0.5, 0.5, 0.5, 0.5) }
1115
+ assert_raise(TypeError) { @img.modulate('x', 0.5, 0.5) }
1116
+ assert_raise(TypeError) { @img.modulate(0.5, 'x', 0.5) }
1117
+ assert_raise(TypeError) { @img.modulate(0.5, 0.5, 'x') }
1118
+ end
1119
+
1120
+ def test_monochrome?
1121
+ # assert_block { @img.monochrome? }
1122
+ @img.pixel_color(0,0, 'red')
1123
+ assert_block { ! @img.monochrome? }
1124
+ end
1125
+
1126
+ def test_motion_blur
1127
+ assert_nothing_raised do
1128
+ res = @img.motion_blur(1.0, 7.0, 180)
1129
+ assert_instance_of(Magick::Image, res)
1130
+ assert_not_same(@img, res)
1131
+ end
1132
+ assert_raise(ArgumentError) { @img.motion_blur(1.0, 0.0, 180) }
1133
+ assert_nothing_raised { @img.motion_blur(1.0, -1.0, 180) }
1134
+ end
1135
+
1136
+ def test_negate
1137
+ assert_nothing_raised do
1138
+ res = @img.negate
1139
+ assert_instance_of(Magick::Image, res)
1140
+ assert_not_same(@img, res)
1141
+ end
1142
+ assert_nothing_raised { @img.negate(true) }
1143
+ assert_raise(ArgumentError) { @img.negate(true, 2) }
1144
+ end
1145
+
1146
+ def test_negate_channel
1147
+ assert_nothing_raised do
1148
+ res = @img.negate_channel
1149
+ assert_instance_of(Magick::Image, res)
1150
+ assert_not_same(@img, res)
1151
+ end
1152
+ assert_nothing_raised { @img.negate_channel(true) }
1153
+ assert_nothing_raised { @img.negate_channel(true, Magick::RedChannel) }
1154
+ assert_nothing_raised { @img.negate_channel(true, Magick::RedChannel, Magick::BlueChannel) }
1155
+ assert_raise(TypeError) { @img.negate_channel(true, Magick::RedChannel, 2) }
1156
+ end
1157
+
1158
+ def test_normalize
1159
+ assert_nothing_raised do
1160
+ res = @img.normalize
1161
+ assert_instance_of(Magick::Image, res)
1162
+ assert_not_same(@img, res)
1163
+ end
1164
+ end
1165
+
1166
+ def test_normalize_channel
1167
+ assert_nothing_raised do
1168
+ res = @img.normalize_channel
1169
+ assert_instance_of(Magick::Image, res)
1170
+ assert_not_same(@img, res)
1171
+ end
1172
+ assert_nothing_raised { @img.normalize_channel(Magick::RedChannel) }
1173
+ assert_nothing_raised { @img.normalize_channel(Magick::RedChannel, Magick::BlueChannel) }
1174
+ assert_raise(TypeError) { @img.normalize_channel(Magick::RedChannel, 2) }
1175
+ end
1176
+
1177
+ def test_oil_paint
1178
+ assert_nothing_raised do
1179
+ res = @img.oil_paint
1180
+ assert_instance_of(Magick::Image, res)
1181
+ assert_not_same(@img, res)
1182
+ end
1183
+ assert_nothing_raised { @img.oil_paint(2.0) }
1184
+ assert_raise(ArgumentError) { @img.oil_paint(2.0, 1.0) }
1185
+ end
1186
+
1187
+ def test_opaque
1188
+ assert_nothing_raised do
1189
+ res = @img.opaque('white', 'red')
1190
+ assert_instance_of(Magick::Image, res)
1191
+ assert_not_same(@img, res)
1192
+ end
1193
+ red = Magick::Pixel.new(Magick::QuantumRange)
1194
+ blue = Magick::Pixel.new(0, 0, Magick::QuantumRange)
1195
+ assert_nothing_raised { @img.opaque(red, blue) }
1196
+ assert_raise(TypeError) { @img.opaque(red, 2) }
1197
+ assert_raise(TypeError) { @img.opaque(2, blue) }
1198
+ end
1199
+
1200
+ def test_opaque_channel
1201
+ res = nil
1202
+ assert_nothing_raised { res = @img.opaque_channel('white', 'red') }
1203
+ assert_not_nil(res)
1204
+ assert_instance_of(Magick::Image, res)
1205
+ assert_not_same(res, @img)
1206
+ assert_nothing_raised { @img.opaque_channel('red', 'blue', true) }
1207
+ assert_nothing_raised { @img.opaque_channel('red', 'blue', true, 50) }
1208
+ assert_nothing_raised { @img.opaque_channel('red', 'blue', true, 50, Magick::RedChannel) }
1209
+ assert_nothing_raised { @img.opaque_channel('red', 'blue', true, 50, Magick::RedChannel, Magick::GreenChannel) }
1210
+ assert_nothing_raised do
1211
+ @img.opaque_channel('red', 'blue', true, 50, Magick::RedChannel, Magick::GreenChannel, Magick::BlueChannel)
1212
+ end
1213
+
1214
+ assert_raise(TypeError) { @img.opaque_channel('red', 'blue', true, 50, 50) }
1215
+ assert_raise(TypeError) { @img.opaque_channel('red', 'blue', true, []) }
1216
+ assert_raise(ArgumentError) { @img.opaque_channel('red') }
1217
+ assert_raise(TypeError) { @img.opaque_channel('red', []) }
1218
+ end
1219
+
1220
+ def test_opaque?
1221
+ assert_nothing_raised do
1222
+ assert_block { @img.opaque? }
1223
+ end
1224
+ @img.opacity = Magick::TransparentOpacity
1225
+ assert_block { ! @img.opaque? }
1226
+ end
1227
+
1228
+ def test_ordered_dither
1229
+ assert_nothing_raised do
1230
+ res = @img.ordered_dither
1231
+ assert_instance_of(Magick::Image, res)
1232
+ assert_not_same(@img, res)
1233
+ end
1234
+ assert_nothing_raised { @img.ordered_dither(2) }
1235
+ assert_nothing_raised { @img.ordered_dither(3) }
1236
+ assert_nothing_raised { @img.ordered_dither(4) }
1237
+ assert_raise(ArgumentError) { @img.ordered_dither(5) }
1238
+ assert_raise(ArgumentError) { @img.ordered_dither(2, 1) }
1239
+ end
1240
+
1241
+ def test_paint_transparent
1242
+ res = nil
1243
+ assert_nothing_raised { res = @img.paint_transparent("red") }
1244
+ assert_not_nil(res)
1245
+ assert_instance_of(Magick::Image, res)
1246
+ assert_not_same(res, @img)
1247
+ assert_nothing_raised { @img.paint_transparent("red", Magick::TransparentOpacity) }
1248
+ assert_nothing_raised { @img.paint_transparent("red", Magick::TransparentOpacity, true) }
1249
+ assert_nothing_raised { @img.paint_transparent("red", Magick::TransparentOpacity, true, 50) }
1250
+
1251
+ # Too many arguments
1252
+ assert_raise(ArgumentError) { @img.paint_transparent("red", Magick::TransparentOpacity, true, 50, 50) }
1253
+ # Not enough
1254
+ assert_raise(ArgumentError) { @img.paint_transparent() }
1255
+ assert_raise(TypeError) { @img.paint_transparent("red", Magick::TransparentOpacity, true, []) }
1256
+ assert_raise(TypeError) { @img.paint_transparent("red", "blue") }
1257
+ assert_raise(TypeError) { @img.paint_transparent(50) }
1258
+ end
1259
+
1260
+ def test_palette?
1261
+ img = Magick::Image.read(IMAGES_DIR+'/Flower_Hat.jpg').first
1262
+ assert_nothing_raised do
1263
+ assert_block { ! img.palette? }
1264
+ end
1265
+ img = Magick::Image.read(IMAGES_DIR+'/Button_0.gif').first
1266
+ assert_block { img.palette? }
1267
+ end
1268
+
1269
+ def test_pixel_color
1270
+ assert_nothing_raised do
1271
+ res = @img.pixel_color(0,0)
1272
+ assert_instance_of(Magick::Pixel, res)
1273
+ end
1274
+ res = @img.pixel_color(0,0)
1275
+ assert_equal(@img.background_color, res.to_color)
1276
+ res = @img.pixel_color(0, 0, 'red')
1277
+ assert_equal('white', res.to_color)
1278
+ res = @img.pixel_color(0, 0)
1279
+ assert_equal('red', res.to_color)
1280
+
1281
+ blue = Magick::Pixel.new(0, 0, Magick::QuantumRange)
1282
+ assert_nothing_raised { @img.pixel_color(0,0, blue) }
1283
+ # If args are out-of-bounds return the background color
1284
+ img = Magick::Image.new(10, 10) { self.background_color = 'blue' }
1285
+ assert_equal('blue', img.pixel_color(50, 50).to_color)
1286
+ end
1287
+
1288
+ def test_polaroid
1289
+ assert_nothing_raised { @img.polaroid }
1290
+ assert_nothing_raised { @img.polaroid(5) }
1291
+ assert_instance_of(Magick::Image, @img.polaroid)
1292
+ assert_raises(TypeError) { @img.polaroid('x') }
1293
+ end
1294
+
1295
+ def test_posterize
1296
+ assert_nothing_raised do
1297
+ res = @img.posterize
1298
+ assert_instance_of(Magick::Image, res)
1299
+ assert_not_same(@img, res)
1300
+ end
1301
+ assert_nothing_raised { @img.posterize(5) }
1302
+ assert_nothing_raised { @img.posterize(5, true) }
1303
+ assert_raise(ArgumentError) { @img.posterize(5, true, 'x') }
1304
+ end
1305
+
1306
+ end
1307
+
1308
+ if __FILE__ == $0
1309
+ IMAGES_DIR = '../doc/ex/images'
1310
+ FILES = Dir[IMAGES_DIR+'/Button_*.gif']
1311
+ Test::Unit::UI::Console::TestRunner.run(Image2_UT) if !RUBY_VERSION[/^1\.9|^2/]
1312
+ end