1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QBuffer>
#include <QSharedPointer>
#include <QTemporaryFile>
#include <QVariantMap>
#include <QtQuick3DRuntimeRender/private/qssglightmapio_p.h>
class tst_QQuick3DLightmapIO : public QObject
{
Q_OBJECT
private slots:
void testWriteAndRead();
void testSaveToInvalidPath();
};
// Test writing and reading metadata and image
void tst_QQuick3DLightmapIO::testWriteAndRead()
{
QByteArray bufferData;
QByteArray f32Image(16, 'F');
QByteArray u32Image(16, 'U');
QByteArray finalImage("FINAL");
QByteArray directImage("DIRECT");
const QString longName = QStringLiteral("THIS-IS-A-VERY-LONG-NAME-THIS-IS-A-VERY-LONG-NAME-THIS-IS-A-VERY-LONG-"
"NAME-THIS-IS-A-VERY-LONG-NAME-THIS-IS-A-VERY-LONG-NAME_mask");
{ // Save data to buffer
QSharedPointer<QIODevice> buffer(new class QBuffer(&bufferData));
QSharedPointer<QSSGLightmapWriter> io = QSSGLightmapWriter::open(buffer);
QVariantMap metadata;
metadata["author"] = "QtCreator";
metadata["version"] = 1.0;
metadata["width"] = 100;
metadata["height"] = 50;
io->writeMetadata("metadata", metadata);
io->writeF32Image("image", QSSGLightmapIODataTag::Unset, f32Image);
QVariantMap mapA;
QVariantMap mapB;
QVariantMap mapC;
mapA["value"] = "a";
mapB["value"] = "b";
mapC["value"] = "c";
io->writeMetadata("a", mapA);
io->writeMetadata("b", mapB);
io->writeMetadata("c", mapC);
io->writeF32Image("a", QSSGLightmapIODataTag::Texture_Final, finalImage);
io->writeU32Image("a", QSSGLightmapIODataTag::Texture_Direct, directImage);
io->writeU32Image(longName, QSSGLightmapIODataTag::Unset, u32Image);
io->close();
}
QSharedPointer<QIODevice> buffer(new class QBuffer(&bufferData));
QSharedPointer<QSSGLightmapLoader> io = QSSGLightmapLoader::open(buffer);
QVariantMap metadata = io->readMetadata("metadata");
QVariantMap mapA = io->readMetadata("a");
QVariantMap mapB = io->readMetadata("b");
QVariantMap mapC = io->readMetadata("c");
QCOMPARE(metadata["author"].toString(), QString("QtCreator"));
QCOMPARE(metadata["version"].toDouble(), 1.0);
QCOMPARE(metadata["width"].toUInt(), 100);
QCOMPARE(metadata["height"].toUInt(), 50);
QCOMPARE(mapA["value"].toString(), "a");
QCOMPARE(mapB["value"].toString(), "b");
QCOMPARE(mapC["value"].toString(), "c");
QCOMPARE(io->readF32Image("image", QSSGLightmapIODataTag::Unset), f32Image);
QCOMPARE(io->readU32Image(longName, QSSGLightmapIODataTag::Unset), u32Image);
QCOMPARE(io->readF32Image("a", QSSGLightmapIODataTag::Texture_Final), finalImage);
QCOMPARE(io->readU32Image("a", QSSGLightmapIODataTag::Texture_Direct), directImage);
}
// Test saving to an invalid path
void tst_QQuick3DLightmapIO::testSaveToInvalidPath()
{
QSharedPointer<QSSGLightmapLoader> io = QSSGLightmapLoader::open("/nonexistent/path/file.lightmap");
QVERIFY(!io); // We expect it to fail
}
QTEST_APPLESS_MAIN(tst_QQuick3DLightmapIO)
#include "tst_qquick3dlightmapio.moc"
|