pnm 0.4.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # test_image.rb: Unit tests for the PNM library.
2
4
  #
3
- # Copyright (C) 2013-2015 Marcus Stollsteimer
5
+ # Copyright (C) 2013-2020 Marcus Stollsteimer
6
+
7
+ require "minitest/autorun"
8
+ require "pnm"
4
9
 
5
- require 'minitest/autorun'
6
- require 'pnm'
10
+ require_relative "backports"
7
11
 
8
12
 
9
13
  describe PNM::Image do
@@ -12,190 +16,262 @@ describe PNM::Image do
12
16
  @srcpath = File.dirname(__FILE__)
13
17
  @temp_path = File.expand_path("#{@srcpath}/temp.pnm")
14
18
 
15
- pixels = [[0,0,0,0,0],
16
- [0,1,1,1,0],
17
- [0,0,1,0,0],
18
- [0,0,1,0,0],
19
- [0,0,1,0,0],
20
- [0,0,0,0,0]]
21
- comment = 'Bilevel'
22
- @bilevel = PNM.create(pixels, {:comment => comment})
23
-
24
- pixels = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
25
- [0,1,1,1,0,1,1,1,1,0,1,1,1,1,1,0],
26
- [0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0],
27
- [0,0,1,0,0,1,0,0,1,0,1,0,1,0,1,0],
28
- [0,0,1,0,0,1,1,1,1,0,1,0,1,0,1,0],
29
- [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
30
- @bilevel_2 = PNM.create(pixels)
31
-
32
- pixels = [[ 0, 50,100,150],
33
- [ 50,100,150,200],
34
- [100,150,200,250]]
19
+ pixels = [[0, 0, 0, 0, 0],
20
+ [0, 1, 1, 1, 0],
21
+ [0, 0, 1, 0, 0],
22
+ [0, 0, 1, 0, 0],
23
+ [0, 0, 1, 0, 0],
24
+ [0, 0, 0, 0, 0]]
25
+ comment = "Bilevel"
26
+ @bilevel = PNM.create(pixels, comment: comment)
27
+
28
+ pixels = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
29
+ [0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0],
30
+ [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0],
31
+ [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0],
32
+ [0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0],
33
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
34
+ @bilevel2 = PNM.create(pixels)
35
+
36
+ pixels = [[ 0, 50, 100, 150],
37
+ [ 50, 100, 150, 200],
38
+ [100, 150, 200, 250]]
35
39
  comment = "Grayscale\n(with multiline comment)"
36
- @grayscale = PNM.create(pixels, {:maxgray => 250, :comment => comment})
40
+ @grayscale = PNM.create(pixels, maxgray: 250, comment: comment)
37
41
 
38
- pixels = [[65,66], [13,10], [65,66]]
42
+ pixels = [[65, 66], [13, 10], [65, 66]]
39
43
  @grayscale_crlf = PNM.create(pixels)
40
44
 
41
- pixels = [[[0,6,0], [1,5,1], [2,4,2], [3,3,4], [4,2,6]],
42
- [[1,5,2], [2,4,2], [3,3,2], [4,2,2], [5,1,2]],
43
- [[2,4,6], [3,3,4], [4,2,2], [5,1,1], [6,0,0]]]
44
- @color = PNM.create(pixels, {:maxgray => 6})
45
+ pixels = [[[0, 6, 0], [1, 5, 1], [2, 4, 2], [3, 3, 4], [4, 2, 6]],
46
+ [[1, 5, 2], [2, 4, 2], [3, 3, 2], [4, 2, 2], [5, 1, 2]],
47
+ [[2, 4, 6], [3, 3, 4], [4, 2, 2], [5, 1, 1], [6, 0, 0]]]
48
+ @color = PNM.create(pixels, maxgray: 6)
49
+ end
50
+
51
+ it "freezes pixel data" do
52
+ _ { @bilevel.pixels << [1, 1, 0, 1, 1] }.must_raise RuntimeError
45
53
  end
46
54
 
47
- it 'sets maxgray to 1 for bilevel images' do
48
- image = PNM.create([[0,1,0], [1,0,1]])
49
- image.type.must_equal :pbm
50
- image.maxgray.must_equal 1
55
+ it "freezes comment string" do
56
+ _ { @bilevel.comment << "string" }.must_raise RuntimeError
51
57
  end
52
58
 
53
- it 'sets maxgray by default to 255 for grayscale images' do
54
- image = PNM.create([[0,10,20], [10,20,30]])
55
- image.type.must_equal :pgm
56
- image.maxgray.must_equal 255
59
+ it "sets maxgray to 1 for bilevel images" do
60
+ image = PNM.create([[0, 1, 0], [1, 0, 1]])
61
+ _(image.type).must_equal :pbm
62
+ _(image.maxgray).must_equal 1
57
63
  end
58
64
 
59
- it 'sets maxgray by default to 255 for color images' do
60
- image = PNM.create([[[0,0,0], [10,10,10]], [[10,10,10], [20,20,20]]])
61
- image.type.must_equal :ppm
62
- image.maxgray.must_equal 255
65
+ it "sets maxgray by default to 255 for grayscale images" do
66
+ image = PNM.create([[0, 10, 20], [10, 20, 30]])
67
+ _(image.type).must_equal :pgm
68
+ _(image.maxgray).must_equal 255
63
69
  end
64
70
 
65
- it 'accepts setting of maxgray to 1 for bilevel images' do
66
- image = PNM.create([[0,1,0], [1,0,1]], {:maxgray => 1})
67
- image.type.must_equal :pbm
68
- image.maxgray.must_equal 1
71
+ it "sets maxgray by default to 255 for color images" do
72
+ image = PNM.create([[[0, 0, 0], [10, 10, 10]], [[10, 10, 10], [20, 20, 20]]])
73
+ _(image.type).must_equal :ppm
74
+ _(image.maxgray).must_equal 255
69
75
  end
70
76
 
71
- it 'ignores invalid maxgray for bilevel images and sets it to 1' do
72
- image = PNM.create([[0,1,0], [1,0,1]], {:type => :pbm, :maxgray => 255})
73
- image.type.must_equal :pbm
74
- image.maxgray.must_equal 1
77
+ it "accepts setting of maxgray to 1 for bilevel images" do
78
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], maxgray: 1)
79
+ _(image.type).must_equal :pbm
80
+ _(image.maxgray).must_equal 1
75
81
  end
76
82
 
77
- it 'can create a grayscale image from bilevel values (using type)' do
78
- image = PNM.create([[0,1,0], [1,0,1]], {:type => :pgm})
79
- image.type.must_equal :pgm
80
- image.pixels.must_equal [[0,1,0], [1,0,1]]
81
- image.maxgray.must_equal 255
83
+ it "ignores invalid maxgray for bilevel images and sets it to 1" do
84
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], type: :pbm, maxgray: 255)
85
+ _(image.type).must_equal :pbm
86
+ _(image.maxgray).must_equal 1
82
87
  end
83
88
 
84
- it 'also accepts types given as string instead of symbol' do
85
- image = PNM.create([[0,1,0], [1,0,1]], {:type => "pgm"})
86
- image.type.must_equal :pgm
89
+ it "can create a grayscale image from bilevel values (using type)" do
90
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], type: :pgm)
91
+ _(image.type).must_equal :pgm
92
+ _(image.pixels).must_equal [[0, 1, 0], [1, 0, 1]]
93
+ _(image.maxgray).must_equal 255
87
94
  end
88
95
 
89
- it 'can create a grayscale image from bilevel values (using maxgray)' do
90
- image = PNM.create([[0,1,0], [1,0,1]], {:maxgray => 2})
91
- image.type.must_equal :pgm
92
- image.pixels.must_equal [[0,1,0], [1,0,1]]
93
- image.maxgray.must_equal 2
96
+ it "also accepts types given as string instead of symbol" do
97
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], type: "pgm")
98
+ _(image.type).must_equal :pgm
94
99
  end
95
100
 
96
- it 'can create a color image from bilevel values' do
97
- image = PNM.create([[0,1,0], [1,0,1]], {:type => :ppm})
98
- image.info.must_match %r{^PPM 3x2 Color}
99
- image.pixels.must_equal [[[0,0,0], [1,1,1], [0,0,0]], [[1,1,1], [0,0,0], [1,1,1]]]
100
- image.maxgray.must_equal 255
101
+ it "can create a grayscale image from bilevel values (using maxgray)" do
102
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], maxgray: 2)
103
+ _(image.type).must_equal :pgm
104
+ _(image.pixels).must_equal [[0, 1, 0], [1, 0, 1]]
105
+ _(image.maxgray).must_equal 2
101
106
  end
102
107
 
103
- it 'can create a color image from bilevel values with a given maxgray' do
104
- image = PNM.create([[0,1,0], [1,0,1]], {:type => :ppm, :maxgray => 2})
105
- image.info.must_match %r{^PPM 3x2 Color}
106
- image.pixels.must_equal [[[0,0,0], [1,1,1], [0,0,0]], [[1,1,1], [0,0,0], [1,1,1]]]
107
- image.maxgray.must_equal 2
108
+ it "can create a color image from bilevel values" do
109
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], type: :ppm)
110
+ _(image.info).must_equal "PPM 3x2 Color"
111
+ _(image.pixels).must_equal [[[0, 0, 0], [1, 1, 1], [0, 0, 0]], [[1, 1, 1], [0, 0, 0], [1, 1, 1]]]
112
+ _(image.maxgray).must_equal 255
108
113
  end
109
114
 
110
- it 'can create a color image from gray values' do
111
- image = PNM.create([[0,3,6], [3,6,9]], {:type => :ppm})
112
- image.info.must_match %r{^PPM 3x2 Color}
113
- image.pixels.must_equal [[[0,0,0], [3,3,3], [6,6,6]], [[3,3,3], [6,6,6], [9,9,9]]]
115
+ it "can create a color image from bilevel values with a given maxgray" do
116
+ image = PNM.create([[0, 1, 0], [1, 0, 1]], type: :ppm, maxgray: 2)
117
+ _(image.info).must_equal "PPM 3x2 Color"
118
+ _(image.pixels).must_equal [[[0, 0, 0], [1, 1, 1], [0, 0, 0]], [[1, 1, 1], [0, 0, 0], [1, 1, 1]]]
119
+ _(image.maxgray).must_equal 2
114
120
  end
115
121
 
116
- it 'does not modify the input data for color images created from gray values' do
117
- data = [[0,3,6], [3,6,9]]
118
- PNM.create(data, {:type => :ppm})
119
- data.must_equal [[0,3,6], [3,6,9]]
122
+ it "can create a color image from gray values" do
123
+ image = PNM.create([[0, 3, 6], [3, 6, 9]], type: :ppm)
124
+ _(image.info).must_equal "PPM 3x2 Color"
125
+ _(image.pixels).must_equal [[[0, 0, 0], [3, 3, 3], [6, 6, 6]], [[3, 3, 3], [6, 6, 6], [9, 9, 9]]]
120
126
  end
121
127
 
122
- it 'can write a bilevel image to an ASCII encoded file' do
123
- @bilevel.write(@temp_path, :ascii)
124
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/bilevel_ascii.pbm")
128
+ it "does not modify the input data for color images created from gray values" do
129
+ data = [[0, 3, 6], [3, 6, 9]]
130
+ PNM.create(data, type: :ppm)
131
+ _(data).must_equal [[0, 3, 6], [3, 6, 9]]
132
+ end
133
+
134
+ it "can write a bilevel image to an ASCII encoded file" do
135
+ @bilevel.write(@temp_path, encoding: :ascii)
136
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/bilevel_ascii.pbm")
125
137
  File.delete(@temp_path)
126
138
  end
127
139
 
128
- it 'can write a bilevel image (width 5) to a binary encoded file' do
129
- @bilevel.write(@temp_path, :binary)
130
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/bilevel_binary.pbm")
140
+ it "can write a bilevel image (width 5) to a binary encoded file" do
141
+ @bilevel.write(@temp_path, encoding: :binary)
142
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/bilevel_binary.pbm")
131
143
  File.delete(@temp_path)
132
144
  end
133
145
 
134
- it 'can write a bilevel image (width 16) to a binary encoded file' do
135
- @bilevel_2.write(@temp_path, :binary)
136
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/bilevel_2_binary.pbm")
146
+ it "can write a bilevel image (width 16) to a binary encoded file" do
147
+ @bilevel2.write(@temp_path, encoding: :binary)
148
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/bilevel_2_binary.pbm")
137
149
  File.delete(@temp_path)
138
150
  end
139
151
 
140
- it 'can write a grayscale image to an ASCII encoded file' do
141
- @grayscale.write(@temp_path, :ascii)
142
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/grayscale_ascii.pgm")
152
+ it "can write a grayscale image to an ASCII encoded file" do
153
+ @grayscale.write(@temp_path, encoding: :ascii)
154
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/grayscale_ascii.pgm")
143
155
  File.delete(@temp_path)
144
156
  end
145
157
 
146
- it 'can write a grayscale image to a binary encoded file' do
147
- @grayscale.write(@temp_path, :binary)
148
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/grayscale_binary.pgm")
158
+ it "can write a grayscale image to a binary encoded file" do
159
+ @grayscale.write(@temp_path, encoding: :binary)
160
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/grayscale_binary.pgm")
149
161
  File.delete(@temp_path)
150
162
  end
151
163
 
152
- it 'can write a color image to an ASCII encoded file' do
153
- @color.write(@temp_path, :ascii)
154
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/color_ascii.ppm")
164
+ it "can write a color image to an ASCII encoded file" do
165
+ @color.write(@temp_path, encoding: :ascii)
166
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/color_ascii.ppm")
155
167
  File.delete(@temp_path)
156
168
  end
157
169
 
158
- it 'can write a color image to a binary encoded file' do
159
- @color.write(@temp_path, :binary)
160
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/color_binary.ppm")
170
+ it "can write a color image to a binary encoded file" do
171
+ @color.write(@temp_path, encoding: :binary)
172
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/color_binary.ppm")
161
173
  File.delete(@temp_path)
162
174
  end
163
175
 
164
- it 'can return image information' do
165
- @bilevel.info.must_equal 'PBM 5x6 Bilevel'
166
- @grayscale.info.must_equal 'PGM 4x3 Grayscale'
167
- @color.info.must_equal 'PPM 5x3 Color'
176
+ it "can write a bilevel image to a file, adding the extension" do
177
+ @bilevel.write(@temp_path, add_extension: true)
178
+ _(File.binread("#{@temp_path}.pbm")).must_equal File.binread("#{@srcpath}/bilevel_binary.pbm")
179
+ File.delete("#{@temp_path}.pbm")
180
+ end
181
+
182
+ it "can write a grayscale image to a file, adding the extension" do
183
+ @grayscale.write(@temp_path, add_extension: true, encoding: :ascii)
184
+ _(File.binread("#{@temp_path}.pgm")).must_equal File.binread("#{@srcpath}/grayscale_ascii.pgm")
185
+ File.delete("#{@temp_path}.pgm")
168
186
  end
169
187
 
170
- it 'can return meaningful debugging information' do
171
- @bilevel.inspect.must_match %r{^#<PNM::\w+Image:0x\h+ PBM 5x6 Bilevel>$}
172
- @grayscale.inspect.must_match %r{^#<PNM::\w+Image:0x\h+ PGM 4x3 Grayscale, maxgray=250>$}
173
- @color.inspect.must_match %r{^#<PNM::\w+Image:0x\h+ PPM 5x3 Color, maxgray=6>$}
188
+ it "can write a color image to a file, adding the extension" do
189
+ @color.write(@temp_path, add_extension: true, encoding: :binary)
190
+ _(File.binread("#{@temp_path}.ppm")).must_equal File.binread("#{@srcpath}/color_binary.ppm")
191
+ File.delete("#{@temp_path}.ppm")
174
192
  end
175
193
 
176
- it 'can write binary data containing CRLF' do
177
- @grayscale_crlf.write(@temp_path, :binary)
178
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/grayscale_binary_crlf.pgm")
194
+ it "can return image information" do
195
+ _(@bilevel.info).must_equal "PBM 5x6 Bilevel"
196
+ _(@grayscale.info).must_equal "PGM 4x3 Grayscale"
197
+ _(@color.info).must_equal "PPM 5x3 Color"
198
+ end
199
+
200
+ it "can return meaningful debugging information" do
201
+ _(@bilevel.inspect).must_match %r{\A#<PNM::PBMImage:0x\h+ PBM 5x6 Bilevel>\z}
202
+ _(@grayscale.inspect).must_match %r{\A#<PNM::PGMImage:0x\h+ PGM 4x3 Grayscale, maxgray=250>\z}
203
+ _(@color.inspect).must_match %r{\A#<PNM::PPMImage:0x\h+ PPM 5x3 Color, maxgray=6>\z}
204
+ end
205
+
206
+ it "can write binary data containing CRLF" do
207
+ @grayscale_crlf.write(@temp_path, encoding: :binary)
208
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/grayscale_binary_crlf.pgm")
179
209
  File.delete(@temp_path)
180
210
  end
181
211
 
182
- it 'can write binary data containing CRLF to an I/O stream' do
183
- File.open(@temp_path, 'w') {|f| @grayscale_crlf.write(f, :binary) }
184
- File.binread(@temp_path).must_equal File.binread("#{@srcpath}/grayscale_binary_crlf.pgm")
212
+ it "can write binary data containing CRLF to an I/O stream" do
213
+ File.open(@temp_path, "w") {|f| @grayscale_crlf.write(f, encoding: :binary) }
214
+ _(File.binread(@temp_path)).must_equal File.binread("#{@srcpath}/grayscale_binary_crlf.pgm")
185
215
  File.delete(@temp_path)
186
216
  end
187
217
 
188
- it 'can write zero-length comments' do
189
- comment = ''
190
- PNM.create([[0,0]], :comment => comment).write(@temp_path, :ascii)
191
- File.binread(@temp_path).must_equal "P1\n#\n2 1\n0 0\n"
218
+ it "can write zero-length comments" do
219
+ comment = ""
220
+ PNM.create([[0, 0]], comment: comment).write(@temp_path, encoding: :ascii)
221
+ _(File.binread(@temp_path)).must_equal "P1\n#\n2 1\n0 0\n"
192
222
  File.delete(@temp_path)
193
223
  end
194
224
 
195
- it 'can write comments with trailing zero-length line' do
225
+ it "can write comments with trailing zero-length line" do
196
226
  comment = "An empty line:\n"
197
- PNM.create([[0,0]], :comment => comment).write(@temp_path, :ascii)
198
- File.binread(@temp_path).must_equal "P1\n# An empty line:\n#\n2 1\n0 0\n"
227
+ PNM.create([[0, 0]], comment: comment).write(@temp_path, encoding: :ascii)
228
+ _(File.binread(@temp_path)).must_equal "P1\n# An empty line:\n#\n2 1\n0 0\n"
199
229
  File.delete(@temp_path)
200
230
  end
231
+
232
+ it "can check equality of images (1)" do
233
+ pixels = [[0, 1, 0], [1, 0, 1]]
234
+ bilevel1 = PNM.create(pixels, comment: "image")
235
+ bilevel2 = PNM.create(pixels, comment: "image")
236
+
237
+ _(bilevel2 == bilevel1).must_equal true
238
+ end
239
+
240
+ it "can check equality of images (2)" do
241
+ pixels = [[0, 1, 0], [1, 0, 1]]
242
+ bilevel1 = PNM.create(pixels, comment: "image")
243
+ bilevel2 = PNM.create(pixels, comment: "other image")
244
+
245
+ _(bilevel2 == bilevel1).must_equal false
246
+ end
247
+
248
+ it "can check equality of images (3)" do
249
+ pixels = [[0, 1, 0], [1, 0, 1]]
250
+ bilevel1 = PNM.create(pixels)
251
+ bilevel2 = PNM.create(pixels.reverse)
252
+
253
+ _(bilevel2 == bilevel1).must_equal false
254
+ end
255
+
256
+ it "can check equality of images (4)" do
257
+ pixels = [[0, 1, 0], [1, 0, 1]]
258
+ bilevel = PNM.create(pixels, type: :pbm)
259
+ graylevel = PNM.create(pixels, type: :pgm)
260
+
261
+ _(graylevel == bilevel).must_equal false
262
+ end
263
+
264
+ it "can check equality of images (5)" do
265
+ pixels = [[0, 1, 2], [3, 4, 5]]
266
+ graylevel1 = PNM.create(pixels, maxgray: 10)
267
+ graylevel2 = PNM.create(pixels, maxgray: 255)
268
+
269
+ _(graylevel2 == graylevel1).must_equal false
270
+ end
271
+
272
+ it "can check equality of images (6)" do
273
+ image = PNM.create([[0, 1, 2], [3, 4, 5]])
274
+
275
+ _(image == "a string").must_equal false
276
+ end
201
277
  end
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # test_parser.rb: Unit tests for the PNM library.
2
4
  #
3
- # Copyright (C) 2013-2015 Marcus Stollsteimer
5
+ # Copyright (C) 2013-2020 Marcus Stollsteimer
6
+
7
+ require "minitest/autorun"
8
+ require "pnm/parser"
4
9
 
5
- require 'minitest/autorun'
6
- require 'pnm/parser'
10
+ require_relative "backports"
7
11
 
8
12
 
9
13
  describe PNM::Parser do
@@ -12,89 +16,89 @@ describe PNM::Parser do
12
16
  @parser = PNM::Parser
13
17
  end
14
18
 
15
- it 'can parse ASCII encoded PBM data' do
16
- content =<<-EOF.chomp.gsub(/^ */, '')
19
+ it "can parse ASCII encoded PBM data" do
20
+ content = <<-PBM.chomp.gsub(/^ */, "")
17
21
  P1 6 2
18
22
  0 1 0 0 1 1
19
23
  0 0 0 1 1 1
20
- EOF
24
+ PBM
21
25
  expected = {
22
- :magic_number => 'P1',
23
- :width => 6,
24
- :height => 2,
25
- :data => "0 1 0 0 1 1\n0 0 0 1 1 1"
26
+ magic_number: "P1",
27
+ width: 6,
28
+ height: 2,
29
+ data: "0 1 0 0 1 1\n0 0 0 1 1 1"
26
30
  }
27
31
 
28
- @parser.parse(content).must_equal expected
32
+ _(@parser.parse(content)).must_equal expected
29
33
  end
30
34
 
31
- it 'can parse ASCII encoded PGM data' do
32
- content =<<-EOF.chomp.gsub(/^ */, '')
35
+ it "can parse ASCII encoded PGM data" do
36
+ content = <<-PGM.chomp.gsub(/^ */, "")
33
37
  P2 4 2 100
34
38
  10 20 30 40
35
39
  50 60 70 80
36
- EOF
40
+ PGM
37
41
  expected = {
38
- :magic_number => 'P2',
39
- :width => 4,
40
- :height => 2,
41
- :maxgray => 100,
42
- :data => "10 20 30 40\n50 60 70 80"
42
+ magic_number: "P2",
43
+ width: 4,
44
+ height: 2,
45
+ maxgray: 100,
46
+ data: "10 20 30 40\n50 60 70 80"
43
47
  }
44
48
 
45
- @parser.parse(content).must_equal expected
49
+ _(@parser.parse(content)).must_equal expected
46
50
  end
47
51
 
48
- it 'can parse binary encoded data' do
49
- content = 'P4 8 2 ' << ['05AF'].pack('H*')
52
+ it "can parse binary encoded data" do
53
+ content = "P4 8 2 ".dup << ["05AF"].pack("H*")
50
54
  expected = {
51
- :magic_number => 'P4',
52
- :width => 8,
53
- :height => 2,
54
- :data => ['05AF'].pack('H*')
55
+ magic_number: "P4",
56
+ width: 8,
57
+ height: 2,
58
+ data: ["05AF"].pack("H*")
55
59
  }
56
60
 
57
- @parser.parse(content).must_equal expected
61
+ _(@parser.parse(content)).must_equal expected
58
62
  end
59
63
 
60
- it 'does not change the passed data' do
61
- content = 'P1 3 2 0 1 0 0 1 1'
64
+ it "does not change the passed data" do
65
+ content = "P1 3 2 0 1 0 0 1 1"
62
66
  original_content = content.dup
63
67
  @parser.parse(content)
64
68
 
65
- content.must_equal original_content
69
+ _(content).must_equal original_content
66
70
  end
67
71
 
68
- it 'does accept multiple whitespace as delimiter' do
72
+ it "does accept multiple whitespace as delimiter" do
69
73
  content = "P1 \n\t 3 \r \n2 0 1 0 0 1 1"
70
74
  expected = {
71
- :magic_number => 'P1',
72
- :width => 3,
73
- :height => 2,
74
- :data => '0 1 0 0 1 1'
75
+ magic_number: "P1",
76
+ width: 3,
77
+ height: 2,
78
+ data: "0 1 0 0 1 1"
75
79
  }
76
80
 
77
- @parser.parse(content).must_equal expected
81
+ _(@parser.parse(content)).must_equal expected
78
82
  end
79
83
 
80
- it 'can parse binary encoded data including whitespace' do
81
- @parser.parse("P4 16 4 A\nB\rC D\t")[:data].must_equal "A\nB\rC D\t"
84
+ it "can parse binary encoded data including whitespace" do
85
+ _(@parser.parse("P4 16 4 A\nB\rC D\t")[:data]).must_equal "A\nB\rC D\t"
82
86
  end
83
87
 
84
- it 'can parse binary encoded data starting with whitespace' do
85
- @parser.parse("P4 8 2 \nA")[:data].must_equal "\nA"
88
+ it "can parse binary encoded data starting with whitespace" do
89
+ _(@parser.parse("P4 8 2 \nA")[:data]).must_equal "\nA"
86
90
  end
87
91
 
88
- it 'can parse binary encoded data starting with comment character' do
89
- @parser.parse("P4 8 2 #A")[:data].must_equal "#A"
92
+ it "can parse binary encoded data starting with comment character" do
93
+ _(@parser.parse("P4 8 2 #A")[:data]).must_equal "#A"
90
94
  end
91
95
 
92
- it 'does not chomp newlines from parsed binary encoded data' do
93
- @parser.parse("P4 8 2 AB\n")[:data].must_equal "AB\n"
96
+ it "does not chomp newlines from parsed binary encoded data" do
97
+ _(@parser.parse("P4 8 2 AB\n")[:data]).must_equal "AB\n"
94
98
  end
95
99
 
96
- it 'can parse comments' do
97
- content =<<-EOF.chomp.gsub(/^ */, '')
100
+ it "can parse comments" do
101
+ content = <<-PBM.chomp.gsub(/^ */, "")
98
102
  # Comment 1
99
103
  P1 # Comment 2
100
104
  6# Comment 3
@@ -104,15 +108,15 @@ describe PNM::Parser do
104
108
  2
105
109
  0 1 0 0 1 1
106
110
  0 0 0 1 1 1
107
- EOF
111
+ PBM
108
112
  expected = {
109
- :magic_number => 'P1',
110
- :width => 6,
111
- :height => 2,
112
- :comments => ['Comment 1', 'Comment 2', 'Comment 3', 'Comment 4', '', 'Comment 6'],
113
- :data => "0 1 0 0 1 1\n0 0 0 1 1 1"
113
+ magic_number: "P1",
114
+ width: 6,
115
+ height: 2,
116
+ comments: ["Comment 1", "Comment 2", "Comment 3", "Comment 4", "", "Comment 6"],
117
+ data: "0 1 0 0 1 1\n0 0 0 1 1 1"
114
118
  }
115
119
 
116
- @parser.parse(content).must_equal expected
120
+ _(@parser.parse(content)).must_equal expected
117
121
  end
118
122
  end