rmagick 2.16.0 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (404) hide show
  1. checksums.yaml +5 -5
  2. data/.devcontainer/Dockerfile +14 -0
  3. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  4. data/.devcontainer/devcontainer.json +11 -0
  5. data/.devcontainer/setup-repo.sh +10 -0
  6. data/.devcontainer/setup-user.sh +45 -0
  7. data/.editorconfig +3 -0
  8. data/.github/ISSUE_TEMPLATE.md +17 -0
  9. data/.github/workflows/ci.yml +138 -0
  10. data/.gitignore +7 -1
  11. data/.rspec +1 -0
  12. data/.rubocop.yml +37 -340
  13. data/.rubocop_todo.yml +448 -0
  14. data/.yardopts +5 -0
  15. data/CHANGELOG.md +455 -0
  16. data/CODE_OF_CONDUCT.md +122 -7
  17. data/CONTRIBUTING.md +37 -6
  18. data/Gemfile +0 -6
  19. data/README.md +316 -0
  20. data/Rakefile +74 -100
  21. data/before_install_linux.sh +65 -28
  22. data/before_install_osx.sh +58 -2
  23. data/ext/RMagick/extconf.rb +287 -393
  24. data/ext/RMagick/rmagick.c +106 -111
  25. data/ext/RMagick/rmagick.h +235 -331
  26. data/ext/RMagick/rmagick_gvl.h +224 -0
  27. data/ext/RMagick/rmdraw.c +516 -843
  28. data/ext/RMagick/rmenum.c +316 -755
  29. data/ext/RMagick/rmfill.c +281 -191
  30. data/ext/RMagick/rmilist.c +451 -456
  31. data/ext/RMagick/rmimage.c +6250 -5290
  32. data/ext/RMagick/rminfo.c +721 -894
  33. data/ext/RMagick/rmkinfo.c +228 -0
  34. data/ext/RMagick/rmmain.c +735 -521
  35. data/ext/RMagick/rmmontage.c +127 -172
  36. data/ext/RMagick/rmpixel.c +638 -431
  37. data/ext/RMagick/rmstruct.c +102 -282
  38. data/ext/RMagick/rmutil.c +450 -363
  39. data/lib/rmagick/version.rb +5 -4
  40. data/lib/rmagick.rb +2 -0
  41. data/lib/rmagick_internal.rb +349 -413
  42. data/lib/rvg/clippath.rb +3 -4
  43. data/lib/rvg/container.rb +30 -22
  44. data/lib/rvg/deep_equal.rb +11 -11
  45. data/lib/rvg/describable.rb +2 -2
  46. data/lib/rvg/embellishable.rb +63 -68
  47. data/lib/rvg/misc.rb +136 -139
  48. data/lib/rvg/paint.rb +2 -1
  49. data/lib/rvg/pathdata.rb +7 -8
  50. data/lib/rvg/rvg.rb +47 -46
  51. data/lib/rvg/stretchable.rb +22 -28
  52. data/lib/rvg/stylable.rb +12 -10
  53. data/lib/rvg/text.rb +169 -165
  54. data/lib/rvg/transformable.rb +17 -16
  55. data/lib/rvg/units.rb +5 -5
  56. data/rmagick.gemspec +16 -39
  57. metadata +114 -392
  58. data/.hound.yml +0 -2
  59. data/.simplecov +0 -27
  60. data/.travis.yml +0 -74
  61. data/Doxyfile +0 -1514
  62. data/README.textile +0 -251
  63. data/deprecated/RMagick.rb +0 -6
  64. data/doc/.cvsignore +0 -1
  65. data/doc/comtasks.html +0 -287
  66. data/doc/constants.html +0 -1581
  67. data/doc/css/doc.css +0 -299
  68. data/doc/css/popup.css +0 -34
  69. data/doc/css/ref.css +0 -67
  70. data/doc/draw.html +0 -3272
  71. data/doc/ex/InitialCoords.rb +0 -22
  72. data/doc/ex/NewCoordSys.rb +0 -30
  73. data/doc/ex/OrigCoordSys.rb +0 -16
  74. data/doc/ex/PreserveAspectRatio.rb +0 -204
  75. data/doc/ex/RotateScale.rb +0 -36
  76. data/doc/ex/Skew.rb +0 -38
  77. data/doc/ex/Use01.rb +0 -15
  78. data/doc/ex/Use02.rb +0 -20
  79. data/doc/ex/Use03.rb +0 -16
  80. data/doc/ex/ViewBox.rb +0 -31
  81. data/doc/ex/adaptive_threshold.rb +0 -9
  82. data/doc/ex/add_noise.rb +0 -16
  83. data/doc/ex/affine.rb +0 -48
  84. data/doc/ex/affine_transform.rb +0 -20
  85. data/doc/ex/arc.rb +0 -49
  86. data/doc/ex/arcpath.rb +0 -32
  87. data/doc/ex/arcs01.rb +0 -28
  88. data/doc/ex/arcs02.rb +0 -59
  89. data/doc/ex/average.rb +0 -15
  90. data/doc/ex/axes.rb +0 -64
  91. data/doc/ex/baseline_shift01.rb +0 -17
  92. data/doc/ex/bilevel_channel.rb +0 -8
  93. data/doc/ex/blur_image.rb +0 -12
  94. data/doc/ex/border.rb +0 -10
  95. data/doc/ex/bounding_box.rb +0 -42
  96. data/doc/ex/cbezier1.rb +0 -41
  97. data/doc/ex/cbezier2.rb +0 -41
  98. data/doc/ex/cbezier3.rb +0 -41
  99. data/doc/ex/cbezier4.rb +0 -42
  100. data/doc/ex/cbezier5.rb +0 -42
  101. data/doc/ex/cbezier6.rb +0 -53
  102. data/doc/ex/channel.rb +0 -25
  103. data/doc/ex/charcoal.rb +0 -12
  104. data/doc/ex/chop.rb +0 -29
  105. data/doc/ex/circle.rb +0 -33
  106. data/doc/ex/circle01.rb +0 -16
  107. data/doc/ex/clip_path.rb +0 -60
  108. data/doc/ex/coalesce.rb +0 -57
  109. data/doc/ex/color_fill_to_border.rb +0 -29
  110. data/doc/ex/color_floodfill.rb +0 -28
  111. data/doc/ex/color_histogram.rb +0 -47
  112. data/doc/ex/color_reset.rb +0 -11
  113. data/doc/ex/colorize.rb +0 -16
  114. data/doc/ex/colors.rb +0 -64
  115. data/doc/ex/compose_mask.rb +0 -22
  116. data/doc/ex/composite.rb +0 -133
  117. data/doc/ex/composite_layers.rb +0 -53
  118. data/doc/ex/composite_tiled.rb +0 -21
  119. data/doc/ex/contrast.rb +0 -36
  120. data/doc/ex/crop.rb +0 -31
  121. data/doc/ex/crop_with_gravity.rb +0 -42
  122. data/doc/ex/cubic01.rb +0 -43
  123. data/doc/ex/cubic02.rb +0 -91
  124. data/doc/ex/cycle_colormap.rb +0 -21
  125. data/doc/ex/dissolve.rb +0 -12
  126. data/doc/ex/drawcomp.rb +0 -42
  127. data/doc/ex/drop_shadow.rb +0 -60
  128. data/doc/ex/edge.rb +0 -11
  129. data/doc/ex/ellipse.rb +0 -45
  130. data/doc/ex/ellipse01.rb +0 -21
  131. data/doc/ex/emboss.rb +0 -11
  132. data/doc/ex/enhance.rb +0 -28
  133. data/doc/ex/equalize.rb +0 -11
  134. data/doc/ex/evenodd.rb +0 -42
  135. data/doc/ex/fill_pattern.rb +0 -23
  136. data/doc/ex/flatten_images.rb +0 -36
  137. data/doc/ex/flip.rb +0 -11
  138. data/doc/ex/flop.rb +0 -11
  139. data/doc/ex/font_styles.rb +0 -32
  140. data/doc/ex/fonts.rb +0 -20
  141. data/doc/ex/frame.rb +0 -12
  142. data/doc/ex/gaussian_blur.rb +0 -11
  143. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  144. data/doc/ex/get_pixels.rb +0 -47
  145. data/doc/ex/get_type_metrics.rb +0 -141
  146. data/doc/ex/gradientfill.rb +0 -27
  147. data/doc/ex/grav.rb +0 -45
  148. data/doc/ex/gravity.rb +0 -80
  149. data/doc/ex/group.rb +0 -26
  150. data/doc/ex/hatchfill.rb +0 -27
  151. data/doc/ex/image.rb +0 -44
  152. data/doc/ex/images/Apple.miff +0 -0
  153. data/doc/ex/images/Ballerina.jpg +0 -0
  154. data/doc/ex/images/Ballerina3.jpg +0 -0
  155. data/doc/ex/images/Button_0.gif +0 -0
  156. data/doc/ex/images/Button_1.gif +0 -0
  157. data/doc/ex/images/Button_2.gif +0 -0
  158. data/doc/ex/images/Button_3.gif +0 -0
  159. data/doc/ex/images/Button_4.gif +0 -0
  160. data/doc/ex/images/Button_5.gif +0 -0
  161. data/doc/ex/images/Button_6.gif +0 -0
  162. data/doc/ex/images/Button_7.gif +0 -0
  163. data/doc/ex/images/Button_8.gif +0 -0
  164. data/doc/ex/images/Button_9.gif +0 -0
  165. data/doc/ex/images/Button_A.gif +0 -0
  166. data/doc/ex/images/Button_B.gif +0 -0
  167. data/doc/ex/images/Button_C.gif +0 -0
  168. data/doc/ex/images/Button_D.gif +0 -0
  169. data/doc/ex/images/Button_E.gif +0 -0
  170. data/doc/ex/images/Button_F.gif +0 -0
  171. data/doc/ex/images/Button_G.gif +0 -0
  172. data/doc/ex/images/Button_H.gif +0 -0
  173. data/doc/ex/images/Button_I.gif +0 -0
  174. data/doc/ex/images/Button_J.gif +0 -0
  175. data/doc/ex/images/Button_K.gif +0 -0
  176. data/doc/ex/images/Button_L.gif +0 -0
  177. data/doc/ex/images/Button_M.gif +0 -0
  178. data/doc/ex/images/Button_N.gif +0 -0
  179. data/doc/ex/images/Button_O.gif +0 -0
  180. data/doc/ex/images/Button_P.gif +0 -0
  181. data/doc/ex/images/Button_Q.gif +0 -0
  182. data/doc/ex/images/Button_R.gif +0 -0
  183. data/doc/ex/images/Button_S.gif +0 -0
  184. data/doc/ex/images/Button_T.gif +0 -0
  185. data/doc/ex/images/Button_U.gif +0 -0
  186. data/doc/ex/images/Button_V.gif +0 -0
  187. data/doc/ex/images/Button_W.gif +0 -0
  188. data/doc/ex/images/Button_X.gif +0 -0
  189. data/doc/ex/images/Button_Y.gif +0 -0
  190. data/doc/ex/images/Button_Z.gif +0 -0
  191. data/doc/ex/images/Cheetah.jpg +0 -0
  192. data/doc/ex/images/Coffee.wmf +0 -0
  193. data/doc/ex/images/Flower_Hat.jpg +0 -0
  194. data/doc/ex/images/Gold_Statue.jpg +0 -0
  195. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  197. data/doc/ex/images/Leaf.miff +0 -0
  198. data/doc/ex/images/No.wmf +0 -0
  199. data/doc/ex/images/Polynesia.jpg +0 -0
  200. data/doc/ex/images/Red_Rocks.jpg +0 -0
  201. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  202. data/doc/ex/images/Shorts.jpg +0 -0
  203. data/doc/ex/images/Snake.wmf +0 -0
  204. data/doc/ex/images/Violin.jpg +0 -0
  205. data/doc/ex/images/Yellow_Rose.miff +0 -0
  206. data/doc/ex/images/big-duck.gif +0 -0
  207. data/doc/ex/images/duck.gif +0 -0
  208. data/doc/ex/images/duck0.gif +0 -0
  209. data/doc/ex/images/duck1.gif +0 -0
  210. data/doc/ex/images/duck10.gif +0 -0
  211. data/doc/ex/images/duck11.gif +0 -0
  212. data/doc/ex/images/duck12.gif +0 -0
  213. data/doc/ex/images/duck13.gif +0 -0
  214. data/doc/ex/images/duck14.gif +0 -0
  215. data/doc/ex/images/duck15.gif +0 -0
  216. data/doc/ex/images/duck2.gif +0 -0
  217. data/doc/ex/images/duck3.gif +0 -0
  218. data/doc/ex/images/duck4.gif +0 -0
  219. data/doc/ex/images/duck5.gif +0 -0
  220. data/doc/ex/images/duck6.gif +0 -0
  221. data/doc/ex/images/duck7.gif +0 -0
  222. data/doc/ex/images/duck8.gif +0 -0
  223. data/doc/ex/images/duck9.gif +0 -0
  224. data/doc/ex/images/graydient230x6.gif +0 -0
  225. data/doc/ex/images/image_with_profile.jpg +0 -0
  226. data/doc/ex/images/logo400x83.gif +0 -0
  227. data/doc/ex/images/model.miff +0 -0
  228. data/doc/ex/images/notimplemented.gif +0 -0
  229. data/doc/ex/images/smile.miff +0 -0
  230. data/doc/ex/images/spin.gif +0 -0
  231. data/doc/ex/implode.rb +0 -34
  232. data/doc/ex/level.rb +0 -11
  233. data/doc/ex/level_colors.rb +0 -11
  234. data/doc/ex/line.rb +0 -41
  235. data/doc/ex/line01.rb +0 -21
  236. data/doc/ex/mask.rb +0 -35
  237. data/doc/ex/matte_fill_to_border.rb +0 -39
  238. data/doc/ex/matte_floodfill.rb +0 -32
  239. data/doc/ex/matte_replace.rb +0 -39
  240. data/doc/ex/median_filter.rb +0 -28
  241. data/doc/ex/modulate.rb +0 -11
  242. data/doc/ex/mono.rb +0 -23
  243. data/doc/ex/morph.rb +0 -25
  244. data/doc/ex/mosaic.rb +0 -35
  245. data/doc/ex/motion_blur.rb +0 -11
  246. data/doc/ex/negate.rb +0 -11
  247. data/doc/ex/negate_channel.rb +0 -9
  248. data/doc/ex/nested_rvg.rb +0 -21
  249. data/doc/ex/nonzero.rb +0 -42
  250. data/doc/ex/normalize.rb +0 -11
  251. data/doc/ex/oil_paint.rb +0 -11
  252. data/doc/ex/opacity.rb +0 -37
  253. data/doc/ex/ordered_dither.rb +0 -11
  254. data/doc/ex/path.rb +0 -63
  255. data/doc/ex/pattern1.rb +0 -25
  256. data/doc/ex/pattern2.rb +0 -26
  257. data/doc/ex/polaroid.rb +0 -27
  258. data/doc/ex/polygon.rb +0 -23
  259. data/doc/ex/polygon01.rb +0 -21
  260. data/doc/ex/polyline.rb +0 -22
  261. data/doc/ex/polyline01.rb +0 -21
  262. data/doc/ex/posterize.rb +0 -8
  263. data/doc/ex/preview.rb +0 -8
  264. data/doc/ex/qbezierpath.rb +0 -52
  265. data/doc/ex/quad01.rb +0 -34
  266. data/doc/ex/quantize-m.rb +0 -25
  267. data/doc/ex/radial_blur.rb +0 -9
  268. data/doc/ex/raise.rb +0 -8
  269. data/doc/ex/random_threshold_channel.rb +0 -13
  270. data/doc/ex/rect01.rb +0 -14
  271. data/doc/ex/rect02.rb +0 -20
  272. data/doc/ex/rectangle.rb +0 -34
  273. data/doc/ex/reduce_noise.rb +0 -28
  274. data/doc/ex/remap.rb +0 -11
  275. data/doc/ex/remap_images.rb +0 -19
  276. data/doc/ex/resize_to_fill.rb +0 -8
  277. data/doc/ex/resize_to_fit.rb +0 -8
  278. data/doc/ex/roll.rb +0 -9
  279. data/doc/ex/rotate.rb +0 -44
  280. data/doc/ex/rotate_f.rb +0 -14
  281. data/doc/ex/roundrect.rb +0 -33
  282. data/doc/ex/rubyname.rb +0 -30
  283. data/doc/ex/rvg_clippath.rb +0 -12
  284. data/doc/ex/rvg_linecap.rb +0 -42
  285. data/doc/ex/rvg_linejoin.rb +0 -40
  286. data/doc/ex/rvg_opacity.rb +0 -18
  287. data/doc/ex/rvg_pattern.rb +0 -26
  288. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  289. data/doc/ex/segment.rb +0 -11
  290. data/doc/ex/sepiatone.rb +0 -7
  291. data/doc/ex/shade.rb +0 -11
  292. data/doc/ex/shadow.rb +0 -30
  293. data/doc/ex/shave.rb +0 -15
  294. data/doc/ex/shear.rb +0 -10
  295. data/doc/ex/sketch.rb +0 -17
  296. data/doc/ex/skewx.rb +0 -51
  297. data/doc/ex/skewy.rb +0 -47
  298. data/doc/ex/smile.rb +0 -125
  299. data/doc/ex/solarize.rb +0 -11
  300. data/doc/ex/sparse_color.rb +0 -54
  301. data/doc/ex/splice.rb +0 -8
  302. data/doc/ex/spread.rb +0 -11
  303. data/doc/ex/stegano.rb +0 -55
  304. data/doc/ex/stroke_dasharray.rb +0 -42
  305. data/doc/ex/stroke_fill.rb +0 -10
  306. data/doc/ex/stroke_linecap.rb +0 -44
  307. data/doc/ex/stroke_linejoin.rb +0 -48
  308. data/doc/ex/stroke_width.rb +0 -49
  309. data/doc/ex/swirl.rb +0 -17
  310. data/doc/ex/text.rb +0 -37
  311. data/doc/ex/text01.rb +0 -16
  312. data/doc/ex/text_align.rb +0 -36
  313. data/doc/ex/text_antialias.rb +0 -37
  314. data/doc/ex/text_styles.rb +0 -19
  315. data/doc/ex/text_undercolor.rb +0 -28
  316. data/doc/ex/texture_fill_to_border.rb +0 -34
  317. data/doc/ex/texture_floodfill.rb +0 -32
  318. data/doc/ex/texturefill.rb +0 -24
  319. data/doc/ex/threshold.rb +0 -13
  320. data/doc/ex/to_blob.rb +0 -13
  321. data/doc/ex/translate.rb +0 -39
  322. data/doc/ex/transparent.rb +0 -38
  323. data/doc/ex/transpose.rb +0 -9
  324. data/doc/ex/transverse.rb +0 -9
  325. data/doc/ex/tref01.rb +0 -24
  326. data/doc/ex/triangle01.rb +0 -15
  327. data/doc/ex/trim.rb +0 -23
  328. data/doc/ex/tspan01.rb +0 -17
  329. data/doc/ex/tspan02.rb +0 -17
  330. data/doc/ex/tspan03.rb +0 -19
  331. data/doc/ex/unsharp_mask.rb +0 -28
  332. data/doc/ex/viewex.rb +0 -33
  333. data/doc/ex/vignette.rb +0 -12
  334. data/doc/ex/watermark.rb +0 -27
  335. data/doc/ex/wave.rb +0 -9
  336. data/doc/ex/wet_floor.rb +0 -58
  337. data/doc/ex/writing_mode01.rb +0 -26
  338. data/doc/ex/writing_mode02.rb +0 -26
  339. data/doc/ilist.html +0 -2056
  340. data/doc/image1.html +0 -4680
  341. data/doc/image2.html +0 -3665
  342. data/doc/image3.html +0 -4522
  343. data/doc/imageattrs.html +0 -1638
  344. data/doc/imusage.html +0 -514
  345. data/doc/index.html +0 -416
  346. data/doc/info.html +0 -1499
  347. data/doc/magick.html +0 -565
  348. data/doc/optequiv.html +0 -2435
  349. data/doc/rvg.html +0 -975
  350. data/doc/rvgclip.html +0 -248
  351. data/doc/rvggroup.html +0 -305
  352. data/doc/rvgimage.html +0 -289
  353. data/doc/rvgpattern.html +0 -475
  354. data/doc/rvgshape.html +0 -406
  355. data/doc/rvgstyle.html +0 -270
  356. data/doc/rvgtext.html +0 -465
  357. data/doc/rvgtspan.html +0 -238
  358. data/doc/rvgtut.html +0 -530
  359. data/doc/rvguse.html +0 -145
  360. data/doc/rvgxform.html +0 -294
  361. data/doc/scripts/doc.js +0 -22
  362. data/doc/scripts/stripeTables.js +0 -23
  363. data/doc/struct.html +0 -1339
  364. data/doc/usage.html +0 -1621
  365. data/examples/constitute.rb +0 -7
  366. data/examples/crop_with_gravity.rb +0 -42
  367. data/examples/demo.rb +0 -324
  368. data/examples/describe.rb +0 -43
  369. data/examples/find_similar_region.rb +0 -34
  370. data/examples/histogram.rb +0 -321
  371. data/examples/identify.rb +0 -185
  372. data/examples/image_opacity.rb +0 -29
  373. data/examples/import_export.rb +0 -31
  374. data/examples/pattern_fill.rb +0 -38
  375. data/examples/rotating_text.rb +0 -44
  376. data/examples/spinner.rb +0 -49
  377. data/examples/thumbnail.rb +0 -64
  378. data/examples/vignette.rb +0 -78
  379. data/spec/rmagick/ImageList1_spec.rb +0 -24
  380. data/spec/rmagick/draw_spec.rb +0 -156
  381. data/spec/rmagick/image/blue_shift_spec.rb +0 -16
  382. data/spec/rmagick/image/composite_spec.rb +0 -140
  383. data/spec/rmagick/image/constitute_spec.rb +0 -15
  384. data/spec/rmagick/image/dispatch_spec.rb +0 -18
  385. data/spec/rmagick/image/from_blob_spec.rb +0 -14
  386. data/spec/rmagick/image/ping_spec.rb +0 -14
  387. data/spec/rmagick/image/properties_spec.rb +0 -29
  388. data/spec/spec_helper.rb +0 -4
  389. data/test/Image1.rb +0 -565
  390. data/test/Image2.rb +0 -1304
  391. data/test/Image3.rb +0 -1030
  392. data/test/ImageList1.rb +0 -806
  393. data/test/ImageList2.rb +0 -385
  394. data/test/Image_attributes.rb +0 -697
  395. data/test/Import_Export.rb +0 -121
  396. data/test/Info.rb +0 -345
  397. data/test/Magick.rb +0 -321
  398. data/test/Pixel.rb +0 -116
  399. data/test/Preview.rb +0 -57
  400. data/test/cmyk.icm +0 -0
  401. data/test/srgb.icm +0 -0
  402. data/test/test_all_basic.rb +0 -38
  403. data/test/tmpnam_test.rb +0 -50
  404. data/wercker.yml +0 -10
data/test/Image2.rb DELETED
@@ -1,1304 +0,0 @@
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