File: dissolve_spec.rb

package info (click to toggle)
ruby-rmagick 6.0.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,232 kB
  • sloc: cpp: 19,563; ruby: 17,147; sh: 88; javascript: 36; makefile: 13
file content (83 lines) | stat: -rw-r--r-- 3,927 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
RSpec.describe Magick::Image, '#dissolve' do
  it 'raises an error given invalid arguments' do
    image1 = described_class.new(100, 100) { |options| options.background_color = 'transparent' }
    image2 = described_class.new(100, 100) { |options| options.background_color = 'green' }

    expect { image1.dissolve }.to raise_error(ArgumentError)
    expect { image1.dissolve(image2, 'x') }.to raise_error(ArgumentError)
    expect { image1.dissolve(image2, 0.50, 'x') }.to raise_error(ArgumentError)
    expect { image1.dissolve(image2, 0.50, Magick::NorthEastGravity, 'x') }.to raise_error(TypeError)
    expect { image1.dissolve(image2, 0.50, Magick::NorthEastGravity, 10, 'x') }.to raise_error(TypeError)
  end

  context 'when given 2 arguments' do
    it 'works when alpha is float 0.0 to 1.0' do
      image1 = described_class.new(100, 100) { |options| options.background_color = 'transparent' }
      image2 = described_class.new(100, 100) { |options| options.background_color = 'green' }

      dissolved = image1.dissolve(image2, 0.50)
      expect(dissolved).to be_instance_of(described_class)
      expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.45, 0.55)
      dissolved = image1.dissolve(image2, 0.20)
      expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.15, 0.25)
    end

    it 'works when alpha is string percentage' do
      image1 = described_class.new(100, 100) { |options| options.background_color = 'transparent' }
      image2 = described_class.new(100, 100) { |options| options.background_color = 'green' }

      dissolved = image1.dissolve(image2, '50%')
      expect(dissolved).to be_instance_of(described_class)
      expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.45, 0.55)
      dissolved = image1.dissolve(image2, '20%')
      expect(Float(dissolved.pixel_color(2, 2).alpha) / Magick::QuantumRange).to be_between(0.15, 0.25)
    end

    it 'accepts an ImageList argument' do
      image = described_class.new(20, 20)

      image_list = Magick::ImageList.new
      image_list.new_image(10, 10)
      expect { image.dissolve(image_list, 0.50) }.not_to raise_error
      expect { image.dissolve(image_list, '50%') }.not_to raise_error
    end
  end

  context 'when given gravity' do
    # generate an image to use with gravity
    wk = described_class.new(40, 40) { |options| options.background_color = 'transparent' }
    d = Magick::Draw.new
    d.stroke('none').fill('blue')
    d.circle(wk.columns / 2, wk.rows / 2, 4, wk.rows / 2)
    d.draw(wk)

    it 'works on colored background' do
      image = described_class.new(100, 100) { |options| options.background_color = 'green' }

      # generate an image to use with gravity
      dissolved = image.dissolve(wk, 0.50, 1.0, Magick::CenterGravity)
      expect(dissolved).to be_instance_of(described_class)
      expect(dissolved.pixel_color(10, 10)).to eq(image.pixel_color(10, 10))
      expect(Float(dissolved.pixel_color(50, 50).blue) / Magick::QuantumRange).to be_between(0.45, 0.55)
      expect(Float(dissolved.pixel_color(50, 50).green)).to be_between(0, image.pixel_color(2, 2).green).exclusive
    end

    it 'accepts an ImageList argument' do
      image = described_class.new(20, 20)

      image_list = Magick::ImageList.new
      image_list.new_image(10, 10)
      expect { image.dissolve(image_list, 0.50, 1.0, Magick::CenterGravity) }.not_to raise_error
    end
  end

  # still need to test with destination percentage, offsets

  it 'raises an error when the image has been destroyed' do
    image1 = described_class.new(100, 100) { |options| options.background_color = 'transparent' }
    image2 = described_class.new(100, 100) { |options| options.background_color = 'green' }

    image1.destroy!
    expect { image1.dissolve(image2, 0.50) }.to raise_error(Magick::DestroyedImageError)
  end
end