qsignaldumper.cpp

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/**************************************************************************** -
2** -
3** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -
4** Contact: http://www.qt-project.org/legal -
5** -
6** This file is part of the QtTest module of the Qt Toolkit. -
7** -
8** $QT_BEGIN_LICENSE:LGPL$ -
9** Commercial License Usage -
10** Licensees holding valid commercial Qt licenses may use this file in -
11** accordance with the commercial license agreement provided with the -
12** Software or, alternatively, in accordance with the terms contained in -
13** a written agreement between you and Digia. For licensing terms and -
14** conditions see http://qt.digia.com/licensing. For further information -
15** use the contact form at http://qt.digia.com/contact-us. -
16** -
17** GNU Lesser General Public License Usage -
18** Alternatively, this file may be used under the terms of the GNU Lesser -
19** General Public License version 2.1 as published by the Free Software -
20** Foundation and appearing in the file LICENSE.LGPL included in the -
21** packaging of this file. Please review the following information to -
22** ensure the GNU Lesser General Public License version 2.1 requirements -
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -
24** -
25** In addition, as a special exception, Digia gives you certain additional -
26** rights. These rights are described in the Digia Qt LGPL Exception -
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -
28** -
29** GNU General Public License Usage -
30** Alternatively, this file may be used under the terms of the GNU -
31** General Public License version 3.0 as published by the Free Software -
32** Foundation and appearing in the file LICENSE.GPL included in the -
33** packaging of this file. Please review the following information to -
34** ensure the GNU General Public License version 3.0 requirements will be -
35** met: http://www.gnu.org/copyleft/gpl.html. -
36** -
37** -
38** $QT_END_LICENSE$ -
39** -
40****************************************************************************/ -
41 -
42#include <QtTest/private/qsignaldumper_p.h> -
43 -
44#include <QtCore/qlist.h> -
45#include <QtCore/qmetaobject.h> -
46#include <QtCore/qmetatype.h> -
47#include <QtCore/qobject.h> -
48#include <QtCore/qvariant.h> -
49 -
50#include <QtTest/private/qtestlog_p.h> -
51 -
52#include <QtCore/private/qmetaobject_p.h> -
53 -
54QT_BEGIN_NAMESPACE -
55 -
56namespace QTest -
57{ -
58 -
59inline static void qPrintMessage(const QByteArray &ba) -
60{ -
61 QTestLog::info(ba.constData(), 0, 0);
never executed (the execution status of this line is deduced): QTestLog::info(ba.constData(), 0, 0);
-
62}
never executed: }
0
63 -
64Q_GLOBAL_STATIC(QList<QByteArray>, ignoreClasses)
never executed: delete x;
never executed: return thisGlobalStatic.pointer.load();
never evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x)
never evaluated: !thisGlobalStatic.pointer.load()
never evaluated: !thisGlobalStatic.destroyed
0
65static int iLevel = 0; -
66static int ignoreLevel = 0; -
67enum { IndentSpacesCount = 4 }; -
68 -
69static void qSignalDumperCallback(QObject *caller, int signal_index, void **argv) -
70{ -
71 Q_ASSERT(caller); Q_ASSERT(argv); Q_UNUSED(argv);
never executed (the execution status of this line is deduced): qt_noop(); qt_noop(); (void)argv;;
-
72 const QMetaObject *mo = caller->metaObject();
never executed (the execution status of this line is deduced): const QMetaObject *mo = caller->metaObject();
-
73 Q_ASSERT(mo);
never executed (the execution status of this line is deduced): qt_noop();
-
74 QMetaMethod member = QMetaObjectPrivate::signal(mo, signal_index);
never executed (the execution status of this line is deduced): QMetaMethod member = QMetaObjectPrivate::signal(mo, signal_index);
-
75 Q_ASSERT(member.isValid());
never executed (the execution status of this line is deduced): qt_noop();
-
76 -
77 if (QTest::ignoreClasses() && QTest::ignoreClasses()->contains(mo->className())) {
never evaluated: QTest::ignoreClasses()
never evaluated: QTest::ignoreClasses()->contains(mo->className())
0
78 ++QTest::ignoreLevel;
never executed (the execution status of this line is deduced): ++QTest::ignoreLevel;
-
79 return;
never executed: return;
0
80 } -
81 -
82 QByteArray str;
never executed (the execution status of this line is deduced): QByteArray str;
-
83 str.fill(' ', QTest::iLevel++ * QTest::IndentSpacesCount);
never executed (the execution status of this line is deduced): str.fill(' ', QTest::iLevel++ * QTest::IndentSpacesCount);
-
84 str += "Signal: ";
never executed (the execution status of this line is deduced): str += "Signal: ";
-
85 str += mo->className();
never executed (the execution status of this line is deduced): str += mo->className();
-
86 str += '(';
never executed (the execution status of this line is deduced): str += '(';
-
87 -
88 QString objname = caller->objectName();
never executed (the execution status of this line is deduced): QString objname = caller->objectName();
-
89 str += objname.toLocal8Bit();
never executed (the execution status of this line is deduced): str += objname.toLocal8Bit();
-
90 if (!objname.isEmpty())
never evaluated: !objname.isEmpty()
0
91 str += ' ';
never executed: str += ' ';
0
92 str += QByteArray::number(quintptr(caller), 16);
never executed (the execution status of this line is deduced): str += QByteArray::number(quintptr(caller), 16);
-
93 -
94 str += ") ";
never executed (the execution status of this line is deduced): str += ") ";
-
95 str += member.name();
never executed (the execution status of this line is deduced): str += member.name();
-
96 str += " (";
never executed (the execution status of this line is deduced): str += " (";
-
97 -
98 QList<QByteArray> args = member.parameterTypes();
never executed (the execution status of this line is deduced): QList<QByteArray> args = member.parameterTypes();
-
99 for (int i = 0; i < args.count(); ++i) {
never evaluated: i < args.count()
0
100 const QByteArray &arg = args.at(i);
never executed (the execution status of this line is deduced): const QByteArray &arg = args.at(i);
-
101 int typeId = QMetaType::type(args.at(i).constData());
never executed (the execution status of this line is deduced): int typeId = QMetaType::type(args.at(i).constData());
-
102 if (arg.endsWith('*') || arg.endsWith('&')) {
never evaluated: arg.endsWith('*')
never evaluated: arg.endsWith('&')
0
103 str += '(';
never executed (the execution status of this line is deduced): str += '(';
-
104 str += arg;
never executed (the execution status of this line is deduced): str += arg;
-
105 str += ')';
never executed (the execution status of this line is deduced): str += ')';
-
106 if (arg.endsWith('&'))
never evaluated: arg.endsWith('&')
0
107 str += '@';
never executed: str += '@';
0
108 -
109 quintptr addr = quintptr(*reinterpret_cast<void **>(argv[i + 1]));
never executed (the execution status of this line is deduced): quintptr addr = quintptr(*reinterpret_cast<void **>(argv[i + 1]));
-
110 str.append(QByteArray::number(addr, 16));
never executed (the execution status of this line is deduced): str.append(QByteArray::number(addr, 16));
-
111 } else if (typeId != QMetaType::UnknownType) {
never executed: }
never evaluated: typeId != QMetaType::UnknownType
0
112 Q_ASSERT(typeId != QMetaType::Void); // void parameter => metaobject is corrupt
never executed (the execution status of this line is deduced): qt_noop();
-
113 str.append(arg)
never executed (the execution status of this line is deduced): str.append(arg)
-
114 .append('(')
never executed (the execution status of this line is deduced): .append('(')
-
115 .append(QVariant(typeId, argv[i + 1]).toString().toLocal8Bit())
never executed (the execution status of this line is deduced): .append(QVariant(typeId, argv[i + 1]).toString().toLocal8Bit())
-
116 .append(')');
never executed (the execution status of this line is deduced): .append(')');
-
117 }
never executed: }
0
118 str.append(", ");
never executed (the execution status of this line is deduced): str.append(", ");
-
119 }
never executed: }
0
120 if (str.endsWith(", "))
never evaluated: str.endsWith(", ")
0
121 str.chop(2);
never executed: str.chop(2);
0
122 str.append(')');
never executed (the execution status of this line is deduced): str.append(')');
-
123 qPrintMessage(str);
never executed (the execution status of this line is deduced): qPrintMessage(str);
-
124}
never executed: }
0
125 -
126static void qSignalDumperCallbackSlot(QObject *caller, int method_index, void **argv) -
127{ -
128 Q_ASSERT(caller); Q_ASSERT(argv); Q_UNUSED(argv);
never executed (the execution status of this line is deduced): qt_noop(); qt_noop(); (void)argv;;
-
129 const QMetaObject *mo = caller->metaObject();
never executed (the execution status of this line is deduced): const QMetaObject *mo = caller->metaObject();
-
130 Q_ASSERT(mo);
never executed (the execution status of this line is deduced): qt_noop();
-
131 QMetaMethod member = mo->method(method_index);
never executed (the execution status of this line is deduced): QMetaMethod member = mo->method(method_index);
-
132 if (!member.isValid())
never evaluated: !member.isValid()
0
133 return;
never executed: return;
0
134 -
135 if (QTest::ignoreLevel ||
never evaluated: QTest::ignoreLevel
0
136 (QTest::ignoreClasses() && QTest::ignoreClasses()->contains(mo->className())))
never evaluated: QTest::ignoreClasses()
never evaluated: QTest::ignoreClasses()->contains(mo->className())
0
137 return;
never executed: return;
0
138 -
139 QByteArray str;
never executed (the execution status of this line is deduced): QByteArray str;
-
140 str.fill(' ', QTest::iLevel * QTest::IndentSpacesCount);
never executed (the execution status of this line is deduced): str.fill(' ', QTest::iLevel * QTest::IndentSpacesCount);
-
141 str += "Slot: ";
never executed (the execution status of this line is deduced): str += "Slot: ";
-
142 str += mo->className();
never executed (the execution status of this line is deduced): str += mo->className();
-
143 str += '(';
never executed (the execution status of this line is deduced): str += '(';
-
144 -
145 QString objname = caller->objectName();
never executed (the execution status of this line is deduced): QString objname = caller->objectName();
-
146 str += objname.toLocal8Bit();
never executed (the execution status of this line is deduced): str += objname.toLocal8Bit();
-
147 if (!objname.isEmpty())
never evaluated: !objname.isEmpty()
0
148 str += ' ';
never executed: str += ' ';
0
149 str += QByteArray::number(quintptr(caller), 16);
never executed (the execution status of this line is deduced): str += QByteArray::number(quintptr(caller), 16);
-
150 -
151 str += ") ";
never executed (the execution status of this line is deduced): str += ") ";
-
152 str += member.methodSignature();
never executed (the execution status of this line is deduced): str += member.methodSignature();
-
153 qPrintMessage(str);
never executed (the execution status of this line is deduced): qPrintMessage(str);
-
154}
never executed: }
0
155 -
156static void qSignalDumperCallbackEndSignal(QObject *caller, int /*signal_index*/) -
157{ -
158 Q_ASSERT(caller); Q_ASSERT(caller->metaObject());
never executed (the execution status of this line is deduced): qt_noop(); qt_noop();
-
159 if (QTest::ignoreClasses()
never evaluated: QTest::ignoreClasses()
0
160 && QTest::ignoreClasses()->contains(caller->metaObject()->className())) {
never evaluated: QTest::ignoreClasses()->contains(caller->metaObject()->className())
0
161 --QTest::ignoreLevel;
never executed (the execution status of this line is deduced): --QTest::ignoreLevel;
-
162 Q_ASSERT(QTest::ignoreLevel >= 0);
never executed (the execution status of this line is deduced): qt_noop();
-
163 return;
never executed: return;
0
164 } -
165 --QTest::iLevel;
never executed (the execution status of this line is deduced): --QTest::iLevel;
-
166 Q_ASSERT(QTest::iLevel >= 0);
never executed (the execution status of this line is deduced): qt_noop();
-
167}
never executed: }
0
168 -
169} -
170 -
171void QSignalDumper::startDump() -
172{ -
173 static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback, -
174 QTest::qSignalDumperCallbackSlot, QTest::qSignalDumperCallbackEndSignal, 0 }; -
175 qt_register_signal_spy_callbacks(set);
never executed (the execution status of this line is deduced): qt_register_signal_spy_callbacks(set);
-
176}
never executed: }
0
177 -
178void QSignalDumper::endDump() -
179{ -
180 static QSignalSpyCallbackSet nset = { 0, 0, 0 ,0 }; -
181 qt_register_signal_spy_callbacks(nset);
executed (the execution status of this line is deduced): qt_register_signal_spy_callbacks(nset);
-
182}
executed: }
Execution Count:394
394
183 -
184void QSignalDumper::ignoreClass(const QByteArray &klass) -
185{ -
186 if (QTest::ignoreClasses())
never evaluated: QTest::ignoreClasses()
0
187 QTest::ignoreClasses()->append(klass);
never executed: QTest::ignoreClasses()->append(klass);
0
188}
never executed: }
0
189 -
190void QSignalDumper::clearIgnoredClasses() -
191{ -
192 if (QTest::ignoreClasses())
never evaluated: QTest::ignoreClasses()
0
193 QTest::ignoreClasses()->clear();
never executed: QTest::ignoreClasses()->clear();
0
194}
never executed: }
0
195 -
196QT_END_NAMESPACE -
197 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial