File: constitute_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 (86 lines) | stat: -rw-r--r-- 3,735 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
84
85
86
RSpec.describe Magick::Image, '#constitute' do
  it 'returns an equivalent image to the given pixels' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = image.export_pixels(0, 0, image.columns, image.rows, 'RGBA')

    result = described_class.constitute(image.columns, image.rows, 'RGBA', pixels)

    expect(result.export_pixels).to eq(image.export_pixels)
  end

  it 'allows constituting with RGBA quantum (integer) pixel values' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    # [R, G, B, A, R, G, B, A, ...]
    pixels = [1] * 4 * image.columns * image.rows

    result = described_class.constitute(image.columns, image.rows, 'RGBA', pixels)

    result_pixels = result.dispatch(0, 0, image.columns, image.rows, 'RGBA')
    expect(result_pixels).to all eq(1)
  end

  it 'allows constituting with RGBA scale (float) pixel values' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    # [R, G, B, A, R, G, B, A, ...]
    pixels = [1.0] * 4 * image.columns * image.rows

    result = described_class.constitute(image.columns, image.rows, 'RGBA', pixels)

    result_pixels = result.dispatch(0, 0, image.columns, image.rows, 'RGBA')
    expect(result_pixels).to all eq(65_535)
  end

  it 'raises an error when invalid RGBA pixel values are given' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = ['x'] * (4 * image.columns * image.rows)
    expected_message = 'element 0 in pixel array is String, must be numeric'

    expect { described_class.constitute(image.columns, image.rows, 'RGBA', pixels) }
      .to raise_error(TypeError, expected_message)
  end

  it 'raises an error when 0 is passed for columns' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = image.export_pixels(0, 0, image.columns, image.rows, 'RGBA')
    expected_message = 'width and height must be greater than zero'

    expect { described_class.constitute(0, image.rows, 'RGBA', pixels) }
      .to raise_error(ArgumentError, expected_message)
  end

  it 'raises an error when a negative number is passed for columns' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = image.export_pixels(0, 0, image.columns, image.rows, 'RGBA')
    expected_message = 'width and height must be greater than zero'

    expect { described_class.constitute(-3, image.rows, 'RGBA', pixels) }
      .to raise_error(ArgumentError, expected_message)
  end

  it 'raises an error when 0 is passed for rows' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = image.export_pixels(0, 0, image.columns, image.rows, 'RGBA')
    expected_message = 'width and height must be greater than zero'

    expect { described_class.constitute(image.columns, 0, 'RGBA', pixels) }
      .to raise_error(ArgumentError, expected_message)
  end

  it 'raises an error when a negative number is passed for rows' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = image.export_pixels(0, 0, image.columns, image.rows, 'RGBA')
    expected_message = 'width and height must be greater than zero'

    expect { described_class.constitute(image.columns, -3, 'RGBA', pixels) }
      .to raise_error(ArgumentError, expected_message)
  end

  it 'raises an error given the wrong number of array elements' do
    image = described_class.read(IMAGES_DIR + '/Button_0.gif').first
    pixels = image.export_pixels(0, 0, image.columns, image.rows, 'RGBA')
    expected_message = 'wrong number of array elements (60960 for 72)'

    expect { described_class.constitute(3, 6, 'RGBA', pixels) }
      .to raise_error(ArgumentError, expected_message)
  end
end