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)