2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
#include "gdbmi.h"
|
|
|
|
|
|
|
|
#include <QtCore/QObject>
|
2009-04-06 16:30:11 +02:00
|
|
|
#include <QtCore/QProcess>
|
|
|
|
#include <QtCore/QFileInfo>
|
2009-04-06 14:07:30 +02:00
|
|
|
#include <QtTest/QtTest>
|
2009-04-06 16:30:11 +02:00
|
|
|
//#include <QtTest/qtest_gui.h>
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
using namespace Debugger;
|
|
|
|
using namespace Debugger::Internal;
|
|
|
|
|
|
|
|
static const char test1[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[frame={level=\"0\",addr=\"0x00000000004061ca\","
|
2009-04-06 14:07:30 +02:00
|
|
|
"func=\"main\",file=\"test1.cpp\","
|
|
|
|
"fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]";
|
|
|
|
|
|
|
|
static const char test2[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[frame={level=\"0\",addr=\"0x00002ac058675840\","
|
2009-04-06 14:07:30 +02:00
|
|
|
"func=\"QApplication\",file=\"/home/apoenitz/dev/qt/src/gui/kernel/qapplication.cpp\","
|
|
|
|
"fullname=\"/home/apoenitz/dev/qt/src/gui/kernel/qapplication.cpp\",line=\"592\"},"
|
|
|
|
"frame={level=\"1\",addr=\"0x00000000004061e0\",func=\"main\",file=\"test1.cpp\","
|
2009-04-06 14:33:45 +02:00
|
|
|
"fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
static const char test3[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[stack={frame={level=\"0\",addr=\"0x00000000004061ca\","
|
2009-04-06 14:07:30 +02:00
|
|
|
"func=\"main\",file=\"test1.cpp\","
|
2009-04-06 14:33:45 +02:00
|
|
|
"fullname=\"/home/apoenitz/work/test1/test1.cpp\",line=\"209\"}}]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
static const char test4[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"&\"source /home/apoenitz/dev/ide/main/bin/gdb/qt4macros\\n\""
|
2009-04-06 14:07:30 +02:00
|
|
|
"4^done\n";
|
|
|
|
|
|
|
|
static const char test5[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"1\","
|
2009-04-06 14:07:30 +02:00
|
|
|
"frame={addr=\"0x0000000000405738\",func=\"main\","
|
|
|
|
"args=[{name=\"argc\",value=\"1\"},{name=\"argv\",value=\"0x7fff1ac78f28\"}],"
|
|
|
|
"file=\"test1.cpp\",fullname=\"/home/apoenitz/work/test1/test1.cpp\","
|
2009-04-06 14:33:45 +02:00
|
|
|
"line=\"209\"}]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
static const char test8[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[data={locals={{name=\"a\"},{name=\"w\"}}}]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
static const char test9[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[data={locals=[name=\"baz\",name=\"urgs\",name=\"purgs\"]}]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
static const char test10[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[name=\"urgs\",numchild=\"1\",type=\"Urgs\"]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
static const char test11[] =
|
|
|
|
"[{name=\"size\",value=\"1\",type=\"size_t\",readonly=\"true\"},"
|
|
|
|
"{name=\"0\",value=\"one\",type=\"QByteArray\"}]";
|
|
|
|
|
|
|
|
static const char test12[] =
|
2009-04-06 14:33:45 +02:00
|
|
|
"[{iname=\"local.hallo\",value=\"\\\"\\\"\",type=\"QByteArray\","
|
|
|
|
"numchild=\"0\"}]";
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
class tst_Debugger : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
tst_Debugger() {}
|
|
|
|
|
|
|
|
void testMi(const char* input)
|
|
|
|
{
|
|
|
|
QCOMPARE('\n' + QString::fromLatin1(GdbMi(input).toString(false)),
|
|
|
|
'\n' + QString(input));
|
|
|
|
}
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void mi1() { testMi(test1); }
|
|
|
|
void mi2() { testMi(test2); }
|
|
|
|
void mi3() { testMi(test3); }
|
2009-04-06 14:33:45 +02:00
|
|
|
//void mi4() { testMi(test4); }
|
2009-04-06 14:07:30 +02:00
|
|
|
void mi5() { testMi(test5); }
|
|
|
|
void mi8() { testMi(test8); }
|
|
|
|
void mi9() { testMi(test9); }
|
|
|
|
void mi10() { testMi(test10); }
|
|
|
|
void mi11() { testMi(test11); }
|
|
|
|
void mi12() { testMi(test12); }
|
2009-04-06 16:30:11 +02:00
|
|
|
void runQtc();
|
2009-04-07 09:40:56 +02:00
|
|
|
|
|
|
|
public slots:
|
|
|
|
void readStandardOutput();
|
|
|
|
void readStandardError();
|
|
|
|
|
|
|
|
private:
|
2009-04-07 09:51:21 +02:00
|
|
|
QProcess m_proc; // the Qt Creator process
|
2009-04-06 14:07:30 +02:00
|
|
|
};
|
|
|
|
|
2009-04-07 09:51:21 +02:00
|
|
|
static QByteArray stripped(QByteArray ba)
|
|
|
|
{
|
|
|
|
for (int i = ba.size(); --i >= 0; ) {
|
|
|
|
if (ba.at(i) == '\n' || ba.at(i) == ' ')
|
|
|
|
ba.chop(1);
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return ba;
|
|
|
|
}
|
|
|
|
|
2009-04-07 09:40:56 +02:00
|
|
|
void tst_Debugger::readStandardOutput()
|
|
|
|
{
|
2009-04-07 09:51:21 +02:00
|
|
|
qDebug() << "qtcreator-out: " << stripped(m_proc.readAllStandardOutput());
|
2009-04-07 09:40:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void tst_Debugger::readStandardError()
|
|
|
|
{
|
2009-04-07 09:51:21 +02:00
|
|
|
qDebug() << "qtcreator-err: " << stripped(m_proc.readAllStandardError());
|
2009-04-07 09:40:56 +02:00
|
|
|
}
|
|
|
|
|
2009-04-06 16:30:11 +02:00
|
|
|
void tst_Debugger::runQtc()
|
|
|
|
{
|
|
|
|
QString test = QFileInfo(qApp->arguments().at(0)).absoluteFilePath();
|
|
|
|
QString qtc = QFileInfo(test).absolutePath() + "/../../../bin/qtcreator.bin";
|
|
|
|
qtc = QFileInfo(qtc).absoluteFilePath();
|
|
|
|
QStringList env = QProcess::systemEnvironment();
|
|
|
|
env.append("QTC_DEBUGGER_TEST=" + test);
|
2009-04-07 09:40:56 +02:00
|
|
|
m_proc.setEnvironment(env);
|
|
|
|
connect(&m_proc, SIGNAL(readyReadStandardOutput()),
|
|
|
|
this, SLOT(readStandardOutput()));
|
|
|
|
connect(&m_proc, SIGNAL(readyReadStandardError()),
|
|
|
|
this, SLOT(readStandardError()));
|
|
|
|
m_proc.start(qtc);
|
|
|
|
m_proc.waitForStarted();
|
|
|
|
QCOMPARE(m_proc.state(), QProcess::Running);
|
|
|
|
m_proc.waitForFinished();
|
|
|
|
QCOMPARE(m_proc.state(), QProcess::NotRunning);
|
2009-04-06 16:30:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void runDebuggee()
|
|
|
|
{
|
|
|
|
qDebug() << "RUNNING DEBUGGEE";
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
QCoreApplication app(argc, argv);
|
|
|
|
QStringList args = app.arguments();
|
|
|
|
|
|
|
|
|
|
|
|
if (args.size() == 2 && args.at(1) == "--run-debuggee") {
|
|
|
|
runDebuggee();
|
2009-04-14 12:14:01 +02:00
|
|
|
app.exec();
|
2009-04-06 16:30:11 +02:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
tst_Debugger test;
|
|
|
|
return QTest::qExec(&test, argc, argv);
|
|
|
|
}
|
2009-04-06 14:07:30 +02:00
|
|
|
|
|
|
|
#include "main.moc"
|
|
|
|
|