rmagick 2.13.2 → 2.13.3.rc1

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 (185) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +20 -0
  3. data/README +15 -0
  4. data/README.rc +231 -0
  5. data/build_tarball.rake +1 -1
  6. data/doc/comtasks.html +2 -2
  7. data/doc/constants.html +2 -2
  8. data/doc/draw.html +2 -2
  9. data/doc/ex/PreserveAspectRatio.rb +0 -0
  10. data/doc/ex/ViewBox.rb +0 -0
  11. data/doc/ex/adaptive_threshold.rb +0 -0
  12. data/doc/ex/add_noise.rb +0 -0
  13. data/doc/ex/affine.rb +0 -0
  14. data/doc/ex/affine_transform.rb +0 -0
  15. data/doc/ex/arc.rb +0 -0
  16. data/doc/ex/arcpath.rb +0 -0
  17. data/doc/ex/average.rb +0 -0
  18. data/doc/ex/axes.rb +0 -0
  19. data/doc/ex/bilevel_channel.rb +0 -0
  20. data/doc/ex/blur_image.rb +0 -0
  21. data/doc/ex/border.rb +0 -0
  22. data/doc/ex/bounding_box.rb +0 -0
  23. data/doc/ex/cbezier1.rb +0 -0
  24. data/doc/ex/cbezier2.rb +0 -0
  25. data/doc/ex/cbezier3.rb +0 -0
  26. data/doc/ex/cbezier4.rb +0 -0
  27. data/doc/ex/cbezier5.rb +0 -0
  28. data/doc/ex/cbezier6.rb +0 -0
  29. data/doc/ex/channel.rb +0 -0
  30. data/doc/ex/charcoal.rb +0 -0
  31. data/doc/ex/chop.rb +0 -0
  32. data/doc/ex/circle.rb +0 -0
  33. data/doc/ex/clip_path.rb +0 -0
  34. data/doc/ex/coalesce.rb +0 -0
  35. data/doc/ex/color_fill_to_border.rb +0 -0
  36. data/doc/ex/color_floodfill.rb +0 -0
  37. data/doc/ex/color_histogram.rb +0 -0
  38. data/doc/ex/color_reset.rb +0 -0
  39. data/doc/ex/colorize.rb +0 -0
  40. data/doc/ex/colors.rb +0 -0
  41. data/doc/ex/composite.rb +0 -0
  42. data/doc/ex/composite_layers.rb +0 -0
  43. data/doc/ex/contrast.rb +0 -0
  44. data/doc/ex/crop.rb +0 -0
  45. data/doc/ex/cycle_colormap.rb +0 -0
  46. data/doc/ex/drawcomp.rb +0 -0
  47. data/doc/ex/drop_shadow.rb +0 -0
  48. data/doc/ex/edge.rb +0 -0
  49. data/doc/ex/ellipse.rb +0 -0
  50. data/doc/ex/emboss.rb +0 -0
  51. data/doc/ex/enhance.rb +0 -0
  52. data/doc/ex/equalize.rb +0 -0
  53. data/doc/ex/evenodd.rb +0 -0
  54. data/doc/ex/flatten_images.rb +0 -0
  55. data/doc/ex/flip.rb +0 -0
  56. data/doc/ex/flop.rb +0 -0
  57. data/doc/ex/fonts.rb +0 -0
  58. data/doc/ex/frame.rb +0 -0
  59. data/doc/ex/gaussian_blur.rb +0 -0
  60. data/doc/ex/get_pixels.rb +0 -0
  61. data/doc/ex/gradientfill.rb +0 -0
  62. data/doc/ex/grav.rb +0 -0
  63. data/doc/ex/gravity.rb +0 -0
  64. data/doc/ex/hatchfill.rb +0 -0
  65. data/doc/ex/images/logo400x83.gif +0 -0
  66. data/doc/ex/implode.rb +0 -0
  67. data/doc/ex/level.rb +0 -0
  68. data/doc/ex/line.rb +0 -0
  69. data/doc/ex/matte_fill_to_border.rb +0 -0
  70. data/doc/ex/matte_floodfill.rb +0 -0
  71. data/doc/ex/matte_replace.rb +0 -0
  72. data/doc/ex/median_filter.rb +0 -0
  73. data/doc/ex/modulate.rb +0 -0
  74. data/doc/ex/mono.rb +0 -0
  75. data/doc/ex/morph.rb +0 -0
  76. data/doc/ex/mosaic.rb +0 -0
  77. data/doc/ex/motion_blur.rb +0 -0
  78. data/doc/ex/negate.rb +0 -0
  79. data/doc/ex/nested_rvg.rb +0 -0
  80. data/doc/ex/nonzero.rb +0 -0
  81. data/doc/ex/normalize.rb +0 -0
  82. data/doc/ex/oil_paint.rb +0 -0
  83. data/doc/ex/opacity.rb +0 -0
  84. data/doc/ex/ordered_dither.rb +0 -0
  85. data/doc/ex/path.rb +0 -0
  86. data/doc/ex/pattern1.rb +0 -0
  87. data/doc/ex/pattern2.rb +0 -0
  88. data/doc/ex/polygon.rb +0 -0
  89. data/doc/ex/polyline.rb +0 -0
  90. data/doc/ex/preview.rb +0 -0
  91. data/doc/ex/qbezierpath.rb +0 -0
  92. data/doc/ex/quantize-m.rb +0 -0
  93. data/doc/ex/radial_blur.rb +0 -0
  94. data/doc/ex/raise.rb +0 -0
  95. data/doc/ex/rectangle.rb +0 -0
  96. data/doc/ex/reduce_noise.rb +0 -0
  97. data/doc/ex/roll.rb +0 -0
  98. data/doc/ex/rotate.rb +0 -0
  99. data/doc/ex/rotate_f.rb +0 -0
  100. data/doc/ex/roundrect.rb +0 -0
  101. data/doc/ex/rubyname.rb +0 -0
  102. data/doc/ex/rvg_linecap.rb +0 -0
  103. data/doc/ex/rvg_linejoin.rb +0 -0
  104. data/doc/ex/rvg_opacity.rb +0 -0
  105. data/doc/ex/rvg_stroke_dasharray.rb +0 -0
  106. data/doc/ex/segment.rb +0 -0
  107. data/doc/ex/shade.rb +0 -0
  108. data/doc/ex/shave.rb +0 -0
  109. data/doc/ex/shear.rb +0 -0
  110. data/doc/ex/sketch.rb +0 -0
  111. data/doc/ex/skewx.rb +0 -0
  112. data/doc/ex/skewy.rb +0 -0
  113. data/doc/ex/smile.rb +0 -0
  114. data/doc/ex/solarize.rb +0 -0
  115. data/doc/ex/spread.rb +0 -0
  116. data/doc/ex/stegano.rb +0 -0
  117. data/doc/ex/stroke_dasharray.rb +0 -0
  118. data/doc/ex/stroke_fill.rb +0 -0
  119. data/doc/ex/stroke_linecap.rb +0 -0
  120. data/doc/ex/stroke_linejoin.rb +0 -0
  121. data/doc/ex/stroke_width.rb +0 -0
  122. data/doc/ex/swirl.rb +0 -0
  123. data/doc/ex/text.rb +0 -0
  124. data/doc/ex/text_align.rb +0 -0
  125. data/doc/ex/text_antialias.rb +0 -0
  126. data/doc/ex/text_undercolor.rb +0 -0
  127. data/doc/ex/texture_fill_to_border.rb +0 -0
  128. data/doc/ex/texture_floodfill.rb +0 -0
  129. data/doc/ex/texturefill.rb +0 -0
  130. data/doc/ex/threshold.rb +0 -0
  131. data/doc/ex/to_blob.rb +0 -0
  132. data/doc/ex/translate.rb +0 -0
  133. data/doc/ex/transparent.rb +0 -0
  134. data/doc/ex/unsharp_mask.rb +0 -0
  135. data/doc/ex/wave.rb +0 -0
  136. data/doc/ilist.html +2 -2
  137. data/doc/image1.html +2 -2
  138. data/doc/image2.html +2 -2
  139. data/doc/image3.html +2 -2
  140. data/doc/imageattrs.html +2 -2
  141. data/doc/imusage.html +2 -2
  142. data/doc/index.html +3 -3
  143. data/doc/info.html +2 -2
  144. data/doc/magick.html +2 -2
  145. data/doc/optequiv.html +2 -2
  146. data/doc/rvg.html +2 -2
  147. data/doc/rvgclip.html +2 -2
  148. data/doc/rvggroup.html +2 -2
  149. data/doc/rvgimage.html +2 -2
  150. data/doc/rvgpattern.html +2 -2
  151. data/doc/rvgshape.html +2 -2
  152. data/doc/rvgstyle.html +2 -2
  153. data/doc/rvgtext.html +2 -2
  154. data/doc/rvgtspan.html +2 -2
  155. data/doc/rvgtut.html +2 -2
  156. data/doc/rvguse.html +2 -2
  157. data/doc/rvgxform.html +2 -2
  158. data/doc/struct.html +2 -2
  159. data/doc/usage.html +2 -2
  160. data/examples/crop_with_gravity.rb +0 -0
  161. data/examples/demo.rb +0 -0
  162. data/examples/describe.rb +0 -0
  163. data/examples/rotating_text.rb +0 -0
  164. data/ext/RMagick/extconf.rb +1 -9
  165. data/ext/RMagick/rmimage.c +1 -1
  166. data/lib/rvg/to_c.rb +103 -0
  167. data/rmagick.gemspec +5 -3
  168. data/test/Draw.rb +121 -0
  169. data/test/Image1.rb +763 -0
  170. data/test/Image2.rb +1308 -0
  171. data/test/Image3.rb +1002 -0
  172. data/test/ImageList1.rb +808 -0
  173. data/test/ImageList2.rb +389 -0
  174. data/test/Image_attributes.rb +683 -0
  175. data/test/Import_Export.rb +116 -0
  176. data/test/Info.rb +349 -0
  177. data/test/Magick.rb +364 -0
  178. data/test/Pixel.rb +120 -0
  179. data/test/Preview.rb +62 -0
  180. data/test/all_basic.rb +42 -0
  181. data/test/cmyk.icm +0 -0
  182. data/test/srgb.icm +0 -0
  183. metadata +339 -320
  184. data/README.html +0 -10
  185. data/ext/RMagick/MANIFEST +0 -358
@@ -0,0 +1,364 @@
1
+
2
+ #! /usr/local/bin/ruby -w
3
+
4
+ require 'RMagick'
5
+ require 'test/unit'
6
+ require 'test/unit/ui/console/testrunner' if !RUBY_VERSION[/^1\.9|^2/]
7
+
8
+
9
+ module Magick
10
+ def self._tmpnam_
11
+ @@_tmpnam_
12
+ end
13
+ end
14
+
15
+ class Magick::AlphaChannelType
16
+ def self.enumerators
17
+ @@enumerators
18
+ end
19
+ end
20
+
21
+ class Magick::AlignType
22
+ def self.enumerators
23
+ @@enumerators
24
+ end
25
+ end
26
+
27
+ class Magick::AnchorType
28
+ def self.enumerators
29
+ @@enumerators
30
+ end
31
+ end
32
+
33
+
34
+ class Magick_UT < Test::Unit::TestCase
35
+
36
+ def test_colors
37
+ res = nil
38
+ assert_nothing_raised { res = Magick.colors }
39
+ assert_instance_of(Array, res)
40
+ res.each do |c|
41
+ assert_instance_of(Magick::Color, c)
42
+ assert_instance_of(String, c.name)
43
+ assert_instance_of(Magick::ComplianceType, c.compliance)
44
+ assert_instance_of(Magick::Pixel, c.color)
45
+ end
46
+ Magick.colors {|c| assert_instance_of(Magick::Color, c) }
47
+ end
48
+
49
+ # Test a few of the @@enumerator arrays in the Enum subclasses.
50
+ # No need to test all of them.
51
+ def test_enumerators
52
+ ary = nil
53
+ assert_nothing_raised do
54
+ ary = Magick::AlphaChannelType.enumerators
55
+ end
56
+ assert_instance_of(Array, ary)
57
+ assert_equal(11, ary.length)
58
+
59
+ assert_nothing_raised do
60
+ ary = Magick::AlignType.enumerators
61
+ end
62
+ assert_instance_of(Array, ary)
63
+ assert_equal(4, ary.length)
64
+
65
+ assert_nothing_raised do
66
+ ary = Magick::AnchorType.enumerators
67
+ end
68
+ assert_instance_of(Array, ary)
69
+ assert_equal(3, ary.length)
70
+ end
71
+
72
+ def test_fonts
73
+ res = nil
74
+ assert_nothing_raised { res = Magick.fonts }
75
+ assert_instance_of(Array, res)
76
+ res.each do |f|
77
+ assert_instance_of(Magick::Font, f)
78
+ assert_instance_of(String, f.name)
79
+ assert_instance_of(String, f.description) unless f.description.nil?
80
+ assert_instance_of(String, f.family)
81
+ assert_instance_of(Magick::StyleType, f.style)
82
+ assert_instance_of(Magick::StretchType, f.stretch)
83
+ assert_instance_of(Fixnum, f.weight)
84
+ assert_instance_of(String, f.encoding) unless f.encoding.nil?
85
+ assert_instance_of(String, f.foundry) unless f.foundry.nil?
86
+ assert_instance_of(String, f.format) unless f.format.nil?
87
+ end
88
+ Magick.fonts {|f| assert_instance_of(Magick::Font, f) }
89
+ end
90
+
91
+ def test_formats
92
+ res = nil
93
+ assert_nothing_raised { res = Magick.formats }
94
+ assert_instance_of(Hash, res)
95
+ res.each do |f, v|
96
+ assert_instance_of(String, f)
97
+ assert_instance_of(String, v)
98
+ end
99
+ Magick.formats.each { |f, v| assert_not_nil(f); assert_not_nil(v) }
100
+ end
101
+
102
+ def test_geometry
103
+ g, gs, g2, gs2 = nil, nil, nil, nil
104
+ assert_nothing_raised { g = Magick::Geometry.new() }
105
+ assert_nothing_raised { gs = g.to_s }
106
+ assert_equal("", gs)
107
+
108
+ g = Magick::Geometry.new(40)
109
+ gs = g.to_s
110
+ assert_equal("40x", gs)
111
+
112
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
113
+ gs2 = g2.to_s
114
+ assert_equal(gs, gs2)
115
+
116
+ g = Magick::Geometry.new(40, 50)
117
+ gs = g.to_s
118
+ assert_equal("40x50", gs)
119
+
120
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
121
+ gs2 = g2.to_s
122
+ assert_equal(gs, gs2)
123
+
124
+ g = Magick::Geometry.new(40, 50, 10)
125
+ gs = g.to_s
126
+ assert_equal("40x50+10+0", gs)
127
+
128
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
129
+ gs2 = g2.to_s
130
+ assert_equal(gs, gs2)
131
+
132
+ g = Magick::Geometry.new(40, 50, 10, -15)
133
+ gs = g.to_s
134
+ assert_equal("40x50+10-15", gs)
135
+
136
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
137
+ gs2 = g2.to_s
138
+ assert_equal(gs, gs2)
139
+
140
+ g = Magick::Geometry.new(40, 50, 0, 0, Magick::AreaGeometry)
141
+ gs = g.to_s
142
+ assert_equal("40x50@", gs)
143
+
144
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
145
+ gs2 = g2.to_s
146
+ assert_equal(gs, gs2)
147
+
148
+ g = Magick::Geometry.new(40, 50, 0, 0, Magick::AspectGeometry)
149
+ gs = g.to_s
150
+ assert_equal("40x50!", gs)
151
+
152
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
153
+ gs2 = g2.to_s
154
+ assert_equal(gs, gs2)
155
+
156
+ g = Magick::Geometry.new(40, 50, 0, 0, Magick::LessGeometry)
157
+ gs = g.to_s
158
+ assert_equal("40x50<", gs)
159
+
160
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
161
+ gs2 = g2.to_s
162
+ assert_equal(gs, gs2)
163
+
164
+ g = Magick::Geometry.new(40, 50, 0, 0, Magick::GreaterGeometry)
165
+ gs = g.to_s
166
+ assert_equal("40x50>", gs)
167
+
168
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
169
+ gs2 = g2.to_s
170
+ assert_equal(gs, gs2)
171
+
172
+ g = Magick::Geometry.new(40, 50, 0, 0, Magick::MinimumGeometry)
173
+ gs = g.to_s
174
+ assert_equal("40x50^", gs)
175
+
176
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
177
+ gs2 = g2.to_s
178
+ assert_equal(gs, gs2)
179
+
180
+ g = Magick::Geometry.new(40, 0, 0, 0, Magick::PercentGeometry)
181
+ gs = g.to_s
182
+ assert_equal("40%", gs)
183
+
184
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
185
+ gs2 = g2.to_s
186
+ assert_equal(gs, gs2)
187
+
188
+ g = Magick::Geometry.new(40, 60, 0, 0, Magick::PercentGeometry)
189
+ gs = g.to_s
190
+ assert_equal("40%x60%", gs)
191
+
192
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
193
+ gs2 = g2.to_s
194
+ assert_equal(gs, gs2)
195
+
196
+ g = Magick::Geometry.new(40, 60, 10, 0, Magick::PercentGeometry)
197
+ gs = g.to_s
198
+ assert_equal("40%x60%+10+0", gs)
199
+
200
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
201
+ gs2 = g2.to_s
202
+ assert_equal(gs, gs2)
203
+
204
+ g = Magick::Geometry.new(40, 60, 10, 20, Magick::PercentGeometry)
205
+ gs = g.to_s
206
+ assert_equal("40%x60%+10+20", gs)
207
+
208
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
209
+ gs2 = g2.to_s
210
+ assert_equal(gs, gs2)
211
+
212
+ g = Magick::Geometry.new(40.5, 60.75)
213
+ gs = g.to_s
214
+ assert_equal("40.50x60.75", gs)
215
+
216
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
217
+ gs2 = g2.to_s
218
+ assert_equal(gs, gs2)
219
+
220
+ g = Magick::Geometry.new(40.5, 60.75, 0, 0, Magick::PercentGeometry)
221
+ gs = g.to_s
222
+ assert_equal("40.50%x60.75%", gs)
223
+
224
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
225
+ gs2 = g2.to_s
226
+ assert_equal(gs, gs2)
227
+
228
+ g = Magick::Geometry.new(0, 0, 10, 20)
229
+ gs = g.to_s
230
+ assert_equal("+10+20", gs)
231
+
232
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
233
+ gs2 = g2.to_s
234
+ assert_equal(gs, gs2)
235
+
236
+ g = Magick::Geometry.new(0, 0, 10)
237
+ gs = g.to_s
238
+ assert_equal("+10+0", gs)
239
+
240
+ assert_nothing_raised { g2 = Magick::Geometry.from_s(gs) }
241
+ gs2 = g2.to_s
242
+ assert_equal(gs, gs2)
243
+
244
+ # assert behavior with empty string argument
245
+ assert_nothing_raised { g = Magick::Geometry.from_s("") }
246
+ assert_equal("", g.to_s)
247
+
248
+ assert_raise(ArgumentError) { Magick::Geometry.new(Magick::AreaGeometry) }
249
+ assert_raise(ArgumentError) { Magick::Geometry.new(40, Magick::AreaGeometry) }
250
+ assert_raise(ArgumentError) { Magick::Geometry.new(40, 20, Magick::AreaGeometry) }
251
+ assert_raise(ArgumentError) { Magick::Geometry.new(40, 20, 10, Magick::AreaGeometry) }
252
+
253
+ end
254
+
255
+ def test_set_log_event_mask
256
+ assert_nothing_raised { Magick.set_log_event_mask("Module,Coder") }
257
+ end
258
+
259
+ def test_set_log_format
260
+ assert_nothing_raised { Magick.set_log_format("format %d%e%f") }
261
+ end
262
+
263
+ # put old limits back in place after testing
264
+ def test_limit_resources
265
+ cur = new = nil
266
+
267
+ assert_nothing_raised {cur = Magick::limit_resource(:memory, 500)}
268
+ assert_equal(782635008, cur)
269
+ assert_nothing_raised {new = Magick::limit_resource("memory")}
270
+ assert_equal(500, new)
271
+ Magick::limit_resource(:memory, cur)
272
+
273
+ assert_nothing_raised {cur = Magick::limit_resource(:map, 3500)}
274
+ assert_equal(2087026688, cur)
275
+ assert_nothing_raised {new = Magick::limit_resource("map")}
276
+ assert_equal(3500, new)
277
+ Magick::limit_resource(:map, cur)
278
+
279
+ assert_nothing_raised {cur = Magick::limit_resource(:disk, 3*1024*1024*1024)}
280
+ assert_equal(4294967295, cur)
281
+ assert_nothing_raised {new = Magick::limit_resource("disk")}
282
+ assert_equal(3221225472, new)
283
+ Magick::limit_resource(:disk, cur)
284
+
285
+ assert_nothing_raised {cur = Magick::limit_resource(:file, 500)}
286
+ assert_equal(768, cur)
287
+ assert_nothing_raised {new = Magick::limit_resource("file")}
288
+ assert_equal(500, new)
289
+ Magick::limit_resource(:file, cur)
290
+
291
+ assert_raise(ArgumentError) { Magick::limit_resource(:xxx) }
292
+ assert_raise(ArgumentError) { Magick::limit_resource("xxx") }
293
+ assert_raise(ArgumentError) { Magick::limit_resource("map", 3500, 2) }
294
+ assert_raise(ArgumentError) { Magick::limit_resource() }
295
+
296
+ end
297
+
298
+ # test the @@_tmpnam_ class variable
299
+ # the count is incremented by Image::Info#texture=,
300
+ # ImageList::Montage#texture=, and Draw.composite
301
+
302
+ def test_tmpnam
303
+
304
+ tmpfiles = Dir[ENV["HOME"] + "/tmp/magick*"].length
305
+
306
+ texture = Magick::Image.read("granite:") {self.size = "20x20" }.first
307
+ info = Magick::Image::Info.new
308
+
309
+ # does not exist at first
310
+ # assert_raise(NameError) { x = Magick._tmpnam_ }
311
+ info.texture = texture
312
+
313
+ # now it exists
314
+ assert_nothing_raised { x = Magick._tmpnam_ }
315
+ assert_equal(1, Magick._tmpnam_)
316
+
317
+ info.texture = texture
318
+ assert_equal(2, Magick._tmpnam_)
319
+
320
+ mon = Magick::ImageList::Montage.new
321
+ mon.texture = texture
322
+ assert_equal(3, Magick._tmpnam_)
323
+
324
+ mon.texture = texture
325
+ assert_equal(4, Magick._tmpnam_)
326
+
327
+ gc = Magick::Draw.new
328
+ gc.composite(0, 0, 20, 20, texture)
329
+ assert_equal(5, Magick._tmpnam_)
330
+
331
+ gc.composite(0, 0, 20, 20, texture)
332
+ assert_equal(6, Magick._tmpnam_)
333
+
334
+ tmpfiles2 = Dir[ENV["HOME"] + "/tmp/magick*"].length
335
+
336
+ # The 2nd montage texture deletes the first.
337
+ # The 2nd info texture deletes the first.
338
+ # Both composite images are still alive.
339
+ # Therefore only 4 tmp files are left.
340
+ #assert_equal(tmpfiles+4, tmpfiles2)
341
+ # 6.4.1-5 - only 1 tmpfile?
342
+ assert_equal(tmpfiles, tmpfiles2)
343
+
344
+ end
345
+
346
+ def test_trace_proc
347
+ Magick.trace_proc = lambda do |which, description, id, method|
348
+ assert(which == :c)
349
+ assert_instance_of(String, description)
350
+ assert_instance_of(String, id)
351
+ assert_equal(:initialize, method)
352
+ end
353
+ begin
354
+ img = Magick::Image.new(20,20)
355
+ ensure
356
+ Magick.trace_proc = nil
357
+ end
358
+ end
359
+ end
360
+
361
+ if __FILE__ == $0
362
+ Test::Unit::UI::Console::TestRunner.run(Magick_UT) if !RUBY_VERSION[/^1\.9|^2/]
363
+ end
364
+
@@ -0,0 +1,120 @@
1
+ #! /usr/local/bin/ruby -w
2
+
3
+ require 'RMagick'
4
+ require 'test/unit'
5
+ require 'test/unit/ui/console/testrunner' if !RUBY_VERSION[/^1\.9|^2/]
6
+
7
+
8
+ class Pixel_UT < Test::Unit::TestCase
9
+
10
+ def setup
11
+ @pixel = Magick::Pixel.from_color('brown')
12
+ end
13
+
14
+ def test_hash
15
+ hash = nil
16
+ assert_nothing_raised { hash = @pixel.hash}
17
+ assert_not_nil(hash)
18
+ assert_equal(-761981696, hash)
19
+
20
+ p = Magick::Pixel.new
21
+ assert_equal(0, p.hash)
22
+
23
+ p = Magick::Pixel.from_color('red')
24
+ assert_equal(-8388608, p.hash)
25
+
26
+ # Pixel.hash sacrifices the last bit of the opacity channel
27
+ p = Magick::Pixel.new(0, 0, 0, 72)
28
+ p2 = Magick::Pixel.new(0, 0, 0, 73)
29
+ assert_not_equal(p, p2)
30
+ assert_equal(p.hash, p2.hash)
31
+
32
+ end
33
+
34
+ def test_eql?
35
+ p = @pixel
36
+ assert(@pixel.eql?(p))
37
+ p = Magick::Pixel.new
38
+ assert(!@pixel.eql?(p))
39
+ end
40
+
41
+ def test_fcmp
42
+ red = Magick::Pixel.from_color('red')
43
+ blue = Magick::Pixel.from_color('blue')
44
+ assert_nothing_raised { red.fcmp(red) }
45
+ assert(red.fcmp(red))
46
+ assert(! red.fcmp(blue) )
47
+
48
+ assert_nothing_raised { red.fcmp(blue, 10) }
49
+ assert_nothing_raised { red.fcmp(blue, 10, Magick::RGBColorspace) }
50
+ assert_raises(TypeError) { red.fcmp(blue, 'x') }
51
+ assert_raises(TypeError) { red.fcmp(blue, 10, 'x') }
52
+ end
53
+
54
+ def test_from_hsla
55
+ assert_nothing_raised { Magick::Pixel.from_hsla(127, 50, 50) }
56
+ assert_nothing_raised { Magick::Pixel.from_hsla(127, 50, 50, 0) }
57
+ assert_nothing_raised { Magick::Pixel.from_hsla(127, "50%", 50, 0) }
58
+ assert_nothing_raised { Magick::Pixel.from_hsla("10%", "50%", 50, 0) }
59
+ assert_raise(TypeError) { Magick::Pixel.from_hsla([], 50, 50, 0) }
60
+ assert_raise(TypeError) { Magick::Pixel.from_hsla(127, [], 50, 0) }
61
+ assert_raise(TypeError) { Magick::Pixel.from_hsla(127, 50, [], 0) }
62
+ assert_raise(TypeError) { Magick::Pixel.from_hsla(127, 50, 50, []) }
63
+ assert_nothing_raised { @pixel.to_hsla }
64
+
65
+ 18.times do |h|
66
+ 25.times do |s|
67
+ 25.times do |l|
68
+ 5.times do |a|
69
+ args = [20*h, s+25, l+25, a/5]
70
+ px = Magick::Pixel.from_hsla(*args)
71
+ hsla = px.to_hsla()
72
+ #puts "[#{args.join(', ')}] = [#{hsla.join(', ')}]"
73
+ # Handle cases where the result is very near 360
74
+ #hsla[0] = ((hsla[0] + 0.005) % 360.0) - 0.005
75
+ #hsla[1] = ((hsla[1] + 0.005) % 360.0) - 0.005
76
+ #hsla[2] = ((hsla[2] + 0.005) % 360.0) - 0.005
77
+ assert_in_delta(args[0], hsla[0], 0.25, "expected #{args.inspect} got #{hsla.inspect}")
78
+ assert_in_delta(args[1], hsla[1], 0.25, "expected #{args.inspect} got #{hsla.inspect}")
79
+ assert_in_delta(args[2], hsla[2], 0.25, "expected #{args.inspect} got #{hsla.inspect}")
80
+ assert_in_delta(args[3], hsla[3], 0.005, "expected #{args.inspect} got #{hsla.inspect}")
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ # test percentages
87
+ args = ["20%","20%","20%","20%"]
88
+ args2 = [360.0/5,255.0/5,255.0/5,1.0/5]
89
+ px = Magick::Pixel.from_hsla(*args)
90
+ hsla = px.to_hsla
91
+ px2 = Magick::Pixel.from_hsla(*args2)
92
+ hsla2 = px2.to_hsla
93
+
94
+ assert_in_delta(hsla[0], hsla2[0], 0.25, "#{hsla.inspect} != #{hsla2.inspect} with args: #{args.inspect} and #{args2.inspect}")
95
+ assert_in_delta(hsla[1], hsla2[1], 0.25, "#{hsla.inspect} != #{hsla2.inspect} with args: #{args.inspect} and #{args2.inspect}")
96
+ assert_in_delta(hsla[2], hsla2[2], 0.25, "#{hsla.inspect} != #{hsla2.inspect} with args: #{args.inspect} and #{args2.inspect}")
97
+ assert_in_delta(hsla[3], hsla2[3], 0.005, "#{hsla.inspect} != #{hsla2.inspect} with args: #{args.inspect} and #{args2.inspect}")
98
+ end
99
+
100
+ def test_to_color
101
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance) }
102
+ assert_nothing_raised { @pixel.to_color(Magick::SVGCompliance) }
103
+ assert_nothing_raised { @pixel.to_color(Magick::X11Compliance) }
104
+ assert_nothing_raised { @pixel.to_color(Magick::XPMCompliance) }
105
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance, true) }
106
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance, false) }
107
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance, false, 8) }
108
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance, false, 16) }
109
+ # test "hex" format
110
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance, false, 8, true) }
111
+ assert_nothing_raised { @pixel.to_color(Magick::AllCompliance, false, 16, true) }
112
+
113
+ assert_equal("#A52A2A", @pixel.to_color(Magick::AllCompliance, false, 8, true))
114
+ assert_equal("#A5A52A2A2A2A", @pixel.to_color(Magick::AllCompliance, false, 16, true))
115
+
116
+ assert_raise(ArgumentError) { @pixel.to_color(Magick::AllCompliance, false, 32) }
117
+ assert_raise(TypeError) { @pixel.to_color(1) }
118
+ end
119
+
120
+ end