@@ -189,7 +189,7 @@ type MetadataTestCase struct {
189189 ExpectedErrorSubstring string
190190}
191191
192- var metadataTestCases = []MetadataTestCase {
192+ var metadataSetStringTestCases = []MetadataTestCase {
193193 // valid exif key, jpeg
194194 {
195195 Format : "exif" ,
@@ -244,7 +244,7 @@ var metadataTestCases = []MetadataTestCase{
244244func Test_SetMetadataStringFromFile (t * testing.T ) {
245245 var data goexiv.MetadataProvider
246246
247- for i , testcase := range metadataTestCases {
247+ for i , testcase := range metadataSetStringTestCases {
248248 img , err := goexiv .Open (testcase .ImageFilename )
249249 require .NoErrorf (t , err , "case #%d Error while opening image file" , i )
250250
@@ -283,6 +283,100 @@ func Test_SetMetadataStringFromFile(t *testing.T) {
283283 }
284284}
285285
286+ var metadataSetShortIntTestCases = []MetadataTestCase {
287+ // valid exif key, jpeg
288+ {
289+ Format : "exif" ,
290+ Key : "Exif.Photo.ExposureProgram" ,
291+ Value : "1" ,
292+ ImageFilename : "testdata/pixel.jpg" ,
293+ ExpectedErrorSubstring : "" , // no error
294+ },
295+ // valid exif key, webp
296+ {
297+ Format : "exif" ,
298+ Key : "Exif.Photo.ExposureProgram" ,
299+ Value : "2" ,
300+ ImageFilename : "testdata/pixel.webp" ,
301+ ExpectedErrorSubstring : "" ,
302+ },
303+ // valid iptc key, jpeg.
304+ // webp iptc is not supported (see libexiv2/src/webpimage.cpp WebPImage::setIptcData))
305+ {
306+ Format : "iptc" ,
307+ Key : "Iptc.Envelope.ModelVersion" ,
308+ Value : "3" ,
309+ ImageFilename : "testdata/pixel.jpg" ,
310+ ExpectedErrorSubstring : "" ,
311+ },
312+ // invalid exif key, jpeg
313+ {
314+ Format : "exif" ,
315+ Key : "Exif.Invalid.Key" ,
316+ Value : "4" ,
317+ ImageFilename : "testdata/pixel.jpg" ,
318+ ExpectedErrorSubstring : "Invalid key" ,
319+ },
320+ // invalid exif key, webp
321+ {
322+ Format : "exif" ,
323+ Key : "Exif.Invalid.Key" ,
324+ Value : "5" ,
325+ ImageFilename : "testdata/pixel.webp" ,
326+ ExpectedErrorSubstring : "Invalid key" ,
327+ },
328+ // invalid iptc key, jpeg
329+ {
330+ Format : "iptc" ,
331+ Key : "Iptc.Invalid.Key" ,
332+ Value : "6" ,
333+ ImageFilename : "testdata/pixel.jpg" ,
334+ ExpectedErrorSubstring : "Invalid record name" ,
335+ },
336+ }
337+
338+ func Test_SetMetadataShortInt (t * testing.T ) {
339+ var data goexiv.MetadataProvider
340+
341+ for i , testcase := range metadataSetShortIntTestCases {
342+ img , err := goexiv .Open (testcase .ImageFilename )
343+ require .NoErrorf (t , err , "case #%d Error while opening image file" , i )
344+
345+ err = img .SetMetadataShort (testcase .Format , testcase .Key , testcase .Value )
346+ if testcase .ExpectedErrorSubstring != "" {
347+ require .Errorf (t , err , "case #%d Error was expected" , i )
348+ require .Containsf (
349+ t ,
350+ err .Error (),
351+ testcase .ExpectedErrorSubstring ,
352+ "case #%d Error text must contain a given substring" ,
353+ i ,
354+ )
355+ continue
356+ }
357+
358+ require .NoErrorf (t , err , "case #%d Cannot write image metadata" , i )
359+
360+ err = img .ReadMetadata ()
361+ require .NoErrorf (t , err , "case #%d Cannot read image metadata" , i )
362+
363+ if testcase .Format == "iptc" {
364+ data = img .GetIptcData ()
365+ } else {
366+ data = img .GetExifData ()
367+ }
368+
369+ receivedValue , err := data .GetString (testcase .Key )
370+ require .Equalf (
371+ t ,
372+ testcase .Value ,
373+ receivedValue ,
374+ "case #%d Value written must be equal to the value read" ,
375+ i ,
376+ )
377+ }
378+ }
379+
286380func Test_GetBytes (t * testing.T ) {
287381 bytes , err := ioutil .ReadFile ("testdata/stripped_pixel.jpg" )
288382 require .NoError (t , err )
0 commit comments