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