rmagick 4.1.0.rc2 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

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