diff options
-rw-r--r-- | cmake/installdata/test-reference-data.txt | 2 | ||||
-rw-r--r-- | cmake/treedata/common/tests.txt | 1 | ||||
-rw-r--r-- | xbmc/pictures/metadata/test/CMakeLists.txt | 3 | ||||
-rw-r--r-- | xbmc/pictures/metadata/test/TestMetadataExtraction.cpp | 80 | ||||
-rw-r--r-- | xbmc/pictures/metadata/test/testdata/exifgps.jpg | bin | 0 -> 33550 bytes | |||
-rw-r--r-- | xbmc/pictures/metadata/test/testdata/iptc.jpg | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000000..12f850c664 --- /dev/null +++ b/xbmc/pictures/metadata/test/testdata/exifgps.jpg diff --git a/xbmc/pictures/metadata/test/testdata/iptc.jpg b/xbmc/pictures/metadata/test/testdata/iptc.jpg Binary files differnew file mode 100644 index 0000000000..4ba500082c --- /dev/null +++ b/xbmc/pictures/metadata/test/testdata/iptc.jpg |