multi_exiftool 0.18.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,290 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- require_relative 'helper'
5
-
6
- class TestFunctionalApi < Test::Unit::TestCase
7
-
8
- context 'reading' do
9
-
10
- setup do
11
- @abc_authors = ['Jan Friedrich'] * 3
12
- @abc_fnumbers = [5.6, 6.7, 8]
13
- @abc_titles = 'Title A,Title B,Title C'.split(/,/)
14
- end
15
-
16
- test 'successful reading only filenames' do
17
- run_in_temp_dir do
18
- values, errors = MultiExiftool.read(%w(a.jpg b.jpg c.jpg))
19
- assert_equal @abc_authors, values.map {|e| e['Author']}
20
- assert_equal @abc_fnumbers, values.map {|e| e['FNumber']}
21
- assert_equal @abc_titles, values.map {|e| e['Title']}
22
- assert_equal [], errors
23
- end
24
- end
25
-
26
- test 'successful reading with one tag' do
27
- run_in_temp_dir do
28
- values, errors = MultiExiftool.read(%w(a.jpg b.jpg c.jpg), tags: %w(title))
29
- assert_equal @abc_titles, values.map {|e| e['Title']}
30
- assert_equal [nil] * 3, values.map {|e| e['Author']}
31
- assert_equal [], errors
32
- end
33
- end
34
-
35
- test 'successful reading of hierarchical data' do
36
- run_in_temp_dir do
37
- values, errors = MultiExiftool.read(%w(a.jpg), group: 0)
38
- res = values.first
39
- assert_equal 'a.jpg', res.source_file
40
- assert_equal 5.6, res.exif.fnumber
41
- assert_equal [], errors
42
- end
43
- end
44
-
45
- test 'successful reading with numerical option' do
46
- run_in_temp_dir do
47
- values, errors = MultiExiftool.read(%w[a.jpg b.jpg c.jpg], tags: %w[orientation], numerical: true)
48
- assert_equal [1, 2, 3], values.map {|e| e.orientation}
49
- assert_equal [], errors
50
- end
51
- end
52
-
53
- test 'options with boolean argument' do
54
- run_in_temp_dir do
55
- values, errors = MultiExiftool.read('a.jpg')
56
- assert_equal 5.6, values.first.aperture
57
- values, errors = MultiExiftool.read('a.jpg', e: true)
58
- assert_equal nil, values.first.aperture
59
- assert_equal [], errors
60
- end
61
- end
62
-
63
- test 'successful reading with user defined tags in config file' do
64
- run_in_temp_dir do
65
- values, errors = MultiExiftool.read(%w[a.jpg b.jpg c.jpg], tags: %w[mybasename fileextension])
66
- assert_equal [nil, nil, nil], values.map(&:mybasename)
67
- assert_equal [nil, nil, nil], values.map(&:file_extension)
68
- assert_equal [], errors
69
- values, errors = MultiExiftool.read(%w[a.jpg b.jpg c.jpg], config: 'example.config', tags: %w[mybasename fileextension])
70
- assert_equal %w[a b c], values.map(&:mybasename)
71
- assert_equal %w[jpg]*3, values.map(&:file_extension)
72
- assert_equal [], errors
73
- end
74
- end
75
- end
76
-
77
- context 'writing' do
78
-
79
- setup do
80
- @filenames = %w(a.jpg b.jpg c.jpg)
81
- end
82
-
83
- test 'simple case' do
84
- run_in_temp_dir do
85
- values = {comment: 'foo'}
86
- errors = MultiExiftool.write(@filenames, values)
87
- assert errors.empty?
88
- values, _errors = MultiExiftool.read(@filenames)
89
- assert_equal %w(foo) * 3, values.map {|e| e.comment}
90
- end
91
- end
92
-
93
- test 'tags with spaces in values' do
94
- run_in_temp_dir do
95
- values = {author: 'Mister X'}
96
- errors = MultiExiftool.write(@filenames, values)
97
- assert errors.empty?
98
- values, _errors = MultiExiftool.read(@filenames)
99
- assert_equal ['Mister X'] * 3, values.map {|e| e.author}
100
- end
101
- end
102
-
103
- test 'tags with rational value' do
104
- run_in_temp_dir do
105
- values ={exposuretime: Rational(1, 125)}
106
- errors = MultiExiftool.write(@filenames, values)
107
- assert errors.empty?
108
- values, _errors = MultiExiftool.read(@filenames)
109
- assert_equal [Rational(1, 125)] * 3, values.map {|e| e.exposuretime}
110
- end
111
- end
112
-
113
- test 'tags with array-like values' do
114
- run_in_temp_dir do
115
- keywords = ['one', 'two', 'and three']
116
- values = {keywords: keywords}
117
- errors = MultiExiftool.write('a.jpg', values)
118
- assert errors.empty?
119
- values, _errors = MultiExiftool.read('a.jpg')
120
- assert_equal keywords, values.first.keywords
121
- end
122
- end
123
-
124
- test 'options with boolean argument' do
125
- run_in_temp_dir do
126
- values = {comment: 'foo'}
127
- options = {overwrite_original: true}
128
- errors = MultiExiftool.write(@filenames, values, options)
129
- assert errors.empty?
130
- assert_equal [], Dir['*_original']
131
- end
132
- end
133
-
134
- test 'numerical flag' do
135
- run_in_temp_dir do
136
- values = {orientation: 2}
137
- errors = MultiExiftool.write(@filenames, values)
138
- assert_equal ["Warning: Can't convert IFD0:Orientation (matches more than one PrintConv)"], errors
139
- errors = MultiExiftool.write(@filenames, values, numerical: true)
140
- assert errors.empty?
141
- end
142
- end
143
-
144
- end
145
-
146
- context 'deleting' do
147
-
148
- setup do
149
- @filenames = %w(a.jpg b.jpg c.jpg)
150
- end
151
-
152
- test 'delete all values' do
153
- run_in_temp_dir do
154
- errors = MultiExiftool.delete_values(@filenames)
155
- assert_equal [], errors
156
- values, errors = MultiExiftool.read(@filenames)
157
- assert_equal [nil, nil, nil], values.map {|e| e['Author']}
158
- assert_equal [nil, nil, nil], values.map {|e| e['FNumber']}
159
- assert_equal [nil, nil, nil], values.map {|e| e['Title']}
160
- assert_equal [], errors
161
- end
162
- end
163
-
164
- test 'delete values for some tags' do
165
- run_in_temp_dir do
166
- errors = MultiExiftool.delete_values(@filenames, tags: %w(author title))
167
- assert_equal [], errors
168
- values, errors = MultiExiftool.read(@filenames)
169
- assert_equal [nil, nil, nil], values.map {|e| e['Author']}
170
- assert_equal [5.6, 6.7, 8], values.map {|e| e['FNumber']}
171
- assert_equal [nil, nil, nil], values.map {|e| e['Title']}
172
- assert_equal [], errors
173
- end
174
- end
175
-
176
- test 'delete values for one tag' do
177
- run_in_temp_dir do
178
- errors = MultiExiftool.delete_values(@filenames, tags: :title)
179
- assert_equal [], errors
180
- values, errors = MultiExiftool.read(@filenames)
181
- assert_equal ['Jan Friedrich'] * 3, values.map {|e| e['Author']}
182
- assert_equal [5.6, 6.7, 8], values.map {|e| e['FNumber']}
183
- assert_equal [nil, nil, nil], values.map {|e| e['Title']}
184
- assert_equal [], errors
185
- end
186
- end
187
-
188
- test 'error if tags do not exist' do
189
- run_in_temp_dir do
190
- errors = MultiExiftool.delete_values(@filenames, tags: %w[foo bar])
191
- err1, err2 = errors
192
- expected1 = /^Warning: Tag 'foo' is not defined$/
193
- expected2 = /^Warning: Tag 'bar' is not defined$/
194
- assert_match expected1, err1
195
- assert_match expected2, err2
196
- end
197
- end
198
-
199
- end
200
-
201
- context 'batch' do
202
-
203
- setup do
204
- @filenames = %w(a.jpg b.jpg c.jpg)
205
- @multiple_values = @filenames.map do |fn|
206
- {author: 'Jan Friedrich', comment: "Comment for file #{fn}"}
207
- end
208
- end
209
-
210
- context 'instance_exec' do
211
-
212
- test 'only filenames and values' do
213
- run_in_temp_dir do
214
- filenames = @filenames
215
- multiple_values = @multiple_values
216
- errors = MultiExiftool.batch do
217
- filenames.zip multiple_values do |filename, values|
218
- write filename, values
219
- end
220
- end
221
- assert_equal [], errors
222
- values, errors = MultiExiftool.read(@filenames)
223
- assert_equal ['Jan Friedrich'] * 3, values.map {|e| e['Author']}
224
- assert_equal ['Comment for file a.jpg', 'Comment for file b.jpg', 'Comment for file c.jpg'], values.map {|e| e['Comment']}
225
- assert_equal [], errors
226
- assert_equal 3, Dir['*_original'].size
227
- end
228
- end
229
-
230
- test 'options with boolean argument' do
231
- run_in_temp_dir do
232
- filenames = @filenames
233
- multiple_values = @multiple_values
234
- options = {overwrite_original: true}
235
- errors = MultiExiftool.batch do
236
- filenames.zip multiple_values do |filename, values|
237
- write filename, values, options
238
- end
239
- end
240
- assert_equal [], errors
241
- values, errors = MultiExiftool.read(@filenames)
242
- assert_equal ['Jan Friedrich'] * 3, values.map {|e| e['Author']}
243
- assert_equal ['Comment for file a.jpg', 'Comment for file b.jpg', 'Comment for file c.jpg'], values.map {|e| e['Comment']}
244
- assert_equal [], errors
245
- assert_equal [], Dir['*_original']
246
- end
247
- end
248
-
249
- end
250
-
251
- context 'yield' do
252
-
253
- test 'only filenames and values' do
254
- run_in_temp_dir do
255
- errors = MultiExiftool.batch do |batch|
256
- @filenames.zip @multiple_values do |filename, values|
257
- batch.write filename, values
258
- end
259
- end
260
- assert_equal [], errors
261
- values, errors = MultiExiftool.read(@filenames)
262
- assert_equal ['Jan Friedrich'] * 3, values.map {|e| e['Author']}
263
- assert_equal ['Comment for file a.jpg', 'Comment for file b.jpg', 'Comment for file c.jpg'], values.map {|e| e['Comment']}
264
- assert_equal [], errors
265
- assert_equal 3, Dir['*_original'].size
266
- end
267
- end
268
-
269
- test 'options with boolean argument' do
270
- run_in_temp_dir do
271
- options = {overwrite_original: true}
272
- errors = MultiExiftool.batch do |batch|
273
- @filenames.zip @multiple_values do |filename, values|
274
- batch.write filename, values, options
275
- end
276
- end
277
- assert_equal [], errors
278
- values, errors = MultiExiftool.read(@filenames)
279
- assert_equal ['Jan Friedrich'] * 3, values.map {|e| e['Author']}
280
- assert_equal ['Comment for file a.jpg', 'Comment for file b.jpg', 'Comment for file c.jpg'], values.map {|e| e['Comment']}
281
- assert_equal [], errors
282
- assert_equal [], Dir['*_original']
283
- end
284
- end
285
-
286
- end
287
-
288
- end
289
-
290
- end
data/test/test_reader.rb DELETED
@@ -1,168 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- require_relative 'helper'
5
-
6
- class TestReader < Test::Unit::TestCase
7
-
8
- MANDATORY_ARGS = MultiExiftool::Reader.mandatory_args
9
-
10
- setup do
11
- @reader = MultiExiftool::Reader.new
12
- end
13
-
14
- context 'tags' do
15
-
16
- test 'tags are initialized as array' do
17
- assert_equal [], @reader.tags
18
- end
19
-
20
- test 'tags could be set as single value' do
21
- @reader.tags = 'fnumber'
22
- assert_equal ['fnumber'], @reader.tags
23
- end
24
-
25
- end
26
-
27
- context 'exiftool_args method' do
28
-
29
- test 'simple case' do
30
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
31
- exiftool_args = MANDATORY_ARGS + %w(a.jpg b.jpg c.jpg)
32
- assert_equal exiftool_args, @reader.exiftool_args
33
- end
34
-
35
- test 'no filenames' do
36
- assert_raises MultiExiftool::Error do
37
- @reader.exiftool_args
38
- end
39
- @reader.filenames = []
40
- assert_raises MultiExiftool::Error do
41
- @reader.exiftool_args
42
- end
43
- end
44
-
45
- test 'one filename as string' do
46
- @reader.filenames = 'a.jpg'
47
- exiftool_args = MANDATORY_ARGS + %w(a.jpg)
48
- assert_equal exiftool_args, @reader.exiftool_args
49
- end
50
-
51
- test 'filenames with spaces' do
52
- @reader.filenames = ['one file with spaces.jpg', 'another file with spaces.tif']
53
- exiftool_args = MANDATORY_ARGS + ['one file with spaces.jpg', 'another file with spaces.tif']
54
- assert_equal exiftool_args, @reader.exiftool_args
55
- end
56
-
57
- test 'tags' do
58
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
59
- @reader.tags = %w(author fnumber)
60
- exiftool_args = MANDATORY_ARGS + %w(-author -fnumber a.jpg b.jpg c.jpg)
61
- assert_equal exiftool_args, @reader.exiftool_args
62
- end
63
-
64
- test 'options with boolean argument' do
65
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
66
- @reader.options = {e: true}
67
- exiftool_args = MANDATORY_ARGS + %w(-e a.jpg b.jpg c.jpg)
68
- assert_equal exiftool_args, @reader.exiftool_args
69
- end
70
-
71
- test 'options with value argument' do
72
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
73
- @reader.options = {lang: 'de'}
74
- exiftool_args = MANDATORY_ARGS + %w(-lang de a.jpg b.jpg c.jpg)
75
- assert_equal exiftool_args, @reader.exiftool_args
76
- end
77
-
78
- test 'numerical flag' do
79
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
80
- @reader.numerical = true
81
- exiftool_args = MANDATORY_ARGS + %w(-n a.jpg b.jpg c.jpg)
82
- assert_equal exiftool_args, @reader.exiftool_args
83
- end
84
-
85
- test 'group flag' do
86
- @reader.filenames = %w(a.jpg)
87
- @reader.group = 0
88
- exiftool_args = MANDATORY_ARGS + %w(-g0 a.jpg)
89
- assert_equal exiftool_args, @reader.exiftool_args
90
- @reader.group = 1
91
- exiftool_args = MANDATORY_ARGS + %w(-g1 a.jpg)
92
- assert_equal exiftool_args, @reader.exiftool_args
93
- end
94
-
95
- end
96
-
97
- context 'read method' do
98
-
99
- test 'try to read a non-existing file' do
100
- run_in_temp_dir do
101
- @reader.filenames = %w(non_existing_file)
102
- res = @reader.read
103
- assert_equal [], res
104
- assert_equal ['Error: File not found - non_existing_file'], @reader.errors
105
- end
106
- end
107
-
108
- test 'read from an existing and a non-existing file' do
109
- run_in_temp_dir do
110
- @reader.filenames = %w(a.jpg xxx)
111
- @reader.tags = %w(fnumber foo)
112
- res = @reader.read
113
- assert_equal [5.6], res.map {|e| e['FNumber']}
114
- assert_equal ['Error: File not found - xxx'], @reader.errors
115
- end
116
- end
117
-
118
- test 'successful reading with one tag' do
119
- run_in_temp_dir do
120
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
121
- @reader.tags = %w(fnumber)
122
- res = @reader.read
123
- assert_equal [5.6, 6.7, 8], res.map {|e| e['FNumber']}
124
- assert_equal %w(SourceFile FNumber), res.first.tags
125
- assert_equal [], @reader.errors
126
- end
127
- end
128
-
129
- test 'successful reading with one tag as symbol' do
130
- run_in_temp_dir do
131
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
132
- @reader.tags = :fnumber
133
- res = @reader.read
134
- assert_equal [5.6, 6.7, 8], res.map {|e| e.fnumber}
135
- assert_equal %w(SourceFile FNumber), res.first.tags
136
- assert_equal [], @reader.errors
137
- end
138
- end
139
-
140
- test 'successful reading of hierarichal data' do
141
- run_in_temp_dir do
142
- @reader.filenames = %w(a.jpg)
143
- @reader.tags = %w(fnumber)
144
- @reader.group = 0
145
- res = @reader.read.first
146
- assert_equal 'a.jpg', res.source_file
147
- assert_equal 5.6, res.exif.fnumber
148
- assert_equal [], @reader.errors
149
- end
150
- end
151
-
152
- test 'successful reading with user defined tags in config file' do
153
- run_in_temp_dir do
154
- @reader.filenames = %w(a.jpg b.jpg c.jpg)
155
- @reader.tags = %w[mybasename]
156
- res = @reader.read
157
- assert_equal [nil, nil, nil], res.map(&:mybasename)
158
- assert_equal [], @reader.errors
159
- @reader.config = 'example.config'
160
- res = @reader.read
161
- assert_equal %w[a b c], res.map(&:mybasename)
162
- assert_equal [], @reader.errors
163
- end
164
- end
165
-
166
- end
167
-
168
- end
data/test/test_values.rb DELETED
@@ -1,202 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- require_relative 'helper'
5
- require 'date'
6
-
7
- class TestValues < Test::Unit::TestCase
8
-
9
- context 'value access' do
10
-
11
- setup do
12
- hash = {'FNumber' => 8, 'Author' => 'janfri'}
13
- @values = MultiExiftool::Values.new(hash)
14
- end
15
-
16
- test 'original spelling of tag name' do
17
- assert_equal 8, @values['FNumber']
18
- end
19
-
20
- test 'variant spellings of tag names' do
21
- assert_equal 8, @values['fnumber']
22
- assert_equal 8, @values['f_number']
23
- assert_equal 8, @values['f-number']
24
- end
25
-
26
- test 'tag access via methods' do
27
- assert_equal 8, @values.fnumber
28
- assert_equal 8, @values.f_number
29
- end
30
-
31
- end
32
-
33
- context 'parsing of values' do
34
-
35
- context 'timestamps' do
36
-
37
- setup do
38
- hash = {
39
- 'TimestampWithoutSeconds' => '2009:08:25 12:35',
40
- 'Timestamp' => '2009:08:25 12:35:42',
41
- 'TimestampWithFraction' => '2009:08:25 12:35:42.123',
42
- 'TimestampWithPositiveZone' => '2009:08:26 20:22:24+05:00',
43
- 'TimestampWithNegativeZone' => '2009:08:26 20:22:24-07:00',
44
- 'TimestampWithFractionAndZone' => '2016:07:23 15:40:55.123+02:00',
45
- 'TimestampWithZoneAndDST' => '2016:07:23 15:40:55+02:00 DST',
46
- 'TimestampWithZ' => '2017:04:08 17:57:27Z',
47
- 'TimestampWithFractionAndZ' => '2017:04:08 17:57:27.123Z'
48
- }
49
- @values = MultiExiftool::Values.new(hash)
50
- end
51
-
52
- test 'local Time object' do
53
- time = Time.local(2009, 8, 25, 12, 35)
54
- assert_equal time, @values['TimestampWithoutSeconds']
55
- time = Time.local(2009, 8, 25, 12, 35, 42)
56
- assert_equal time, @values['Timestamp']
57
- time = Time.local(2009, 8, 25, 12, 35, 42.123)
58
- assert_equal time, @values['TimestampWithFraction']
59
- end
60
-
61
- test 'Time object with given zone' do
62
- time = Time.new(2009, 8, 26, 20, 22, 24, '+05:00')
63
- values_time = @values['TimestampWithPositiveZone']
64
- assert_equal time, values_time
65
- assert_equal 5 * 3600, values_time.utc_offset
66
- time = Time.new(2009, 8, 26, 20, 22, 24, '-07:00')
67
- values_time = @values['TimestampWithNegativeZone']
68
- assert_equal time, values_time
69
- assert_equal -7 * 3600, values_time.utc_offset
70
- time = Time.new(2016, 7, 23, 15, 40, 55.123,'+02:00')
71
- values_time = @values['TimestampWithFractionAndZone']
72
- assert_equal time, values_time
73
- end
74
-
75
- test 'Time object with zone and DST' do
76
- time = Time.new(2016, 7, 23, 15, 40, 55,'+02:00')
77
- values_time = @values['TimestampWithZoneAndDST']
78
- assert_equal time, values_time
79
- end
80
-
81
- test 'Time object with UTC zone' do
82
- time = Time.new(2017, 4, 8, 17, 57, 27, '+00:00')
83
- values_time = @values['TimestampWithZ']
84
- assert_equal time, values_time
85
- assert_equal 0, values_time.utc_offset
86
- time = Time.new(2017, 4, 8, 17, 57, 27.123, '+00:00')
87
- values_time = @values['TimestampWithFractionAndZ']
88
- assert_equal time, values_time
89
- assert_equal 0, values_time.utc_offset
90
- end
91
-
92
- end
93
-
94
- context 'other values' do
95
-
96
- setup do
97
- hash = {
98
- 'ShutterSpeed' => '1/200',
99
- 'PartOfSet' => '1/2',
100
- 'Track' => '1/5'
101
- }
102
- @values = MultiExiftool::Values.new(hash)
103
- end
104
-
105
- test 'rational values' do
106
- assert_equal Rational(1, 200), @values['ShutterSpeed']
107
- end
108
-
109
- test 'no rational conversion' do
110
- assert_equal '1/2', @values['PartOfSet']
111
- assert_equal '1/5', @values['Track']
112
- end
113
-
114
- end
115
-
116
- context 'invalid values' do
117
-
118
- test 'timestamp with only zeros' do
119
- values = MultiExiftool::Values.new('TimeWithOnlyZeros' => '0000:00:00 00:00:00')
120
- assert_nil values['TimeWithOnlyZeros']
121
- end
122
-
123
- test 'timestamp with invalid data' do
124
- ts = '2022:25:01 16:25'
125
- values = MultiExiftool::Values.new('InvalidTimestamp' => ts)
126
- assert_equal ts, values['InvalidTimestamp']
127
- end
128
-
129
- test 'rational with denominator zero' do
130
- values = MultiExiftool::Values.new('DenominatorZero' => '1/0')
131
- assert_equal '1/0', values['DenominatorZero']
132
- end
133
-
134
- end
135
-
136
- end
137
-
138
- context 'has_tag?' do
139
- setup do
140
- @hash = {'FNumber' => 8, 'Author' => 'janfri', 'E-MailAddress' => 'janfri26@gmail.com', 'DateTimeOriginal' => '2018:08:22 11:50:00'}
141
- @values = MultiExiftool::Values.new(@hash)
142
- end
143
-
144
- test 'different formats as string' do
145
- @hash.keys.each do |k|
146
- assert_equal true, @values.has_tag?(k)
147
- end
148
- end
149
-
150
- test 'different formats as symbol' do
151
- @hash.keys.each do |k|
152
- assert_equal true, @values.has_tag?(k.to_sym)
153
- end
154
- end
155
-
156
- test 'non existent key' do
157
- ['iso', 'ISO', :iso, :ISO].each do |t|
158
- assert_equal false, @values.has_tag?(t)
159
- end
160
- end
161
- end
162
-
163
- context 'tags and to_h' do
164
-
165
- setup do
166
- @hash = {'FNumber' => 8, 'Author' => 'janfri', 'E-MailAddress' => 'janfri26@gmail.com', 'DateTimeOriginal' => '2017:02:20 21:07:00'}
167
- @values = MultiExiftool::Values.new(@hash)
168
- end
169
-
170
- test 'tags preserves the original tag names' do
171
- assert_equal @hash.keys, @values.tags.to_a
172
- end
173
-
174
- test 'to_h preserves original tag names but uses converted values' do
175
- dto = Time.new(2017, 2, 20, 21, 7, 0)
176
- @hash['DateTimeOriginal'] = dto
177
- assert_equal @hash, @values.to_h
178
- end
179
-
180
- end
181
-
182
- context 'respond_to_missing?' do
183
-
184
- setup do
185
- hash = {'FNumber' => 8, 'Author' => 'janfri'}
186
- @values = MultiExiftool::Values.new(hash)
187
- end
188
-
189
- test 'existing keys' do
190
- [:fnumber, :f_number, :FNumber, 'fnumber', 'f_number', 'FNumber', :author, :Author, 'author', 'Author'].each do |t|
191
- assert_equal true, @values.respond_to?(t)
192
- end
193
- end
194
-
195
- test 'non existing key' do
196
- ['iso', 'ISO', :iso, :ISO].each do |t|
197
- assert_equal false, @values.respond_to?(t)
198
- end
199
- end
200
-
201
- end
202
- end