diff --git a/tests/auto/debugger/tst_gdb.cpp b/tests/auto/debugger/tst_gdb.cpp index 41d8c6c4e40..0e116434272 100644 --- a/tests/auto/debugger/tst_gdb.cpp +++ b/tests/auto/debugger/tst_gdb.cpp @@ -194,16 +194,21 @@ private slots: void dumpFoo(); void dumpQByteArray(); void dumpQChar(); - void dumpQList_char_star(); void dumpQList_char(); + void dumpQList_char_star(); void dumpQList_int(); + void dumpQList_int_star(); void dumpQList_QString(); void dumpQList_QString3(); void dumpQList_Int3(); void dumpQStack(); void dumpQString(); void dumpQStringList(); - void dumpQWeakPointer(); + void dumpQWeakPointer_11(); + void dumpQWeakPointer_12(); + void dumpQWeakPointer_13(); + void dumpQWeakPointer_14(); + void dumpQWeakPointer_2(); void dumpQVector(); void dumpQHash(); @@ -2446,43 +2451,12 @@ void tst_Gdb::dumpQTextCodec() dumpQTextCodecHelper(QTextCodec::codecForName(codecName)); } -#if QT_VERSION >= 0x040500 -template - size_t offsetOf(const T1 *klass, const T2 *member) -{ - return static_cast(reinterpret_cast(member) - - reinterpret_cast(klass)); -} - -template -void tst_Gdb::dumpQWeakPointerHelper(QWeakPointer &ptr) -{ - typedef QtSharedPointer::ExternalRefCountData Data; - const size_t dataOffset = 0; - const Data *d = *reinterpret_cast( - reinterpret_cast(&ptr) + dataOffset); - const int *weakRefPtr = reinterpret_cast(&d->weakref); - const int *strongRefPtr = reinterpret_cast(&d->strongref); - T *data = ptr.toStrongRef().data(); - const QString dataStr = valToString(*data); - QByteArray expected("value='"); - if (isSimpleType()) - expected.append(dataStr); - expected.append("',valuedisabled='true',numchild='1',children=[{name='data',addr='"). - append(ptrToBa(data)).append("',type='").append(typeToString()). - append("',value='").append(dataStr).append("'},{name='weakref',value='"). - append(valToString(*weakRefPtr)).append("',type='int',addr='"). - append(ptrToBa(weakRefPtr)).append("',numchild='0'},{name='strongref',value='"). - append(valToString(*strongRefPtr)).append("',type='int',addr='"). - append(ptrToBa(strongRefPtr)).append("',numchild='0'}]"); - testDumper(expected, &ptr, NS"QWeakPointer", true, typeToString()); -} -#endif #endif // #if 0 ///////////////////////////// QWeakPointer ///////////////////////////////// #if QT_VERSION >= 0x040500 + void dumpQWeakPointer_11() { // Case 1: Simple type. @@ -2492,6 +2466,20 @@ void dumpQWeakPointer_11() /* B */ (void) 0; } +void tst_Gdb::dumpQWeakPointer_11() +{ + // Case 1.1: Null pointer. + prepare("dumpQWeakPointer_11"); + if (checkUninitialized) + run("A","{iname='local.sp',addr='-',name='sp'," + "type='"NS"QSharedPointer',value='',numchild='0'}"); + next(); + next(); + run("B","{iname='local.sp',addr='-',name='sp'," + "type='"NS"QSharedPointer',value='<0 items>',numchild='1'}"); +} + + void dumpQWeakPointer_12() { // Case 1.2: Weak pointer is unique. @@ -2500,45 +2488,19 @@ void dumpQWeakPointer_12() /* B */ (void) 0; } -void dumpQWeakPointer_13() +void tst_Gdb::dumpQWeakPointer_12() { - // Case 1.3: There are other weak pointers. - /* A */ QSharedPointer sp(new int(99)); - /* */ QWeakPointer wp = sp.toWeakRef(); - /* B */ (void) 0; -} - -void dumpQWeakPointer_14() -{ - // Case 1.4: There are other strong shared pointers as well. - /* A */ QSharedPointer sp(new int(99)); - /* */ QSharedPointer sp2(sp); - /* B */ (void) 0; -} - -void dumpQWeakPointer_2() -{ - // Case 2: Composite type. - /* A */ QSharedPointer sp(new QString("Test")); - /* */ QWeakPointer wp = sp.toWeakRef(); - /* B */ (void) 0; -} -#endif - -void tst_Gdb::dumpQWeakPointer() -{ -#if QT_VERSION >= 0x040500 - -return; - // Case 1.1: Null pointer. - prepare("dumpQWeakPointer_11"); + prepare("dumpQWeakPointer_12"); if (checkUninitialized) run("A","{iname='local.sp',addr='-',name='sp'," "type='"NS"QSharedPointer',value='',numchild='0'}"); next(); + next(); run("B","{iname='local.sp',addr='-',name='sp'," "type='"NS"QSharedPointer',value='<0 items>',numchild='1'}"); +} + /* //,numchild='1',children=[{name='data',addr='"). @@ -2548,52 +2510,57 @@ return; append(ptrToBa(weakRefPtr)).append("',numchild='0'},{name='strongref',value='"). append(valToString(*strongRefPtr)).append("',type='int',addr='"). append(ptrToBa(strongRefPtr)).append("',numchild='0'}]"); - - // Case 1.2: Weak pointer is unique. -void tst_Gdb::dumpQWeakPointerHelper(QWeakPointer &ptr) -{ - typedef QtSharedPointer::ExternalRefCountData Data; - const size_t dataOffset = 0; - const Data *d = *reinterpret_cast( - reinterpret_cast(&ptr) + dataOffset); - const int *weakRefPtr = reinterpret_cast(&d->weakref); - const int *strongRefPtr = reinterpret_cast(&d->strongref); - T *data = ptr.toStrongRef().data(); - const QString dataStr = valToString(*data); - QByteArray expected("value='"); - if (isSimpleType()) - expected.append(dataStr); - expected.append("',valuedisabled='true',numchild='1',children=[{name='data',addr='"). - append(ptrToBa(data)).append("',type='").append(typeToString()). - append("',value='").append(dataStr).append("'},{name='weakref',value='"). - append(valToString(*weakRefPtr)).append("',type='int',addr='"). - append(ptrToBa(weakRefPtr)).append("',numchild='0'},{name='strongref',value='"). - append(valToString(*strongRefPtr)).append("',type='int',addr='"). - append(ptrToBa(strongRefPtr)).append("',numchild='0'}]"); - testDumper(expected, &ptr, NS"QWeakPointer", true, typeToString()); -} - - - QSharedPointer sp(new int(99)); - wp = sp.toWeakRef(); - dumpQWeakPointerHelper(wp); - - // Case 1.3: There are other weak pointers. - QWeakPointer wp2 = sp.toWeakRef(); - dumpQWeakPointerHelper(wp); - - // Case 1.4: There are other strong shared pointers as well. - QSharedPointer sp2(sp); - dumpQWeakPointerHelper(wp); - - // Case 2: Composite type. - QSharedPointer spS(new QString("Test")); - QWeakPointer wpS = spS.toWeakRef(); - dumpQWeakPointerHelper(wpS); */ -#endif + + +void dumpQWeakPointer_13() +{ + // Case 1.3: There are other weak pointers. + /* A */ QSharedPointer sp(new int(99)); + /* */ QWeakPointer wp = sp.toWeakRef(); + /* B */ (void) 0; } +void tst_Gdb::dumpQWeakPointer_13() +{ +} + + +void dumpQWeakPointer_14() +{ + // Case 1.4: There are other strong shared pointers as well. + /* A */ QSharedPointer sp(new int(99)); + /* */ QSharedPointer sp2(sp); + /* B */ (void) 0; +} + +void tst_Gdb::dumpQWeakPointer_14() +{ +} + + +void dumpQWeakPointer_2() +{ + // Case 2: Composite type. + /* A */ QSharedPointer sp(new QString("Test")); + /* */ QWeakPointer wp = sp.toWeakRef(); + /* B */ (void) 0; +} + +void tst_Gdb::dumpQWeakPointer_2() +{ +} + +#else // before Qt 4.5 + +void tst_Gdb::dumpQWeakPointer_11() {} +void tst_Gdb::dumpQWeakPointer_12() {} +void tst_Gdb::dumpQWeakPointer_13() {} +void tst_Gdb::dumpQWeakPointer_14() {} +void tst_Gdb::dumpQWeakPointer_2() {} + +#endif + ///////////////////////////// QHash ////////////////////////////// void dumpQHash_QString_QString() @@ -2708,6 +2675,34 @@ void tst_Gdb::dumpQList_int() } +///////////////////////////// QList ///////////////////////////////// + +void dumpQList_int_star() +{ + /* A */ QList list; + /* B */ list.append(new int(1)); + /* C */ list.append(0); + /* D */ list.append(new int(2)); + /* E */ (void) 0; +} + +void tst_Gdb::dumpQList_int_star() +{ + prepare("dumpQList_int_star"); + if (checkUninitialized) + run("A","{iname='local.list',addr='-',name='list'," + "type='"NS"QList',value='',numchild='0'}"); + next(); + next(); + next(); + next(); + run("E","{iname='local.list',addr='-',name='list'," + "type='"NS"QList',value='<2 items>',numchild='2'," + "childtype='int',childnumchild='0',children=[" + "{value='1'},{value='2'}]}", "local.list"); +} + + ///////////////////////////// QList ///////////////////////////////// void dumpQList_char() @@ -3046,6 +3041,32 @@ int main(int argc, char *argv[]) return 0; } + if (argc == 2 && QByteArray(argv[1]) == "debug") { + dumpArray_char(); + dumpArray_int(); + dumpFoo(); + dumpMisc(); + dumpQByteArrayTest(); + dumpQCharTest(); + dumpQHash_int_int(); + dumpQList_char(); + dumpQList_char_star(); + dumpQList_int(); + dumpQList_int_star(); + dumpQList_Int3(); + dumpQList_QString(); + dumpQList_QString3(); + dumpQStack(); + dumpQString(); + dumpQStringList(); + dumpQVector(); + dumpQWeakPointer_11(); + dumpQWeakPointer_12(); + dumpQWeakPointer_13(); + dumpQWeakPointer_14(); + dumpQWeakPointer_2(); + } + try { // Plain call. Start the testing. QCoreApplication app(argc, argv);