diff options
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofiler.qbs | 1 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/qmlprofilerplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/check.dat | bin | 0 -> 54930 bytes | |||
-rw-r--r-- | src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp | 88 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.h | 55 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/tests.pri | 2 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/tests.qrc | 2 | ||||
-rw-r--r-- | src/plugins/qmlprofiler/tests/traces.dat | bin | 0 -> 1877403 bytes |
8 files changed, 150 insertions, 0 deletions
diff --git a/src/plugins/qmlprofiler/qmlprofiler.qbs b/src/plugins/qmlprofiler/qmlprofiler.qbs index 629641c415..53a46a54e9 100644 --- a/src/plugins/qmlprofiler/qmlprofiler.qbs +++ b/src/plugins/qmlprofiler/qmlprofiler.qbs @@ -94,6 +94,7 @@ QtcPlugin { "qmlprofilerclientmanager_test.cpp", "qmlprofilerclientmanager_test.h", "qmlprofilerconfigwidget_test.cpp", "qmlprofilerconfigwidget_test.h", "qmlprofilerdetailsrewriter_test.cpp", "qmlprofilerdetailsrewriter_test.h", + "qmlprofilertraceclient_test.cpp", "qmlprofilertraceclient_test.h", "qmlprofilertraceview_test.cpp", "qmlprofilertraceview_test.h", "tests.qrc" diff --git a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp index d18514eb88..2de162921c 100644 --- a/src/plugins/qmlprofiler/qmlprofilerplugin.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerplugin.cpp @@ -49,6 +49,7 @@ #include "tests/qmlprofilerclientmanager_test.h" #include "tests/qmlprofilerconfigwidget_test.h" #include "tests/qmlprofilerdetailsrewriter_test.h" +#include "tests/qmlprofilertraceclient_test.h" #include "tests/qmlprofilertraceview_test.h" // Force QML Debugging to be enabled, so that we can selftest the profiler @@ -147,6 +148,7 @@ QList<QObject *> QmlProfiler::Internal::QmlProfilerPlugin::createTestObjects() c tests << new QmlProfilerClientManagerTest; tests << new QmlProfilerConfigWidgetTest; tests << new QmlProfilerDetailsRewriterTest; + tests << new QmlProfilerTraceClientTest; tests << new QmlProfilerTraceViewTest; tests << new QQmlEngine; // Trigger debug connector to be started diff --git a/src/plugins/qmlprofiler/tests/check.dat b/src/plugins/qmlprofiler/tests/check.dat Binary files differnew file mode 100644 index 0000000000..15ab974b4a --- /dev/null +++ b/src/plugins/qmlprofiler/tests/check.dat diff --git a/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp new file mode 100644 index 0000000000..e8781e790c --- /dev/null +++ b/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "qmlprofilertraceclient_test.h" +#include <qmldebug/qpacketprotocol.h> +#include <QtTest> + +namespace QmlProfiler { +namespace Internal { + +QmlProfilerTraceClientTest::QmlProfilerTraceClientTest(QObject *parent) : QObject(parent), + traceClient(nullptr, &modelManager, std::numeric_limits<quint64>::max()) +{ +} + +static void bufferCompressedFile(const QString &name, QBuffer &buffer) +{ + QFile file(name); + QVERIFY(file.open(QIODevice::ReadOnly)); + buffer.setData(qUncompress(file.readAll())); + file.close(); + QVERIFY(buffer.open(QIODevice::ReadOnly)); +} + +void QmlProfilerTraceClientTest::testMessageReceived() +{ + QBuffer inBuffer; + bufferCompressedFile(":/qmlprofiler/tests/traces.dat", inBuffer); + QDataStream inStream(&inBuffer); + inStream.setVersion(QDataStream::Qt_5_6); + + QBuffer checkBuffer; + bufferCompressedFile(":/qmlprofiler/tests/check.dat", checkBuffer); + QDataStream checkStream(&checkBuffer); + checkStream.setVersion(QDataStream::Qt_5_6); + + while (!inStream.atEnd()) { + QByteArray trace; + inStream >> trace; + + QmlDebug::QPacket packet(QDataStream::Qt_4_7, trace); + while (!packet.atEnd()) { + QByteArray content; + packet >> content; + traceClient.messageReceived(content); + } + + modelManager.replayEvents(-1, -1, [&](const QmlEvent &event, const QmlEventType &type) { + qint64 timestamp; + qint32 message; + qint32 rangeType; + checkStream >> timestamp >> message >> rangeType; + QCOMPARE(event.timestamp(), timestamp); + QCOMPARE(type.message(), static_cast<Message>(message)); + QCOMPARE(type.rangeType(), static_cast<RangeType>(rangeType)); + }); + + modelManager.clear(); + traceClient.clear(); + } + + QVERIFY(checkStream.atEnd()); +} + +} // namespace Internal +} // namespace QmlProfiler diff --git a/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.h b/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.h new file mode 100644 index 0000000000..8a72786a41 --- /dev/null +++ b/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.h @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include <qmlprofiler/qmlprofilermodelmanager.h> +#include <qmlprofiler/qmlprofilertraceclient.h> + +#include <QObject> + +extern "C" { +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) QMLPROFILER_EXPORT; +} + +namespace QmlProfiler { +namespace Internal { + +class QmlProfilerTraceClientTest : public QObject +{ + Q_OBJECT +public: + QmlProfilerTraceClient traceClient; + explicit QmlProfilerTraceClientTest(QObject *parent = nullptr); + +private slots: + void testMessageReceived(); + +private: + QmlProfilerModelManager modelManager; +}; + +} // namespace Internal +} // namespace QmlProfiler diff --git a/src/plugins/qmlprofiler/tests/tests.pri b/src/plugins/qmlprofiler/tests/tests.pri index c456010043..7735d79c6b 100644 --- a/src/plugins/qmlprofiler/tests/tests.pri +++ b/src/plugins/qmlprofiler/tests/tests.pri @@ -16,6 +16,7 @@ SOURCES += \ $$PWD/qmlprofilerclientmanager_test.cpp \ $$PWD/qmlprofilerconfigwidget_test.cpp \ $$PWD/qmlprofilerdetailsrewriter_test.cpp \ + $$PWD/qmlprofilertraceclient_test.cpp \ $$PWD/qmlprofilertraceview_test.cpp HEADERS += \ @@ -36,6 +37,7 @@ HEADERS += \ $$PWD/qmlprofilerclientmanager_test.h \ $$PWD/qmlprofilerconfigwidget_test.h \ $$PWD/qmlprofilerdetailsrewriter_test.h \ + $$PWD/qmlprofilertraceclient_test.h \ $$PWD/qmlprofilertraceview_test.h RESOURCES += \ diff --git a/src/plugins/qmlprofiler/tests/tests.qrc b/src/plugins/qmlprofiler/tests/tests.qrc index 323fb37b14..5b0598fc88 100644 --- a/src/plugins/qmlprofiler/tests/tests.qrc +++ b/src/plugins/qmlprofiler/tests/tests.qrc @@ -2,5 +2,7 @@ <qresource prefix="/qmlprofiler/tests"> <file>Test.qml</file> <file>qmlprofilerdetailsrewriter_test.cpp</file> + <file>traces.dat</file> + <file>check.dat</file> </qresource> </RCC> diff --git a/src/plugins/qmlprofiler/tests/traces.dat b/src/plugins/qmlprofiler/tests/traces.dat Binary files differnew file mode 100644 index 0000000000..108ff72220 --- /dev/null +++ b/src/plugins/qmlprofiler/tests/traces.dat |