File: tst_qquick3dlightmapio.cpp

package info (click to toggle)
qt6-quick3d 6.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 143,588 kB
  • sloc: cpp: 395,989; ansic: 41,469; xml: 288; sh: 242; makefile: 32
file content (96 lines) | stat: -rw-r--r-- 3,319 bytes parent folder | download
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"