@@ -2,6 +2,7 @@ package imagemeta_test
22
33import (
44 "encoding/json"
5+ "errors"
56 "fmt"
67 "io"
78 "math"
@@ -35,7 +36,7 @@ func TestDecodeAllImageFormats(t *testing.T) {
3536 return nil
3637 }
3738
38- err := imagemeta .Decode (imagemeta.Options {R : img , ImageFormat : imageFormat , HandleTag : handleTag })
39+ err := imagemeta .Decode (imagemeta.Options {R : img , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf })
3940 c .Assert (err , qt .IsNil )
4041
4142 allTags := tags .All ()
@@ -145,7 +146,7 @@ func TestDecodeCorrupt(t *testing.T) {
145146 handleTag := func (ti imagemeta.TagInfo ) error {
146147 return nil
147148 }
148- err = imagemeta .Decode (imagemeta.Options {R : img , ImageFormat : format , HandleTag : handleTag })
149+ err = imagemeta .Decode (imagemeta.Options {R : img , ImageFormat : format , HandleTag : handleTag , Warnf : panicWarnf })
149150 c .Assert (imagemeta .IsInvalidFormat (err ), qt .IsTrue , qt .Commentf ("file: %s" , file ))
150151 img .Close ()
151152 }
@@ -168,6 +169,7 @@ func TestDecodeCustomXMPHandler(t *testing.T) {
168169 return err
169170 },
170171 Sources : imagemeta .XMP ,
172+ Warnf : panicWarnf ,
171173 },
172174 )
173175
@@ -189,6 +191,7 @@ func TestDecodeCustomXMPHandlerShortRead(t *testing.T) {
189191 return nil
190192 },
191193 Sources : imagemeta .XMP ,
194+ Warnf : panicWarnf ,
192195 },
193196 )
194197
@@ -231,6 +234,7 @@ func TestDecodeShouldHandleTagEXIF(t *testing.T) {
231234 Sources : imagemeta .EXIF ,
232235 HandleTag : handleTag ,
233236 ShouldHandleTag : shouldHandle ,
237+ Warnf : panicWarnf ,
234238 },
235239 )
236240
@@ -269,6 +273,7 @@ func TestDecodeIPTCReference(t *testing.T) {
269273 ImageFormat : imagemeta .JPEG ,
270274 HandleTag : handleTag ,
271275 Sources : imagemeta .IPTC ,
276+ Warnf : panicWarnf ,
272277 },
273278 )
274279 c .Assert (err , qt .IsNil )
@@ -322,6 +327,7 @@ func TestDecodeEXIFOrientationOnly(t *testing.T) {
322327 ImageFormat : imagemeta .JPEG ,
323328 HandleTag : handleTag ,
324329 Sources : imagemeta .EXIF ,
330+ Warnf : panicWarnf ,
325331 },
326332 )
327333
@@ -351,6 +357,7 @@ func TestDecodeIPTCOrientationOnly(t *testing.T) {
351357 ImageFormat : imagemeta .JPEG ,
352358 HandleTag : handleTag ,
353359 Sources : imagemeta .IPTC ,
360+ Warnf : panicWarnf ,
354361 },
355362 )
356363
@@ -734,7 +741,21 @@ func extractTagsWithFilter(t testing.TB, filename string, sources imagemeta.Sour
734741
735742 imageFormat := extToFormat (filepath .Ext (filename ))
736743
737- err = imagemeta .Decode (imagemeta.Options {R : f , ImageFormat : imageFormat , ShouldHandleTag : shouldHandle , HandleTag : handleTag , Sources : sources })
744+ knownWarnings := []* regexp.Regexp {
745+ regexp .MustCompile ("GPSLatitude.*0100" ),
746+ }
747+
748+ warnf := func (format string , args ... any ) {
749+ s := fmt .Sprintf (format , args ... )
750+ for _ , re := range knownWarnings {
751+ if re .MatchString (s ) {
752+ return
753+ }
754+ }
755+ panic (errors .New (s ))
756+ }
757+
758+ err = imagemeta .Decode (imagemeta.Options {R : f , ImageFormat : imageFormat , ShouldHandleTag : shouldHandle , HandleTag : handleTag , Warnf : warnf , Sources : sources })
738759 if err != nil {
739760 t .Fatal (fmt .Errorf ("failed to decode %q: %w" , filename , err ))
740761 }
@@ -879,39 +900,39 @@ func BenchmarkDecode(b *testing.B) {
879900
880901 imageFormat := imagemeta .PNG
881902 runBenchmark (b , "png/exif" , imagemeta .PNG , func (r io.ReadSeeker ) error {
882- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetEXIF })
903+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetEXIF })
883904 return err
884905 })
885906
886907 runBenchmark (b , "png/all" , imagemeta .PNG , func (r io.ReadSeeker ) error {
887- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetAll })
908+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetAll })
888909 return err
889910 })
890911
891912 imageFormat = imagemeta .WebP
892913 runBenchmark (b , "webp/all" , imageFormat , func (r io.ReadSeeker ) error {
893- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetAll })
914+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetAll })
894915 return err
895916 })
896917
897918 runBenchmark (b , "webp/xmp" , imageFormat , func (r io.ReadSeeker ) error {
898- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : imagemeta .XMP })
919+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : imagemeta .XMP })
899920 return err
900921 })
901922
902923 runBenchmark (b , "webp/exif" , imageFormat , func (r io.ReadSeeker ) error {
903- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetEXIF })
924+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetEXIF })
904925 return err
905926 })
906927
907928 imageFormat = imagemeta .JPEG
908929 runBenchmark (b , "jpg/exif" , imageFormat , func (r io.ReadSeeker ) error {
909- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetEXIF })
930+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetEXIF })
910931 return err
911932 })
912933
913934 runBenchmark (b , "jpg/iptc" , imageFormat , func (r io.ReadSeeker ) error {
914- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetIPTC })
935+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetIPTC })
915936 return err
916937 })
917938
@@ -925,7 +946,7 @@ func BenchmarkDecode(b *testing.B) {
925946 }
926947 return nil
927948 }
928- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , ShouldHandleTag : shouldHandle , HandleTag : handleTag , Sources : sourceSetIPTC })
949+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , ShouldHandleTag : shouldHandle , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetIPTC })
929950 return err
930951 })
931952
@@ -939,31 +960,31 @@ func BenchmarkDecode(b *testing.B) {
939960 }
940961 return nil
941962 }
942- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , ShouldHandleTag : shouldHandle , HandleTag : handleTag , Sources : sourceSetIPTC })
963+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , ShouldHandleTag : shouldHandle , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetIPTC })
943964 return err
944965 })
945966
946967 runBenchmark (b , "jpg/xmp" , imageFormat , func (r io.ReadSeeker ) error {
947- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : imagemeta .XMP })
968+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : imagemeta .XMP })
948969 return err
949970 })
950971
951972 runBenchmark (b , "jpg/all" , imageFormat , func (r io.ReadSeeker ) error {
952- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetAll })
973+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetAll })
953974 return err
954975 })
955976
956977 imageFormat = imagemeta .TIFF
957978 runBenchmark (b , "tiff/exif" , imageFormat , func (r io.ReadSeeker ) error {
958- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetEXIF })
979+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetEXIF })
959980 return err
960981 })
961982 runBenchmark (b , "tiff/iptc" , imageFormat , func (r io.ReadSeeker ) error {
962- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetIPTC })
983+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetIPTC })
963984 return err
964985 })
965986 runBenchmark (b , "tiff/all" , imageFormat , func (r io.ReadSeeker ) error {
966- err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Sources : sourceSetAll })
987+ err := imagemeta .Decode (imagemeta.Options {R : r , ImageFormat : imageFormat , HandleTag : handleTag , Warnf : panicWarnf , Sources : sourceSetAll })
967988 return err
968989 })
969990}
@@ -1020,3 +1041,7 @@ func BenchmarkDecodeCompareWithGoexif(b *testing.B) {
10201041 return err
10211042 })
10221043}
1044+
1045+ func panicWarnf (format string , args ... interface {}) {
1046+ panic (fmt .Errorf (format , args ... ))
1047+ }
0 commit comments