rmagick 3.1.0 → 3.2.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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/.appveyor.yml +4 -4
  3. data/.circleci/config.yml +1 -1
  4. data/.gitignore +1 -0
  5. data/.rubocop_todo.yml +6 -0
  6. data/.travis.yml +26 -8
  7. data/CHANGELOG.md +104 -0
  8. data/before_install_linux.sh +19 -10
  9. data/benchmarks/memory/README.md +50 -0
  10. data/benchmarks/memory/image_new.rb +8 -0
  11. data/benchmarks/memory/rmagick.gnuplot +16 -0
  12. data/doc/ex/coalesce.rb +2 -2
  13. data/doc/ex/drawcomp.rb +3 -3
  14. data/doc/ex/get_pixels.rb +1 -1
  15. data/doc/ex/images/Coffee.png +0 -0
  16. data/doc/ex/images/No.png +0 -0
  17. data/doc/ex/images/Snake.png +0 -0
  18. data/doc/ex/implode.rb +2 -2
  19. data/doc/ex/mask.rb +1 -1
  20. data/doc/ex/matte_fill_to_border.rb +1 -1
  21. data/doc/ex/matte_floodfill.rb +1 -1
  22. data/doc/ex/matte_replace.rb +1 -1
  23. data/doc/ex/stegano.rb +1 -1
  24. data/examples/constitute.rb +1 -1
  25. data/examples/crop_with_gravity.rb +1 -1
  26. data/examples/demo.rb +4 -4
  27. data/examples/find_similar_region.rb +1 -1
  28. data/examples/histogram.rb +3 -3
  29. data/examples/identify.rb +46 -46
  30. data/examples/image_opacity.rb +2 -2
  31. data/examples/vignette.rb +3 -3
  32. data/ext/RMagick/extconf.rb +19 -15
  33. data/ext/RMagick/rmagick.c +1 -2
  34. data/ext/RMagick/rmagick.h +59 -30
  35. data/ext/RMagick/rmdraw.c +62 -274
  36. data/ext/RMagick/rmenum.c +121 -665
  37. data/ext/RMagick/rmfill.c +7 -7
  38. data/ext/RMagick/rmilist.c +91 -7
  39. data/ext/RMagick/rmimage.c +568 -379
  40. data/ext/RMagick/rminfo.c +152 -110
  41. data/ext/RMagick/rmkinfo.c +17 -1
  42. data/ext/RMagick/rmmain.c +75 -74
  43. data/ext/RMagick/rmmontage.c +33 -33
  44. data/ext/RMagick/rmpixel.c +75 -14
  45. data/ext/RMagick/rmstruct.c +5 -5
  46. data/ext/RMagick/rmutil.c +3 -13
  47. data/lib/obsolete.rb +66 -0
  48. data/lib/rmagick/version.rb +1 -1
  49. data/lib/rmagick_internal.rb +54 -41
  50. data/spec/rmagick/image/composite_spec.rb +5 -76
  51. data/spec/rmagick/image/properties_spec.rb +1 -1
  52. data/test/Draw.rb +52 -115
  53. data/test/Enum.rb +153 -1
  54. data/test/Fill.rb +1 -1
  55. data/test/Image1.rb +97 -43
  56. data/test/Image2.rb +140 -36
  57. data/test/Image3.rb +110 -120
  58. data/test/ImageList1.rb +46 -11
  59. data/test/ImageList2.rb +11 -21
  60. data/test/Image_attributes.rb +81 -127
  61. data/test/Import_Export.rb +2 -2
  62. data/test/Info.rb +5 -1
  63. data/test/KernelInfo.rb +67 -0
  64. data/test/Magick.rb +17 -35
  65. data/test/Pixel.rb +193 -24
  66. data/test/PolaroidOptions.rb +1 -1
  67. data/test/Preview.rb +3 -35
  68. data/test/Struct.rb +45 -0
  69. data/test/appearance/Montage.rb +26 -0
  70. data/test/appearance/appearance_assertion.rb +13 -0
  71. data/test/appearance/expected/montage_border_color.jpg +0 -0
  72. data/test/lib/Obsolete.rb +30 -0
  73. data/test/lib/internal/Draw.rb +823 -0
  74. data/test/lib/internal/Geometry.rb +98 -0
  75. data/test/lib/internal/Magick.rb +40 -0
  76. data/test/test_all_basic.rb +16 -17
  77. metadata +27 -5
  78. data/doc/ex/images/Coffee.wmf +0 -0
  79. data/doc/ex/images/No.wmf +0 -0
  80. data/doc/ex/images/Snake.wmf +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rmagick'
4
4
  require 'test/unit'
5
- require 'test/unit/ui/console/testrunner' unless RUBY_VERSION[/^1\.9|^2/]
5
+ require 'test/unit/ui/console/testrunner'
6
6
 
7
7
  class GradientFillUT < Test::Unit::TestCase
8
8
  def test_new
@@ -2,13 +2,29 @@
2
2
 
3
3
  require 'rmagick'
4
4
  require 'test/unit'
5
- require 'test/unit/ui/console/testrunner' unless RUBY_VERSION[/^1\.9|^2/]
5
+ require 'test/unit/ui/console/testrunner'
6
6
 
7
7
  class Image1_UT < Test::Unit::TestCase
8
8
  def setup
9
9
  @img = Magick::Image.new(20, 20)
10
10
  end
11
11
 
12
+ def test_class_type
13
+ assert_raise(ArgumentError) { @img.class_type = Magick::UndefinedClass }
14
+ end
15
+
16
+ def test_constitute
17
+ pixels = @img.dispatch(0, 0, @img.columns, @img.rows, 'RGBA')
18
+ res = Magick::Image.constitute(@img.columns, @img.rows, 'RGBA', pixels)
19
+ assert_equal(res.columns, @img.columns)
20
+ assert_equal(res.rows, @img.rows)
21
+
22
+ assert_nothing_raised { Magick::Image.constitute(@img.columns, @img.rows, 'RGBA', [1.0] * (4 * @img.columns * @img.rows)) }
23
+ assert_raise(TypeError) { Magick::Image.constitute(@img.columns, @img.rows, 'RGBA', ['x'] * (4 * @img.columns * @img.rows)) }
24
+ assert_raise(ArgumentError) { Magick::Image.constitute(0, @img.rows, 'RGBA', pixels) }
25
+ assert_raise(ArgumentError) { Magick::Image.constitute(@img.columns, 0, 'RGBA', pixels) }
26
+ end
27
+
12
28
  def test_read_inline
13
29
  img = Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first
14
30
  blob = img.to_blob
@@ -33,6 +49,7 @@ class Image1_UT < Test::Unit::TestCase
33
49
  assert_equal(sig1 <=> sig0, img1 <=> img0)
34
50
  assert_equal(img0, img0)
35
51
  assert_not_equal(img0, img1)
52
+ assert_nil(img0 <=> nil)
36
53
  end
37
54
 
38
55
  def test_adaptive_blur
@@ -54,7 +71,7 @@ class Image1_UT < Test::Unit::TestCase
54
71
  assert_nothing_raised { @img.adaptive_blur_channel(3, 2) }
55
72
  assert_nothing_raised { @img.adaptive_blur_channel(3, 2, Magick::RedChannel) }
56
73
  assert_nothing_raised { @img.adaptive_blur_channel(3, 2, Magick::RedChannel, Magick::BlueChannel) }
57
- assert_raise(ArgumentError) { @img.adaptive_blur(3, 2, 2) }
74
+ assert_raise(TypeError) { @img.adaptive_blur_channel(3, 2, 2) }
58
75
  end
59
76
 
60
77
  def test_adaptive_resize
@@ -63,8 +80,10 @@ class Image1_UT < Test::Unit::TestCase
63
80
  assert_instance_of(Magick::Image, res)
64
81
  end
65
82
  assert_nothing_raised { @img.adaptive_resize(2) }
83
+ assert_raise(ArgumentError) { @img.adaptive_resize(-1.0) }
66
84
  assert_raise(ArgumentError) { @img.adaptive_resize(10, 10, 10) }
67
85
  assert_raise(ArgumentError) { @img.adaptive_resize }
86
+ assert_raise(RangeError) { @img.adaptive_resize(Float::MAX) }
68
87
  end
69
88
 
70
89
  def test_adaptive_sharpen
@@ -86,7 +105,7 @@ class Image1_UT < Test::Unit::TestCase
86
105
  assert_nothing_raised { @img.adaptive_sharpen_channel(3, 2) }
87
106
  assert_nothing_raised { @img.adaptive_sharpen_channel(3, 2, Magick::RedChannel) }
88
107
  assert_nothing_raised { @img.adaptive_sharpen_channel(3, 2, Magick::RedChannel, Magick::BlueChannel) }
89
- assert_raise(ArgumentError) { @img.adaptive_sharpen(3, 2, 2) }
108
+ assert_raise(TypeError) { @img.adaptive_sharpen_channel(3, 2, 2) }
90
109
  end
91
110
 
92
111
  def test_adaptive_threshold
@@ -108,15 +127,15 @@ class Image1_UT < Test::Unit::TestCase
108
127
  assert_nothing_raised { @img.add_compose_mask(mask) }
109
128
  assert_nothing_raised { @img.delete_compose_mask }
110
129
  assert_nothing_raised { @img.delete_compose_mask }
130
+
131
+ mask = Magick::Image.new(10, 10)
132
+ assert_raise(ArgumentError) { @img.add_compose_mask(mask) }
111
133
  end
112
134
 
113
135
  def test_add_noise
114
- assert_nothing_raised { @img.add_noise(Magick::UniformNoise) }
115
- assert_nothing_raised { @img.add_noise(Magick::GaussianNoise) }
116
- assert_nothing_raised { @img.add_noise(Magick::MultiplicativeGaussianNoise) }
117
- assert_nothing_raised { @img.add_noise(Magick::ImpulseNoise) }
118
- assert_nothing_raised { @img.add_noise(Magick::LaplacianNoise) }
119
- assert_nothing_raised { @img.add_noise(Magick::PoissonNoise) }
136
+ Magick::NoiseType.values do |noise|
137
+ assert_nothing_raised { @img.add_noise(noise) }
138
+ end
120
139
  assert_raise(TypeError) { @img.add_noise(0) }
121
140
  end
122
141
 
@@ -136,10 +155,11 @@ class Image1_UT < Test::Unit::TestCase
136
155
  assert_raise(ArgumentError) { @img.add_noise_channel }
137
156
  end
138
157
 
139
- def add_delete_profile
140
- img = Magick::Image.read('cmyk.jpg'), first
141
- assert_nothing_raised { img.add_profile('cmyk.icm') }
142
- assert_nothing_raised { img.add_profile('srgb.icm') }
158
+ def test_add_delete_profile
159
+ img = Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first
160
+ assert_nothing_raised { img.add_profile(File.join(__dir__, 'cmyk.icm')) }
161
+ # assert_raise(Magick::ImageMagickError) { img.add_profile(File.join(__dir__, 'srgb.icm')) }
162
+
143
163
  img.each_profile { |name, _value| assert_equal('icc', name) }
144
164
  assert_nothing_raised { img.delete_profile('icc') }
145
165
  end
@@ -167,12 +187,28 @@ class Image1_UT < Test::Unit::TestCase
167
187
  assert @img.alpha?
168
188
  assert_nothing_raised { @img.alpha Magick::DeactivateAlphaChannel }
169
189
  assert !@img.alpha?
170
- assert_nothing_raised { @img.alpha Magick::ResetAlphaChannel }
190
+ assert_nothing_raised { @img.alpha Magick::OpaqueAlphaChannel }
171
191
  assert_nothing_raised { @img.alpha Magick::SetAlphaChannel }
192
+ assert_raise(ArgumentError) { @img.alpha Magick::SetAlphaChannel, Magick::OpaqueAlphaChannel }
172
193
  @img.freeze
173
194
  assert_raise(FreezeError) { @img.alpha Magick::SetAlphaChannel }
174
195
  end
175
196
 
197
+ def test_aref
198
+ img = Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first
199
+ assert_nil(img[nil])
200
+ assert_nil(img['label'])
201
+ assert_match(/^Creator: PolyView/, img[:comment])
202
+ end
203
+
204
+ def test_aset
205
+ @img['label'] = 'foobarbaz'
206
+ @img[:comment] = 'Hello world'
207
+ assert_equal('foobarbaz', @img['label'])
208
+ assert_equal('Hello world', @img['comment'])
209
+ assert_nothing_raised { @img[nil] = 'foobarbaz' }
210
+ end
211
+
176
212
  def test_auto_gamma
177
213
  res = nil
178
214
  assert_nothing_raised { res = @img.auto_gamma_channel }
@@ -194,10 +230,14 @@ class Image1_UT < Test::Unit::TestCase
194
230
  end
195
231
 
196
232
  def test_auto_orient
197
- assert_nothing_raised do
198
- res = @img.auto_orient
199
- assert_instance_of(Magick::Image, res)
200
- assert_not_same(@img, res)
233
+ Magick::OrientationType.values.each do |v|
234
+ assert_nothing_raised do
235
+ img = Magick::Image.new(10, 10)
236
+ img.orientation = v
237
+ res = img.auto_orient
238
+ assert_instance_of(Magick::Image, res)
239
+ assert_not_same(img, res)
240
+ end
201
241
  end
202
242
 
203
243
  assert_nothing_raised do
@@ -224,13 +264,17 @@ class Image1_UT < Test::Unit::TestCase
224
264
  @img2 = Magick::Image.new(20, 20) { self.background_color = 'black' }
225
265
  assert_nothing_raised { @img.blend(@img2, 0.25) }
226
266
  res = @img.blend(@img2, 0.25)
267
+
268
+ Magick::GravityType.values do |gravity|
269
+ assert_nothing_raised { @img.blend(@img2, 0.25, 0.75, gravity) }
270
+ assert_nothing_raised { @img.blend(@img2, 0.25, 0.75, gravity, 10) }
271
+ assert_nothing_raised { @img.blend(@img2, 0.25, 0.75, gravity, 10, 10) }
272
+ end
273
+
227
274
  assert_instance_of(Magick::Image, res)
228
275
  assert_nothing_raised { @img.blend(@img2, '25%') }
229
276
  assert_nothing_raised { @img.blend(@img2, 0.25, 0.75) }
230
277
  assert_nothing_raised { @img.blend(@img2, '25%', '75%') }
231
- assert_nothing_raised { @img.blend(@img2, 0.25, 0.75, Magick::CenterGravity) }
232
- assert_nothing_raised { @img.blend(@img2, 0.25, 0.75, Magick::CenterGravity, 10) }
233
- assert_nothing_raised { @img.blend(@img2, 0.25, 0.75, Magick::CenterGravity, 10, 10) }
234
278
  assert_raise(ArgumentError) { @img.blend }
235
279
  assert_raise(ArgumentError) { @img.blend(@img2, 'x') }
236
280
  assert_raise(TypeError) { @img.blend(@img2, 0.25, []) }
@@ -242,6 +286,13 @@ class Image1_UT < Test::Unit::TestCase
242
286
  assert_raise(Magick::DestroyedImageError) { @img.blend(@img2, '25%') }
243
287
  end
244
288
 
289
+ def test_blue_shift
290
+ assert_not_same(@img, @img.blue_shift)
291
+ assert_not_same(@img, @img.blue_shift(2.0))
292
+ assert_raise(TypeError) { @img.blue_shift('x') }
293
+ assert_raise(ArgumentError) { @img.blue_shift(2, 2) }
294
+ end
295
+
245
296
  def test_blur_channel
246
297
  assert_nothing_raised { @img.blur_channel }
247
298
  assert_nothing_raised { @img.blur_channel(1) }
@@ -271,6 +322,9 @@ class Image1_UT < Test::Unit::TestCase
271
322
  assert_nothing_raised { @img.black_threshold(50, 50) }
272
323
  assert_nothing_raised { @img.black_threshold(50, 50, 50) }
273
324
  assert_nothing_raised { @img.black_threshold(50, 50, 50, 50) }
325
+ assert_nothing_raised { @img.black_threshold(50, 50, 50, alpha: 50) }
326
+ assert_raise(ArgumentError) { @img.black_threshold(50, 50, 50, wrong: 50) }
327
+ assert_raise(ArgumentError) { @img.black_threshold(50, 50, 50, alpha: 50, extra: 50) }
274
328
  assert_raise(ArgumentError) { @img.black_threshold(50, 50, 50, 50, 50) }
275
329
  res = @img.black_threshold(50)
276
330
  assert_instance_of(Magick::Image, res)
@@ -285,6 +339,16 @@ class Image1_UT < Test::Unit::TestCase
285
339
  assert_raise(FreezeError) { @img.border!(2, 2, 'red') }
286
340
  end
287
341
 
342
+ def test_capture
343
+ # assert_nothing_raised { Magick::Image.capture }
344
+ # assert_nothing_raised { Magick::Image.capture(true) }
345
+ # assert_nothing_raised { Magick::Image.capture(true, true) }
346
+ # assert_nothing_raised { Magick::Image.capture(true, true, true) }
347
+ # assert_nothing_raised { Magick::Image.capture(true, true, true, true) }
348
+ # assert_nothing_raised { Magick::Image.capture(true, true, true, true, true) }
349
+ assert_raise(ArgumentError) { Magick::Image.capture(true, true, true, true, true, true) }
350
+ end
351
+
288
352
  def test_change_geometry
289
353
  assert_raise(ArgumentError) { @img.change_geometry('sss') }
290
354
  assert_raise(LocalJumpError) { @img.change_geometry('100x100') }
@@ -302,20 +366,10 @@ class Image1_UT < Test::Unit::TestCase
302
366
  end
303
367
 
304
368
  def test_channel
305
- assert_nothing_raised { @img.channel(Magick::RedChannel) }
306
- assert_nothing_raised { @img.channel(Magick::BlueChannel) }
307
- assert_nothing_raised { @img.channel(Magick::GreenChannel) }
308
- assert_nothing_raised { @img.channel(Magick::OpacityChannel) }
309
- assert_nothing_raised { @img.channel(Magick::MagentaChannel) }
310
- assert_nothing_raised { @img.channel(Magick::CyanChannel) }
311
- assert_nothing_raised { @img.channel(Magick::YellowChannel) }
312
- assert_nothing_raised { @img.channel(Magick::BlackChannel) }
313
- assert_nothing_raised { @img.channel(Magick::GrayChannel) }
314
- assert_nothing_raised { @img.channel(Magick::AlphaChannel) }
315
- assert_nothing_raised { @img.channel(Magick::DefaultChannels) }
316
- assert_nothing_raised { @img.channel(Magick::HueChannel) }
317
- assert_nothing_raised { @img.channel(Magick::LuminosityChannel) }
318
- assert_nothing_raised { @img.channel(Magick::SaturationChannel) }
369
+ Magick::ChannelType.values do |channel|
370
+ assert_nothing_raised { @img.channel(channel) }
371
+ end
372
+
319
373
  assert_instance_of(Magick::Image, @img.channel(Magick::RedChannel))
320
374
  assert_raise(TypeError) { @img.channel(2) }
321
375
  end
@@ -404,6 +458,7 @@ class Image1_UT < Test::Unit::TestCase
404
458
  assert_same(res, img)
405
459
  assert_nothing_raised { img.clut_channel(clut, Magick::RedChannel) }
406
460
  assert_nothing_raised { img.clut_channel(clut, Magick::RedChannel, Magick::BlueChannel) }
461
+ assert_raises(ArgumentError) { img.clut_channel }
407
462
  assert_raises(ArgumentError) { img.clut_channel(clut, 1, Magick::RedChannel) }
408
463
  end
409
464
 
@@ -485,6 +540,8 @@ class Image1_UT < Test::Unit::TestCase
485
540
  end
486
541
  pixel = Magick::Pixel.new(Magick::QuantumRange)
487
542
  assert_nothing_raised { pc_img.colormap(0, pixel) }
543
+ assert_raise(ArgumentError) { pc_img.colormap }
544
+ assert_raise(ArgumentError) { pc_img.colormap(0, pixel, Magick::BlackChannel) }
488
545
  assert_raise(TypeError) { pc_img.colormap(0, [2]) }
489
546
  pc_img.freeze
490
547
  assert_raise(FreezeError) { pc_img.colormap(0, 'red') }
@@ -537,13 +594,10 @@ class Image1_UT < Test::Unit::TestCase
537
594
  def test_compare_channel
538
595
  img1 = Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first
539
596
  img2 = Magick::Image.read(IMAGES_DIR + '/Button_1.gif').first
540
- assert_nothing_raised { img1.compare_channel(img2, Magick::MeanAbsoluteErrorMetric) }
541
- assert_nothing_raised { img1.compare_channel(img2, Magick::MeanSquaredErrorMetric) }
542
- assert_nothing_raised { img1.compare_channel(img2, Magick::PeakAbsoluteErrorMetric) }
543
- assert_nothing_raised { img1.compare_channel(img2, Magick::PeakSignalToNoiseRatioMetric) }
544
- assert_nothing_raised { img1.compare_channel(img2, Magick::RootMeanSquaredErrorMetric) }
545
- assert_nothing_raised { img1.compare_channel(img2, Magick::NormalizedCrossCorrelationErrorMetric) }
546
- assert_nothing_raised { img1.compare_channel(img2, Magick::FuzzErrorMetric) }
597
+
598
+ Magick::MetricType.values do |metric|
599
+ assert_nothing_raised { img1.compare_channel(img2, metric) }
600
+ end
547
601
  assert_raise(TypeError) { img1.compare_channel(img2, 2) }
548
602
  assert_raise(ArgumentError) { img1.compare_channel }
549
603
 
@@ -569,5 +623,5 @@ end
569
623
  if $PROGRAM_NAME == __FILE__
570
624
  IMAGES_DIR = '../doc/ex/images'
571
625
  FILES = Dir[IMAGES_DIR + '/Button_*.gif']
572
- Test::Unit::UI::Console::TestRunner.run(Image1UT) unless RUBY_VERSION[/^1\.9|^2/]
626
+ Test::Unit::UI::Console::TestRunner.run(Image1UT)
573
627
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rmagick'
4
4
  require 'test/unit'
5
- require 'test/unit/ui/console/testrunner' unless RUBY_VERSION[/^1\.9|^2/]
5
+ require 'test/unit/ui/console/testrunner'
6
6
 
7
7
  # TODO: improve exif tests - need a benchmark image with EXIF data
8
8
 
@@ -11,12 +11,42 @@ class Image2_UT < Test::Unit::TestCase
11
11
  @img = Magick::Image.new(20, 20)
12
12
  end
13
13
 
14
- def test_composite!
14
+ def test_composite
15
15
  img1 = Magick::Image.read(IMAGES_DIR + '/Button_0.gif').first
16
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
+
17
26
  assert_nothing_raised do
18
- res = img1.composite!(img2, Magick::NorthWestGravity, Magick::OverCompositeOp)
19
- assert_same(img1, res)
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
20
50
  end
21
51
  img1.freeze
22
52
  assert_raise(FreezeError) { img1.composite!(img2, Magick::NorthWestGravity, Magick::OverCompositeOp) }
@@ -33,6 +63,22 @@ class Image2_UT < Test::Unit::TestCase
33
63
  end
34
64
  end
35
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
+
36
82
  def test_composite_mathematics
37
83
  bg = Magick::Image.new(50, 50)
38
84
  fg = Magick::Image.new(50, 50) { self.background_color = 'black' }
@@ -66,6 +112,10 @@ class Image2_UT < Test::Unit::TestCase
66
112
  assert_nothing_raised { bg.composite_tiled(fg, Magick::RedChannel) }
67
113
  assert_nothing_raised { bg.composite_tiled(fg, Magick::RedChannel, Magick::GreenChannel) }
68
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
+
69
119
  fg.destroy!
70
120
  assert_raise(Magick::DestroyedImageError) { bg.composite_tiled(fg) }
71
121
  end
@@ -107,6 +157,17 @@ class Image2_UT < Test::Unit::TestCase
107
157
  assert_raise(ArgumentError) { @img.contrast_stretch_channel(25, 'x') }
108
158
  end
109
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
+
110
171
  def test_morphology_channel
111
172
  assert_raise(ArgumentError) { @img.morphology_channel }
112
173
  assert_raise(ArgumentError) { @img.morphology_channel(Magick::RedChannel) }
@@ -131,15 +192,19 @@ class Image2_UT < Test::Unit::TestCase
131
192
  assert_not_same(@img, res)
132
193
  end
133
194
  assert_raise(ArgumentError) { @img.convolve }
195
+ assert_raise(ArgumentError) { @img.convolve(0) }
196
+ assert_raise(ArgumentError) { @img.convolve(-1) }
134
197
  assert_raise(ArgumentError) { @img.convolve(order) }
135
198
  assert_raise(IndexError) { @img.convolve(5, kernel) }
136
199
  assert_raise(IndexError) { @img.convolve(order, 'x') }
137
200
  assert_raise(TypeError) { @img.convolve(3, [1.0, 1.0, 1.0, 1.0, 'x', 1.0, 1.0, 1.0, 1.0]) }
138
- assert_raise(Magick::ImageMagickError) { @img.convolve(-1, [1.0, 1.0, 1.0, 1.0]) }
201
+ assert_raise(ArgumentError) { @img.convolve(-1, [1.0, 1.0, 1.0, 1.0]) }
139
202
  end
140
203
 
141
204
  def test_convolve_channel
142
205
  assert_raise(ArgumentError) { @img.convolve_channel }
206
+ assert_raise(ArgumentError) { @img.convolve_channel(0) }
207
+ assert_raise(ArgumentError) { @img.convolve_channel(-1) }
143
208
  assert_raise(ArgumentError) { @img.convolve_channel(3) }
144
209
  kernel = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
145
210
  order = 3
@@ -173,16 +238,9 @@ class Image2_UT < Test::Unit::TestCase
173
238
  assert_instance_of(Magick::Image, res)
174
239
  assert_not_same(@img, res)
175
240
  end
176
- gravity = [
177
- Magick::NorthEastGravity,
178
- Magick::EastGravity,
179
- Magick::SouthWestGravity,
180
- Magick::SouthGravity,
181
- Magick::SouthEastGravity
182
- ]
183
241
 
184
242
  # 3-argument form
185
- gravity.each do |grav|
243
+ Magick::GravityType.values do |grav|
186
244
  assert_nothing_raised { @img.crop(grav, @img.columns / 2, @img.rows / 2) }
187
245
  end
188
246
  assert_raise(TypeError) { @img.crop(2, @img.columns / 2, @img.rows / 2) }
@@ -196,7 +254,7 @@ class Image2_UT < Test::Unit::TestCase
196
254
  assert_raise(TypeError) { @img.crop(0, 0, @img.columns / 2, @img.rows / 2, 2) }
197
255
 
198
256
  # 5-argument form
199
- gravity.each do |grav|
257
+ Magick::GravityType.values do |grav|
200
258
  assert_nothing_raised { @img.crop(grav, 0, 0, @img.columns / 2, @img.rows / 2) }
201
259
  end
202
260
 
@@ -239,6 +297,7 @@ class Image2_UT < Test::Unit::TestCase
239
297
  def test_define
240
298
  assert_nothing_raised { @img.define('deskew:auto-crop', 40) }
241
299
  assert_nothing_raised { @img.undefine('deskew:auto-crop') }
300
+ assert_nothing_raised { @img.define('deskew:auto-crop', nil) }
242
301
  end
243
302
 
244
303
  def test_deskew
@@ -266,11 +325,7 @@ class Image2_UT < Test::Unit::TestCase
266
325
  # ensure methods detect destroyed images
267
326
  def test_destroy
268
327
  methods = Magick::Image.instance_methods(false).sort
269
- methods -= if RUBY_VERSION[/^1\.9|^2/]
270
- %i[__display__ destroy! destroyed? inspect cur_image marshal_load]
271
- else
272
- %w[__display__ destroy! destroyed? inspect cur_image marshal_load]
273
- end
328
+ methods -= %i[__display__ destroy! destroyed? inspect cur_image marshal_load]
274
329
 
275
330
  assert_equal(false, @img.destroyed?)
276
331
  @img.destroy!
@@ -288,8 +343,6 @@ class Image2_UT < Test::Unit::TestCase
288
343
  assert_raises(Magick::DestroyedImageError) { @img.difference(other) }
289
344
  elsif method == 'channel_entropy' && IM_VERSION < Gem::Version.new('6.9')
290
345
  assert_raises(NotImplementedError) { @img.channel_entropy }
291
- elsif %w[morphology morphology_channel].include?(method)
292
- warn "skipped testing `#destroy` against `##{method}`"
293
346
  elsif method == 'get_iptc_dataset'
294
347
  assert_raises(Magick::DestroyedImageError) { @img.get_iptc_dataset('x') }
295
348
  elsif method == 'profile!'
@@ -396,6 +449,7 @@ class Image2_UT < Test::Unit::TestCase
396
449
  assert_nothing_raised { @img.dissolve(src, 0.50, 0.10, Magick::NorthEastGravity, 10) }
397
450
  assert_nothing_raised { @img.dissolve(src, 0.50, 0.10, Magick::NorthEastGravity, 10, 10) }
398
451
 
452
+ assert_raise(ArgumentError) { @img.dissolve }
399
453
  assert_raise(ArgumentError) { @img.dissolve(src, 'x') }
400
454
  assert_raise(ArgumentError) { @img.dissolve(src, 0.50, 'x') }
401
455
  assert_raise(TypeError) { @img.dissolve(src, 0.50, Magick::NorthEastGravity, 'x') }
@@ -412,9 +466,11 @@ class Image2_UT < Test::Unit::TestCase
412
466
  assert_nothing_raised { @img.distort(Magick::BilinearDistortion, [7, 40, 4, 30, 4, 124, 4, 123, 85, 122, 100, 123, 85, 2, 100, 30]) }
413
467
  assert_nothing_raised { @img.distort(Magick::PerspectiveDistortion, [7, 40, 4, 30, 4, 124, 4, 123, 85, 122, 100, 123, 85, 2, 100, 30]) }
414
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) }
415
470
  assert_raise(ArgumentError) { @img.distort }
416
471
  assert_raise(ArgumentError) { @img.distort(Magick::AffineDistortion) }
417
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']) }
418
474
  end
419
475
 
420
476
  def test_distortion_channel
@@ -425,7 +481,7 @@ class Image2_UT < Test::Unit::TestCase
425
481
  end
426
482
  assert_nothing_raised { @img.distortion_channel(@img, Magick::MeanSquaredErrorMetric) }
427
483
  assert_nothing_raised { @img.distortion_channel(@img, Magick::PeakAbsoluteErrorMetric) }
428
- assert_nothing_raised { @img.distortion_channel(@img, Magick::PeakSignalToNoiseRatioMetric) }
484
+ assert_nothing_raised { @img.distortion_channel(@img, Magick::PeakSignalToNoiseRatioErrorMetric) }
429
485
  assert_nothing_raised { @img.distortion_channel(@img, Magick::RootMeanSquaredErrorMetric) }
430
486
  assert_nothing_raised { @img.distortion_channel(@img, Magick::MeanSquaredErrorMetric, Magick::RedChannel, Magick:: BlueChannel) }
431
487
  assert_nothing_raised { @img.distortion_channel(@img, Magick::NormalizedCrossCorrelationErrorMetric) }
@@ -440,6 +496,18 @@ class Image2_UT < Test::Unit::TestCase
440
496
  assert_raise(Magick::DestroyedImageError) { @img.distortion_channel(img, Magick::MeanSquaredErrorMetric) }
441
497
  end
442
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
+
443
511
  def test_dup
444
512
  assert_nothing_raised do
445
513
  ditto = @img.dup
@@ -620,8 +688,11 @@ class Image2_UT < Test::Unit::TestCase
620
688
  assert_equal(40, res.rows)
621
689
  assert_nothing_raised { @img.extent(40, 40, 5) }
622
690
  assert_nothing_raised { @img.extent(40, 40, 5, 5) }
691
+ assert_raises(ArgumentError) { @img.extent(-40) }
623
692
  assert_raises(ArgumentError) { @img.extent(-40, 40) }
624
693
  assert_raises(ArgumentError) { @img.extent(40, -40) }
694
+ assert_raises(ArgumentError) { @img.extent(40, 40, 5, 5, 0) }
695
+ assert_raises(ArgumentError) { @img.extent(0, 0, 5, 5) }
625
696
  assert_raises(TypeError) { @img.extent('x', 40) }
626
697
  assert_raises(TypeError) { @img.extent(40, 'x') }
627
698
  assert_raises(TypeError) { @img.extent(40, 40, 'x') }
@@ -714,6 +785,7 @@ class Image2_UT < Test::Unit::TestCase
714
785
  red = Magick::Pixel.new(Magick::QuantumRange)
715
786
  assert_nothing_raised { @img.frame(50, 50, 25, 25, 6, 6, red) }
716
787
  assert_raise(TypeError) { @img.frame(50, 50, 25, 25, 6, 6, 2) }
788
+ assert_raise(ArgumentError) { @img.frame(50, 50, 25, 25, 6, 6, red, 2) }
717
789
  end
718
790
 
719
791
  def test_fx
@@ -862,6 +934,7 @@ class Image2_UT < Test::Unit::TestCase
862
934
  assert_instance_of(Magick::Image, res)
863
935
  assert_not_same(@img, res)
864
936
  end
937
+ assert_raise(ArgumentError) { @img.implode(0.5, 0.5) }
865
938
  end
866
939
 
867
940
  def test_import_pixels
@@ -917,6 +990,12 @@ class Image2_UT < Test::Unit::TestCase
917
990
  # Ensure that level2 uses new arg order
918
991
  img1 = @img.level2(10, 200, 2)
919
992
  assert_equal(img2, img1)
993
+
994
+ assert_nothing_raised { @img.level2 }
995
+ assert_nothing_raised { @img.level2(10) }
996
+ assert_nothing_raised { @img.level2(10, 10) }
997
+ assert_nothing_raised { @img.level2(10, 10, 10) }
998
+ assert_raise(ArgumentError) { @img.level2(10, 10, 10, 10) }
920
999
  end
921
1000
 
922
1001
  def test_level_channel
@@ -938,7 +1017,7 @@ class Image2_UT < Test::Unit::TestCase
938
1017
  assert_raise(TypeError) { @img.level_channel(Magick::RedChannel, 0.0, 1.0, 'x') }
939
1018
  end
940
1019
 
941
- def level_colors
1020
+ def test_level_colors
942
1021
  res = nil
943
1022
  assert_nothing_raised do
944
1023
  res = @img.level_colors
@@ -947,19 +1026,17 @@ class Image2_UT < Test::Unit::TestCase
947
1026
  assert_not_same(@img, res)
948
1027
 
949
1028
  assert_nothing_raised { @img.level_colors('black') }
950
- assert_nothing_raised { @img.level_colors('black', Pixel.new(0, 0, 0)) }
951
- assert_nothing_raised { @img.level_colors(Pixel.new(0, 0, 0), Pixel.new(Magick::QuantumRange, Magick::QuantumRange, Magick::QuantumRange)) }
1029
+ assert_nothing_raised { @img.level_colors('black', Magick::Pixel.new(0, 0, 0)) }
1030
+ assert_nothing_raised { @img.level_colors(Magick::Pixel.new(0, 0, 0), Magick::Pixel.new(Magick::QuantumRange, Magick::QuantumRange, Magick::QuantumRange)) }
952
1031
  assert_nothing_raised { @img.level_colors('black', 'white') }
953
1032
  assert_nothing_raised { @img.level_colors('black', 'white', false) }
954
- # too many arguments
955
- assert_raises(ArgumentError) { @img.level_colors('black', 'white', false, 1) }
956
- # not a pixel or a string
957
- assert_raises(ArgumentError) { @img.level_colors([]) }
958
- # not a color name
1033
+
1034
+ assert_raises(TypeError) { @img.level_colors('black', 'white', false, 1) }
1035
+ assert_raises(TypeError) { @img.level_colors([]) }
959
1036
  assert_raises(ArgumentError) { @img.level_colors('xxx') }
960
1037
  end
961
1038
 
962
- def levelize_channel
1039
+ def test_levelize_channel
963
1040
  res = nil
964
1041
  assert_nothing_raised do
965
1042
  res = @img.levelize_channel(0, Magick::QuantumRange)
@@ -967,12 +1044,13 @@ class Image2_UT < Test::Unit::TestCase
967
1044
  assert_instance_of(Magick::Image, res)
968
1045
  assert_not_same(@img, res)
969
1046
 
1047
+ assert_nothing_raised { @img.levelize_channel(0) }
1048
+ assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange) }
970
1049
  assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange, 0.5) }
971
1050
  assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange, 0.5, Magick::RedChannel) }
972
1051
  assert_nothing_raised { @img.levelize_channel(0, Magick::QuantumRange, 0.5, Magick::RedChannel, Magick::BlueChannel) }
973
- # too many arguments
974
- assert_raise(ArgumentError) { @img.levelize_channel(0, Magick::QuantumRange, 0.5, 1, Magick::RedChannel) }
975
- # not enough arguments
1052
+
1053
+ assert_raise(TypeError) { @img.levelize_channel(0, Magick::QuantumRange, 0.5, 1, Magick::RedChannel) }
976
1054
  assert_raise(ArgumentError) { @img.levelize_channel }
977
1055
  end
978
1056
 
@@ -1044,6 +1122,7 @@ class Image2_UT < Test::Unit::TestCase
1044
1122
  assert_equal(20, res.columns)
1045
1123
  assert_equal(20, res.rows)
1046
1124
 
1125
+ assert_raise(ArgumentError) { @img.mask(cimg, 'x') }
1047
1126
  # mask expects an Image and calls `cur_image'
1048
1127
  assert_raise(NoMethodError) { @img.mask = 2 }
1049
1128
 
@@ -1072,8 +1151,16 @@ class Image2_UT < Test::Unit::TestCase
1072
1151
  assert_not_same(@img, res)
1073
1152
  end
1074
1153
  assert_nothing_raised { @img.matte_floodfill(@img.columns, @img.rows) }
1154
+
1155
+ Magick::PaintMethod.values do |method|
1156
+ next if [Magick::FillToBorderMethod, Magick::FloodfillMethod].include?(method)
1157
+
1158
+ assert_raise(ArgumentError) { @img.matte_flood_fill('blue', Magick::TransparentAlpha, @img.columns, @img.rows, method) }
1159
+ end
1075
1160
  assert_raise(ArgumentError) { @img.matte_floodfill(@img.columns + 1, @img.rows) }
1076
1161
  assert_raise(ArgumentError) { @img.matte_floodfill(@img.columns, @img.rows + 1) }
1162
+ assert_nothing_raised { @img.matte_flood_fill('blue', @img.columns, @img.rows, Magick::FloodfillMethod, alpha: Magick::TransparentAlpha) }
1163
+ assert_raise(ArgumentError) { @img.matte_flood_fill('blue', @img.columns, @img.rows, Magick::FloodfillMethod, wrong: Magick::TransparentAlpha) }
1077
1164
  end
1078
1165
 
1079
1166
  def test_matte_replace
@@ -1122,6 +1209,7 @@ class Image2_UT < Test::Unit::TestCase
1122
1209
  assert_nothing_raised { @img.modulate(0.5) }
1123
1210
  assert_nothing_raised { @img.modulate(0.5, 0.5) }
1124
1211
  assert_nothing_raised { @img.modulate(0.5, 0.5, 0.5) }
1212
+ assert_raise(ArgumentError) { @img.modulate(0.0, 0.5, 0.5) }
1125
1213
  assert_raise(ArgumentError) { @img.modulate(0.5, 0.5, 0.5, 0.5) }
1126
1214
  assert_raise(TypeError) { @img.modulate('x', 0.5, 0.5) }
1127
1215
  assert_raise(TypeError) { @img.modulate(0.5, 'x', 0.5) }
@@ -1225,6 +1313,7 @@ class Image2_UT < Test::Unit::TestCase
1225
1313
  assert_raise(TypeError) { @img.opaque_channel('red', 'blue', true, 50, 50) }
1226
1314
  assert_raise(TypeError) { @img.opaque_channel('red', 'blue', true, []) }
1227
1315
  assert_raise(ArgumentError) { @img.opaque_channel('red') }
1316
+ assert_raise(ArgumentError) { @img.opaque_channel('red', 'blue', true, -0.1) }
1228
1317
  assert_raise(TypeError) { @img.opaque_channel('red', []) }
1229
1318
  end
1230
1319
 
@@ -1232,7 +1321,7 @@ class Image2_UT < Test::Unit::TestCase
1232
1321
  assert_nothing_raised do
1233
1322
  assert_block { @img.opaque? }
1234
1323
  end
1235
- @img.opacity = Magick::TransparentOpacity
1324
+ @img.alpha(Magick::TransparentAlphaChannel)
1236
1325
  assert_block { !@img.opaque? }
1237
1326
  end
1238
1327
 
@@ -1242,6 +1331,7 @@ class Image2_UT < Test::Unit::TestCase
1242
1331
  assert_instance_of(Magick::Image, res)
1243
1332
  assert_not_same(@img, res)
1244
1333
  end
1334
+ assert_nothing_raised { @img.ordered_dither('3x3') }
1245
1335
  assert_nothing_raised { @img.ordered_dither(2) }
1246
1336
  assert_nothing_raised { @img.ordered_dither(3) }
1247
1337
  assert_nothing_raised { @img.ordered_dither(4) }
@@ -1256,8 +1346,15 @@ class Image2_UT < Test::Unit::TestCase
1256
1346
  assert_instance_of(Magick::Image, res)
1257
1347
  assert_not_same(res, @img)
1258
1348
  assert_nothing_raised { @img.paint_transparent('red', Magick::TransparentOpacity) }
1349
+ assert_nothing_raised { @img.paint_transparent('red', alpha: Magick::TransparentAlpha) }
1350
+ assert_raise(ArgumentError) { @img.paint_transparent('red', wrong: Magick::TransparentAlpha) }
1259
1351
  assert_nothing_raised { @img.paint_transparent('red', Magick::TransparentOpacity, true) }
1352
+ assert_nothing_raised { @img.paint_transparent('red', true, alpha: Magick::TransparentAlpha) }
1353
+ assert_raise(ArgumentError) { @img.paint_transparent('red', true, wrong: Magick::TransparentAlpha) }
1354
+ assert_raise(ArgumentError) { @img.paint_transparent('red', true, alpha: Magick::TransparentAlpha, extra: Magick::TransparentAlpha) }
1260
1355
  assert_nothing_raised { @img.paint_transparent('red', Magick::TransparentOpacity, true, 50) }
1356
+ assert_nothing_raised { @img.paint_transparent('red', true, 50, alpha: Magick::TransparentAlpha) }
1357
+ assert_raise(ArgumentError) { @img.paint_transparent('red', true, 50, wrong: Magick::TransparentAlpha) }
1261
1358
 
1262
1359
  # Too many arguments
1263
1360
  assert_raise(ArgumentError) { @img.paint_transparent('red', Magick::TransparentOpacity, true, 50, 50) }
@@ -1294,6 +1391,12 @@ class Image2_UT < Test::Unit::TestCase
1294
1391
  # If args are out-of-bounds return the background color
1295
1392
  img = Magick::Image.new(10, 10) { self.background_color = 'blue' }
1296
1393
  assert_equal('blue', img.pixel_color(50, 50).to_color)
1394
+
1395
+ assert_nothing_raised do
1396
+ @img.class_type = Magick::PseudoClass
1397
+ res = @img.pixel_color(0, 0, 'red')
1398
+ assert_equal('blue', res.to_color)
1399
+ end
1297
1400
  end
1298
1401
 
1299
1402
  def test_polaroid
@@ -1301,6 +1404,7 @@ class Image2_UT < Test::Unit::TestCase
1301
1404
  assert_nothing_raised { @img.polaroid(5) }
1302
1405
  assert_instance_of(Magick::Image, @img.polaroid)
1303
1406
  assert_raises(TypeError) { @img.polaroid('x') }
1407
+ assert_raises(ArgumentError) { @img.polaroid(5, 'x') }
1304
1408
  end
1305
1409
 
1306
1410
  def test_posterize
@@ -1318,5 +1422,5 @@ end
1318
1422
  if $PROGRAM_NAME == __FILE__
1319
1423
  IMAGES_DIR = '../doc/ex/images'
1320
1424
  FILES = Dir[IMAGES_DIR + '/Button_*.gif']
1321
- Test::Unit::UI::Console::TestRunner.run(Image2UT) unless RUBY_VERSION[/^1\.9|^2/]
1425
+ Test::Unit::UI::Console::TestRunner.run(Image2UT)
1322
1426
  end