aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/installdata/test-reference-data.txt2
-rw-r--r--cmake/treedata/common/tests.txt1
-rw-r--r--xbmc/pictures/metadata/test/CMakeLists.txt3
-rw-r--r--xbmc/pictures/metadata/test/TestMetadataExtraction.cpp80
-rw-r--r--xbmc/pictures/metadata/test/testdata/exifgps.jpgbin0 -> 33550 bytes
-rw-r--r--xbmc/pictures/metadata/test/testdata/iptc.jpgbin0 -> 6026 bytes
6 files changed, 86 insertions, 0 deletions
diff --git a/cmake/installdata/test-reference-data.txt b/cmake/installdata/test-reference-data.txt
index b2fafd5914..f7833bbad5 100644
--- a/cmake/installdata/test-reference-data.txt
+++ b/cmake/installdata/test-reference-data.txt
@@ -25,6 +25,8 @@ xbmc/filesystem/test/refRARstored.rar
xbmc/network/test/data/test-ranges.txt
xbmc/network/test/data/test.html
xbmc/network/test/data/test.png
+xbmc/pictures/metadata/test/testdata/exifgps.jpg
+xbmc/pictures/metadata/test/testdata/iptc.jpg
xbmc/playlists/test/test.asx
xbmc/playlists/test/test.b4s
xbmc/playlists/test/test.pxml
diff --git a/cmake/treedata/common/tests.txt b/cmake/treedata/common/tests.txt
index 3141b916cd..d7068b066d 100644
--- a/cmake/treedata/common/tests.txt
+++ b/cmake/treedata/common/tests.txt
@@ -12,6 +12,7 @@ xbmc/interfaces/python/test test/python
xbmc/music/test test/music
xbmc/music/tags/test test/music_tags
xbmc/network/test test/network
+xbmc/pictures/metadata/test test/pictures/metatada
xbmc/playlists/test test/playlists
xbmc/pvr/channels/test test/pvrchannels
xbmc/settings/test test/settings
diff --git a/xbmc/pictures/metadata/test/CMakeLists.txt b/xbmc/pictures/metadata/test/CMakeLists.txt
new file mode 100644
index 0000000000..0ca068eab2
--- /dev/null
+++ b/xbmc/pictures/metadata/test/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(SOURCES TestMetadataExtraction.cpp)
+
+core_add_test_library(pictures_metadata_test)
diff --git a/xbmc/pictures/metadata/test/TestMetadataExtraction.cpp b/xbmc/pictures/metadata/test/TestMetadataExtraction.cpp
new file mode 100644
index 0000000000..7b08118dfd
--- /dev/null
+++ b/xbmc/pictures/metadata/test/TestMetadataExtraction.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2023 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "pictures/metadata/ImageMetadataParser.h"
+#include "test/TestUtils.h"
+
+#include <memory>
+
+#include <gtest/gtest.h>
+
+class TestMetadataExtraction : public ::testing::Test
+{
+protected:
+ TestMetadataExtraction() = default;
+};
+
+TEST_F(TestMetadataExtraction, TestGPSImage)
+{
+ auto path = XBMC_REF_FILE_PATH("xbmc/pictures/metadata/test/testdata/exifgps.jpg");
+ std::unique_ptr<ImageMetadata> metadata = CImageMetadataParser::ExtractMetadata(path);
+ // Extract GPS tags
+ EXPECT_EQ(metadata->exifInfo.GpsLat, "49° 5' 47.469\" N");
+ EXPECT_EQ(metadata->exifInfo.GpsLong, "9° 23' 14.630\" E");
+ EXPECT_EQ(metadata->exifInfo.GpsAlt, "333.45m");
+ // Check other exif tags this image also includes
+ EXPECT_EQ(metadata->exifInfo.CameraMake, "SONY");
+ EXPECT_EQ(metadata->exifInfo.CameraModel, "SLT-A77V");
+ EXPECT_EQ(metadata->exifInfo.DateTime, "2020:04:04 13:32:09");
+ EXPECT_EQ(metadata->exifInfo.Orientation, 1);
+ EXPECT_EQ(metadata->exifInfo.FlashUsed, 16);
+ EXPECT_EQ(metadata->exifInfo.FocalLength, 20);
+ EXPECT_EQ(static_cast<int>(metadata->exifInfo.ExposureTime * 1000), 2);
+ EXPECT_EQ(metadata->exifInfo.ApertureFNumber, 8);
+ EXPECT_EQ(metadata->exifInfo.MeteringMode, 5);
+ EXPECT_EQ(metadata->exifInfo.ExposureProgram, 2);
+ EXPECT_EQ(metadata->exifInfo.Whitebalance, 0);
+ EXPECT_EQ(metadata->exifInfo.ISOequivalent, 100);
+ // Check the IPTC tags of this image
+ EXPECT_EQ(metadata->iptcInfo.Keywords, "blauer Himmel, Ausblick, Parkplatz, Löwenstein, Auto");
+ // Generic metadata information
+ EXPECT_EQ(metadata->width, 1);
+ EXPECT_EQ(metadata->height, 1);
+ EXPECT_TRUE(metadata->fileComment.empty());
+ // format specific (but common) metadata
+ EXPECT_TRUE(metadata->isColor);
+ EXPECT_EQ(metadata->encodingProcess, "Baseline DCT, Huffman coding");
+}
+
+TEST_F(TestMetadataExtraction, TestIPTC)
+{
+ auto path = XBMC_REF_FILE_PATH("xbmc/pictures/metadata/test/testdata/iptc.jpg");
+ std::unique_ptr<ImageMetadata> metadata = CImageMetadataParser::ExtractMetadata(path);
+ // Check the IPTC tags of this image
+ EXPECT_TRUE(metadata->iptcInfo.Keywords.empty());
+ EXPECT_EQ(metadata->iptcInfo.RecordVersion, "4");
+ EXPECT_EQ(
+ metadata->iptcInfo.Caption,
+ "The railways of the S45 line are running very close to a small street with parking cars");
+ EXPECT_EQ(metadata->iptcInfo.Headline, "The railway and the cars");
+ EXPECT_EQ(metadata->iptcInfo.SpecialInstructions,
+ "This photo is for metadata testing purposes only");
+ EXPECT_EQ(metadata->iptcInfo.Byline, "Jane Photosty");
+ EXPECT_EQ(metadata->iptcInfo.Credit, "IPTC/Jane Photosty");
+ EXPECT_EQ(metadata->iptcInfo.CopyrightNotice,
+ "\xa9 Copyright 2020 IPTC (Test Images) - www.iptc.org");
+ EXPECT_EQ(metadata->iptcInfo.Date, "2020-01-08");
+ EXPECT_EQ(metadata->iptcInfo.TimeCreated, "13:30:01+01:00");
+ // Generic metadata information
+ EXPECT_EQ(metadata->width, 1);
+ EXPECT_EQ(metadata->height, 1);
+ EXPECT_TRUE(metadata->fileComment.empty());
+ // format specific (but common) metadata
+ EXPECT_TRUE(metadata->isColor);
+ EXPECT_EQ(metadata->encodingProcess, "Baseline DCT, Huffman coding");
+}
diff --git a/xbmc/pictures/metadata/test/testdata/exifgps.jpg b/xbmc/pictures/metadata/test/testdata/exifgps.jpg
new file mode 100644
index 0000000000..12f850c664
--- /dev/null
+++ b/xbmc/pictures/metadata/test/testdata/exifgps.jpg
Binary files differ
diff --git a/xbmc/pictures/metadata/test/testdata/iptc.jpg b/xbmc/pictures/metadata/test/testdata/iptc.jpg
new file mode 100644
index 0000000000..4ba500082c
--- /dev/null
+++ b/xbmc/pictures/metadata/test/testdata/iptc.jpg
Binary files differ