debugger: work on autotests

This commit is contained in:
hjk
2009-10-16 15:45:21 +02:00
parent bf74d9aed9
commit 7961e885af

View File

@@ -1,4 +1,6 @@
//#define DO_DEBUG 1
#include <QtCore/QThread> #include <QtCore/QThread>
#include <QtCore/QMutex> #include <QtCore/QMutex>
#include <QtCore/QWaitCondition> #include <QtCore/QWaitCondition>
@@ -29,7 +31,6 @@
# define NSY "" # define NSY ""
#endif #endif
//#define DO_DEBUG 1
#undef DEBUG #undef DEBUG
#if DO_DEBUG #if DO_DEBUG
# define DEBUG(s) qDebug() << s # define DEBUG(s) qDebug() << s
@@ -127,13 +128,14 @@ public:
void cleanupTestCase(); void cleanupTestCase();
void prepare(const QByteArray &function); void prepare(const QByteArray &function);
void run(const QByteArray &label, const QByteArray &expected, void run(const QByteArray &label, const QByteArray &expected,
const QByteArray &expanded = QByteArray()); const QByteArray &expanded = QByteArray(), bool fancy = true);
void next(int n = 1); void next(int n = 1);
signals: signals:
void writeToGdb(const QByteArray &ba); void writeToGdb(const QByteArray &ba);
private slots: private slots:
void dumpMisc();
void dumpQList_int(); void dumpQList_int();
void dumpQString(); void dumpQString();
void dumpQStringList(); void dumpQStringList();
@@ -2243,11 +2245,11 @@ void tst_Gdb::prepare(const QByteArray &function)
writeToGdb("call " + function + "()"); writeToGdb("call " + function + "()");
} }
void tst_Gdb::run(const QByteArray &label, void tst_Gdb::run(const QByteArray &label, const QByteArray &expected0,
const QByteArray &expected0, const QByteArray &expanded) const QByteArray &expanded, bool fancy)
{ {
//qDebug() << "\nABOUT TO RUN TEST: " << function << m_thread.m_proc; //qDebug() << "\nABOUT TO RUN TEST: " << expanded;
writeToGdb("bb 1 " + expanded); writeToGdb("bb " + QByteArray::number(int(fancy)) + " " + expanded);
m_mutex.lock(); m_mutex.lock();
m_waitCondition.wait(&m_mutex); m_waitCondition.wait(&m_mutex);
QByteArray ba = m_thread.m_output; QByteArray ba = m_thread.m_output;
@@ -2269,8 +2271,8 @@ void tst_Gdb::run(const QByteArray &label,
bool ok = l1.size() == l2.size(); bool ok = l1.size() == l2.size();
if (ok) { if (ok) {
for (int i = 0 ; i < l1.size(); ++i) { for (int i = 0 ; i < l1.size(); ++i) {
if (l1.at(i) != l2.at(i)) // Use "-" as joker.
if (!l1.at(i).startsWith("addr") || !l2.at(i).startsWith("addr")) if (l1.at(i) != l2.at(i) && !l2.at(i).endsWith("'-'"))
ok = false; ok = false;
} }
} }
@@ -2278,8 +2280,7 @@ void tst_Gdb::run(const QByteArray &label,
if (!ok) { if (!ok) {
int i = 0; int i = 0;
for ( ; i < l1.size() && i < l2.size(); ++i) { for ( ; i < l1.size() && i < l2.size(); ++i) {
if (l1.at(i) == l2.at(i) if (l1.at(i) == l2.at(i) || l2.at(i).endsWith("'-'")) {
|| (l1.at(i).startsWith("addr") && l2.at(i).startsWith("addr"))) {
qWarning() << "== " << l1.at(i); qWarning() << "== " << l1.at(i);
} else { } else {
//qWarning() << "!= " << l1.at(i).right(30) << l2.at(i).right(30); //qWarning() << "!= " << l1.at(i).right(30) << l2.at(i).right(30);
@@ -2397,6 +2398,24 @@ void tst_Gdb::dumpQList_QString()
} }
*/ */
void dumpMisc()
{
/* A */ int *s = new int(1);
/* B */ *s += 1;
/* D */ (void) s;
}
void tst_Gdb::dumpMisc()
{
prepare("dumpMisc");
next();
run("B","{iname='local.s',addr='-',name='s',type='int *',"
"value='-',numchild='1'}", "", 0);
run("B","{iname='local.s',addr='-',name='s',type='int *',"
"value='-',numchild='1',children=[{iname='local.s.*',"
"name='*s',type='int',value='1',numchild='0'}]}", "local.s", 0);
}
void dumpQStringTest() void dumpQStringTest()
{ {
/* A */ QString s; /* A */ QString s;
@@ -2412,7 +2431,13 @@ void tst_Gdb::dumpQString()
"value='<not in scope>',numchild='0'}"); "value='<not in scope>',numchild='0'}");
next(); next();
run("B","{iname='local.s',addr='-',name='s',type='"NS"QString'," run("B","{iname='local.s',addr='-',name='s',type='"NS"QString',"
"valueencoded='7',value='',numchild='0'}"); "valueencoded='7',value='',numchild='0'}", "local.s");
// Plain C:
run("B","{iname='local.s',addr='-',name='s',type='"NS"QString',"
"value='{...}',numchild='5'}", "", 0);
run("B","{iname='local.s',addr='-',name='s',type='"NS"QString',"
"value='{...}',numchild='5',children=[]}", "local.s", 0);
return;
next(); next();
run("C","{iname='local.s',addr='-',name='s',type='"NS"QString'," run("C","{iname='local.s',addr='-',name='s',type='"NS"QString',"
"valueencoded='7',value='680061006c006c006f00',numchild='0'}"); "valueencoded='7',value='680061006c006c006f00',numchild='0'}");
@@ -2432,8 +2457,8 @@ void dumpQStringListTest()
void tst_Gdb::dumpQStringList() void tst_Gdb::dumpQStringList()
{ {
prepare("dumpQStringListTest"); prepare("dumpQStringListTest");
run("A","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," //run("A","{iname='local.s',addr='-',name='s',type='"NS"QStringList',"
"value='<not in scope>',numchild='0'}"); // "value='<not in scope>',numchild='0'}");
next(); next();
run("B","{iname='local.s',addr='-',name='s',type='"NS"QStringList'," run("B","{iname='local.s',addr='-',name='s',type='"NS"QStringList',"
"value='<0 items>',numchild='0'}"); "value='<0 items>',numchild='0'}");