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,14 +0,0 @@
1
- RSpec.describe Magick::Image, '#blue_shift' do
2
- let(:img) { Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first }
3
-
4
- it 'returns a new Image' do
5
- res = img.blue_shift
6
- expect(res).to be_instance_of(Magick::Image)
7
- expect(res).not_to eq img
8
- end
9
-
10
- it 'accepts one argument' do
11
- expect { img.blue_shift(2) }.not_to raise_error
12
- expect { img.blue_shift(2, 3) }.to raise_error(ArgumentError)
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- RSpec.describe Magick::Image, '#channel_entropy' do
2
- let(:img) { Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first }
3
-
4
- it 'returns a channel entropy', supported_after('6.9.0') do
5
- res = img.channel_entropy
6
- puts "res = #{res.inspect}"
7
- expect(res).to eq([0.5285857222715863])
8
- end
9
- end
@@ -1,72 +0,0 @@
1
- RSpec.describe Magick::Image, '#composite' do
2
- let(:img1) { Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first }
3
- let(:img2) { Magick::Image.read(IMAGES_DIR + '/Button_1.gif').first }
4
-
5
- it 'raises an error given invalid arguments' do
6
- expect { img1.composite }.to raise_error(ArgumentError)
7
- expect { img1.composite(img2) }.to raise_error(ArgumentError)
8
- expect do
9
- img1.composite(img2, Magick::NorthWestGravity)
10
- end.to raise_error(ArgumentError)
11
- expect { img1.composite(2) }.to raise_error(ArgumentError)
12
- expect { img1.composite(img2, 2) }.to raise_error(ArgumentError)
13
- end
14
-
15
- context 'when given 3 arguments' do
16
- it 'works when 2nd argument is a gravity' do
17
- Magick::CompositeOperator.values do |op|
18
- Magick::GravityType.values do |grav|
19
- expect { img1.composite(img2, grav, op) }.not_to raise_error
20
- end
21
- end
22
- end
23
-
24
- it 'raises an error when 2nd argument is not a gravity' do
25
- expect do
26
- img1.composite(img2, 2, Magick::OverCompositeOp)
27
- end.to raise_error(TypeError)
28
- end
29
- end
30
-
31
- context 'when given 4 arguments' do
32
- it 'works when 4th argument is a composite operator' do
33
- # there are way too many CompositeOperators to test them all, so just try
34
- # few representative ops
35
- Magick::CompositeOperator.values do |op|
36
- expect { img1.composite(img2, 0, 0, op) }.not_to raise_error
37
- end
38
- end
39
-
40
- it 'returns a new Magick::Image object' do
41
- res = img1.composite(img2, 0, 0, Magick::OverCompositeOp)
42
- expect(res).to be_instance_of(Magick::Image)
43
- end
44
-
45
- it 'raises an error when 4th argument is not a composite operator' do
46
- expect { img1.composite(img2, 0, 0, 2) }.to raise_error(TypeError)
47
- end
48
- end
49
-
50
- context 'when given 5 arguments' do
51
- it 'works when 2nd argument is gravity and 5th is a composite operator' do
52
- Magick::CompositeOperator.values do |op|
53
- Magick::GravityType.values do |grav|
54
- expect { img1.composite(img2, grav, 0, 0, op) }.not_to raise_error
55
- end
56
- end
57
- end
58
-
59
- it 'raises an error when 2nd argument is not a gravity' do
60
- expect do
61
- img1.composite(img2, 0, 0, 2, Magick::OverCompositeOp)
62
- end.to raise_error(TypeError)
63
- end
64
- end
65
-
66
- it 'raises an error when the image has been destroyed' do
67
- img2.destroy!
68
- expect do
69
- img1.composite(img2, Magick::CenterGravity, Magick::OverCompositeOp)
70
- end.to raise_error(Magick::DestroyedImageError)
71
- end
72
- end
@@ -1,13 +0,0 @@
1
- RSpec.describe Magick::Image, '#constitute' do
2
- let(:img) { Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first }
3
- let(:pixels) { img.dispatch(0, 0, img.columns, img.rows, 'RGBA') }
4
-
5
- it 'returns an equivalent image to the given pixels' do
6
- res = Magick::Image.constitute(img.columns, img.rows, 'RGBA', pixels)
7
- # The constituted image is in MIFF format so we
8
- # can't compare it directly to the original image.
9
- expect(res.columns).to eq img.columns
10
- expect(res.rows).to eq img.rows
11
- expect(pixels.all? { |v| v >= 0 && v <= Magick::QuantumRange }).to be true
12
- end
13
- end
@@ -1,16 +0,0 @@
1
- RSpec.describe Magick::Image, '#dispatch' do
2
- let(:img) { Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first }
3
-
4
- it 'expects exactly 5 or 6 arguments' do
5
- expect { img.dispatch }.to raise_error(ArgumentError)
6
- expect { img.dispatch(0) }.to raise_error(ArgumentError)
7
- expect { img.dispatch(0, 0) }.to raise_error(ArgumentError)
8
- expect { img.dispatch(0, 0, img.columns) }.to raise_error(ArgumentError)
9
- expect do
10
- img.dispatch(0, 0, img.columns, img.rows)
11
- end.to raise_error(ArgumentError)
12
- expect do
13
- img.dispatch(0, 0, 20, 20, 'RGBA', false, false)
14
- end.to raise_error(ArgumentError)
15
- end
16
- end
@@ -1,54 +0,0 @@
1
- RSpec.describe Magick::Image, '#dissolve' do
2
- let(:img1) { Magick::Image.new(100, 100) { self.background_color = 'transparent' } }
3
- let(:img2) { Magick::Image.new(100, 100) { self.background_color = 'green' } }
4
-
5
- it 'raises an error given invalid arguments' do
6
- expect { img1.dissolve }.to raise_error(ArgumentError)
7
- expect { img1.dissolve(img2, 'x') }.to raise_error(ArgumentError)
8
- expect { img1.dissolve(img2, 0.50, 'x') }.to raise_error(ArgumentError)
9
- expect { img1.dissolve(img2, 0.50, Magick::NorthEastGravity, 'x') }.to raise_error(TypeError)
10
- expect { img1.dissolve(img2, 0.50, Magick::NorthEastGravity, 10, 'x') }.to raise_error(TypeError)
11
- end
12
-
13
- context 'when given 2 arguments' do
14
- it 'works when alpha is float 0.0 to 1.0' do
15
- dissolved = img1.dissolve(img2, 0.50)
16
- expect(dissolved).to be_instance_of(Magick::Image)
17
- expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.45, 0.55)
18
- dissolved = img1.dissolve(img2, 0.20)
19
- expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.15, 0.25)
20
- end
21
- it 'works when alpha is string percentage' do
22
- dissolved = img1.dissolve(img2, '50%')
23
- expect(dissolved).to be_instance_of(Magick::Image)
24
- expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.45, 0.55)
25
- dissolved = img1.dissolve(img2, '20%')
26
- expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.15, 0.25)
27
- end
28
- end
29
-
30
- context 'when given gravity' do
31
- # generate an image to use with gravity
32
- wk = Magick::Image.new(40, 40) { self.background_color = 'transparent' }
33
- d = Magick::Draw.new
34
- d.stroke('none').fill('blue')
35
- d.circle(wk.columns / 2, wk.rows / 2, 4, wk.rows / 2)
36
- d.draw(wk)
37
-
38
- it 'works on colored background' do
39
- # generate an image to use with gravity
40
- dissolved = img2.dissolve(wk, 0.50, 1.0, Magick::CenterGravity)
41
- expect(dissolved).to be_instance_of(Magick::Image)
42
- expect(dissolved.pixel_color(10, 10)).to eq(img2.pixel_color(10, 10))
43
- expect(Float(dissolved.pixel_color(50, 50).blue) / Magick::QuantumRange).to be_between(0.45, 0.55)
44
- expect(Float(dissolved.pixel_color(50, 50).green)).to be_between(0, img2.pixel_color(2, 2).green).exclusive
45
- end
46
- end
47
-
48
- # still need to test with destination percentage, offsets
49
-
50
- it 'raises an error when the image has been destroyed' do
51
- img1.destroy!
52
- expect { img1.dissolve(img2, 0.50) }.to raise_error(Magick::DestroyedImageError)
53
- end
54
- end
@@ -1,12 +0,0 @@
1
- RSpec.describe Magick::Image, '#from_blob' do
2
- let(:img) { Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first }
3
- let(:blob) { img.to_blob }
4
-
5
- it 'returns an image equal to the original' do
6
- expect(blob).to be_instance_of(String)
7
- res = Magick::Image.from_blob(blob)
8
- expect(res).to be_instance_of(Array)
9
- expect(res.first).to be_instance_of(Magick::Image)
10
- expect(res.first).to eq img
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- RSpec.describe Magick::Image, '#ping' do
2
- it 'returns an image from the source, omitting pixel data' do
3
- res = Magick::Image.ping(IMAGES_DIR + '/Button_0.gif')
4
- expect(res).to be_instance_of(Array)
5
- image = res.first
6
- expect(image).to be_instance_of(Magick::Image)
7
- expect(image.format).to eq 'GIF'
8
- expect(image.columns).to eq 127
9
- expect(image.rows).to eq 120
10
- expect(image.filename).to match(/Button_0.gif/)
11
- end
12
- end
@@ -1,27 +0,0 @@
1
- RSpec.describe Magick::Image, '#properties' do
2
- let(:img) { Magick::Image.new(20, 20) }
3
- let(:freeze_error) { RuntimeError }
4
-
5
- before(:each) do
6
- img['comment'] = 'str_1'
7
- img['label'] = 'str_2'
8
- img['jpeg:sampling-factor'] = '2x1,1x1,1x1'
9
- end
10
-
11
- it 'allows assignment of arbitrary properties' do
12
- expect(img['comment']).to eq 'str_1'
13
- expect(img['label']).to eq 'str_2'
14
- expect(img['jpeg:sampling-factor']).to eq '2x1,1x1,1x1'
15
- expect(img['d']).to be nil
16
- end
17
-
18
- it 'returns a hash of assigned properties' do
19
- expected_properties = { 'comment' => 'str_1', 'label' => 'str_2', 'jpeg:sampling-factor' => '2x1,1x1,1x1' }
20
- expect(img.properties).to eq(expected_properties)
21
- end
22
-
23
- it 'raises an error when trying to assign properties to a frozen image' do
24
- img.freeze
25
- expect { img['comment'] = 'str_4' }.to raise_error(freeze_error)
26
- end
27
- end
@@ -1,28 +0,0 @@
1
- require 'timeout'
2
-
3
- RSpec.describe Magick::Image, '#read' do
4
- describe 'issue #200' do
5
- before do
6
- # pid = Process.spawn File.join(SUPPORT_DIR, 'issue_200', 'app.rb'), err: :close, out: :close
7
- # begin
8
- # Timeout.timeout(1) do
9
- # _, @status = Process.waitpid2 pid
10
- # end
11
- # rescue Timeout::Error
12
- # Process.kill('KILL', pid)
13
- # _, @status = Process.waitpid2 pid
14
- # end
15
- end
16
-
17
- it 'not hangs with nil argument' do
18
- skip
19
- expect(@status.signaled?).to be_falsey
20
- end
21
-
22
- it 'raise error with nil argument' do
23
- skip
24
- expect(@status.success?).to be_truthy
25
- expect { Magick::Image.read(nil) }.to raise_error(Magick::ImageMagickError, /unable to open image nil/)
26
- end
27
- end
28
- end
@@ -1,9 +0,0 @@
1
- require 'rmagick'
2
-
3
- root_dir = File.expand_path('..', __dir__)
4
- IMAGES_DIR = File.join(root_dir, 'doc/ex/images')
5
- SUPPORT_DIR = File.join(root_dir, 'spec', 'support')
6
-
7
- def supported_after(version)
8
- :skip if Gem::Version.new(Magick::IMAGEMAGICK_VERSION) < Gem::Version.new(version)
9
- end
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'rmagick'
3
-
4
- begin
5
- Magick::Image.read(nil)
6
- rescue StandardError
7
- nil
8
- end
@@ -1,351 +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
- class DrawUT < Test::Unit::TestCase
8
- def setup
9
- @draw = Magick::Draw.new
10
- end
11
-
12
- def test_affine
13
- assert_nothing_raised do
14
- @draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
15
- end
16
- assert_raise(TypeError) { @draw.affine = [1, 2, 3, 4, 5, 6] }
17
- end
18
-
19
- def test_align
20
- Magick::AlignType.values do |align|
21
- assert_nothing_raised { @draw.align = align }
22
- end
23
- end
24
-
25
- def test_decorate
26
- Magick::DecorationType.values do |decoration|
27
- assert_nothing_raised { @draw.decorate = decoration }
28
- end
29
- end
30
-
31
- def test_density
32
- assert_nothing_raised { @draw.density = '90x90' }
33
- assert_nothing_raised { @draw.density = 'x90' }
34
- assert_nothing_raised { @draw.density = '90' }
35
- assert_raise(TypeError) { @draw.density = 2 }
36
- end
37
-
38
- def test_encoding
39
- assert_nothing_raised { @draw.encoding = 'AdobeCustom' }
40
- assert_raise(TypeError) { @draw.encoding = 2 }
41
- end
42
-
43
- def test_fill
44
- assert_nothing_raised { @draw.fill = 'white' }
45
- assert_nothing_raised { @draw.fill = Magick::Pixel.from_color('white') }
46
- assert_raise(TypeError) { @draw.fill = 2 }
47
- end
48
-
49
- def test_fill_pattern
50
- assert_nothing_raised { @draw.fill_pattern = nil }
51
- assert_nothing_raised do
52
- img1 = Magick::Image.new(10, 10)
53
- img2 = Magick::Image.new(20, 20)
54
-
55
- @draw.fill_pattern = img1
56
- @draw.fill_pattern = img2
57
- end
58
-
59
- assert_raise(NoMethodError) { @draw.fill_pattern = 'x' }
60
- end
61
-
62
- def test_font
63
- assert_nothing_raised { @draw.font = 'Arial-Bold' }
64
- assert_raise(TypeError) { @draw.font = 2 }
65
- end
66
-
67
- def test_font_family
68
- assert_nothing_raised { @draw.font_family = 'Arial' }
69
- assert_raise(TypeError) { @draw.font_family = 2 }
70
- end
71
-
72
- def test_font_stretch
73
- Magick::StretchType.values do |stretch|
74
- assert_nothing_raised { @draw.font_stretch = stretch }
75
- end
76
-
77
- assert_raise(TypeError) { @draw.font_stretch = 2 }
78
- end
79
-
80
- def test_font_style
81
- Magick::StyleType.values do |style|
82
- assert_nothing_raised { @draw.font_style = style }
83
- end
84
-
85
- assert_raise(TypeError) { @draw.font_style = 2 }
86
- end
87
-
88
- def test_font_weight
89
- Magick::WeightType.values do |weight|
90
- assert_nothing_raised { @draw.font_weight = weight }
91
- end
92
-
93
- assert_raise(ArgumentError) { @draw.font_weight = 99 }
94
- assert_raise(ArgumentError) { @draw.font_weight = 901 }
95
- end
96
-
97
- def test_gravity
98
- Magick::GravityType.values do |gravity|
99
- assert_nothing_raised { @draw.gravity = gravity }
100
- end
101
-
102
- assert_raise(TypeError) { @draw.gravity = 2 }
103
- end
104
-
105
- def test_interline_spacing
106
- assert_nothing_raised { @draw.interline_spacing = 2 }
107
- assert_raise(TypeError) { @draw.interline_spacing = 'x' }
108
- end
109
-
110
- def test_interword_spacing
111
- assert_nothing_raised { @draw.interword_spacing = 2 }
112
- assert_raise(TypeError) { @draw.interword_spacing = 'x' }
113
- end
114
-
115
- def test_kerning
116
- assert_nothing_raised { @draw.kerning = 2 }
117
- assert_raise(TypeError) { @draw.kerning = 'x' }
118
- end
119
-
120
- def test_pointsize
121
- assert_nothing_raised { @draw.pointsize = 2 }
122
- assert_raise(TypeError) { @draw.pointsize = 'x' }
123
- end
124
-
125
- def test_rotation
126
- assert_nothing_raised { @draw.rotation = 15 }
127
- assert_raise(TypeError) { @draw.rotation = 'x' }
128
- end
129
-
130
- def test_stroke
131
- assert_nothing_raised { @draw.stroke = Magick::Pixel.from_color('white') }
132
- assert_nothing_raised { @draw.stroke = 'white' }
133
- assert_raise(TypeError) { @draw.stroke = 2 }
134
- end
135
-
136
- def test_stroke_pattern
137
- assert_nothing_raised { @draw.stroke_pattern = nil }
138
- assert_nothing_raised do
139
- img1 = Magick::Image.new(10, 10)
140
- img2 = Magick::Image.new(20, 20)
141
-
142
- @draw.stroke_pattern = img1
143
- @draw.stroke_pattern = img2
144
- end
145
-
146
- assert_raise(NoMethodError) { @draw.stroke_pattern = 'x' }
147
- end
148
-
149
- def test_stroke_width
150
- assert_nothing_raised { @draw.stroke_width = 15 }
151
- assert_raise(TypeError) { @draw.stroke_width = 'x' }
152
- end
153
-
154
- def test_text_antialias
155
- assert_nothing_raised { @draw.text_antialias = true }
156
- assert_nothing_raised { @draw.text_antialias = false }
157
- end
158
-
159
- def test_tile
160
- assert_nothing_raised { @draw.tile = nil }
161
- assert_nothing_raised do
162
- img1 = Magick::Image.new(10, 10)
163
- img2 = Magick::Image.new(20, 20)
164
-
165
- @draw.tile = img1
166
- @draw.tile = img2
167
- end
168
- end
169
-
170
- def test_undercolor
171
- assert_nothing_raised { @draw.undercolor = Magick::Pixel.from_color('white') }
172
- assert_nothing_raised { @draw.undercolor = 'white' }
173
- assert_raise(TypeError) { @draw.undercolor = 2 }
174
- end
175
-
176
- def test_annotate
177
- assert_nothing_raised do
178
- img = Magick::Image.new(10, 10)
179
- @draw.annotate(img, 0, 0, 0, 20, 'Hello world')
180
-
181
- yield_obj = nil
182
- @draw.annotate(img, 100, 100, 20, 20, 'Hello world 2') do |draw|
183
- yield_obj = draw
184
- end
185
- assert_instance_of(Magick::Draw, yield_obj)
186
- end
187
-
188
- assert_raise(TypeError) do
189
- img = Magick::Image.new(10, 10)
190
- @draw.annotate(img, 0, 0, 0, 20, nil)
191
- end
192
-
193
- assert_raise(NoMethodError) { @draw.annotate('x', 0, 0, 0, 20, 'Hello world') }
194
- end
195
-
196
- def test_annotate_stack_buffer_overflow
197
- assert_nothing_raised do
198
- if 1.size == 8
199
- # 64-bit environment can use larger value for Integer and it can causes stack buffer overflow.
200
- img = Magick::Image.new(10, 10)
201
- @draw.annotate(img, 2**63, 2**63, 2**62, 2**62, 'Hello world')
202
- end
203
- end
204
- end
205
-
206
- def test_dup
207
- @draw.path('M110,100 h-75 a75,75 0 1,0 75,-75 z')
208
- @draw.taint
209
- @draw.freeze
210
- dup = @draw.dup
211
- assert_instance_of(Magick::Draw, dup)
212
- end
213
-
214
- def test_clone
215
- @draw.taint
216
- @draw.freeze
217
- clone = @draw.clone
218
- assert_instance_of(Magick::Draw, clone)
219
- end
220
-
221
- def test_composite
222
- img = Magick::Image.new(10, 10)
223
- assert_nothing_raised { @draw.composite(0, 0, 10, 10, img) }
224
-
225
- Magick::CompositeOperator.values do |op|
226
- assert_nothing_raised { @draw.composite(0, 0, 10, 10, img, op) }
227
- end
228
-
229
- assert_raise(TypeError) { @draw.composite('x', 0, 10, 10, img) }
230
- assert_raise(TypeError) { @draw.composite(0, 'y', 10, 10, img) }
231
- assert_raise(TypeError) { @draw.composite(0, 0, 'w', 10, img) }
232
- assert_raise(TypeError) { @draw.composite(0, 0, 10, 'h', img) }
233
- assert_raise(TypeError) { @draw.composite(0, 0, 10, 10, img, Magick::CenterAlign) }
234
- assert_raise(NoMethodError) { @draw.composite(0, 0, 10, 10, 'image') }
235
- assert_raise(ArgumentError) { @draw.composite(0, 0, 10, 10) }
236
- assert_raise(ArgumentError) { @draw.composite(0, 0, 10, 10, img, Magick::ModulusAddCompositeOp, 'x') }
237
- end
238
-
239
- def test_draw
240
- draw = @draw.dup
241
-
242
- img = Magick::Image.new(10, 10)
243
- @draw.path('M110,100 h-75 a75,75 0 1,0 75,-75 z')
244
- assert_nothing_raised { @draw.draw(img) }
245
-
246
- assert_raise(ArgumentError) { draw.draw(img) }
247
- assert_raise(NoMethodError) { draw.draw('x') }
248
- end
249
-
250
- def test_get_type_metrics
251
- img = Magick::Image.new(10, 10)
252
- assert_nothing_raised { @draw.get_type_metrics('ABCDEF') }
253
- assert_nothing_raised { @draw.get_type_metrics(img, 'ABCDEF') }
254
-
255
- assert_raise(ArgumentError) { @draw.get_type_metrics }
256
- assert_raise(ArgumentError) { @draw.get_type_metrics(img, 'ABCDEF', 20) }
257
- assert_raise(ArgumentError) { @draw.get_type_metrics(img, '') }
258
- assert_raise(NoMethodError) { @draw.get_type_metrics('x', 'ABCDEF') }
259
- end
260
-
261
- def test_get_multiline_type_metrics
262
- img = Magick::Image.new(10, 10)
263
- assert_nothing_raised { @draw.get_multiline_type_metrics('ABCDEF') }
264
- assert_nothing_raised { @draw.get_multiline_type_metrics(img, 'ABCDEF') }
265
-
266
- assert_raise(ArgumentError) { @draw.get_multiline_type_metrics }
267
- assert_raise(ArgumentError) { @draw.get_multiline_type_metrics(img, 'ABCDEF', 20) }
268
- assert_raise(ArgumentError) { @draw.get_multiline_type_metrics(img, '') }
269
- end
270
-
271
- def test_inspect
272
- assert_equal('(no primitives defined)', @draw.inspect)
273
-
274
- @draw.path('M110,100 h-75 a75,75 0 1,0 75,-75 z')
275
- @draw.fill('yellow')
276
- assert_equal("path 'M110,100 h-75 a75,75 0 1,0 75,-75 z'\nfill \"yellow\"", @draw.inspect)
277
- end
278
-
279
- def test_marshal
280
- draw = @draw.dup
281
- draw.affine = Magick::AffineMatrix.new(1, 2, 3, 4, 5, 6)
282
- draw.decorate = Magick::LineThroughDecoration
283
- draw.encoding = 'AdobeCustom'
284
- draw.gravity = Magick::CenterGravity
285
- draw.fill = Magick::Pixel.from_color('red')
286
- draw.fill_pattern = Magick::Image.new(10, 10) { self.format = 'miff' }
287
- draw.stroke = Magick::Pixel.from_color('blue')
288
- draw.stroke_width = 5
289
- draw.text_antialias = true
290
- draw.font = 'Arial-Bold'
291
- draw.font_family = 'arial'
292
- draw.font_style = Magick::ItalicStyle
293
- draw.font_stretch = Magick::CondensedStretch
294
- draw.font_weight = Magick::BoldWeight
295
- draw.pointsize = 12
296
- draw.density = '72x72'
297
- draw.align = Magick::CenterAlign
298
- draw.undercolor = Magick::Pixel.from_color('green')
299
- draw.kerning = 10.5
300
- draw.interword_spacing = 3.75
301
-
302
- draw.circle(20, 25, 20, 28)
303
-
304
- dumped = nil
305
- assert_nothing_raised { dumped = draw.marshal_dump }
306
-
307
- draw2 = @draw.dup
308
- assert_nothing_raised do
309
- draw2.marshal_load(dumped)
310
- end
311
- assert_equal(draw.inspect, draw2.inspect)
312
- end
313
-
314
- def test_primitive
315
- assert_nothing_raised { @draw.primitive('ABCDEF') }
316
- assert_nothing_raised { @draw.primitive('12345') }
317
- assert_raise(TypeError) { @draw.primitive(nil) }
318
- end
319
-
320
- def test_draw_options
321
- assert_nothing_raised do
322
- yield_obj = nil
323
-
324
- Magick::Draw.new do |option|
325
- yield_obj = option
326
- end
327
- assert_instance_of(Magick::Image::DrawOptions, yield_obj)
328
- end
329
- end
330
-
331
- def test_issue_604
332
- points = [0, 0, 1, 1, 2, 2]
333
-
334
- pr = Magick::Draw.new
335
-
336
- pr.define_clip_path('example') do
337
- pr.polygon(*points)
338
- end
339
-
340
- pr.push
341
- pr.clip_path('example')
342
-
343
- composite = Magick::Image.new(10, 10)
344
- pr.composite(0, 0, 10, 10, composite)
345
-
346
- pr.pop
347
-
348
- canvas = Magick::Image.new(10, 10)
349
- pr.draw(canvas)
350
- end
351
- end