debugger: work on manual tests

Change-Id: Ifdcf4e9a09be0cc21ab9dc579dcae8dfbe91a9d2
Reviewed-on: http://codereview.qt.nokia.com/3212
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2011-08-18 16:14:34 +02:00
committed by hjk
parent 450142b97d
commit 8d2f0376e2

View File

@@ -34,7 +34,7 @@
//template <typename T> class B; B foo() {}
void dummyStatement(const void * = 0, const void * = 0, const void * = 0) {}
void dummyStatement(...) {}
#include "../simple/deep/deep/simple_gdbtest_app.h"
@@ -156,110 +156,6 @@ namespace multibp {
} // namespace multibp
namespace qobjectdata {
#if USE_PRIVATE
class DerivedObjectPrivate : public QObjectPrivate
{
public:
DerivedObjectPrivate()
{
m_extraX = 43;
m_extraY.append("xxx");
m_extraZ = 1;
}
int m_extraX;
QStringList m_extraY;
uint m_extraZ : 1;
bool m_extraA : 1;
bool m_extraB;
};
class DerivedObject : public QObject
{
Q_OBJECT
public:
DerivedObject()
: QObject(*new DerivedObjectPrivate, 0)
{}
Q_PROPERTY(int x READ x WRITE setX)
Q_PROPERTY(QStringList y READ y WRITE setY)
Q_PROPERTY(uint z READ z WRITE setZ)
int x() const;
void setX(int x);
QStringList y() const;
void setY(QStringList y);
uint z() const;
void setZ(uint z);
private:
Q_DECLARE_PRIVATE(DerivedObject)
};
int DerivedObject::x() const
{
Q_D(const DerivedObject);
return d->m_extraX;
}
void DerivedObject::setX(int x)
{
Q_D(DerivedObject);
d->m_extraX = x;
d->m_extraA = !d->m_extraA;
d->m_extraB = !d->m_extraB;
}
QStringList DerivedObject::y() const
{
Q_D(const DerivedObject);
return d->m_extraY;
}
void DerivedObject::setY(QStringList y)
{
Q_D(DerivedObject);
d->m_extraY = y;
}
uint DerivedObject::z() const
{
Q_D(const DerivedObject);
return d->m_extraZ;
}
void DerivedObject::setZ(uint z)
{
Q_D(DerivedObject);
d->m_extraZ = z;
}
#endif
void testQObjectData()
{
// This checks whether QObject-derived classes with Q_PROPERTYs
// are displayed properly.
#if USE_PRIVATE
DerivedObject ob;
// <=== Break here.
// expand ob and ob.properties
// step, and check whether x gets updated.
ob.setX(23);
ob.setX(25);
ob.setX(26);
ob.setX(63);
ob.setX(32);
#endif
}
} // namespace qobjectdata
namespace nsX { namespace nsY { int z; } }
namespace nsXY = nsX::nsY;
@@ -462,20 +358,6 @@ namespace anon {
} // namespace anon
typedef void (*func_t)();
func_t testFunctionPointer()
{
func_t f1 = anon::testAnonymous;
func_t f2 = testPeekAndPoke3;
func_t f3 = testPeekAndPoke3;
Q_UNUSED(f1);
Q_UNUSED(f2);
Q_UNUSED(f3);
return f1;
}
namespace qbytearray {
void testQByteArray1()
@@ -624,7 +506,7 @@ namespace qhostaddress {
{
QHostAddress ha1(129u * 256u * 256u * 256u + 130u);
QHostAddress ha2("127.0.0.1");
// <== break here
// <== Break here.
// Check ha1 and ha2 look correct.
dummyStatement(&ha1, &ha2);
}
@@ -723,36 +605,6 @@ void testFunction()
func.max = 8;
}
void testOutput()
{
qDebug() << "qDebug() 1";
qDebug() << "qDebug() 2";
qDebug() << "qDebug() 3";
qDebug() << "qDebug <foo & bar>";
std::cout << "std::cout @@ 1" << std::endl;
std::cout << "std::cout @@ 2\n";
std::cout << "std::cout @@ 3" << std::endl;
std::cout << "std::cout <foo & bar>\n";
std::cerr << "std::cerr 1\n";
std::cerr << "std::cerr 2\n";
std::cerr << "std::cerr 3\n";
std::cerr << "std::cerr <foo & bar>\n";
}
void testInput()
{
#if 0
// This works only when "Run in terminal" is selected
// in the Run Configuration.
int i;
std::cin >> i;
int j;
std::cin >> j;
#endif
}
void testQLinkedList()
{
#if 1
@@ -977,26 +829,35 @@ void testQMultiMap()
#endif
}
namespace qobject {
void testQObject1()
{
// This checks whether signal-slot connections are displayed.
QObject parent;
parent.setObjectName("A Parent");
QObject child(&parent);
child.setObjectName("A Child");
QObject::connect(&child, SIGNAL(destroyed()), qApp, SLOT(quit()));
QObject::disconnect(&child, SIGNAL(destroyed()), qApp, SLOT(quit()));
child.setObjectName("A renamed Child");
// <=== Break here.
// Expand all.
dummyStatement(&parent, &child);
}
namespace Names {
namespace Bar {
struct Ui {
Ui() { w = 0; }
QWidget *w;
};
struct Ui { Ui() { w = 0; } QWidget *w; };
class TestObject : public QObject
{
Q_OBJECT
public:
TestObject(QObject *parent = 0)
: QObject(parent)
{
m_ui = new Ui;
m_ui->w = new QWidget;
Q_UNUSED(parent);
}
TestObject(QObject *parent = 0) : QObject(parent)
{ m_ui = new Ui; m_ui->w = new QWidget; }
Q_PROPERTY(QString myProp1 READ myProp1 WRITE setMyProp1)
QString myProp1() const { return m_myProp1; }
@@ -1015,7 +876,7 @@ public:
} // namespace Bar
} // namespace Names
void testQObject(int &argc, char *argv[])
void testQObject2(int &argc, char *argv[])
{
QApplication app(argc, argv);
//QString longString = QString(10000, QLatin1Char('A'));
@@ -1065,7 +926,7 @@ void testQObject(int &argc, char *argv[])
QLabel l(str);
l.setObjectName("Some Label");
l.show();
app.exec();
//app.exec();
#endif
}
@@ -1101,9 +962,115 @@ void testSignalSlot(int &argc, char *argv[])
Sender sender;
Receiver receiver;
QObject::connect(&sender, SIGNAL(aSignal()), &receiver, SLOT(aSlot()));
// Break here.
// Single step through signal emission.
sender.doEmit();
dummyStatement(&app);
}
#if USE_PRIVATE
struct DerivedObjectPrivate : public QObjectPrivate
{
DerivedObjectPrivate() {
m_extraX = 43;
m_extraY.append("xxx");
m_extraZ = 1;
}
int m_extraX;
QStringList m_extraY;
uint m_extraZ : 1;
bool m_extraA : 1;
bool m_extraB;
};
class DerivedObject : public QObject
{
Q_OBJECT
public:
DerivedObject() : QObject(*new DerivedObjectPrivate, 0) {}
Q_PROPERTY(int x READ x WRITE setX)
Q_PROPERTY(QStringList y READ y WRITE setY)
Q_PROPERTY(uint z READ z WRITE setZ)
int x() const;
void setX(int x);
QStringList y() const;
void setY(QStringList y);
uint z() const;
void setZ(uint z);
private:
Q_DECLARE_PRIVATE(DerivedObject)
};
int DerivedObject::x() const
{
Q_D(const DerivedObject);
return d->m_extraX;
}
void DerivedObject::setX(int x)
{
Q_D(DerivedObject);
d->m_extraX = x;
d->m_extraA = !d->m_extraA;
d->m_extraB = !d->m_extraB;
}
QStringList DerivedObject::y() const
{
Q_D(const DerivedObject);
return d->m_extraY;
}
void DerivedObject::setY(QStringList y)
{
Q_D(DerivedObject);
d->m_extraY = y;
}
uint DerivedObject::z() const
{
Q_D(const DerivedObject);
return d->m_extraZ;
}
void DerivedObject::setZ(uint z)
{
Q_D(DerivedObject);
d->m_extraZ = z;
}
#endif
void testQObjectData()
{
// This checks whether QObject-derived classes with Q_PROPERTYs
// are displayed properly.
#if USE_PRIVATE
DerivedObject ob;
// <=== Break here.
// expand ob and ob.properties
// step, and check whether x gets updated.
ob.setX(23);
ob.setX(25);
ob.setX(26);
#endif
}
void testQObject(int &argc, char *argv[])
{
testQObjectData();
testQObject1();
testQObject2(argc, argv);
testSignalSlot(argc, argv);
}
} // namespace qobject
void testQPixmap()
{
@@ -1737,7 +1704,7 @@ void testQStandardItemModel()
++i;
}
QStack<int> testQStack()
void testQStack()
{
QVector<int> bigv;
for (int i = 0; i < 10; ++i)
@@ -1759,33 +1726,18 @@ QStack<int> testQStack()
QStack<bool> vec;
vec.append(true);
vec.append(false);
QStack<int> result;
return result;
// <=== Break here.
dummyStatement(&vec);
}
void testQUrl()
{
QUrl url(QString("http://www.nokia.com"));
(void) url;
// <=== Break here.
dummyStatement(&url);
}
#ifdef FOP
int xxxx()
{
}
#else
void xxxx()
{
}
#endif
void testQString()
{
QString str1("Hello Qt"); // --> Value: "Hello Qt"
@@ -1873,8 +1825,7 @@ namespace formats {
// Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
// Make sure to undo "Change Format".
dummyStatement(&s, &w);
dummyStatement(&t);
dummyStatement(&s, &w, &t);
}
void testCharArrays()
@@ -2352,17 +2303,6 @@ void testHidden()
++n;
}
void testObject1()
{
QObject parent;
parent.setObjectName("A Parent");
QObject child(&parent);
child.setObjectName("A Child");
QObject::connect(&child, SIGNAL(destroyed()), qApp, SLOT(quit()));
QObject::disconnect(&child, SIGNAL(destroyed()), qApp, SLOT(quit()));
child.setObjectName("A renamed Child");
}
void testQHash1()
{
QHash<QString, QList<int> > hash;
@@ -2441,8 +2381,7 @@ namespace basic {
for (int j = 0; j != 3; ++j)
d[i][j] = i + j;
// <== Break here.
dummyStatement(&x, &f, &d);
dummyStatement(&ff, &diamond);
dummyStatement(&x, &f, &d, &ff, &diamond);
}
void testArray2()
@@ -2546,6 +2485,7 @@ namespace basic {
// This checks whether bitfields are properly displayed
S s;
// <=== Break here.
s.i = 0;
dummyStatement(&s);
}
@@ -2581,11 +2521,8 @@ namespace basic {
myType2 t2 = 0;
ns::vl j = 1000;
ns::verylong k = 1000;
++j;
++k;
++t1;
++t2;
// <== Break here.
dummyStatement(&j, &k, &t1, &t2);
}
void testStruct()
@@ -2625,11 +2562,8 @@ namespace basic {
std::vector<int> svi;
std::stack<int> ssi;
dummyStatement(&s, &sl, &mii);
dummyStatement(&mss, &hii, &hss);
dummyStatement(&li, &vi, &si);
dummyStatement(&ss, &smii, &smss);
dummyStatement(&sli, &svi, &ssi);
dummyStatement(&s, &sl, &mii, &mss, &hii, &hss, &si, &vi, &li,
&ss, &smii, &smss, &sli, &svi, &ssi, &ssl);
}
void testTypeFormats()
@@ -2666,8 +2600,9 @@ namespace basic {
void A::doSomething(CVoidPtr cp) const
{
Q_UNUSED(cp);
std::cout << test << std::endl;
// <=== Break here.
// Check cp.
dummyStatement(&cp);
}
void testPtrTypedef()
@@ -2722,8 +2657,7 @@ namespace basic {
const int c = 44;
const Ref d = a;
// <=== Break here.
dummyStatement(&a, &b);
dummyStatement(&c, &d);
dummyStatement(&a, &b, &c, &d);
}
void testReference2()
@@ -2734,8 +2668,7 @@ namespace basic {
const QString c = "world";
const Ref d = a;
// <=== Break here.
dummyStatement(&a, &b);
dummyStatement(&c, &d);
dummyStatement(&a, &b, &c, &d);
}
void testLongEvaluation()
@@ -2746,11 +2679,35 @@ namespace basic {
bigv.append(time);
// <== Break here.
// Expand bigv.
// This is expected to take up to a minute.
dummyStatement(&bigv);
}
void testFork()
{
QProcess proc;
proc.start("/bin/ls");
proc.waitForFinished();
QByteArray ba = proc.readAllStandardError();
ba.append('x');
// <== Break here.
// Check there is some contents in ba. Error message is expected.
dummyStatement(&ba);
}
void testFunctionPointer()
{
typedef void (*func_t)();
func_t f2 = testPeekAndPoke3;
// <=== Break here.
// Check there's a valid display for f2.
dummyStatement(&f2);
}
void testBasic()
{
testReference1();
testReference2();
testArray1();
testArray2();
testArray3();
@@ -2768,9 +2725,9 @@ namespace basic {
testStringWithNewline();
testMemoryView();
testColoredMemoryView();
testReference1();
testReference2();
testLongEvaluation();
testFork();
testFunctionPointer();
}
} // namespace basic
@@ -2820,11 +2777,15 @@ void testPassByReference()
testPassByReferenceHelper(f);
}
namespace io {
void testWCout()
{
using namespace std;
wstring x = L"xxxxx";
wstring::iterator i = x.begin();
// Break here.
// Step.
while (i != x.end()) {
wcout << *i;
i++;
@@ -2849,6 +2810,8 @@ void testWCout0()
using namespace std;
//std::ios::sync_with_stdio(false);
// Break here.
// Step.
wcout << L"WWWWWW" << endl;
wcerr << L"YYYYYY" << endl;
cout << "CCCCCC" << endl;
@@ -2863,6 +2826,47 @@ void testWCout0()
cerr << "EEEEEE" << endl;
}
void testOutput()
{
qDebug() << "qDebug() 1";
qDebug() << "qDebug() 2";
qDebug() << "qDebug() 3";
qDebug() << "qDebug <foo & bar>";
std::cout << "std::cout @@ 1" << std::endl;
std::cout << "std::cout @@ 2\n";
std::cout << "std::cout @@ 3" << std::endl;
std::cout << "std::cout <foo & bar>\n";
std::cerr << "std::cerr 1\n";
std::cerr << "std::cerr 2\n";
std::cerr << "std::cerr 3\n";
std::cerr << "std::cerr <foo & bar>\n";
}
void testInput()
{
// This works only when "Run in terminal" is selected
// in the Run Configuration.
int i;
std::cin >> i;
int j;
std::cin >> j;
}
void testIO()
{
testOutput();
//testInput();
//testWCout();
//testWCout0();
}
} // namespace io
namespace sse {
void testSSE()
{
#ifdef __SSE__
@@ -2876,10 +2880,14 @@ void testSSE()
__m128 sseA, sseB;
sseA = _mm_loadu_ps(a);
sseB = _mm_loadu_ps(b);
++i;
// Break here.
// Expand all.
dummyStatement(&i, &sseA, &sseB);
#endif
}
} // namespace sse
void testQSettings()
{
// Note: Construct a QCoreApplication first.
@@ -2915,47 +2923,56 @@ void testQScriptValue(int argc, char *argv[])
QScriptValue d = s.data();
}
void testBoostOptional()
{
namespace boost {
#if USE_BOOST
void testBoostOptional1()
{
boost::optional<int> i;
// <=== Break here.
// Step.
i = 1;
boost::optional<QStringList> sl;
sl = (QStringList() << "xxx" << "yyy");
sl.get().append("zzz");
i = 3;
i = 4;
i = 5;
#endif
dummyStatement(&i);
}
void testBoostOptional2()
{
boost::optional<QStringList> sl;
// <=== Break here.
// Step.
sl = (QStringList() << "xxx" << "yyy");
sl.get().append("zzz");
dummyStatement(&sl);
}
void testBoostSharedPtr()
{
#if USE_BOOST
QSharedPointer<int> qs;
QSharedPointer<int> qi(new int(43));
QSharedPointer<int> qj = qi;
boost::shared_ptr<int> s;
boost::shared_ptr<int> i(new int(43));
boost::shared_ptr<int> j = i;
boost::shared_ptr<QStringList> sl(new QStringList(QStringList() << "HUH!"));
// <=== Break here.
dummyStatement(&qs, &qj);
dummyStatement(&s, &j, &sl);
#endif
}
void testFork()
void testBoost()
{
QProcess proc;
proc.start("/bin/ls");
proc.waitForFinished();
QByteArray ba = proc.readAllStandardError();
ba.append('x');
ba.append('x');
testBoostOptional1();
testBoostOptional2();
testBoostSharedPtr();
}
#else
void testBoost() {}
#endif
} // namespace boost
namespace mpi {
@@ -3113,8 +3130,8 @@ namespace eigen {
// <=== Break here.
// check that Locals and Expresssions view looks sane
dummyStatement(&colMajorMatrix, &rowMajorMatrix, &test);
dummyStatement(&myMatrix, &myDynamicMatrix);
dummyStatement(&colMajorMatrix, &rowMajorMatrix, &test,
&myMatrix, &myDynamicMatrix);
#endif
}
}
@@ -3393,8 +3410,7 @@ namespace bug5799 {
// <=== Break here.
// Expand s2 and s4.
// Check there is no <unavailable synchronous data>
dummyStatement(&s2, &s4);
dummyStatement(&a1, &a2);
dummyStatement(&s2, &s4, &a1, &a2);
}
} // namespace bug5799
@@ -3467,7 +3483,11 @@ namespace varargs {
} // namespace varargs
int main(int argc, char *argv[])
namespace sanity {
// A very quick check.
void testSanity()
{
std::string s;
s = "hallo";
@@ -3489,39 +3509,34 @@ int main(int argc, char *argv[])
list2 << "baz";
list2 << 0;
formats::testFormats();
QObject obj;
obj.setObjectName("An Object");
// <=== Break here.
// Expand all.
dummyStatement(&s, &qv, &v, &list, &list2, &obj);
}
}
int main(int argc, char *argv[])
{
// For a very quick check, step into this one.
sanity::testSanity();
// Check for normal dumpers.
basic::testBasic();
qhostaddress::testQHostAddress();
varargs::testVaList();
cp42895::test42895();
bug5046::test5046();
bug4904::test4904();
qc41700::test41700();
qc42170::test42170();
multibp::testMultiBp();
bug842::test842();
bug3611::test3611();
bug4019::test4019();
bug5106::test5106();
bug5184::test5184();
bug5799::test5799();
//bug4497::test4497();
eigen::testEigen();
kr::testKR();
formats::testFormats();
qxml::testQXmlAttributes();
qregexp::testQRegExp();
breakpoints::testBreakpoints();
mpi::testMPI();
qobjectdata::testQObjectData();
//testQSettings();
//testWCout0();
//testWCout();
testSSE();
testQLocale();
qrect::testGeometry();
qregion::testQRegion();
basic::testBasic();
testPeekAndPoke3();
testFunctionPointer();
anon::testAnonymous();
//testEndlessLoop();
//testEndlessRecursion();
@@ -3530,18 +3545,16 @@ int main(int argc, char *argv[])
qdatetime::testDateTime();
qfileinfo::testQFileInfo();
testQFixed();
testObject1();
stdvector::testStdVector();
testQHash1();
testSignalSlot(argc, argv);
qobject::testQObject(argc, argv);
testQStandardItemModel();
testFunction();
testQImage();
noargs::testNoArgumentName(1, 2, 3);
testQTextCursor();
testInput();
testOutput();
io::testIO();
testHidden();
testCatchThrow();
qbytearray::testQByteArray();
@@ -3570,21 +3583,33 @@ int main(int argc, char *argv[])
testQSharedPointer();
qstringlist::testQStringList();
testQScriptValue(argc, argv);
basic::testStruct();
//qthread::testQThread();
qvariant::testQVariant();
qvector::testQVector();
testBoostOptional();
testBoostSharedPtr();
// Third party data types.
boost::testBoost();
eigen::testEigen();
kr::testKR();
mpi::testMPI();
sse::testSSE();
//*(int *)0 = 0;
testFork();
// The following tests are specific to certain bugs.
// They need not to be checked during a normal release check.
cp42895::test42895();
bug5046::test5046();
bug4904::test4904();
qc41700::test41700();
qc42170::test42170();
multibp::testMultiBp();
bug842::test842();
bug3611::test3611();
bug4019::test4019();
//bug4497::test4497();
bug5106::test5106();
bug5184::test5184();
bug5799::test5799();
testQObject(argc, argv);
//QColor color(255,128,10);
//QFont font;
return 0;
}