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,61 +2,9 @@
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
  require 'fileutils'
7
7
 
8
- ColorspaceTypes = [
9
- Magick::RGBColorspace,
10
- Magick::GRAYColorspace,
11
- Magick::TransparentColorspace,
12
- Magick::OHTAColorspace,
13
- Magick::LabColorspace,
14
- Magick::XYZColorspace,
15
- Magick::YCbCrColorspace,
16
- Magick::YCCColorspace,
17
- Magick::YIQColorspace,
18
- Magick::YPbPrColorspace,
19
- Magick::YUVColorspace,
20
- Magick::CMYKColorspace,
21
- Magick::SRGBColorspace,
22
- Magick::HSLColorspace,
23
- Magick::HWBColorspace,
24
- Magick::HSBColorspace,
25
- Magick::Rec601LumaColorspace,
26
- Magick::Rec601YCbCrColorspace,
27
- Magick::Rec709LumaColorspace,
28
- Magick::Rec709YCbCrColorspace,
29
- Magick::LogColorspace,
30
- Magick::CMYColorspace
31
- ]
32
-
33
- Filters = [
34
- Magick::PointFilter,
35
- Magick::BoxFilter,
36
- Magick::TriangleFilter,
37
- Magick::HermiteFilter,
38
- Magick::HanningFilter,
39
- Magick::HammingFilter,
40
- Magick::BlackmanFilter,
41
- Magick::GaussianFilter,
42
- Magick::QuadraticFilter,
43
- Magick::CubicFilter,
44
- Magick::CatromFilter,
45
- Magick::MitchellFilter,
46
- Magick::LanczosFilter,
47
- Magick::BesselFilter,
48
- Magick::SincFilter,
49
- Magick::JincFilter,
50
- Magick::SincFastFilter,
51
- Magick::LanczosSharpFilter,
52
- Magick::Lanczos2Filter,
53
- Magick::Lanczos2SharpFilter,
54
- Magick::RobidouxFilter,
55
- Magick::RobidouxSharpFilter,
56
- Magick::CosineFilter,
57
- Magick::SplineFilter
58
- ]
59
-
60
8
  class Image3_UT < Test::Unit::TestCase
61
9
  def setup
62
10
  @img = Magick::Image.new(20, 20)
@@ -86,7 +34,7 @@ class Image3_UT < Test::Unit::TestCase
86
34
  assert_instance_of(Magick::Image, res)
87
35
  end
88
36
 
89
- ColorspaceTypes.each do |cs|
37
+ Magick::ColorspaceType.values do |cs|
90
38
  assert_nothing_raised { @img.quantize(256, cs) }
91
39
  end
92
40
  assert_nothing_raised { @img.quantize(256, Magick::RGBColorspace, false) }
@@ -99,45 +47,15 @@ class Image3_UT < Test::Unit::TestCase
99
47
  assert_raise(TypeError) { @img.quantize('x') }
100
48
  assert_raise(TypeError) { @img.quantize(16, 2) }
101
49
  assert_raise(TypeError) { @img.quantize(16, Magick::RGBColorspace, false, 'x') }
50
+ assert_raise(ArgumentError) { @img.quantize(256, Magick::RGBColorspace, true, 2, true, true) }
102
51
  end
103
52
 
104
53
  def test_quantum_operator
105
- quantum_ops = [
106
- Magick::AddQuantumOperator,
107
- Magick::AndQuantumOperator,
108
- Magick::DivideQuantumOperator,
109
- Magick::LShiftQuantumOperator,
110
- Magick::MultiplyQuantumOperator,
111
- Magick::OrQuantumOperator,
112
- Magick::RShiftQuantumOperator,
113
- Magick::SubtractQuantumOperator,
114
- Magick::XorQuantumOperator,
115
- Magick::PowQuantumOperator,
116
- Magick::LogQuantumOperator,
117
- Magick::ThresholdQuantumOperator,
118
- Magick::ThresholdBlackQuantumOperator,
119
- Magick::ThresholdWhiteQuantumOperator,
120
- Magick::GaussianNoiseQuantumOperator,
121
- Magick::ImpulseNoiseQuantumOperator,
122
- Magick::LaplacianNoiseQuantumOperator,
123
- Magick::MultiplicativeNoiseQuantumOperator,
124
- Magick::PoissonNoiseQuantumOperator,
125
- Magick::UniformNoiseQuantumOperator,
126
- Magick::CosineQuantumOperator,
127
- Magick::SineQuantumOperator,
128
- Magick::AddModulusQuantumOperator,
129
- Magick::MeanQuantumOperator,
130
- Magick::AbsQuantumOperator,
131
- Magick::ExponentialQuantumOperator,
132
- Magick::MedianQuantumOperator,
133
- Magick::SumQuantumOperator
134
- ]
135
-
136
54
  assert_nothing_raised do
137
55
  res = @img.quantum_operator(Magick::AddQuantumOperator, 2)
138
56
  assert_instance_of(Magick::Image, res)
139
57
  end
140
- quantum_ops.each do |op|
58
+ Magick::QuantumExpressionOperator.values do |op|
141
59
  assert_nothing_raised { @img.quantum_operator(op, 2) }
142
60
  end
143
61
  assert_nothing_raised { @img.quantum_operator(Magick::AddQuantumOperator, 2, Magick::RedChannel) }
@@ -193,7 +111,9 @@ class Image3_UT < Test::Unit::TestCase
193
111
  end
194
112
 
195
113
  def test_recolor
114
+ assert_nothing_raised { @img.recolor([1, 1, 2, 1]) }
196
115
  assert_raise(TypeError) { @img.recolor('x') }
116
+ assert_raise(TypeError) { @img.recolor([1, 1, 'x', 1]) }
197
117
  end
198
118
 
199
119
  def test_reduce_noise
@@ -242,7 +162,7 @@ class Image3_UT < Test::Unit::TestCase
242
162
  assert_equal(240.0, girl.x_resolution)
243
163
  assert_equal(240.0, girl.y_resolution)
244
164
 
245
- Filters.each do |filter|
165
+ Magick::FilterType.values do |filter|
246
166
  assert_nothing_raised { @img.resample(50, 50, filter) }
247
167
  end
248
168
  assert_nothing_raised { @img.resample(50, 50, Magick::PointFilter, 2.0) }
@@ -272,7 +192,7 @@ class Image3_UT < Test::Unit::TestCase
272
192
  end
273
193
  assert_nothing_raised { @img.resize(50, 50) }
274
194
 
275
- Filters.each do |filter|
195
+ Magick::FilterType.values do |filter|
276
196
  assert_nothing_raised { @img.resize(50, 50, filter) }
277
197
  end
278
198
  assert_nothing_raised { @img.resize(50, 50, Magick::PointFilter, 2.0) }
@@ -280,6 +200,9 @@ class Image3_UT < Test::Unit::TestCase
280
200
  assert_raise(TypeError) { @img.resize(50, 'x') }
281
201
  assert_raise(TypeError) { @img.resize(50, 50, 2) }
282
202
  assert_raise(TypeError) { @img.resize(50, 50, Magick::CubicFilter, 'x') }
203
+ assert_raise(ArgumentError) { @img.resize(-1.0) }
204
+ assert_raise(ArgumentError) { @img.resize(0, 50) }
205
+ assert_raise(ArgumentError) { @img.resize(50, 0) }
283
206
  assert_raise(ArgumentError) { @img.resize(50, 50, Magick::SincFilter, 2.0, 'x') }
284
207
  assert_raise(ArgumentError) { @img.resize }
285
208
  end
@@ -428,6 +351,9 @@ class Image3_UT < Test::Unit::TestCase
428
351
  end
429
352
  assert_nothing_raised { @img.sample(2) }
430
353
  assert_raise(ArgumentError) { @img.sample }
354
+ assert_raise(ArgumentError) { @img.sample(0) }
355
+ assert_raise(ArgumentError) { @img.sample(0, 25) }
356
+ assert_raise(ArgumentError) { @img.sample(25, 0) }
431
357
  assert_raise(ArgumentError) { @img.sample(25, 25, 25) }
432
358
  assert_raise(TypeError) { @img.sample('x') }
433
359
  assert_raise(TypeError) { @img.sample(10, 'x') }
@@ -470,17 +396,17 @@ class Image3_UT < Test::Unit::TestCase
470
396
  end
471
397
 
472
398
  # Don't test colorspaces that require PsuedoColor images
473
- (ColorspaceTypes - [Magick::OHTAColorspace,
474
- Magick::LabColorspace,
475
- Magick::XYZColorspace,
476
- Magick::YCbCrColorspace,
477
- Magick::YCCColorspace,
478
- Magick::YIQColorspace,
479
- Magick::YPbPrColorspace,
480
- Magick::YUVColorspace,
481
- Magick::Rec601YCbCrColorspace,
482
- Magick::Rec709YCbCrColorspace,
483
- Magick::LogColorspace]).each do |cs|
399
+ (Magick::ColorspaceType.values - [Magick::OHTAColorspace,
400
+ Magick::LabColorspace,
401
+ Magick::XYZColorspace,
402
+ Magick::YCbCrColorspace,
403
+ Magick::YCCColorspace,
404
+ Magick::YIQColorspace,
405
+ Magick::YPbPrColorspace,
406
+ Magick::YUVColorspace,
407
+ Magick::Rec601YCbCrColorspace,
408
+ Magick::Rec709YCbCrColorspace,
409
+ Magick::LogColorspace]).each do |cs|
484
410
  assert_nothing_raised { @img.segment(cs) }
485
411
  end
486
412
 
@@ -505,8 +431,15 @@ class Image3_UT < Test::Unit::TestCase
505
431
  assert_nothing_raised { @img.selective_blur_channel(0, 1, '10%', Magick::RedChannel) }
506
432
  assert_nothing_raised { @img.selective_blur_channel(0, 1, '10%', Magick::RedChannel, Magick::BlueChannel) }
507
433
  assert_nothing_raised { @img.selective_blur_channel(0, 1, '10%', Magick::RedChannel, Magick::BlueChannel, Magick::GreenChannel) }
508
- # not enough arguments
434
+
509
435
  assert_raise(ArgumentError) { @img.selective_blur_channel(0, 1) }
436
+ assert_raise(TypeError) { @img.selective_blur_channel(0, 1, 0.1, '10%') }
437
+ end
438
+
439
+ def test_separate
440
+ assert_instance_of(Magick::ImageList, @img.separate)
441
+ assert_instance_of(Magick::ImageList, @img.separate(Magick::BlueChannel))
442
+ assert_raise(TypeError) { @img.separate('x') }
510
443
  end
511
444
 
512
445
  def test_sepiatone
@@ -520,23 +453,7 @@ class Image3_UT < Test::Unit::TestCase
520
453
  end
521
454
 
522
455
  def test_set_channel_depth
523
- channels = [
524
- Magick::RedChannel,
525
- Magick::GrayChannel,
526
- Magick::CyanChannel,
527
- Magick::GreenChannel,
528
- Magick::MagentaChannel,
529
- Magick::BlueChannel,
530
- Magick::YellowChannel,
531
- # Magick::AlphaChannel,
532
- Magick::OpacityChannel,
533
- Magick::MatteChannel,
534
- Magick::BlackChannel,
535
- Magick::IndexChannel,
536
- Magick::AllChannels
537
- ]
538
-
539
- channels.each do |ch|
456
+ Magick::ChannelType.values do |ch|
540
457
  assert_nothing_raised { @img.set_channel_depth(ch, 8) }
541
458
  end
542
459
  end
@@ -656,6 +573,8 @@ class Image3_UT < Test::Unit::TestCase
656
573
  assert_instance_of(Magick::Image, res)
657
574
  end
658
575
  assert_nothing_raised { @img.solarize(100) }
576
+ assert_raise(ArgumentError) { @img.solarize(-100) }
577
+ assert_raise(ArgumentError) { @img.solarize(Magick::QuantumRange + 1) }
659
578
  assert_raise(ArgumentError) { @img.solarize(100, 2) }
660
579
  assert_raise(TypeError) { @img.solarize('x') }
661
580
  end
@@ -687,6 +606,9 @@ class Image3_UT < Test::Unit::TestCase
687
606
  args.shift
688
607
  args.shift # too few
689
608
  assert_raise(ArgumentError) { img.sparse_color(Magick::VoronoiColorInterpolate, *args) }
609
+
610
+ args = [30, 10, 'red', 10, 80, 'blue', 70, 60, 'lime', 80, '20', 'yellow']
611
+ assert_raise(TypeError) { img.sparse_color(Magick::VoronoiColorInterpolate, *args) }
690
612
  end
691
613
 
692
614
  def test_splice
@@ -779,6 +701,14 @@ class Image3_UT < Test::Unit::TestCase
779
701
  assert_instance_of(Magick::Image, res)
780
702
  end
781
703
  assert_raise(NoMethodError) { @img.texture_fill_to_border(@img.columns / 2, @img.rows / 2, 'x') }
704
+ assert_raise(ArgumentError) { @img.texture_fill_to_border(@img.columns * 2, @img.rows, texture) }
705
+ assert_raise(ArgumentError) { @img.texture_fill_to_border(@img.columns, @img.rows * 2, texture) }
706
+
707
+ Magick::PaintMethod.values do |method|
708
+ next if [Magick::FillToBorderMethod, Magick::FloodfillMethod].include?(method)
709
+
710
+ assert_raise(ArgumentError) { @img.texture_flood_fill('blue', texture, @img.columns, @img.rows, method) }
711
+ end
782
712
  end
783
713
 
784
714
  def test_texture_floodfill
@@ -806,9 +736,21 @@ class Image3_UT < Test::Unit::TestCase
806
736
  end
807
737
  assert_nothing_raised { @img.thumbnail(2) }
808
738
  assert_raise(ArgumentError) { @img.thumbnail }
739
+ assert_raise(ArgumentError) { @img.thumbnail(-1.0) }
740
+ assert_raise(ArgumentError) { @img.thumbnail(0, 25) }
741
+ assert_raise(ArgumentError) { @img.thumbnail(25, 0) }
809
742
  assert_raise(ArgumentError) { @img.thumbnail(25, 25, 25) }
810
743
  assert_raise(TypeError) { @img.thumbnail('x') }
811
744
  assert_raise(TypeError) { @img.thumbnail(10, 'x') }
745
+
746
+ girl = Magick::Image.read(IMAGES_DIR + '/Flower_Hat.jpg').first
747
+ new_img = girl.thumbnail(200, 200)
748
+ assert_equal(160, new_img.columns)
749
+ assert_equal(200, new_img.rows)
750
+
751
+ new_img = girl.thumbnail(2)
752
+ assert_equal(400, new_img.columns)
753
+ assert_equal(500, new_img.rows)
812
754
  end
813
755
 
814
756
  def test_thumbnail!
@@ -833,6 +775,10 @@ class Image3_UT < Test::Unit::TestCase
833
775
  assert_raise(ArgumentError) { @img.tint('red') }
834
776
  assert_raise(ArgumentError) { @img.tint('red', 1.0, 1.0, 1.0, 1.0, 1.0) }
835
777
  assert_raise(ArgumentError) { @img.tint('x', 1.0) }
778
+ assert_raise(ArgumentError) { @img.tint('red', -1.0, 1.0, 1.0, 1.0) }
779
+ assert_raise(ArgumentError) { @img.tint('red', 1.0, -1.0, 1.0, 1.0) }
780
+ assert_raise(ArgumentError) { @img.tint('red', 1.0, 1.0, -1.0, 1.0) }
781
+ assert_raise(ArgumentError) { @img.tint('red', 1.0, 1.0, 1.0, -1.0) }
836
782
  assert_raise(TypeError) { @img.tint(1.0, 1.0) }
837
783
  assert_raise(TypeError) { @img.tint('red', 'green') }
838
784
  assert_raise(TypeError) { @img.tint('red', 1.0, 'green') }
@@ -864,11 +810,27 @@ class Image3_UT < Test::Unit::TestCase
864
810
  pixel = Magick::Pixel.new
865
811
  assert_nothing_raised { @img.transparent(pixel) }
866
812
  assert_nothing_raised { @img.transparent('white', Magick::TransparentOpacity) }
813
+ assert_nothing_raised { @img.transparent('white', alpha: Magick::TransparentAlpha) }
814
+ assert_raise(ArgumentError) { @img.transparent('white', wrong: Magick::TransparentAlpha) }
815
+ assert_raise(ArgumentError) { @img.transparent('white', alpha: Magick::TransparentAlpha, extra: Magick::TransparentAlpha) }
867
816
  assert_raise(ArgumentError) { @img.transparent('white', Magick::TransparentOpacity, 2) }
868
817
  assert_nothing_raised { @img.transparent('white', Magick::QuantumRange / 2) }
869
818
  assert_raise(TypeError) { @img.transparent(2) }
870
819
  end
871
820
 
821
+ def test_transparent_chroma
822
+ assert_instance_of(Magick::Image, @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange)))
823
+ assert_nothing_raised { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange)) }
824
+ assert_nothing_raised { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), Magick::TransparentOpacity) }
825
+ assert_nothing_raised { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), alpha: Magick::TransparentAlpha) }
826
+ assert_raise(ArgumentError) { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), wrong: Magick::TransparentAlpha) }
827
+ assert_nothing_raised { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), Magick::TransparentOpacity, true) }
828
+ assert_nothing_raised { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), Magick::TransparentOpacity, false) }
829
+ assert_nothing_raised { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), false, alpha: Magick::TransparentAlpha) }
830
+ assert_raise(ArgumentError) { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), false, wrong: Magick::TransparentAlpha) }
831
+ assert_raise(ArgumentError) { @img.transparent_chroma('white', Magick::Pixel.new(Magick::QuantumRange), false, alpha: Magick::TransparentAlpha, extra: Magick::TransparentAlpha) }
832
+ end
833
+
872
834
  def test_transpose
873
835
  assert_nothing_raised do
874
836
  res = @img.transpose
@@ -899,13 +861,19 @@ class Image3_UT < Test::Unit::TestCase
899
861
  # Can't use the default image because it's a solid color
900
862
  hat = Magick::Image.read(IMAGES_DIR + '/Flower_Hat.jpg').first
901
863
  assert_nothing_raised do
902
- res = hat.trim
903
- assert_instance_of(Magick::Image, res)
864
+ assert_instance_of(Magick::Image, hat.trim)
865
+ assert_instance_of(Magick::Image, hat.trim(10))
904
866
  end
867
+ assert_raise(ArgumentError) { hat.trim(10, 10) }
868
+
905
869
  assert_nothing_raised do
906
870
  res = hat.trim!
907
871
  assert_same(hat, res)
872
+
873
+ res = hat.trim!(10)
874
+ assert_same(hat, res)
908
875
  end
876
+ assert_raise(ArgumentError) { hat.trim!(10, 10) }
909
877
  end
910
878
 
911
879
  def test_unique_colors
@@ -928,6 +896,10 @@ class Image3_UT < Test::Unit::TestCase
928
896
  assert_nothing_raised { @img.unsharp_mask(2.0, 1.0, 0.50) }
929
897
  assert_nothing_raised { @img.unsharp_mask(2.0, 1.0, 0.50, 0.10) }
930
898
  assert_raise(ArgumentError) { @img.unsharp_mask(2.0, 1.0, 0.50, 0.10, 2) }
899
+ assert_raise(ArgumentError) { @img.unsharp_mask(-2.0, 1.0, 0.50, 0.10) }
900
+ assert_raise(ArgumentError) { @img.unsharp_mask(2.0, 0.0, 0.50, 0.10) }
901
+ assert_raise(ArgumentError) { @img.unsharp_mask(2.0, 1.0, 0.0, 0.10) }
902
+ assert_raise(ArgumentError) { @img.unsharp_mask(2.0, 1.0, 0.01, -0.10) }
931
903
  assert_raise(TypeError) { @img.unsharp_mask('x') }
932
904
  assert_raise(TypeError) { @img.unsharp_mask(2.0, 'x') }
933
905
  assert_raise(TypeError) { @img.unsharp_mask(2.0, 1.0, 'x') }
@@ -1000,8 +972,10 @@ class Image3_UT < Test::Unit::TestCase
1000
972
  assert_nothing_raised { @img.watermark(mark, 0.50, 0.50, Magick::NorthEastGravity, 10) }
1001
973
  assert_nothing_raised { @img.watermark(mark, 0.50, 0.50, Magick::NorthEastGravity, 10, 10) }
1002
974
 
975
+ assert_raise(ArgumentError) { @img.watermark }
1003
976
  assert_raise(ArgumentError) { @img.watermark(mark, 'x') }
1004
977
  assert_raise(ArgumentError) { @img.watermark(mark, 0.50, 'x') }
978
+ assert_raise(ArgumentError) { @img.watermark(mark, 0.50, '1500%') }
1005
979
  assert_raise(TypeError) { @img.watermark(mark, 0.50, 0.50, 'x') }
1006
980
  assert_raise(TypeError) { @img.watermark(mark, 0.50, 0.50, Magick::NorthEastGravity, 'x') }
1007
981
  assert_raise(TypeError) { @img.watermark(mark, 0.50, 0.50, Magick::NorthEastGravity, 10, 'x') }
@@ -1022,12 +996,28 @@ class Image3_UT < Test::Unit::TestCase
1022
996
  assert_raise(TypeError) { @img.wave(25, 'x') }
1023
997
  end
1024
998
 
999
+ def test_wet_floor
1000
+ assert_instance_of(Magick::Image, @img.wet_floor)
1001
+ assert_nothing_raised { @img.wet_floor(0.0) }
1002
+ assert_nothing_raised { @img.wet_floor(0.5) }
1003
+ assert_nothing_raised { @img.wet_floor(0.5, 10) }
1004
+ assert_nothing_raised { @img.wet_floor(0.5, 0.0) }
1005
+
1006
+ assert_raise(ArgumentError) { @img.wet_floor(2.0) }
1007
+ assert_raise(ArgumentError) { @img.wet_floor(-2.0) }
1008
+ assert_raise(ArgumentError) { @img.wet_floor(0.5, -1.0) }
1009
+ assert_raise(ArgumentError) { @img.wet_floor(0.5, 10, 0.5) }
1010
+ end
1011
+
1025
1012
  def test_white_threshold
1026
1013
  assert_raise(ArgumentError) { @img.white_threshold }
1027
1014
  assert_nothing_raised { @img.white_threshold(50) }
1028
1015
  assert_nothing_raised { @img.white_threshold(50, 50) }
1029
1016
  assert_nothing_raised { @img.white_threshold(50, 50, 50) }
1030
1017
  assert_nothing_raised { @img.white_threshold(50, 50, 50, 50) }
1018
+ assert_nothing_raised { @img.white_threshold(50, 50, 50, alpha: 50) }
1019
+ assert_raise(ArgumentError) { @img.white_threshold(50, 50, 50, wrong: 50) }
1020
+ assert_raise(ArgumentError) { @img.white_threshold(50, 50, 50, alpha: 50, extra: 50) }
1031
1021
  assert_raise(ArgumentError) { @img.white_threshold(50, 50, 50, 50, 50) }
1032
1022
  res = @img.white_threshold(50)
1033
1023
  assert_instance_of(Magick::Image, res)
@@ -1097,5 +1087,5 @@ end
1097
1087
  if $PROGRAM_NAME == __FILE__
1098
1088
  IMAGES_DIR = '../doc/ex/images'
1099
1089
  FILES = Dir[IMAGES_DIR + '/Button_*.gif']
1100
- Test::Unit::UI::Console::TestRunner.run(Image3UT) unless RUBY_VERSION[/^1\.9|^2/]
1090
+ Test::Unit::UI::Console::TestRunner.run(Image3UT)
1101
1091
  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
  class ImageList1UT < Test::Unit::TestCase
8
8
  def setup
@@ -15,13 +15,56 @@ class ImageList1UT < Test::Unit::TestCase
15
15
  @list2 << @list[9]
16
16
  end
17
17
 
18
+ def test_combine
19
+ red = Magick::Image.new(20, 20) { self.background_color = 'red' }
20
+ green = Magick::Image.new(20, 20) { self.background_color = 'green' }
21
+ blue = Magick::Image.new(20, 20) { self.background_color = 'blue' }
22
+ black = Magick::Image.new(20, 20) { self.background_color = 'black' }
23
+ alpha = Magick::Image.new(20, 20) { self.background_color = 'transparent' }
24
+
25
+ list = Magick::ImageList.new
26
+ assert_raise(ArgumentError) { list.combine }
27
+
28
+ list << red
29
+ assert_nothing_raised { list.combine }
30
+
31
+ res = list.combine
32
+ assert_instance_of(Magick::Image, res)
33
+
34
+ list << alpha
35
+ assert_nothing_raised { list.combine }
36
+
37
+ list.pop
38
+ list << green
39
+ list << blue
40
+ assert_nothing_raised { list.combine }
41
+
42
+ list << alpha
43
+ assert_nothing_raised { list.combine }
44
+
45
+ list.pop
46
+ list << black
47
+ assert_nothing_raised { list.combine(Magick::CMYKColorspace) }
48
+ assert_nothing_raised { list.combine(Magick::SRGBColorspace) }
49
+
50
+ list << alpha
51
+ assert_nothing_raised { list.combine(Magick::CMYKColorspace) }
52
+ assert_raise(ArgumentError) { list.combine(Magick::SRGBColorspace) }
53
+
54
+ list << alpha
55
+ assert_raise(ArgumentError) { list.combine }
56
+
57
+ assert_raise(TypeError) { list.combine(nil) }
58
+ assert_raise(ArgumentError) { list.combine(Magick::SRGBColorspace, 1) }
59
+ end
60
+
18
61
  def test_composite_layers
19
62
  assert_nothing_raised { @list.composite_layers(@list2) }
20
63
  Magick::CompositeOperator.values do |op|
21
64
  assert_nothing_raised { @list.composite_layers(@list2, op) }
22
65
  end
23
66
 
24
- assert_raise(ArgumentError) { @list.composite_layers(@list2, Magick::AddCompositeOp, 42) }
67
+ assert_raise(ArgumentError) { @list.composite_layers(@list2, Magick::ModulusAddCompositeOp, 42) }
25
68
  end
26
69
 
27
70
  def test_delay
@@ -511,14 +554,6 @@ class ImageList1UT < Test::Unit::TestCase
511
554
  assert_raise(ArgumentError) { @list.map! { 2 } }
512
555
  end
513
556
 
514
- unless RUBY_VERSION[/^1\.9|^2/]
515
- def test_nitems
516
- n = nil
517
- assert_nothing_raised { n = @list.nitems }
518
- assert_equal(10, n)
519
- end
520
- end
521
-
522
557
  def test_partition
523
558
  a = nil
524
559
  n = -1
@@ -819,5 +854,5 @@ end
819
854
  if $PROGRAM_NAME == __FILE__
820
855
  IMAGES_DIR = '../doc/ex/images'
821
856
  FILES = Dir[IMAGES_DIR + '/Button_*.gif'].sort
822
- Test::Unit::UI::Console::TestRunner.run(ImageList1UT) unless RUBY_VERSION[/^1\.9|^2/]
857
+ Test::Unit::UI::Console::TestRunner.run(ImageList1UT)
823
858
  end