Debugger: enable auto tests for std::{unique,shared}_ptr

Change-Id: If927cbed7b2638ad9468be8f092a7b896f8fc162
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
hjk
2013-01-30 12:52:12 +01:00
parent 9855c40bd1
commit 51523f3406

View File

@@ -52,25 +52,58 @@ static QByteArray parentIName(const QByteArray &iname)
return pos == -1 ? QByteArray() : iname.left(pos); return pos == -1 ? QByteArray() : iname.left(pos);
} }
struct Value
{
Value()
: value(noValue), hasPtrSuffix(false)
{}
Value(const char *str)
: value(str), hasPtrSuffix(false)
{}
Value(const QByteArray &ba)
: value(ba), hasPtrSuffix(false)
{}
bool matches(const QString &actualValue) const
{
if (value == noValue)
return true;
QString self = QString::fromLatin1(value.data(), value.size());
if (hasPtrSuffix)
return actualValue.startsWith(self + QLatin1String(" @0x"))
|| actualValue.startsWith(self + QLatin1String("@0x"));
return actualValue == self;
}
QByteArray value;
bool hasPtrSuffix;
};
struct Pointer : Value
{
Pointer() { hasPtrSuffix = true; }
Pointer(const QByteArray &value) : Value(value) { hasPtrSuffix = true; }
};
struct Check struct Check
{ {
Check() {} Check() {}
Check(const QByteArray &iname, const QByteArray &value, Check(const QByteArray &iname, const Value &value,
const QByteArray &type) const QByteArray &type)
: iname(iname), expectedName(nameFromIName(iname)), : iname(iname), expectedName(nameFromIName(iname)),
expectedValue(value), expectedType(type) expectedValue(value), expectedType(type)
{} {}
Check(const QByteArray &iname, const QByteArray &name, Check(const QByteArray &iname, const QByteArray &name,
const QByteArray &value, const QByteArray &type) const Value &value, const QByteArray &type)
: iname(iname), expectedName(name), : iname(iname), expectedName(name),
expectedValue(value), expectedType(type) expectedValue(value), expectedType(type)
{} {}
QByteArray iname; QByteArray iname;
QByteArray expectedName; QByteArray expectedName;
QByteArray expectedValue; Value expectedValue;
QByteArray expectedType; QByteArray expectedType;
}; };
@@ -100,7 +133,8 @@ struct GuiProfile : public Profile
struct Cxx11Profile : public Profile struct Cxx11Profile : public Profile
{ {
Cxx11Profile() : Profile("CONFIG += c++11") {} //Cxx11Profile() : Profile("CONFIG += c++11") {}
Cxx11Profile() : Profile("QMAKE_CXXFLAGS += -std=c++0x") {}
}; };
class Data class Data
@@ -313,7 +347,6 @@ void tst_Dumpers::dumper()
QString actualValue = item.value; QString actualValue = item.value;
if (actualValue == QLatin1String(" ")) if (actualValue == QLatin1String(" "))
actualValue.clear(); // FIXME: Remove later. actualValue.clear(); // FIXME: Remove later.
QString expectedValue = QString::fromUtf8(check.expectedValue.data(), check.expectedValue.size());
QByteArray actualType = item.type; QByteArray actualType = item.type;
actualType.replace(' ', ""); actualType.replace(' ', "");
if (item.name.toLatin1() != check.expectedName) { if (item.name.toLatin1() != check.expectedName) {
@@ -323,10 +356,10 @@ void tst_Dumpers::dumper()
qDebug() << "CONTENTS : " << contents; qDebug() << "CONTENTS : " << contents;
QVERIFY(false); QVERIFY(false);
} }
if (expectedValue != QString::fromLatin1(noValue) && actualValue != expectedValue) { if (!check.expectedValue.matches(actualValue)) {
qDebug() << "INAME : " << item.iname; qDebug() << "INAME : " << item.iname;
qDebug() << "VALUE ACTUAL : " << item.value << actualValue.toLatin1().toHex(); qDebug() << "VALUE ACTUAL : " << item.value << actualValue.toLatin1().toHex();
qDebug() << "VALUE EXPECTED: " << expectedValue << expectedValue.toLatin1().toHex(); qDebug() << "VALUE EXPECTED: " << check.expectedValue.value << check.expectedValue.value.toHex();
qDebug() << "CONTENTS : " << contents; qDebug() << "CONTENTS : " << contents;
QVERIFY(false); QVERIFY(false);
} }
@@ -1804,20 +1837,20 @@ void tst_Dumpers::dumper_data()
% Check("map.2.first", "\"Welt\"", "@QString"); % Check("map.2.first", "\"Welt\"", "@QString");
QTest::newRow("StdUniquePtr") QTest::newRow("StdUniquePtr")
<< Data("#include <memory>\n", << Data("#include <memory>\n" + fooData,
"std::unique_ptr<int> pi(new int(32));\n" "std::unique_ptr<int> pi(new int(32));\n"
"std::unique_ptr<Foo> pf(new Foo);\n") "std::unique_ptr<Foo> pf(new Foo);\n")
% Cxx11Profile() % Cxx11Profile()
% Check("pi", "32", "std::unique_ptr<int, std::default_delete<int> >") % Check("pi", Pointer("32"), "std::unique_ptr<int, std::default_delete<int> >")
% Check("pf", "32", "std::unique_ptr<Foo, std::default_delete<Foo> >"); % Check("pf", Pointer(), "std::unique_ptr<Foo, std::default_delete<Foo> >");
QTest::newRow("StdSharedPtr") QTest::newRow("StdSharedPtr")
<< Data("#include <memory>\n", << Data("#include <memory>\n" + fooData,
"std::shared_ptr<int> pi(new int(32));\n" "std::shared_ptr<int> pi(new int(32));\n"
"std::shared_ptr<Foo> pf(new Foo);\n") "std::shared_ptr<Foo> pf(new Foo);\n")
% Cxx11Profile() % Cxx11Profile()
% Check("pi", "32", "std::shared_ptr<int, std::default_delete<int> >") % Check("pi", Pointer("32"), "std::shared_ptr<int, std::default_delete<int> >")
% Check("pf", "32", "std::shared_ptr<Foo, std::default_delete<int> >"); % Check("pf", Pointer(), "std::shared_ptr<Foo, std::default_delete<int> >");
QTest::newRow("StdSetInt") QTest::newRow("StdSetInt")
<< Data("#include <set>\n", << Data("#include <set>\n",