diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 5e24e4f9582101db30931fd849bd4c61c74dd73b..5b1fb34a96329eed26bcefdec51d7d57aa5d4648 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -52,25 +52,58 @@ static QByteArray parentIName(const QByteArray &iname) 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 { Check() {} - Check(const QByteArray &iname, const QByteArray &value, + Check(const QByteArray &iname, const Value &value, const QByteArray &type) : iname(iname), expectedName(nameFromIName(iname)), expectedValue(value), expectedType(type) {} Check(const QByteArray &iname, const QByteArray &name, - const QByteArray &value, const QByteArray &type) + const Value &value, const QByteArray &type) : iname(iname), expectedName(name), expectedValue(value), expectedType(type) {} QByteArray iname; QByteArray expectedName; - QByteArray expectedValue; + Value expectedValue; QByteArray expectedType; }; @@ -100,7 +133,8 @@ struct GuiProfile : 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 @@ -313,7 +347,6 @@ void tst_Dumpers::dumper() QString actualValue = item.value; if (actualValue == QLatin1String(" ")) actualValue.clear(); // FIXME: Remove later. - QString expectedValue = QString::fromUtf8(check.expectedValue.data(), check.expectedValue.size()); QByteArray actualType = item.type; actualType.replace(' ', ""); if (item.name.toLatin1() != check.expectedName) { @@ -323,10 +356,10 @@ void tst_Dumpers::dumper() qDebug() << "CONTENTS : " << contents; QVERIFY(false); } - if (expectedValue != QString::fromLatin1(noValue) && actualValue != expectedValue) { + if (!check.expectedValue.matches(actualValue)) { qDebug() << "INAME : " << item.iname; 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; QVERIFY(false); } @@ -1804,20 +1837,20 @@ void tst_Dumpers::dumper_data() % Check("map.2.first", "\"Welt\"", "@QString"); QTest::newRow("StdUniquePtr") - << Data("#include <memory>\n", + << Data("#include <memory>\n" + fooData, "std::unique_ptr<int> pi(new int(32));\n" "std::unique_ptr<Foo> pf(new Foo);\n") % Cxx11Profile() - % Check("pi", "32", "std::unique_ptr<int, std::default_delete<int> >") - % Check("pf", "32", "std::unique_ptr<Foo, std::default_delete<Foo> >"); + % Check("pi", Pointer("32"), "std::unique_ptr<int, std::default_delete<int> >") + % Check("pf", Pointer(), "std::unique_ptr<Foo, std::default_delete<Foo> >"); QTest::newRow("StdSharedPtr") - << Data("#include <memory>\n", + << Data("#include <memory>\n" + fooData, "std::shared_ptr<int> pi(new int(32));\n" "std::shared_ptr<Foo> pf(new Foo);\n") % Cxx11Profile() - % Check("pi", "32", "std::shared_ptr<int, std::default_delete<int> >") - % Check("pf", "32", "std::shared_ptr<Foo, std::default_delete<int> >"); + % Check("pi", Pointer("32"), "std::shared_ptr<int, std::default_delete<int> >") + % Check("pf", Pointer(), "std::shared_ptr<Foo, std::default_delete<int> >"); QTest::newRow("StdSetInt") << Data("#include <set>\n",