rmagick-windows 2.16.1

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