From 8609402bd7f4019f17bd4f314a4ee49b6cee267f Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Fri, 31 Jan 2014 11:22:01 +0100 Subject: Test case for V4 profiler and its adapter Change-Id: I64af195a16189cd1306ca80d13c0ef002fa31f59 Reviewed-by: Kai Koehne --- .../qqmlprofilerservice/data/javascript.qml | 17 ++++++++++ .../qqmlprofilerservice/qqmlprofilerservice.pro | 3 +- .../tst_qqmlprofilerservice.cpp | 39 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 tests/auto/qml/debugger/qqmlprofilerservice/data/javascript.qml diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/data/javascript.qml b/tests/auto/qml/debugger/qqmlprofilerservice/data/javascript.qml new file mode 100644 index 0000000000..0555d49652 --- /dev/null +++ b/tests/auto/qml/debugger/qqmlprofilerservice/data/javascript.qml @@ -0,0 +1,17 @@ +import QtQuick 2.0 + +Rectangle { + function something(i) { + if (i > 10) { + something(i / 4); + } else { + console.log("done"); + } + } + + width: 400 + height: 400 + + onWidthChanged: something(width); + Component.onCompleted: width = 500; +} diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro b/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro index 647d761dc4..1bab614b63 100644 --- a/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro +++ b/tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro @@ -20,4 +20,5 @@ OTHER_FILES += \ data/exit.qml \ data/scenegraphTest.qml \ data/TestImage_2x2.png \ - data/signalSourceLocation.qml + data/signalSourceLocation.qml \ + data/javascript.qml diff --git a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp index 63bb0b4c9e..6dbdc83b08 100644 --- a/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp +++ b/tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp @@ -183,6 +183,7 @@ private slots: void profileOnExit(); void controlFromJS(); void signalSourceLocation(); + void javascript(); }; void QQmlProfilerClient::messageReceived(const QByteArray &message) @@ -558,6 +559,44 @@ void tst_QQmlProfilerService::signalSourceLocation() QCOMPARE(m_client->traceMessages.last().detailType, (int)QQmlProfilerClient::EndTrace); } +void tst_QQmlProfilerService::javascript() +{ + connect(true, "javascript.qml"); + QVERIFY(m_client); + QTRY_COMPARE(m_client->state(), QQmlDebugClient::Enabled); + + m_client->setTraceState(true); + while (!(m_process->output().contains(QLatin1String("done")))) + QVERIFY(QQmlDebugTest::waitForSignal(m_process, SIGNAL(readyReadStandardOutput()))); + m_client->setTraceState(false); + QVERIFY2(QQmlDebugTest::waitForSignal(m_client, SIGNAL(complete())), "No trace received in time."); + + QVERIFY(m_client->traceMessages.count() >= 36); + // must start with "StartTrace" + QCOMPARE(m_client->traceMessages.first().messageType, (int)QQmlProfilerClient::Event); + QCOMPARE(m_client->traceMessages.first().detailType, (int)QQmlProfilerClient::StartTrace); + + QVERIFY(m_client->traceMessages[32].messageType == QQmlProfilerClient::RangeStart); + QVERIFY(m_client->traceMessages[32].detailType == QQmlProfilerClient::Javascript); + + QVERIFY(m_client->traceMessages[33].messageType == QQmlProfilerClient::RangeLocation); + QVERIFY(m_client->traceMessages[33].detailType == QQmlProfilerClient::Javascript); + QVERIFY(m_client->traceMessages[33].detailData.endsWith("javascript.qml")); + QVERIFY(m_client->traceMessages[33].line == 4); + QVERIFY(m_client->traceMessages[33].column == 5); + + QVERIFY(m_client->traceMessages[34].messageType == QQmlProfilerClient::RangeData); + QVERIFY(m_client->traceMessages[34].detailType == QQmlProfilerClient::Javascript); + QVERIFY(m_client->traceMessages[34].detailData == "something"); + + QVERIFY(m_client->traceMessages[35].messageType == QQmlProfilerClient::RangeEnd); + QVERIFY(m_client->traceMessages[35].detailType == QQmlProfilerClient::Javascript); + + // must end with "EndTrace" + QCOMPARE(m_client->traceMessages.last().messageType, (int)QQmlProfilerClient::Event); + QCOMPARE(m_client->traceMessages.last().detailType, (int)QQmlProfilerClient::EndTrace); +} + QTEST_MAIN(tst_QQmlProfilerService) #include "tst_qqmlprofilerservice.moc" -- cgit v1.2.3