photoprism/internal/meta/exif_test.go
Michael Mayer 4deca6b1ed Metadata: Exclude null bytes from Exif #252
Signed-off-by: Michael Mayer <michael@liquidbytes.net>
2020-02-21 02:15:07 +01:00

122 lines
4.1 KiB
Go

package meta
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestExif(t *testing.T) {
t.Run("jpg file with exif data", func(t *testing.T) {
data, err := Exif("testdata/photoshop.jpg")
if err != nil {
t.Fatal(err)
}
assert.Equal(t, "Michael Mayer", data.Artist)
assert.Equal(t, "2020-01-01T16:28:23Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2020-01-01T17:28:23Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "Example file for development", data.Description)
assert.Equal(t, "This is a legal notice", data.Copyright)
assert.Equal(t, 2736, data.Height)
assert.Equal(t, 3648, data.Width)
assert.Equal(t, 52.459690093888895, data.Lat)
assert.Equal(t, 13.321831703055555, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "HUAWEI", data.CameraMake)
assert.Equal(t, "ELE-L29", data.CameraModel)
assert.Equal(t, "", data.CameraOwner)
assert.Equal(t, "", data.CameraSerial)
assert.Equal(t, 27, data.FocalLength)
assert.Equal(t, 1, int(data.Orientation))
// TODO: Values are empty - why?
// assert.Equal(t, "HUAWEI P30 Rear Main Camera", data.LensModel)
})
t.Run("ladybug jpg file", func(t *testing.T) {
data, err := Exif("testdata/ladybug.jpg")
if err != nil {
t.Fatal(err)
}
// t.Logf("all: %+v", data.All)
assert.Equal(t, "Photographer: TMB", data.Artist)
assert.Equal(t, "2011-07-10T17:34:28Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2011-07-10T19:34:28Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "", data.Title) // Should be "Ladybug"
assert.Equal(t, "", data.Keywords) // Should be "Ladybug"
assert.Equal(t, "", data.Description)
assert.Equal(t, "", data.Copyright)
assert.Equal(t, 540, data.Height)
assert.Equal(t, 720, data.Width)
assert.Equal(t, 51.25485166666667, data.Lat)
assert.Equal(t, 7.389468333333333, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "Canon", data.CameraMake)
assert.Equal(t, "Canon EOS 50D", data.CameraModel)
assert.Equal(t, "Thomas Meyer-Boudnik", data.CameraOwner)
assert.Equal(t, "2260716910", data.CameraSerial)
assert.Equal(t, 100, data.FocalLength)
assert.Equal(t, 1, int(data.Orientation))
})
t.Run("GoPro HD2 jpg file", func(t *testing.T) {
data, err := Exif("testdata/gopro_hd2.jpg")
if err != nil {
t.Fatal(err)
}
// t.Logf("all: %+v", data.All)
assert.Equal(t, "", data.Artist)
assert.Equal(t, "2017-12-21T05:17:28Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2017-12-21T05:17:28Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "", data.Title) // Should be "Ladybug"
assert.Equal(t, "", data.Keywords) // Should be "Ladybug"
assert.Equal(t, "DCIM\\100GOPRO", data.Description)
assert.Equal(t, "", data.Copyright)
assert.Equal(t, 2880, data.Height)
assert.Equal(t, 3840, data.Width)
assert.Equal(t, 0.0, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "GoPro", data.CameraMake)
assert.Equal(t, "HD2", data.CameraModel)
assert.Equal(t, "", data.CameraOwner)
assert.Equal(t, "", data.CameraSerial)
assert.Equal(t, 16, data.FocalLength)
assert.Equal(t, 1, int(data.Orientation))
})
t.Run("png file without exif", func(t *testing.T) {
_, err := Exif("testdata/tweethog.png")
assert.Error(t, err, "file does not have EXIF")
// TODO: png with exif data
})
t.Run("heic file with exif data", func(t *testing.T) {
data, err := Exif("testdata/iphone_7.heic")
if err != nil {
t.Fatal(err)
}
assert.Equal(t, "2018-09-10T03:16:13Z", data.TakenAt.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, "2018-09-10T12:16:13Z", data.TakenAtLocal.Format("2006-01-02T15:04:05Z"))
assert.Equal(t, 34.79745, data.Lat)
assert.Equal(t, 134.76463333333334, data.Lng)
assert.Equal(t, 0, data.Altitude)
assert.Equal(t, "Apple", data.CameraMake)
assert.Equal(t, "iPhone 7", data.CameraModel)
assert.Equal(t, 74, data.FocalLength)
assert.Equal(t, 6, int(data.Orientation))
assert.Equal(t, "Apple", data.LensMake)
assert.Equal(t, "iPhone 7 back camera 3.99mm f/1.8", data.LensModel)
})
}