File indexing completed on 2024-05-26 04:33:48
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2021 L. E. Segovia <amy@amyspark.me> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "kis_exif_test.h" 0009 0010 #include <filestest.h> 0011 #include <simpletest.h> 0012 #include <testui.h> 0013 0014 0015 #include <QBuffer> 0016 #include <QCoreApplication> 0017 0018 #include <kis_debug.h> 0019 #include <kis_meta_data_backend_registry.h> 0020 #include <kis_meta_data_entry.h> 0021 #include <kis_meta_data_io_backend.h> 0022 #include <kis_meta_data_schema.h> 0023 #include <kis_meta_data_schema_registry.h> 0024 #include <kis_meta_data_store.h> 0025 #include <kis_meta_data_validator.h> 0026 #include <kis_meta_data_value.h> 0027 0028 #ifndef FILES_DATA_DIR 0029 #error "FILES_DATA_DIR not set. A directory with the data used for testing the metadata parser in krita" 0030 #endif 0031 0032 using namespace KisMetaData; 0033 0034 void KisExifTest::testExifLoader() 0035 { 0036 IOBackend *exifIO = KisMetadataBackendRegistry::instance()->get("exif"); 0037 QVERIFY(exifIO); 0038 QFile exifFile(QString(FILES_DATA_DIR) + "/metadata/hpim3238.exv"); 0039 exifFile.open(QIODevice::ReadOnly); 0040 exifFile.seek(17); 0041 QByteArray exifBytes = exifFile.readAll(); 0042 QBuffer exifBuffer(&exifBytes); 0043 0044 Store *store = new Store; 0045 bool loadSuccess = exifIO->loadFrom(store, &exifBuffer); 0046 QVERIFY(loadSuccess); 0047 Validator validator(store); 0048 0049 for (QMap<QString, Validator::Reason>::const_iterator it = validator.invalidEntries().begin(); 0050 it != validator.invalidEntries().end(); 0051 ++it) { 0052 dbgKrita << it.key() << " = " << it.value().type() << " entry = " << store->getEntry(it.key()); 0053 } 0054 0055 QCOMPARE(validator.countInvalidEntries(), 0); 0056 QCOMPARE(validator.countValidEntries(), 51); 0057 0058 const KisMetaData::Schema *tiffSchema = 0059 KisMetaData::SchemaRegistry::instance()->schemaFromUri(KisMetaData::Schema::TIFFSchemaUri); 0060 0061 QCOMPARE(store->getEntry(tiffSchema, "Make").value(), Value("Hewlett-Packard")); 0062 QCOMPARE(store->getEntry(tiffSchema, "Model").value(), Value("HP PhotoSmart R707 (V01.00) ")); 0063 QCOMPARE(store->getEntry(tiffSchema, "Orientation").value(), Value(1)); 0064 QCOMPARE(store->getEntry(tiffSchema, "XResolution").value(), Value(Rational(72 / 1))); 0065 QCOMPARE(store->getEntry(tiffSchema, "YResolution").value(), Value(Rational(72 / 1))); 0066 QCOMPARE(store->getEntry(tiffSchema, "ResolutionUnit").value(), Value(2)); 0067 QCOMPARE(store->getEntry(tiffSchema, "YCbCrPositioning").value(), Value(1)); 0068 0069 const KisMetaData::Schema *exifSchema = 0070 KisMetaData::SchemaRegistry::instance()->schemaFromUri(KisMetaData::Schema::EXIFSchemaUri); 0071 0072 QCOMPARE(store->getEntry(exifSchema, "ExposureTime").value(), Value(Rational(35355, 100000))); 0073 QCOMPARE(store->getEntry(exifSchema, "FNumber").value(), Value(Rational(280, 100))); 0074 QCOMPARE(store->getEntry(exifSchema, "ExposureProgram").value(), Value(2)); 0075 // QCOMPARE(store->getEntry(exifSchema, "ISOSpeedRatings").value(), Value(100)); // TODO it's a list 0076 // TODO test OECF 0077 QCOMPARE(store->getEntry(exifSchema, "ExifVersion").value(), Value("0220")); 0078 QCOMPARE(store->getEntry(exifSchema, "DateTimeOriginal").value(), 0079 Value(QDateTime(QDate(2007, 5, 8), QTime(0, 19, 18)))); 0080 QCOMPARE(store->getEntry(exifSchema, "DateTimeDigitized").value(), 0081 Value(QDateTime(QDate(2007, 5, 8), QTime(0, 19, 18)))); 0082 // TODO ComponentsConfiguration 0083 QCOMPARE(store->getEntry(exifSchema, "ShutterSpeedValue").value(), Value(Rational(384, 256))); 0084 QCOMPARE(store->getEntry(exifSchema, "ApertureValue").value(), Value(Rational(780, 256))); 0085 QCOMPARE(store->getEntry(exifSchema, "BrightnessValue").value(), Value(Rational(-37, 256))); 0086 QCOMPARE(store->getEntry(exifSchema, "ExposureBiasValue").value(), Value(Rational(256, 256))); 0087 QCOMPARE(store->getEntry(exifSchema, "MaxApertureValue").value(), Value(Rational(280, 100))); 0088 QCOMPARE(store->getEntry(exifSchema, "SubjectDistance").value(), Value(Rational(65535, 1000))); 0089 0090 const KisMetaData::Schema *dcSchema = 0091 KisMetaData::SchemaRegistry::instance()->schemaFromUri(KisMetaData::Schema::DublinCoreSchemaUri); 0092 Q_UNUSED(dcSchema); 0093 0094 const KisMetaData::Schema *xmpSchema = 0095 KisMetaData::SchemaRegistry::instance()->schemaFromUri(KisMetaData::Schema::XMPSchemaUri); 0096 QCOMPARE(store->getEntry(xmpSchema, "CreatorTool").value(), Value("digiKam-0.9.1")); 0097 QCOMPARE(store->getEntry(xmpSchema, "ModifyDate").value(), Value(QDateTime(QDate(2007, 5, 8), QTime(0, 19, 18)))); 0098 0099 const KisMetaData::Schema *mknSchema = 0100 KisMetaData::SchemaRegistry::instance()->schemaFromUri(KisMetaData::Schema::MakerNoteSchemaUri); 0101 QCOMPARE(store->getEntry(mknSchema, "RawData").value(), Value("SFBNZXQ=")); 0102 } 0103 0104 KISTEST_MAIN(KisExifTest)