2009-02-25 09:15:00 +01:00
/**************************************************************************
2008-12-02 12:01:29 +01:00
* *
* * This file is part of Qt Creator
* *
2012-01-26 18:33:46 +01:00
* * Copyright ( c ) 2012 Nokia Corporation and / or its subsidiary ( - ies ) .
2008-12-02 12:01:29 +01:00
* *
2011-11-02 15:59:12 +01:00
* * Contact : Nokia Corporation ( qt - info @ nokia . com )
2008-12-02 12:01:29 +01:00
* *
2008-12-02 14:17:16 +01:00
* *
2009-02-25 09:15:00 +01:00
* * GNU Lesser General Public License Usage
2008-12-02 14:17:16 +01:00
* *
2011-04-13 08:42:33 +02:00
* * This file may be used under the terms of the GNU Lesser General Public
* * License version 2.1 as published by the Free Software Foundation and
* * appearing in the file LICENSE . LGPL included in the packaging of this file .
* * Please review the following information to ensure the GNU Lesser General
* * Public License version 2.1 requirements will be met :
* * http : //www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
2008-12-02 14:17:16 +01:00
* *
2010-12-17 16:01:08 +01:00
* * In addition , as a special exception , Nokia gives you certain additional
2011-04-13 08:42:33 +02:00
* * rights . These rights are described in the Nokia Qt LGPL Exception
2010-12-17 16:01:08 +01:00
* * version 1.1 , included in the file LGPL_EXCEPTION . txt in this package .
* *
2011-04-13 08:42:33 +02:00
* * Other Usage
* *
* * Alternatively , this file may be used in accordance with the terms and
* * conditions contained in a signed written agreement between you and Nokia .
* *
2010-12-17 16:01:08 +01:00
* * If you have questions regarding the use of this file , please contact
2011-11-02 15:59:12 +01:00
* * Nokia at qt - info @ nokia . com .
2008-12-02 12:01:29 +01:00
* *
2009-02-25 09:15:00 +01:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2008-12-02 12:01:29 +01:00
2011-08-24 16:23:10 +02:00
//////////////// Some global configuration below ////////////////
// The following defines can be used to steer the kind of tests that
// can be done.
2011-11-25 16:29:25 +01:00
// With USE_AUTORUN, creator will automatically "execute" the commands
// in a comment following a BREAK_HERE line.
// The following commands are supported:
// // Check <name> <value> <type>
// - Checks whether the local variable is displayed with value and type.
2011-12-14 10:14:41 +01:00
// // CheckType <name> <type>
// - Checks whether the local variable is displayed with type.
// The value is untested, so it can be used with pointers values etc.
// that would change between test runs
// // Continue
// - Continues execution
// On the TODO list:
2011-12-14 12:26:37 +01:00
// // Expand <name1>[ <name2> ...].
2011-12-14 10:14:41 +01:00
// - Expands local variables with given names.
2011-12-14 12:26:37 +01:00
// There should be at most one "Expand" line per BREAK_HERE,
// and this should placed on the line following the BREAK_HERE
2011-12-14 10:14:41 +01:00
// FIXME: Not implemented yet.
2012-02-08 14:45:50 +01:00
// Value: 1
2011-11-25 16:29:25 +01:00
// If the line after a BREAK_HERE line does not contain one of the
// supported commands, the test stops.
2012-02-08 14:45:50 +01:00
// Value: 2
// Same as 1, except that the debugger will stop automatically when
// a test after a BREAK_HERE failed
2011-11-25 16:29:25 +01:00
// Default: 0
2012-03-20 15:46:34 +01:00
// Before using this, make sure that "Show a message box when receiving a signal"
// is disabled in "Tools" -> "Options..." -> "Debugger" -> "GDB".
2011-12-14 10:14:41 +01:00
# ifndef USE_AUTORUN
2012-02-14 15:16:39 +01:00
# define USE_AUTORUN 0
2011-12-14 10:14:41 +01:00
# endif
// With USE_AUTOBREAK, the debugger will stop automatically on all
// lines containing the BREAK_HERE macro. This should be enabled
// during manual testing.
// Default: 0
# ifndef USE_AUTOBREAK
# define USE_AUTOBREAK 0
# endif
2011-11-25 16:29:25 +01:00
2011-12-14 10:14:41 +01:00
// With USE_UNINITIALIZED_AUTOBREAK, the debugger will stop automatically
2011-08-24 16:23:10 +02:00
// on all lines containing the BREAK_UNINITIALIZED_HERE macro.
// This should be enabled during manual testing.
2011-11-23 22:14:34 +01:00
// Default: 0
2011-12-14 10:14:41 +01:00
# ifndef USE_UNINITIALIZED_AUTOBREAK
2011-08-19 15:47:34 +02:00
# define USE_UNINITIALIZED_AUTOBREAK 0
2011-12-14 10:14:41 +01:00
# endif
2011-08-24 16:23:10 +02:00
2011-08-24 16:23:10 +02:00
////////////// No further global configuration below ////////////////
2011-12-14 10:14:41 +01:00
// AUTORUN is only sensibly with AUTOBREAK and without UNINITIALIZED_AUTOBREAK
# if USE_AUTORUN
# if !(USE_AUTOBREAK)
# undef USE_AUTOBREAK
# define USE_AUTOBREAK 1
# warning Switching on USE_AUTOBREAK
# endif // !USE_AUTOBREAK
# if USE_UNINITIALIZED_AUTOBREAK
# undef USE_UNINITIALIZED_AUTOBREAK
# define USE_UNINITIALIZED_AUTOBREAK 0
# warning Switching off USE_AUTOBREAK
# endif // USE_UNINITIALIZED_AUTOBREAK
# endif
2012-04-25 12:01:20 +02:00
# ifdef QT_SCRIPT_LIB
2011-09-20 13:54:07 +02:00
# define USE_SCRIPTLIB 1
# else
# define USE_SCRIPTLIB 0
# endif
2012-04-25 12:01:20 +02:00
# ifdef QT_WEBKIT_LIB
# define USE_WEBKITLIB 1
# else
# define USE_WEBKITLIB 0
# endif
2011-09-20 13:54:07 +02:00
# if QT_VERSION >= 0x040500
# define USE_SHARED_POINTER 1
# else
# define USE_SHARED_POINTER 0
# endif
2010-01-04 13:16:10 +01:00
2011-08-18 16:14:34 +02:00
void dummyStatement ( . . . ) { }
2011-08-17 14:54:31 +02:00
2012-02-10 16:32:52 +01:00
# if USE_CXX11 && defined(__GNUC__) && defined(__STRICT_ANSI__)
# undef __STRICT_ANSI__ // working around compile error with MinGW
# endif
2012-02-15 10:42:41 +01:00
# include <QDebug>
# include <QDateTime>
# include <QDir>
# include <QHash>
# include <QLibrary>
# include <QLinkedList>
# include <QList>
# include <QMap>
# include <QPointer>
# include <QProcess>
# include <QRegExp>
# include <QString>
# include <QStringList>
# include <QSettings>
# include <QStack>
# include <QThread>
# include <QVariant>
# include <QVector>
# include <QUrl>
2011-09-20 13:54:07 +02:00
# if USE_SHARED_POINTER
2012-02-15 10:42:41 +01:00
# include <QSharedPointer>
2009-06-25 15:00:57 +02:00
# endif
2008-12-02 12:01:29 +01:00
2012-02-15 10:42:41 +01:00
# include <QColor>
# include <QFont>
2011-08-24 16:23:10 +02:00
2010-10-08 14:26:44 +02:00
//#include <QtGui/private/qfixed_p.h>
2012-02-15 10:42:41 +01:00
# include <QPainter>
# include <QPainterPath>
# include <QRegion>
2011-10-10 14:47:14 +02:00
2012-02-15 10:42:41 +01:00
# include <QTextCursor>
# include <QTextDocument>
2008-12-02 12:01:29 +01:00
2011-09-20 13:54:07 +02:00
# if USE_SCRIPTLIB
2012-02-15 10:42:41 +01:00
# include <QScriptEngine>
# include <QScriptValue>
2011-09-20 13:54:07 +02:00
# endif
2011-02-10 15:17:55 +01:00
2012-04-25 12:01:20 +02:00
# if USE_WEBKITLIB
# include <QWebPage>
# endif
2012-02-15 10:42:41 +01:00
# include <QXmlAttributes>
2011-03-29 14:57:15 +02:00
2012-02-15 10:42:41 +01:00
# include <QHostAddress>
# include <QNetworkRequest>
2008-12-02 12:01:29 +01:00
2011-10-10 14:47:14 +02:00
# include <QApplication> // QWidgets: Separate module as of Qt 5
# include <QAction>
# include <QStandardItemModel>
# include <QLabel>
2012-02-04 00:59:31 +01:00
# if USE_CXX11
# include <array>
# endif
2012-02-03 20:55:04 +01:00
# include <complex>
2009-01-16 11:17:00 +01:00
# include <deque>
2008-12-02 12:01:29 +01:00
# include <iostream>
2011-09-15 12:42:29 +02:00
# include <iterator>
2011-10-20 15:20:50 +02:00
# include <fstream>
2008-12-11 16:10:47 +01:00
# include <map>
2012-02-02 13:18:10 +01:00
# include <memory>
2008-12-10 14:37:15 +01:00
# include <list>
2011-11-15 16:57:43 +01:00
# include <limits>
2009-03-11 13:31:38 +01:00
# include <set>
2008-12-10 14:37:15 +01:00
# include <stack>
2008-12-02 12:01:29 +01:00
# include <string>
# include <vector>
2011-08-04 17:14:22 +02:00
# include <stdarg.h>
2011-08-24 13:51:49 +02:00
# include "../simple/deep/deep/simple_test_app.h"
2011-03-04 16:49:25 +01:00
# if USE_BOOST
2011-03-04 17:22:58 +01:00
# include <boost/optional.hpp>
2011-03-04 16:49:25 +01:00
# include <boost/shared_ptr.hpp>
2012-01-20 14:35:34 +01:00
# include <boost/date_time.hpp>
2011-12-12 17:50:50 +01:00
# include <boost/date_time/gregorian/gregorian.hpp>
2012-01-20 14:35:34 +01:00
# include <boost/date_time/posix_time/posix_time.hpp>
2012-04-21 00:49:59 +02:00
# include <boost/bimap.hpp>
2011-03-04 16:49:25 +01:00
# endif
2011-03-01 12:39:53 +01:00
2011-05-16 20:04:17 +02:00
# if USE_EIGEN
# include <eigen2/Eigen/Core>
# endif
2011-03-01 12:39:53 +01:00
# if USE_PRIVATE
2012-02-15 10:42:41 +01:00
# include <private/qobject_p.h>
2011-03-01 12:39:53 +01:00
# endif
2010-08-18 10:56:42 +02:00
# if defined(__GNUC__) && !defined(__llvm__) && !defined(Q_OS_MAC)
2010-04-20 12:06:48 +02:00
# define USE_GCC_EXT 1
2010-09-01 11:58:23 +02:00
# undef __DEPRECATED
2011-01-04 13:56:55 +01:00
# include <ext / hash_set>
2010-04-15 18:28:58 +02:00
# endif
2008-12-02 12:01:29 +01:00
# ifdef Q_OS_WIN
# include <windows.h>
2010-04-07 15:23:37 +02:00
# undef min
# undef max
2008-12-02 12:01:29 +01:00
# endif
2011-01-03 17:34:41 +01:00
# ifdef __SSE__
2010-10-26 10:40:31 +02:00
# include <xmmintrin.h>
# include <stddef.h>
# endif
2010-03-30 17:38:57 +02:00
2011-08-24 16:23:10 +02:00
# if USE_AUTOBREAK
2011-11-07 19:36:48 +01:00
# ifdef Q_CC_MSVC
2011-08-24 16:23:10 +02:00
# define BREAK_HERE __asm { int 3 }; __asm { mov eax, eax }
# else
# define BREAK_HERE asm("int $3; mov %eax, %eax")
# endif
# else
2011-12-12 18:29:19 +01:00
# define BREAK_HERE dummyStatement()
2011-08-24 16:23:10 +02:00
# endif
2011-08-24 16:23:10 +02:00
# if USE_UNINITIALIZED_AUTOBREAK
2011-11-07 19:36:48 +01:00
# ifdef Q_CC_MSVC
2011-08-24 16:23:10 +02:00
# define BREAK_UNINITIALIZED_HERE __asm { int 3 }; __asm { mov eax, eax }
# else
# define BREAK_UNINITIALIZED_HERE asm("int $3; mov %eax, %eax")
# endif
# else
2011-12-12 18:29:19 +01:00
# define BREAK_UNINITIALIZED_HERE dummyStatement()
2011-08-24 16:23:10 +02:00
# endif
2011-11-18 15:03:58 +01:00
QT_BEGIN_NAMESPACE
2011-08-24 16:23:10 +02:00
uint qHash ( const QMap < int , int > & ) { return 0 ; }
uint qHash ( const double & f ) { return int ( f ) ; }
2011-12-07 14:55:37 +01:00
uint qHash ( const QPointer < QObject > & p ) { return ( ulong ) p . data ( ) ; }
2011-11-18 15:03:58 +01:00
QT_END_NAMESPACE
namespace nsA {
namespace nsB {
struct SomeType
{
SomeType ( int a ) : a ( a ) { }
int a ;
} ;
} // namespace nsB
} // namespace nsA
2011-08-24 16:23:10 +02:00
2012-05-11 22:09:19 +02:00
struct BaseClass
{
BaseClass ( ) : a ( 1 ) { }
virtual ~ BaseClass ( ) { }
virtual int foo ( ) { return a ; }
int a ;
} ;
struct DerivedClass : BaseClass
{
DerivedClass ( ) : b ( 2 ) { }
int foo ( ) { return b ; }
int b ;
} ;
2011-06-21 16:45:23 +02:00
namespace multibp {
2010-01-04 13:16:10 +01:00
2012-04-13 13:11:31 +02:00
// This tests multiple breakpoints.
2011-06-21 13:00:42 +02:00
template < typename T > class Vector
{
public :
explicit Vector ( int size )
: m_size ( size ) , m_data ( new T [ size ] )
2011-08-24 13:51:49 +02:00
{
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check size 10 int.
// Continue.
2012-04-13 13:11:31 +02:00
// Manual: Add a breakpoint in the constructor
// Manual: Check there are multiple entries in the Breakpoint view.
2011-08-25 10:56:00 +02:00
dummyStatement ( this ) ;
2011-08-24 13:51:49 +02:00
}
2011-06-21 13:00:42 +02:00
~ Vector ( ) { delete [ ] m_data ; }
int size ( ) const { return m_size ; }
private :
int m_size ;
T * m_data ;
} ;
2011-08-24 16:23:10 +02:00
void testMultiBp ( )
2011-06-21 13:00:42 +02:00
{
Vector < int > vi ( 10 ) ;
Vector < float > vf ( 10 ) ;
Vector < double > vd ( 10 ) ;
Vector < char > vc ( 10 ) ;
2011-08-24 16:23:10 +02:00
dummyStatement ( & vi , & vf , & vd , & vc ) ;
2011-06-21 13:00:42 +02:00
}
2011-06-21 16:45:23 +02:00
} // namespace multibp
2010-01-18 15:11:54 +01:00
2011-05-16 20:04:17 +02:00
2011-03-01 12:39:53 +01:00
2008-12-10 16:48:12 +01:00
2009-05-05 08:46:24 +02:00
class Foo
2008-12-02 12:01:29 +01:00
{
public :
2009-05-05 08:46:24 +02:00
Foo ( int i = 0 )
2008-12-02 12:01:29 +01:00
: a ( i ) , b ( 2 )
{
int s = 1 ;
int t = 2 ;
b = 2 + s + t ;
2011-08-24 16:23:10 +02:00
dummyStatement ( & s , & t ) ;
2008-12-02 12:01:29 +01:00
}
2009-04-16 12:17:01 +02:00
2010-09-01 14:33:52 +02:00
virtual ~ Foo ( )
2009-04-16 12:17:01 +02:00
{
a = 5 ;
}
2008-12-02 12:01:29 +01:00
void doit ( )
{
static QObject ob ;
m [ " 1 " ] = " 2 " ;
h [ & ob ] = m . begin ( ) ;
a + = 1 ;
- - b ;
2011-11-18 15:03:58 +01:00
dummyStatement ( & a , & b ) ;
2008-12-02 12:01:29 +01:00
}
public :
int a , b ;
char x [ 6 ] ;
private :
typedef QMap < QString , QString > Map ;
Map m ;
QHash < QObject * , Map : : iterator > h ;
} ;
2011-08-24 16:23:10 +02:00
class X : virtual public Foo { public : X ( ) { } } ;
2009-06-17 16:00:03 +02:00
2011-08-24 16:23:10 +02:00
class XX : virtual public Foo { public : XX ( ) { } } ;
2010-06-29 10:58:09 +02:00
2011-08-24 16:23:10 +02:00
class Y : virtual public Foo { public : Y ( ) { } } ;
2009-06-17 16:00:03 +02:00
2011-08-24 16:23:10 +02:00
class D : public X , public Y { int diamond ; } ;
2010-06-29 10:58:09 +02:00
2011-08-24 16:23:10 +02:00
namespace peekandpoke {
void testAnonymousStructs ( )
2010-03-16 18:39:06 +01:00
{
2011-08-24 16:23:10 +02:00
# ifndef Q_CC_RVCT
2010-03-16 18:39:06 +01:00
union {
struct { int i ; int b ; } ;
struct { float f ; } ;
double d ;
2010-05-19 14:18:41 +02:00
} a = { { 42 , 43 } } ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand a.
2011-12-14 12:26:37 +01:00
// CheckType a union {...}.
2011-12-08 17:40:27 +01:00
// Check a.b 43 int.
// Check a.d 9.1245819032257467e-313 double.
// Check a.f 5.88545355e-44 float.
// Check a.i 42 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-24 16:23:10 +02:00
a . i = 1 ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand a.
2011-12-14 12:26:37 +01:00
// CheckType a union {...}.
2011-12-08 17:40:27 +01:00
// Check a.b 43 int.
// Check a.d 9.1245819012000775e-313 double.
// Check a.f 1.40129846e-45 float.
// Check a.i 1 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
2011-08-24 16:23:10 +02:00
a . i = 2 ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand a.
2011-12-14 12:26:37 +01:00
// CheckType a union {...}.
2011-12-08 17:40:27 +01:00
// Check a.b 43 int.
// Check a.d 9.1245819012494841e-313 double.
// Check a.f 2.80259693e-45 float.
// Check a.i 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
2011-08-24 16:23:10 +02:00
dummyStatement ( & a ) ;
# endif
2010-03-16 18:39:06 +01:00
}
2011-08-24 16:23:10 +02:00
void testComplexWatchers ( )
2010-03-16 18:39:06 +01:00
{
struct S { int a ; double b ; } s [ 10 ] ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand s and s[0].
2011-12-07 14:55:37 +01:00
// CheckType s peekandpoke::S [10].
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: Watcher Context: "Add New Watcher".
// Manual: Type ['s[%d].a' % i for i in range(5)]
// Manual: Expand it, continue stepping. This should result in a list
// Manual: of five items containing the .a fields of s[0]..s[4].
2012-04-13 13:22:35 +02:00
for ( int i = 0 ; i ! = 10 ; + + i )
s [ i ] . a = i ;
2011-08-24 16:23:10 +02:00
dummyStatement ( & s ) ;
2010-03-16 18:39:06 +01:00
}
2010-03-17 11:44:04 +01:00
2011-08-24 16:23:10 +02:00
void testQImageDisplay ( )
2010-03-17 11:44:04 +01:00
{
QImage im ( QSize ( 200 , 200 ) , QImage : : Format_RGB32 ) ;
im . fill ( QColor ( 200 , 10 , 30 ) . rgba ( ) ) ;
QPainter pain ;
pain . begin ( & im ) ;
pain . setPen ( QPen ( Qt : : black , 5.0 , Qt : : SolidLine , Qt : : RoundCap ) ) ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check im (200x200) QImage.
// CheckType pain QPainter.
// Continue.
2011-12-14 12:26:37 +01:00
2011-08-24 16:23:10 +02:00
pain . drawEllipse ( 20 , 20 , 160 , 160 ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: Toggle between "Normal" and "Displayed" in L&W Context Menu,
// Manual: entry "Display of Type QImage".
2010-03-17 11:44:04 +01:00
pain . drawArc ( 70 , 115 , 60 , 30 , 200 * 16 , 140 * 16 ) ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-15 12:25:27 +01:00
2010-03-17 11:44:04 +01:00
pain . setBrush ( Qt : : black ) ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-15 12:25:27 +01:00
2011-08-24 16:23:10 +02:00
pain . drawEllipse ( 65 , 70 , 15 , 15 ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: Toggle between "Normal" and "Displayed" in L&W Context Menu,
// Manual: entry "Display of Type QImage".
2011-08-24 16:23:10 +02:00
pain . drawEllipse ( 120 , 70 , 15 , 15 ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
2010-03-17 11:44:04 +01:00
pain . end ( ) ;
2011-08-25 10:56:00 +02:00
dummyStatement ( & pain ) ;
2010-03-17 11:44:04 +01:00
}
2011-08-24 16:23:10 +02:00
void testPeekAndPoke3 ( )
{
testAnonymousStructs ( ) ;
testComplexWatchers ( ) ;
testQImageDisplay ( ) ;
}
} // namespace peekandpoke
2010-02-15 16:59:00 +01:00
2010-03-30 17:38:57 +02:00
2011-08-17 14:54:31 +02:00
namespace anon {
2010-03-18 18:10:00 +01:00
2011-08-17 14:54:31 +02:00
# ifndef Q_CC_RVCT
struct TestAnonymous
2010-03-18 18:10:00 +01:00
{
2011-08-17 14:54:31 +02:00
union {
struct { int i ; int b ; } ;
struct { float f ; } ;
double d ;
} ;
} ;
2010-03-18 18:10:00 +01:00
2011-08-17 14:54:31 +02:00
namespace {
2010-03-18 18:10:00 +01:00
2011-08-17 14:54:31 +02:00
struct Something
{
Something ( ) { a = b = 1 ; }
2010-03-30 17:38:57 +02:00
2011-08-17 14:54:31 +02:00
void foo ( )
{
a = 42 ;
b = 43 ;
}
int a , b ;
} ;
}
# endif
void testAnonymous ( )
{
# ifndef Q_CC_RVCT
TestAnonymous a ;
2011-12-08 17:40:27 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand a a.#1 a.#2.
2011-12-08 17:40:27 +01:00
// CheckType a anon::TestAnonymous.
// Check a.#1 {...}.
// CheckType a.#1.b int.
// CheckType a.#1.i int.
// CheckType a.#2.f float.
// CheckType a.d double.
// Continue.
2011-08-17 14:54:31 +02:00
a . i = 1 ;
a . i = 2 ;
a . i = 3 ;
Something s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// CheckType s anon::(anonymous namespace)::Something.
2011-12-08 17:40:27 +01:00
// Check s.a 1 int.
// Check s.b 1 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-17 14:54:31 +02:00
s . foo ( ) ;
2011-12-08 17:40:27 +01:00
BREAK_HERE ;
// Expand s.
// Check s.a 42 int.
// Check s.b 43 int.
// Continue.
2011-08-17 14:54:31 +02:00
dummyStatement ( & a , & s ) ;
# endif
}
} // namespace anon
2010-03-18 18:10:00 +01:00
2010-02-15 16:59:00 +01:00
2011-08-17 10:46:08 +02:00
namespace qbytearray {
2009-04-03 11:54:29 +02:00
2011-08-17 10:46:08 +02:00
void testQByteArray1 ( )
{
QByteArray ba ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check ba "" QByteArray.
// Continue.
2011-08-17 10:46:08 +02:00
ba + = " Hello " ;
ba + = ' " ' ;
ba + = " World " ;
ba + = char ( 0 ) ;
ba + = 1 ;
ba + = 2 ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand ba.
2011-12-14 12:26:37 +01:00
// Check ba "Hello"World" QByteArray.
2011-12-08 17:40:27 +01:00
// Check ba.0 72 'H' char.
// Check ba.11 0 '\0' char.
// Check ba.12 1 char.
// Check ba.13 2 char.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & ba ) ;
}
void testQByteArray2 ( )
{
QByteArray ba ;
for ( int i = 256 ; - - i > = 0 ; )
ba . append ( char ( i ) ) ;
QString s ( 10000 , ' x ' ) ;
std : : string ss ( 10000 , ' c ' ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2012-03-15 16:37:24 +01:00
// CheckType ba QByteArray.
2011-12-07 14:55:37 +01:00
// Check s "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..." QString.
// Check ss "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc..." std::string.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & ba , & ss , & s ) ;
}
void testQByteArray3 ( )
{
const char * str1 = " \356 " ;
const char * str2 = " \xee " ;
const char * str3 = " \\ ee " ;
QByteArray buf1 ( str1 ) ;
QByteArray buf2 ( str2 ) ;
QByteArray buf3 ( str3 ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2012-03-15 16:37:24 +01:00
// Check buf1 "î" QByteArray.
// Check buf2 "î" QByteArray.
// Check buf3 "\ee" QByteArray.
2011-12-07 14:55:37 +01:00
// CheckType str1 char *.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & buf1 , & buf2 , & buf3 ) ;
}
2012-03-14 19:28:36 +01:00
void testQByteArray4 ( )
{
char data [ ] = { ' H ' , ' e ' , ' l ' , ' l ' , ' o ' } ;
QByteArray ba1 = QByteArray : : fromRawData ( data , 4 ) ;
QByteArray ba2 = QByteArray : : fromRawData ( data + 1 , 4 ) ;
BREAK_HERE ;
// Check ba1 "Hell" QByteArray.
// Check ba2 "ello" QByteArray.
// Continue.
dummyStatement ( & ba1 , & ba2 , & data ) ;
}
2011-08-17 10:46:08 +02:00
void testQByteArray ( )
{
testQByteArray1 ( ) ;
testQByteArray2 ( ) ;
testQByteArray3 ( ) ;
2012-03-14 19:28:36 +01:00
testQByteArray4 ( ) ;
2011-08-17 10:46:08 +02:00
}
} // namespace qbytearray
2008-12-02 12:01:29 +01:00
2011-02-02 19:03:06 +01:00
2011-11-18 15:03:58 +01:00
namespace catchthrow {
2010-02-11 17:29:10 +01:00
2011-11-18 15:03:58 +01:00
static void throwit1 ( )
{
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
// Set a breakpoint on "throw" in the BreakWindow context menu
// before stepping further.
throw 14 ;
}
static void throwit ( )
{
throwit1 ( ) ;
}
void testCatchThrow ( )
{
int gotit = 0 ;
try {
throwit ( ) ;
} catch ( int what ) {
gotit = what ;
}
dummyStatement ( & gotit ) ;
}
} // namespace catchthrow
2010-02-11 17:29:10 +01:00
2011-08-15 13:32:46 +02:00
namespace qdatetime {
2010-09-27 12:40:14 +02:00
2011-08-15 13:32:46 +02:00
void testQDate ( )
{
QDate date ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand date.
2011-12-14 12:26:37 +01:00
// CheckType date QDate.
2011-12-08 17:40:27 +01:00
// Check date.(ISO) "" QString.
// Check date.(Locale) "" QString.
// Check date.(SystemLocale) "" QString.
// Check date.toString "" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
// Step, check display.
date = QDate : : currentDate ( ) ;
date = date . addDays ( 5 ) ;
date = date . addDays ( 5 ) ;
dummyStatement ( & date ) ;
}
2010-09-27 12:40:14 +02:00
2011-08-15 13:32:46 +02:00
void testQTime ( )
{
QTime time ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2012-02-01 08:51:48 +01:00
// Expand time.
// CheckType time QTime.
// Check time.(ISO) "" QString.
// Check time.(Locale) "" QString.
// Check time.(SystemLocale) "" QString.
// Check time.toString "" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-08 17:40:27 +01:00
2011-08-15 13:32:46 +02:00
// Step, check display.
time = QTime : : currentTime ( ) ;
time = time . addSecs ( 5 ) ;
time = time . addSecs ( 5 ) ;
dummyStatement ( & time ) ;
}
void testQDateTime ( )
{
QDateTime date ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Expand date.
2012-02-01 08:51:48 +01:00
// CheckType date QDateTime.
2011-12-15 12:25:27 +01:00
// Check date.(ISO) "" QString.
// Check date.(Locale) "" QString.
// Check date.(SystemLocale) "" QString.
// Check date.toString "" QString.
2012-03-02 19:09:13 +01:00
// Check date.toUTC QDateTime.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-08 17:40:27 +01:00
2012-04-13 13:13:04 +02:00
// Step, check display
2011-08-15 13:32:46 +02:00
date = QDateTime : : currentDateTime ( ) ;
2012-04-13 13:13:04 +02:00
date = date . addDays ( 5 ) ;
date = date . addDays ( 5 ) ;
2011-08-15 13:32:46 +02:00
dummyStatement ( & date ) ;
}
void testDateTime ( )
{
testQDate ( ) ;
testQDateTime ( ) ;
testQTime ( ) ;
}
} // namespace qdatetime
2009-09-03 09:15:24 +02:00
2010-10-07 16:36:25 +02:00
2012-03-05 10:57:38 +01:00
namespace qdir {
void testQDir ( )
{
QDir dir ( " /tmp " ) ;
dir . absolutePath ( ) ;
BREAK_HERE ;
// Check dir "/tmp" QDir.
// Check dir.absolutePath "/tmp" QString.
// Check dir.canonicalPath "/tmp" QString.
// Continue.
dummyStatement ( & dir ) ;
}
} // namespace qdir
2011-08-17 10:46:08 +02:00
namespace qfileinfo {
void testQFileInfo ( )
{
QFile file ( " /tmp/t " ) ;
2011-09-01 10:28:32 +02:00
file . setObjectName ( " A QFile instance " ) ;
QFileInfo fi ( " /tmp/tt " ) ;
2011-08-17 10:46:08 +02:00
QString s = fi . absoluteFilePath ( ) ;
2011-12-13 19:31:28 +01:00
BREAK_HERE ;
// Check fi "/tmp/tt" QFileInfo.
// Check file "/tmp/t" QFile.
2011-12-15 12:25:27 +01:00
// Check s "/tmp/tt" QString.
2011-12-13 19:31:28 +01:00
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & file , & s ) ;
}
} // namespace qfileinfo
2009-07-14 18:14:49 +02:00
2011-11-18 15:03:58 +01:00
namespace qhash {
void testQHash1 ( )
{
QHash < QString , QList < int > > hash ;
hash . insert ( " Hallo " , QList < int > ( ) ) ;
hash . insert ( " Welt " , QList < int > ( ) < < 1 ) ;
hash . insert ( " ! " , QList < int > ( ) < < 1 < < 2 ) ;
hash . insert ( " ! " , QList < int > ( ) < < 1 < < 2 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand hash hash.0 hash.1 hash.1.value hash.2 hash.2.value.
2011-12-07 14:55:37 +01:00
// Check hash <3 items> QHash<QString, QList<int>>.
2011-12-08 17:40:27 +01:00
// Check hash.0 QHashNode<QString, QList<int>>.
// Check hash.0.key "Hallo" QString.
// Check hash.0.value <0 items> QList<int>.
// Check hash.1 QHashNode<QString, QList<int>>.
// Check hash.1.key "Welt" QString.
// Check hash.1.value <1 items> QList<int>.
// Check hash.1.value.0 1 int.
// Check hash.2 QHashNode<QString, QList<int>>.
// Check hash.2.key "!" QString.
// Check hash.2.value <2 items> QList<int>.
// Check hash.2.value.0 1 int.
// Check hash.2.value.1 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash ) ;
}
void testQHash2 ( )
{
QHash < int , float > hash ;
hash [ 11 ] = 11.0 ;
hash [ 22 ] = 22.0 ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand hash.
2011-12-14 12:26:37 +01:00
// Check hash <2 items> QHash<int, float>.
2011-12-08 17:40:27 +01:00
// Check hash.22 22 float.
// Check hash.11 11 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash ) ;
}
void testQHash3 ( )
{
QHash < QString , int > hash ;
hash [ " 22.0 " ] = 22.0 ;
hash [ " 123.0 " ] = 22.0 ;
hash [ " 111111ss111128.0 " ] = 28.0 ;
hash [ " 11124.0 " ] = 22.0 ;
hash [ " 1111125.0 " ] = 22.0 ;
hash [ " 11111126.0 " ] = 22.0 ;
hash [ " 111111127.0 " ] = 27.0 ;
hash [ " 111111111128.0 " ] = 28.0 ;
hash [ " 111111111111111111129.0 " ] = 29.0 ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand hash hash.0 hash.8.
2011-12-07 14:55:37 +01:00
// Check hash <9 items> QHash<QString, int>.
2011-12-08 17:40:27 +01:00
// Check hash.0 QHashNode<QString, int>.
// Check hash.0.key "123.0" QString.
// Check hash.0.value 22 int.
// Check hash.8 QHashNode<QString, int>.
// Check hash.8.key "11124.0" QString.
// Check hash.8.value 22 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash ) ;
}
void testQHash4 ( )
{
QHash < QByteArray , float > hash ;
hash [ " 22.0 " ] = 22.0 ;
hash [ " 123.0 " ] = 22.0 ;
hash [ " 111111ss111128.0 " ] = 28.0 ;
hash [ " 11124.0 " ] = 22.0 ;
hash [ " 1111125.0 " ] = 22.0 ;
hash [ " 11111126.0 " ] = 22.0 ;
hash [ " 111111127.0 " ] = 27.0 ;
hash [ " 111111111128.0 " ] = 28.0 ;
hash [ " 111111111111111111129.0 " ] = 29.0 ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand hash hash.0 hash.8/
2011-12-07 14:55:37 +01:00
// Check hash <9 items> QHash<QByteArray, float>.
2011-12-08 17:40:27 +01:00
// Check hash.0 QHashNode<QByteArray, float>.
// Check hash.0.key "123.0" QByteArray.
// Check hash.0.value 22 float.
// Check hash.8 QHashNode<QByteArray, float>.
// Check hash.8.key "11124.0" QByteArray.
// Check hash.8.value 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash ) ;
}
void testQHash5 ( )
{
QHash < int , QString > hash ;
hash [ 22 ] = " 22.0 " ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand hash hash.0.
2011-12-07 14:55:37 +01:00
// Check hash <1 items> QHash<int, QString>.
2011-12-08 17:40:27 +01:00
// Check hash.0 QHashNode<int, QString>.
// Check hash.0.key 22 int.
// Check hash.0.value "22.0" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash ) ;
}
void testQHash6 ( )
{
QHash < QString , Foo > hash ;
hash [ " 22.0 " ] = Foo ( 22 ) ;
hash [ " 33.0 " ] = Foo ( 33 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand hash hash.0 hash.0.value hash.1.
2011-12-07 14:55:37 +01:00
// Check hash <2 items> QHash<QString, Foo>.
2011-12-08 17:40:27 +01:00
// Check hash.0 QHashNode<QString, Foo>.
// Check hash.0.key "22.0" QString.
// CheckType hash.0.value Foo.
// Check hash.0.value.a 22 int.
// Check hash.1 QHashNode<QString, Foo>.
// Check hash.1.key "33.0" QString.
// CheckType hash.1.value Foo.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash ) ;
}
void testQHash7 ( )
{
QObject ob ;
QHash < QString , QPointer < QObject > > hash ;
hash . insert ( " Hallo " , QPointer < QObject > ( & ob ) ) ;
hash . insert ( " Welt " , QPointer < QObject > ( & ob ) ) ;
hash . insert ( " . " , QPointer < QObject > ( & ob ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand hash hash.0 hash.0.value hash.2.
2011-12-07 14:55:37 +01:00
// Check hash <3 items> QHash<QString, QPointer<QObject>>.
2011-12-08 17:40:27 +01:00
// Check hash.0 QHashNode<QString, QPointer<QObject>>.
// Check hash.0.key "Hallo" QString.
// CheckType hash.0.value QPointer<QObject>.
// CheckType hash.0.value.o QObject.
// Check hash.2 QHashNode<QString, QPointer<QObject>>.
// Check hash.2.key "." QString.
// CheckType hash.2.value QPointer<QObject>.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & hash , & ob ) ;
}
2012-05-31 11:28:42 +02:00
void testQHashIntFloatIterator ( )
{
typedef QHash < int , float > Hash ;
Hash hash ;
hash [ 11 ] = 11.0 ;
hash [ 22 ] = 22.0 ;
hash [ 33 ] = 33.0 ;
hash [ 44 ] = 44.0 ;
hash [ 55 ] = 55.0 ;
hash [ 66 ] = 66.0 ;
Hash : : iterator it1 = hash . begin ( ) ;
Hash : : iterator it2 = it1 ; + + it2 ;
Hash : : iterator it3 = it2 ; + + it2 ;
Hash : : iterator it4 = it3 ; + + it3 ;
Hash : : iterator it5 = it4 ; + + it4 ;
Hash : : iterator it6 = it5 ; + + it5 ;
BREAK_HERE ;
// Expand hash.
// Check hash <6 items> Hash.
// Check hash.11 11 float.
// Check it1.first 11 int.
// Check it1.second 11 float.
// Check it1.first 55 int.
// Check it1.second 55 float.
// Continue.
dummyStatement ( & hash , & it1 , & it2 , & it3 , & it4 , & it5 , & it6 ) ;
}
2011-11-18 15:03:58 +01:00
void testQHash ( )
{
testQHash1 ( ) ;
testQHash2 ( ) ;
testQHash3 ( ) ;
testQHash4 ( ) ;
testQHash5 ( ) ;
testQHash6 ( ) ;
testQHash7 ( ) ;
2012-05-31 11:28:42 +02:00
testQHashIntFloatIterator ( ) ;
2011-11-18 15:03:58 +01:00
}
} // namespace qhash
2009-07-14 18:14:49 +02:00
2011-08-05 15:06:14 +02:00
namespace qhostaddress {
void testQHostAddress ( )
{
2011-08-15 13:32:46 +02:00
QHostAddress ha1 ( 129u * 256u * 256u * 256u + 130u ) ;
2011-08-05 15:06:14 +02:00
QHostAddress ha2 ( " 127.0.0.1 " ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check ha1 129.0.0.130 QHostAddress.
// Check ha2 "127.0.0.1" QHostAddress.
// Continue.
2011-08-05 15:06:14 +02:00
dummyStatement ( & ha1 , & ha2 ) ;
}
} // namespace qhostaddress
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
namespace painting {
2009-01-27 17:15:51 +01:00
2011-11-18 15:03:58 +01:00
void testQImage ( )
{
// only works with Python dumper
QImage im ( QSize ( 200 , 200 ) , QImage : : Format_RGB32 ) ;
im . fill ( QColor ( 200 , 100 , 130 ) . rgba ( ) ) ;
QPainter pain ;
pain . begin ( & im ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check im (200x200) QImage.
// CheckType pain QPainter.
// Continue.
2011-11-18 15:03:58 +01:00
// Step.
pain . drawLine ( 2 , 2 , 130 , 130 ) ;
pain . drawLine ( 4 , 2 , 130 , 140 ) ;
pain . drawRect ( 30 , 30 , 80 , 80 ) ;
pain . end ( ) ;
dummyStatement ( & pain , & im ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQPixmap ( )
{
QImage im ( QSize ( 200 , 200 ) , QImage : : Format_RGB32 ) ;
im . fill ( QColor ( 200 , 100 , 130 ) . rgba ( ) ) ;
QPainter pain ;
pain . begin ( & im ) ;
pain . drawLine ( 2 , 2 , 130 , 130 ) ;
pain . end ( ) ;
QPixmap pm = QPixmap : : fromImage ( im ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check im (200x200) QImage.
// CheckType pain QPainter.
// Check pm (200x200) QPixmap.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & im , & pm ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testPainting ( )
{
testQImage ( ) ;
testQPixmap ( ) ;
}
2010-03-15 17:44:56 +01:00
2011-11-18 15:03:58 +01:00
} // namespace painting
2010-03-15 17:44:56 +01:00
2009-01-08 11:02:04 +01:00
2011-11-18 15:03:58 +01:00
namespace qlinkedlist {
2009-01-08 11:02:04 +01:00
2011-11-18 15:03:58 +01:00
void testQLinkedListInt ( )
{
QLinkedList < int > list ;
list . append ( 101 ) ;
list . append ( 102 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <2 items> QLinkedList<int>.
2011-12-08 17:40:27 +01:00
// Check list.0 101 int.
// Check list.1 102 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
2009-01-08 11:02:04 +01:00
2011-11-18 15:03:58 +01:00
void testQLinkedListUInt ( )
{
QLinkedList < uint > list ;
list . append ( 103 ) ;
list . append ( 104 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <2 items> QLinkedList<unsigned int>.
2011-12-08 17:40:27 +01:00
// Check list.0 103 unsigned int.
// Check list.1 104 unsigned int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
2009-01-08 11:02:04 +01:00
2011-11-18 15:03:58 +01:00
void testQLinkedListFooStar ( )
{
QLinkedList < Foo * > list ;
list . append ( new Foo ( 1 ) ) ;
list . append ( 0 ) ;
list . append ( new Foo ( 3 ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand list list.0 list.2.
2011-12-07 14:55:37 +01:00
// Check list <3 items> QLinkedList<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType list.0 Foo.
// Check list.0.a 1 int.
// Check list.1 0x0 Foo *.
// CheckType list.2 Foo.
// Check list.2.a 3 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
2009-01-08 11:50:20 +01:00
2011-11-18 15:03:58 +01:00
void testQLinkedListULongLong ( )
{
QLinkedList < qulonglong > list ;
list . append ( 42 ) ;
list . append ( 43 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <2 items> QLinkedList<unsigned long long>.
2011-12-08 17:40:27 +01:00
// Check list.0 42 unsigned long long.
// Check list.1 43 unsigned long long.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
void testQLinkedListFoo ( )
{
QLinkedList < Foo > list ;
list . append ( Foo ( 1 ) ) ;
list . append ( Foo ( 2 ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand list list.0 list.1.
2011-12-07 14:55:37 +01:00
// Check list <2 items> QLinkedList<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType list.0 Foo.
// Check list.0.a 1 int.
// CheckType list.1 Foo.
// Check list.1.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
void testQLinkedListStdString ( )
{
QLinkedList < std : : string > list ;
list . push_back ( " aa " ) ;
list . push_back ( " bb " ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <2 items> QLinkedList<std::string>.
2011-12-08 17:40:27 +01:00
// Check list.0 "aa" std::string.
// Check list.1 "bb" std::string.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
void testQLinkedList ( )
{
testQLinkedListInt ( ) ;
testQLinkedListUInt ( ) ;
testQLinkedListFooStar ( ) ;
testQLinkedListULongLong ( ) ;
testQLinkedListFoo ( ) ;
testQLinkedListStdString ( ) ;
}
} // namespace qlinkedlist
2009-01-08 11:02:04 +01:00
2010-08-12 12:39:14 +02:00
2011-09-15 12:42:29 +02:00
namespace qlist {
2009-07-14 10:07:15 +02:00
2011-09-15 12:42:29 +02:00
void testQListInt ( )
{
QList < int > big ;
for ( int i = 0 ; i < 10000 ; + + i )
big . push_back ( i ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand big.
2011-12-14 12:26:37 +01:00
// Check big <10000 items> QList<int>.
2011-12-08 17:40:27 +01:00
// Check big.0 0 int.
// Check big.1999 1999 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & big ) ;
}
2008-12-02 12:01:29 +01:00
2011-09-15 12:42:29 +02:00
void testQListIntStar ( )
{
QList < int * > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
l . append ( new int ( 1 ) ) ;
l . append ( new int ( 2 ) ) ;
l . append ( new int ( 3 ) ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <3 items> QList<int*>.
2011-12-08 17:40:27 +01:00
// CheckType l.0 int.
// CheckType l.2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
2008-12-02 12:01:29 +01:00
}
2011-09-15 12:42:29 +02:00
void testQListUInt ( )
{
QList < uint > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<unsigned int>.
// Continue.
2011-09-15 12:42:29 +02:00
l . append ( 101 ) ;
l . append ( 102 ) ;
l . append ( 102 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <3 items> QList<unsigned int>.
2011-12-08 17:40:27 +01:00
// Check l.0 101 unsigned int.
// Check l.2 102 unsigned int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
}
2009-03-11 15:09:33 +01:00
2011-09-15 12:42:29 +02:00
void testQListUShort ( )
{
QList < ushort > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<unsigned short>.
// Continue.
2011-09-15 12:42:29 +02:00
l . append ( 101 ) ;
l . append ( 102 ) ;
l . append ( 102 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <3 items> QList<unsigned short>.
2011-12-08 17:40:27 +01:00
// Check l.0 101 unsigned short.
// Check l.2 102 unsigned short.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
}
2008-12-02 12:01:29 +01:00
2011-09-15 12:42:29 +02:00
void testQListQChar ( )
{
QList < QChar > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<QChar>.
// Continue.
2011-09-15 12:42:29 +02:00
l . append ( QChar ( ' a ' ) ) ;
l . append ( QChar ( ' b ' ) ) ;
l . append ( QChar ( ' c ' ) ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <3 items> QList<QChar>.
2011-12-08 17:40:27 +01:00
// Check l.0 'a' (97) QChar.
// Check l.2 'c' (99) QChar.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
2008-12-02 12:01:29 +01:00
}
2011-09-15 12:42:29 +02:00
void testQListQULongLong ( )
{
QList < qulonglong > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<unsigned long long>.
// Continue.
2011-09-15 12:42:29 +02:00
l . append ( 101 ) ;
l . append ( 102 ) ;
l . append ( 102 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <3 items> QList<unsigned long long>.
2012-03-15 16:37:24 +01:00
// CheckType l.0 unsigned long long.
// CheckType l.2 unsigned long long.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
}
2008-12-02 12:01:29 +01:00
2011-09-15 12:42:29 +02:00
void testQListStdString ( )
{
QList < std : : string > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<std::string>.
// Continue.
2011-09-15 12:42:29 +02:00
l . push_back ( " aa " ) ;
l . push_back ( " bb " ) ;
l . push_back ( " cc " ) ;
l . push_back ( " dd " ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <4 items> QList<std::string>.
2011-12-08 17:40:27 +01:00
// CheckType l.0 std::string.
// CheckType l.3 std::string.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
}
2008-12-02 12:01:29 +01:00
2011-09-15 12:42:29 +02:00
void testQListFoo ( )
{
QList < Foo > l ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<Foo>.
// Continue.
2011-09-15 12:42:29 +02:00
for ( int i = 0 ; i < 100 ; + + i )
l . push_back ( i + 15 ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <100 items> QList<Foo>.
2011-12-08 17:40:27 +01:00
// Expand l.
// CheckType l.0 Foo.
// CheckType l.99 Foo.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
l . push_back ( 1000 ) ;
l . push_back ( 1001 ) ;
l . push_back ( 1002 ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <103 items> QList<Foo>.
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & l ) ;
}
void testQListReverse ( )
{
QList < int > l = QList < int > ( ) < < 1 < < 2 < < 3 ;
typedef std : : reverse_iterator < QList < int > : : iterator > Reverse ;
Reverse rit ( l . end ( ) ) ;
Reverse rend ( l . begin ( ) ) ;
QList < int > r ;
while ( rit ! = rend )
r . append ( * rit + + ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand l r.
2011-12-07 14:55:37 +01:00
// Check l <3 items> QList<int>.
2011-12-08 17:40:27 +01:00
// Check l.0 1 int.
// Check l.1 2 int.
// Check l.2 3 int.
2011-12-07 14:55:37 +01:00
// Check r <3 items> QList<int>.
2011-12-08 17:40:27 +01:00
// Check r.0 3 int.
// Check r.1 2 int.
// Check r.2 1 int.
2011-12-07 14:55:37 +01:00
// CheckType rend qlist::Reverse.
// CheckType rit qlist::Reverse.
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( ) ;
}
void testQList ( )
{
testQListInt ( ) ;
testQListIntStar ( ) ;
testQListUInt ( ) ;
testQListUShort ( ) ;
testQListQChar ( ) ;
testQListQULongLong ( ) ;
testQListStdString ( ) ;
testQListFoo ( ) ;
testQListReverse ( ) ;
}
} // namespace qlist
2008-12-02 12:01:29 +01:00
2011-01-19 10:48:39 +01:00
2011-11-18 15:03:58 +01:00
namespace qlocale {
2011-01-19 10:48:39 +01:00
2011-11-18 15:03:58 +01:00
void testQLocale ( )
{
QLocale loc = QLocale : : system ( ) ;
//QString s = loc.name();
//QVariant v = loc;
QLocale : : MeasurementSystem m = loc . measurementSystem ( ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType loc QLocale.
// CheckType m QLocale::MeasurementSystem.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & loc , & m ) ;
}
2011-01-19 10:48:39 +01:00
2011-11-18 15:03:58 +01:00
} // namespace qlocale
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
namespace qmap {
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQMapUIntStringList ( )
{
QMap < uint , QStringList > map ;
map [ 11 ] = QStringList ( ) < < " 11 " ;
map [ 22 ] = QStringList ( ) < < " 22 " ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.value map.1 map.1.value.
2011-12-07 14:55:37 +01:00
// Check map <2 items> QMap<unsigned int, QStringList>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<unsigned int, QStringList>.
// Check map.0.key 11 unsigned int.
// Check map.0.value <1 items> QStringList.
// Check map.0.value.0 "11" QString.
// Check map.1 QMapNode<unsigned int, QStringList>.
// Check map.1.key 22 unsigned int.
// Check map.1.value <1 items> QStringList.
// Check map.1.value.0 "22" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQMapUIntStringListTypedef ( )
{
// only works with Python dumper
typedef QMap < uint , QStringList > T ;
T map ;
map [ 11 ] = QStringList ( ) < < " 11 " ;
map [ 22 ] = QStringList ( ) < < " 22 " ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check map <2 items> qmap::T.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQMapUIntFloat ( )
{
QMap < uint , float > map ;
map [ 11 ] = 11.0 ;
map [ 22 ] = 22.0 ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand map.
2011-12-14 12:26:37 +01:00
// Check map <2 items> QMap<unsigned int, float>.
2011-12-08 17:40:27 +01:00
// Check map.11 11 float.
// Check map.22 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQMapStringFloat ( )
{
QMap < QString , float > map ;
map [ " 22.0 " ] = 22.0 ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0.
2011-12-07 14:55:37 +01:00
// Check map <1 items> QMap<QString, float>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, float>.
// Check map.0.key "22.0" QString.
// Check map.0.value 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2011-01-19 10:48:39 +01:00
2011-11-18 15:03:58 +01:00
void testQMapIntString ( )
{
QMap < int , QString > map ;
map [ 22 ] = " 22.0 " ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0.
2011-12-07 14:55:37 +01:00
// Check map <1 items> QMap<int, QString>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<int, QString>.
// Check map.0.key 22 int.
// Check map.0.value "22.0" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQMapStringFoo ( )
{
QMap < QString , Foo > map ;
map [ " 22.0 " ] = Foo ( 22 ) ;
map [ " 33.0 " ] = Foo ( 33 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.key map.0.value map.1 map.1.value.
2011-12-07 14:55:37 +01:00
// Check map <2 items> QMap<QString, Foo>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, Foo>.
// Check map.0.key "22.0" QString.
// CheckType map.0.value Foo.
// Check map.0.value.a 22 int.
// Check map.1 QMapNode<QString, Foo>.
// Check map.1.key "33.0" QString.
// CheckType map.1.value Foo.
// Check map.1.value.a 33 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMapStringPointer ( )
{
// only works with Python dumper
QObject ob ;
QMap < QString , QPointer < QObject > > map ;
map . insert ( " Hallo " , QPointer < QObject > ( & ob ) ) ;
map . insert ( " Welt " , QPointer < QObject > ( & ob ) ) ;
map . insert ( " . " , QPointer < QObject > ( & ob ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.key map.0.value map.1 map.2.
2011-12-07 14:55:37 +01:00
// Check map <3 items> QMap<QString, QPointer<QObject>>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, QPointer<QObject>>.
// Check map.0.key "." QString.
// CheckType map.0.value QPointer<QObject>.
// CheckType map.0.value.o QObject.
// Check map.1 QMapNode<QString, QPointer<QObject>>.
// Check map.1.key "Hallo" QString.
// Check map.2 QMapNode<QString, QPointer<QObject>>.
// Check map.2.key "Welt" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMapStringList ( )
{
// only works with Python dumper
QList < nsA : : nsB : : SomeType * > x ;
x . append ( new nsA : : nsB : : SomeType ( 1 ) ) ;
x . append ( new nsA : : nsB : : SomeType ( 2 ) ) ;
x . append ( new nsA : : nsB : : SomeType ( 3 ) ) ;
QMap < QString , QList < nsA : : nsB : : SomeType * > > map ;
map [ " foo " ] = x ;
map [ " bar " ] = x ;
map [ " 1 " ] = x ;
map [ " 2 " ] = x ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.key map.0.value map.1 map.1.value.1 map.1.value.2 map.3 map.3.value map.3.value.2.
2011-12-07 14:55:37 +01:00
// Check map <4 items> QMap<QString, QList<nsA::nsB::SomeType*>>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, QList<nsA::nsB::SomeType*>>.
// Check map.0.key "1" QString.
// Check map.0.value <3 items> QList<nsA::nsB::SomeType*>.
// CheckType map.0.value.0 nsA::nsB::SomeType.
// Check map.0.value.0.a 1 int.
// CheckType map.0.value.1 nsA::nsB::SomeType.
// Check map.0.value.1.a 2 int.
// CheckType map.0.value.2 nsA::nsB::SomeType.
// Check map.0.value.2.a 3 int.
// Check map.3 QMapNode<QString, QList<nsA::nsB::SomeType*>>.
// Check map.3.key "foo" QString.
// Check map.3.value <3 items> QList<nsA::nsB::SomeType*>.
// CheckType map.3.value.2 nsA::nsB::SomeType.
// Check map.3.value.2.a 3 int.
2011-12-07 14:55:37 +01:00
// Check x <3 items> QList<nsA::nsB::SomeType*>.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMultiMapUintFloat ( )
{
QMultiMap < uint , float > map ;
map . insert ( 11 , 11.0 ) ;
map . insert ( 22 , 22.0 ) ;
map . insert ( 22 , 33.0 ) ;
map . insert ( 22 , 34.0 ) ;
map . insert ( 22 , 35.0 ) ;
map . insert ( 22 , 36.0 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand map.
2011-12-14 12:26:37 +01:00
// Check map <6 items> QMultiMap<unsigned int, float>.
2012-03-02 19:09:13 +01:00
// Check map.0 11 float.
// Check map.5 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMultiMapStringFloat ( )
{
QMultiMap < QString , float > map ;
map . insert ( " 22.0 " , 22.0 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0.
2011-12-07 14:55:37 +01:00
// Check map <1 items> QMultiMap<QString, float>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, float>.
// Check map.0.key "22.0" QString.
// Check map.0.value 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMultiMapIntString ( )
{
QMultiMap < int , QString > map ;
map . insert ( 22 , " 22.0 " ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0.
2011-12-07 14:55:37 +01:00
// Check map <1 items> QMultiMap<int, QString>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<int, QString>.
// Check map.0.key 22 int.
// Check map.0.value "22.0" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMultiMapStringFoo ( )
{
QMultiMap < QString , Foo > map ;
map . insert ( " 22.0 " , Foo ( 22 ) ) ;
map . insert ( " 33.0 " , Foo ( 33 ) ) ;
map . insert ( " 22.0 " , Foo ( 22 ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.value.
2011-12-07 14:55:37 +01:00
// Check map <3 items> QMultiMap<QString, Foo>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, Foo>.
// Check map.0.key "22.0" QString.
// CheckType map.0.value Foo.
// Check map.0.value.a 22 int.
// Check map.2 QMapNode<QString, Foo>.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMultiMapStringPointer ( )
{
QObject ob ;
QMultiMap < QString , QPointer < QObject > > map ;
map . insert ( " Hallo " , QPointer < QObject > ( & ob ) ) ;
map . insert ( " Welt " , QPointer < QObject > ( & ob ) ) ;
map . insert ( " . " , QPointer < QObject > ( & ob ) ) ;
map . insert ( " . " , QPointer < QObject > ( & ob ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.1 map.2 map.3.
2011-12-07 14:55:37 +01:00
// Check map <4 items> QMultiMap<QString, QPointer<QObject>>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<QString, QPointer<QObject>>.
// Check map.0.key "." QString.
// CheckType map.0.value QPointer<QObject>.
// Check map.1 QMapNode<QString, QPointer<QObject>>.
// Check map.1.key "." QString.
// Check map.2 QMapNode<QString, QPointer<QObject>>.
// Check map.2.key "Hallo" QString.
// Check map.3 QMapNode<QString, QPointer<QObject>>.
// Check map.3.key "Welt" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
void testQMap ( )
{
testQMapUIntStringList ( ) ;
testQMapUIntStringListTypedef ( ) ;
testQMapUIntFloat ( ) ;
testQMapStringFloat ( ) ;
testQMapIntString ( ) ;
testQMapStringFoo ( ) ;
testQMapStringPointer ( ) ;
testQMapStringList ( ) ;
testQMultiMapUintFloat ( ) ;
testQMultiMapStringFloat ( ) ;
testQMultiMapIntString ( ) ;
testQMultiMapStringFoo ( ) ;
testQMapUIntStringList ( ) ;
testQMultiMapStringFoo ( ) ;
testQMultiMapStringPointer ( ) ;
}
} // namespace qmap
2009-01-07 15:31:58 +01:00
2009-11-27 14:47:03 +01:00
2011-08-18 16:14:34 +02:00
namespace qobject {
2009-11-27 14:47:03 +01:00
2011-08-18 16:14:34 +02:00
void testQObject1 ( )
2009-11-27 14:47:03 +01:00
{
2011-08-18 16:14:34 +02:00
// This checks whether signal-slot connections are displayed.
QObject parent ;
parent . setObjectName ( " A Parent " ) ;
QObject child ( & parent ) ;
child . setObjectName ( " A Child " ) ;
2011-11-04 17:21:13 +01:00
QObject : : connect ( & child , SIGNAL ( destroyed ( ) ) , & parent , SLOT ( deleteLater ( ) ) ) ;
QObject : : disconnect ( & child , SIGNAL ( destroyed ( ) ) , & parent , SLOT ( deleteLater ( ) ) ) ;
2011-08-18 16:14:34 +02:00
child . setObjectName ( " A renamed Child " ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check child "A renamed Child" QObject.
// Check parent "A Parent" QObject.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & parent , & child ) ;
2009-11-27 14:47:03 +01:00
}
2011-08-18 16:14:34 +02:00
namespace Names {
namespace Bar {
2010-08-13 09:27:22 +02:00
2011-08-18 16:14:34 +02:00
struct Ui { Ui ( ) { w = 0 ; } QWidget * w ; } ;
2010-08-12 15:26:56 +02:00
2011-08-18 16:14:34 +02:00
class TestObject : public QObject
{
Q_OBJECT
public :
TestObject ( QObject * parent = 0 ) : QObject ( parent )
{ m_ui = new Ui ; m_ui - > w = new QWidget ; }
2009-11-27 14:47:03 +01:00
2011-08-18 16:14:34 +02:00
Q_PROPERTY ( QString myProp1 READ myProp1 WRITE setMyProp1 )
QString myProp1 ( ) const { return m_myProp1 ; }
2012-03-05 22:30:59 +01:00
Q_SLOT void setMyProp1 ( const QString & mt ) { m_myProp1 = mt ; }
2009-11-27 14:47:03 +01:00
2011-08-18 16:14:34 +02:00
Q_PROPERTY ( QString myProp2 READ myProp2 WRITE setMyProp2 )
QString myProp2 ( ) const { return m_myProp2 ; }
2012-03-05 22:30:59 +01:00
Q_SLOT void setMyProp2 ( const QString & mt ) { m_myProp2 = mt ; }
2009-11-27 14:47:03 +01:00
2011-08-18 16:14:34 +02:00
public :
Ui * m_ui ;
QString m_myProp1 ;
QString m_myProp2 ;
} ;
2008-12-02 12:01:29 +01:00
2011-08-18 16:14:34 +02:00
} // namespace Bar
} // namespace Names
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQObject2 ( )
2011-08-18 16:14:34 +02:00
{
//QString longString = QString(10000, QLatin1Char('A'));
# if 1
Names : : Bar : : TestObject test ;
test . setMyProp1 ( " HELLO " ) ;
test . setMyProp2 ( " WORLD " ) ;
QString s = test . myProp1 ( ) ;
s + = test . myProp2 ( ) ;
2011-09-15 12:42:29 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s "HELLOWORLD" QString.
// Check test "" qobject::Names::Bar::TestObject.
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & s ) ;
2011-08-18 16:14:34 +02:00
# endif
2010-04-08 14:38:42 +02:00
2011-08-18 16:14:34 +02:00
#if 0
QAction act ( " xxx " , & app ) ;
QString t = act . text ( ) ;
t + = " y " ;
t + = " y " ;
t + = " y " ;
t + = " y " ;
t + = " y " ;
# endif
2008-12-02 12:01:29 +01:00
2011-08-18 16:14:34 +02:00
# if 1
QWidget ob ;
ob . setObjectName ( " An Object " ) ;
ob . setProperty ( " USER DEFINED 1 " , 44 ) ;
ob . setProperty ( " USER DEFINED 2 " , QStringList ( ) < < " FOO " < < " BAR " ) ;
QObject ob1 ;
ob1 . setObjectName ( " Another Object " ) ;
QObject : : connect ( & ob , SIGNAL ( destroyed ( ) ) , & ob1 , SLOT ( deleteLater ( ) ) ) ;
QObject : : connect ( & ob , SIGNAL ( destroyed ( ) ) , & ob1 , SLOT ( deleteLater ( ) ) ) ;
//QObject::connect(&app, SIGNAL(lastWindowClosed()), &ob, SLOT(deleteLater()));
# endif
2010-07-07 17:11:10 +02:00
2011-08-18 16:14:34 +02:00
#if 0
QList < QObject * > obs ;
obs . append ( & ob ) ;
obs . append ( & ob1 ) ;
obs . append ( 0 ) ;
obs . append ( & app ) ;
ob1 . setObjectName ( " A Subobject " ) ;
# endif
}
class Sender : public QObject
{
Q_OBJECT
public :
Sender ( ) { setObjectName ( " Sender " ) ; }
void doEmit ( ) { emit aSignal ( ) ; }
signals :
void aSignal ( ) ;
} ;
class Receiver : public QObject
{
Q_OBJECT
public :
Receiver ( ) { setObjectName ( " Receiver " ) ; }
public slots :
void aSlot ( ) {
QObject * s = sender ( ) ;
if ( s ) {
qDebug ( ) < < " SENDER: " < < s ;
} else {
qDebug ( ) < < " NO SENDER " ;
}
2010-07-07 17:11:10 +02:00
}
2011-08-18 16:14:34 +02:00
} ;
2011-11-18 15:03:58 +01:00
void testSignalSlot ( )
2011-08-18 16:14:34 +02:00
{
Sender sender ;
Receiver receiver ;
QObject : : connect ( & sender , SIGNAL ( aSignal ( ) ) , & receiver , SLOT ( aSlot ( ) ) ) ;
// Break here.
// Single step through signal emission.
sender . doEmit ( ) ;
2011-11-18 15:03:58 +01:00
dummyStatement ( & sender , & receiver ) ;
2010-07-07 17:11:10 +02:00
}
2011-08-18 16:14:34 +02:00
# if USE_PRIVATE
2011-11-29 13:55:45 +01:00
class DerivedObjectPrivate : public QObjectPrivate
2011-08-18 16:14:34 +02:00
{
2011-11-29 13:55:45 +01:00
public :
2011-08-18 16:14:34 +02:00
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 ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand ob ob.properties.
2011-12-08 17:40:27 +01:00
// Check ob.properties.x 43 QVariant (int).
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
// expand ob and ob.properties
// step, and check whether x gets updated.
ob . setX ( 23 ) ;
ob . setX ( 25 ) ;
ob . setX ( 26 ) ;
2011-12-08 17:40:27 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand ob ob.properties.
2011-12-08 17:40:27 +01:00
// Check ob.properties.x 26 QVariant (int).
// Continue.
2011-08-18 16:14:34 +02:00
# endif
}
2011-11-18 15:03:58 +01:00
void testQObject ( )
2011-08-18 16:14:34 +02:00
{
testQObjectData ( ) ;
testQObject1 ( ) ;
2011-11-18 15:03:58 +01:00
testQObject2 ( ) ;
testSignalSlot ( ) ;
2011-08-18 16:14:34 +02:00
}
} // namespace qobject
2010-07-07 17:11:10 +02:00
2011-03-29 09:32:36 +02:00
2011-07-07 12:02:40 +02:00
namespace qregexp {
void testQRegExp ( )
{
// Works with Python dumpers only.
QRegExp re ( QString ( " a(.*) b ( . * ) c " )) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check re "a(.*)b(.*)c" QRegExp.
// Continue.
2011-07-07 12:02:40 +02:00
QString str1 = " a1121b344c " ;
QString str2 = " Xa1121b344c " ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check str1 "a1121b344c" QString.
// Check str2 "Xa1121b344c" QString.
// Continue.
2011-07-07 12:02:40 +02:00
int pos2 = re . indexIn ( str2 ) ;
int pos1 = re . indexIn ( str1 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check pos1 0 int.
// Check pos2 1 int.
// Continue.
2011-07-07 12:02:40 +02:00
dummyStatement ( & pos1 , & pos2 ) ;
}
} // namespace qregexp
2011-08-17 10:46:08 +02:00
namespace qrect {
void testQPoint ( )
{
QPoint s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s (0, 0) QPoint.
// Continue.
2011-08-17 10:46:08 +02:00
// Step over, check display looks sane.
s = QPoint ( 100 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s (100, 200) QPoint.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & s ) ;
}
void testQPointF ( )
{
QPointF s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s (0, 0) QPointF.
// Continue.
2011-08-17 10:46:08 +02:00
// Step over, check display looks sane.
s = QPointF ( 100 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s (100, 200) QPointF.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & s ) ;
}
void testQRect ( )
{
QRect rect ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check rect 0x0+0+0 QRect.
// Continue.
2011-08-17 10:46:08 +02:00
// Step over, check display looks sane.
rect = QRect ( 100 , 100 , 200 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check rect 200x200+100+100 QRect.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & rect ) ;
}
void testQRectF ( )
{
QRectF rect ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check rect 0x0+0+0 QRectF.
// Continue.
2011-08-17 10:46:08 +02:00
// Step over, check display looks sane.
rect = QRectF ( 100 , 100 , 200 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check rect 200x200+100+100 QRectF.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & rect ) ;
}
void testQSize ( )
{
QSize s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s (-1, -1) QSize.
// Continue.
2011-08-17 10:46:08 +02:00
s = QSize ( 100 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s (100, 200) QSize.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & s ) ;
}
void testQSizeF ( )
{
QSizeF s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s (-1, -1) QSizeF.
// Continue.
2011-08-17 10:46:08 +02:00
s = QSizeF ( 100 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s (100, 200) QSizeF.
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & s ) ;
}
void testGeometry ( )
{
testQPoint ( ) ;
testQPointF ( ) ;
testQRect ( ) ;
testQRectF ( ) ;
testQSize ( ) ;
testQSizeF ( ) ;
}
} // namespace qrect
2011-07-07 12:02:40 +02:00
namespace qregion {
void testQRegion ( )
{
// Works with Python dumpers only.
QRegion region ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check region <empty> QRegion.
// Continue.
2011-07-07 12:02:40 +02:00
// Step over until end, check display looks sane.
region + = QRect ( 100 , 100 , 200 , 200 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand region.
2011-12-14 12:26:37 +01:00
// Check region <1 items> QRegion.
2011-12-08 17:40:27 +01:00
// CheckType region.extents QRect.
// Check region.innerArea 40000 int.
// CheckType region.innerRect QRect.
// Check region.numRects 1 int.
// Check region.rects <0 items> QVector<QRect>.
2011-12-07 14:55:37 +01:00
// Continue.
2011-07-07 12:02:40 +02:00
region + = QRect ( 300 , 300 , 400 , 500 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand region.
2011-12-14 12:26:37 +01:00
// Check region <2 items> QRegion.
2011-12-08 17:40:27 +01:00
// CheckType region.extents QRect.
// Check region.innerArea 200000 int.
// CheckType region.innerRect QRect.
// Check region.numRects 2 int.
// Check region.rects <2 items> QVector<QRect>.
2011-12-07 14:55:37 +01:00
// Continue.
2011-07-07 12:02:40 +02:00
region + = QRect ( 500 , 500 , 600 , 600 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand region.
2011-12-14 12:26:37 +01:00
// Check region <4 items> QRegion.
2011-12-08 17:40:27 +01:00
// CheckType region.extents QRect.
// Check region.innerArea 360000 int.
// CheckType region.innerRect QRect.
// Check region.numRects 4 int.
// Check region.rects <8 items> QVector<QRect>.
2011-12-07 14:55:37 +01:00
// Continue.
2011-07-07 12:02:40 +02:00
region + = QRect ( 500 , 500 , 600 , 600 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check region <4 items> QRegion.
// Continue.
2011-07-07 12:02:40 +02:00
region + = QRect ( 500 , 500 , 600 , 600 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check region <4 items> QRegion.
// Continue.
2011-07-07 12:02:40 +02:00
region + = QRect ( 500 , 500 , 600 , 600 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check region <4 items> QRegion.
// Continue.
2011-07-07 12:02:40 +02:00
dummyStatement ( & region ) ;
}
} // namespace qregion
2010-06-30 15:20:16 +02:00
2011-11-18 15:03:58 +01:00
namespace plugin {
void testPlugin ( )
{
QString dir = QDir : : currentPath ( ) ;
# ifdef Q_OS_LINUX
QLibrary lib ( dir + " /libsimple_test_plugin.so " ) ;
# endif
# ifdef Q_OS_MAC
dir = QFileInfo ( dir + " /../.. " ) . canonicalPath ( ) ;
QLibrary lib ( dir + " /libsimple_test_plugin.dylib " ) ;
# endif
# ifdef Q_OS_WIN
QLibrary lib ( dir + " /debug/simple_test_plugin.dll " ) ;
# endif
# ifdef Q_OS_SYMBIAN
QLibrary lib ( dir + " /libsimple_test_plugin.dll " ) ;
# endif
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType dir QString.
// Check lib "" QLibrary.
2012-04-26 17:00:48 +02:00
// CheckType name QString.
2011-12-07 14:55:37 +01:00
// CheckType res int.
// Continue.
2011-11-18 15:03:58 +01:00
// Step
int ( * foo ) ( ) = ( int ( * ) ( ) ) lib . resolve ( " pluginTest " ) ;
QString name = lib . fileName ( ) ;
int res = 4 ;
if ( foo ) {
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check res 4 int.
// Continue.
2011-11-18 15:03:58 +01:00
// Step
res = foo ( ) ;
} else {
BREAK_HERE ;
// Step
name = lib . errorString ( ) ;
}
dummyStatement ( & name , & res ) ;
2008-12-02 12:01:29 +01:00
}
2011-11-18 15:03:58 +01:00
} // namespace plugin
namespace final {
2011-08-24 13:51:49 +02:00
2011-08-24 16:23:10 +02:00
void testQSettings ( )
{
// Note: Construct a QCoreApplication first.
QSettings settings ( " /tmp/test.ini " , QSettings : : IniFormat ) ;
QVariant value = settings . value ( " item1 " , " " ) . toString ( ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand settings.
2011-12-14 12:26:37 +01:00
// Check settings "" QSettings.
2012-03-20 18:55:12 +01:00
// Check settings.@1 "" QObject.
2011-12-07 14:55:37 +01:00
// Check value "" QVariant (QString).
// Continue.
2011-08-24 16:23:10 +02:00
dummyStatement ( & settings , & value ) ;
}
2011-11-18 15:03:58 +01:00
void testNullPointerDeref ( )
{
2012-03-09 14:33:54 +01:00
int a = ' a ' ;
int b = ' b ' ;
2011-11-18 15:03:58 +01:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
return ; // Uncomment.
2012-03-09 14:33:54 +01:00
* ( int * ) 0 = a + b ;
2011-11-18 15:03:58 +01:00
}
2012-03-09 14:33:54 +01:00
void testEndlessRecursion ( int i = 0 )
2011-11-18 15:03:58 +01:00
{
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
return ; // Uncomment.
2012-03-09 14:33:54 +01:00
testEndlessRecursion ( i + 1 ) ;
2011-11-18 15:03:58 +01:00
}
void testEndlessLoop ( )
{
qlonglong a = 1 ;
// gdb:
// Breakpoint at "while" will stop only once
// Hitting "Pause" button might show backtrace of different thread
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
// Jump over next line.
2012-04-17 12:53:01 +02:00
return ;
2011-11-18 15:03:58 +01:00
while ( a > 0 )
+ + a ;
dummyStatement ( & a ) ;
}
void testUncaughtException ( )
{
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
// Jump over next line.
return ;
throw 42 ;
}
void testApplicationStart ( QCoreApplication * app )
2011-08-24 13:51:49 +02:00
{
QString str = QString : : fromUtf8 ( " XXXXXXXXXXXXXXyyXXX ö " ) ;
QLabel l ( str ) ;
l . setObjectName ( " Some Label " ) ;
l . show ( ) ;
2011-11-18 15:03:58 +01:00
// Jump over next line.
return ;
app - > exec ( ) ;
dummyStatement ( & app ) ;
2011-08-24 13:51:49 +02:00
}
2012-05-07 13:15:48 +02:00
void testNullReferenceHelper ( int & i , int & j )
{
i + = 1 ;
j + = 1 ;
}
void testNullReference ( )
{
int i = 21 ;
int * p = & i ;
int * q = 0 ;
int & pp = * p ;
int & qq = * q ;
BREAK_HERE ;
// Check i 21 int.
// CheckType p int.
// Check p 21 int.
// Check q 0x0 int *.
2012-05-07 15:04:06 +02:00
// Check pp 21 int &.
// Check qq <null reference> int &.
2012-05-07 13:15:48 +02:00
// Continue.
return ; // Uncomment.
testNullReferenceHelper ( pp , qq ) ;
dummyStatement ( p , q , & i ) ;
}
2011-11-18 15:03:58 +01:00
void testFinal ( QCoreApplication * app )
{
// This contains all "final" tests that do not allow proceeding
// with further tests.
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
testQSettings ( ) ;
testNullPointerDeref ( ) ;
2012-05-07 13:15:48 +02:00
testNullReference ( ) ;
2011-11-18 15:03:58 +01:00
testEndlessLoop ( ) ;
testEndlessRecursion ( ) ;
testUncaughtException ( ) ;
testApplicationStart ( app ) ;
}
2011-08-24 13:51:49 +02:00
2011-11-18 15:03:58 +01:00
} // namespace final
2011-08-24 13:51:49 +02:00
2011-11-16 16:46:51 +01:00
2011-11-16 16:37:12 +01:00
namespace qset {
2008-12-05 18:44:09 +01:00
2011-11-16 16:37:12 +01:00
void testQSet1 ( )
{
QSet < int > s ;
s . insert ( 11 ) ;
s . insert ( 22 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <2 items> QSet<int>.
2011-12-08 17:40:27 +01:00
// Check s.22 22 int.
// Check s.11 11 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & s ) ;
}
void testQSet2 ( )
{
QSet < QString > s ;
s . insert ( " 11.0 " ) ;
s . insert ( " 22.0 " ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <2 items> QSet<QString>.
2011-12-08 17:40:27 +01:00
// Check s.0 "11.0" QString.
// Check s.1 "22.0" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & s ) ;
}
void testQSet3 ( )
{
QObject ob ;
QSet < QPointer < QObject > > s ;
QPointer < QObject > ptr ( & ob ) ;
s . insert ( ptr ) ;
s . insert ( ptr ) ;
s . insert ( ptr ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <1 items> QSet<QPointer<QObject>>.
2011-12-08 17:40:27 +01:00
// CheckType s.0 QPointer<QObject>.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & ptr , & s ) ;
}
void testQSet ( )
{
testQSet1 ( ) ;
testQSet2 ( ) ;
testQSet3 ( ) ;
}
} // namespace qset
namespace qsharedpointer {
# if USE_SHARED_POINTER
class EmployeeData : public QSharedData
{
public :
EmployeeData ( ) : id ( - 1 ) { name . clear ( ) ; }
EmployeeData ( const EmployeeData & other )
: QSharedData ( other ) , id ( other . id ) , name ( other . name ) { }
~ EmployeeData ( ) { }
int id ;
QString name ;
} ;
class Employee
{
public :
Employee ( ) { d = new EmployeeData ; }
Employee ( int id , QString name ) {
d = new EmployeeData ;
setId ( id ) ;
setName ( name ) ;
}
Employee ( const Employee & other )
: d ( other . d )
{
}
void setId ( int id ) { d - > id = id ; }
void setName ( QString name ) { d - > name = name ; }
int id ( ) const { return d - > id ; }
QString name ( ) const { return d - > name ; }
private :
QSharedDataPointer < EmployeeData > d ;
} ;
void testQSharedPointer1 ( )
{
QSharedPointer < int > ptr ( new int ( 43 ) ) ;
QSharedPointer < int > ptr2 = ptr ;
QSharedPointer < int > ptr3 = ptr ;
BREAK_HERE ;
dummyStatement ( & ptr , & ptr2 , & ptr3 ) ;
}
void testQSharedPointer2 ( )
{
QSharedPointer < QString > ptr ( new QString ( " hallo " ) ) ;
QSharedPointer < QString > ptr2 = ptr ;
QSharedPointer < QString > ptr3 = ptr ;
BREAK_HERE ;
dummyStatement ( & ptr , & ptr2 , & ptr3 ) ;
}
void testQSharedPointer3 ( )
{
QSharedPointer < int > iptr ( new int ( 43 ) ) ;
QWeakPointer < int > ptr ( iptr ) ;
QWeakPointer < int > ptr2 = ptr ;
QWeakPointer < int > ptr3 = ptr ;
BREAK_HERE ;
dummyStatement ( & ptr , & ptr2 , & ptr3 ) ;
}
void testQSharedPointer4 ( )
{
QSharedPointer < QString > sptr ( new QString ( " hallo " ) ) ;
QWeakPointer < QString > ptr ( sptr ) ;
QWeakPointer < QString > ptr2 = ptr ;
QWeakPointer < QString > ptr3 = ptr ;
BREAK_HERE ;
dummyStatement ( & ptr , & ptr2 , & ptr3 ) ;
}
void testQSharedPointer5 ( )
{
QSharedPointer < Foo > fptr ( new Foo ( 1 ) ) ;
QWeakPointer < Foo > ptr ( fptr ) ;
QWeakPointer < Foo > ptr2 = ptr ;
QWeakPointer < Foo > ptr3 = ptr ;
BREAK_HERE ;
dummyStatement ( & ptr , & ptr2 , & ptr3 ) ;
}
void testQSharedPointer ( )
{
testQSharedPointer1 ( ) ;
testQSharedPointer2 ( ) ;
testQSharedPointer3 ( ) ;
testQSharedPointer4 ( ) ;
testQSharedPointer5 ( ) ;
}
# else
void testQSharedPointer ( ) { }
# endif
} // namespace qsharedpointer
namespace qxml {
void testQXmlAttributes ( )
{
// only works with Python dumper
QXmlAttributes atts ;
atts . append ( " name1 " , " uri1 " , " localPart1 " , " value1 " ) ;
atts . append ( " name2 " , " uri2 " , " localPart2 " , " value2 " ) ;
atts . append ( " name3 " , " uri3 " , " localPart3 " , " value3 " ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand atts atts.attList atts.attList.1 atts.attList.2.
2011-12-07 14:55:37 +01:00
// CheckType atts QXmlAttributes.
2011-12-08 17:40:27 +01:00
// CheckType atts.[vptr] .
// Check atts.attList <3 items> QXmlAttributes::AttributeList.
// CheckType atts.attList.0 QXmlAttributes::Attribute.
// Check atts.attList.0.localname "localPart1" QString.
// Check atts.attList.0.qname "name1" QString.
// Check atts.attList.0.uri "uri1" QString.
// Check atts.attList.0.value "value1" QString.
// CheckType atts.attList.1 QXmlAttributes::Attribute.
// Check atts.attList.1.localname "localPart2" QString.
// Check atts.attList.1.qname "name2" QString.
// Check atts.attList.1.uri "uri2" QString.
// Check atts.attList.1.value "value2" QString.
// CheckType atts.attList.2 QXmlAttributes::Attribute.
// Check atts.attList.2.localname "localPart3" QString.
// Check atts.attList.2.qname "name3" QString.
// Check atts.attList.2.uri "uri3" QString.
// Check atts.attList.2.value "value3" QString.
2012-03-02 19:09:13 +01:00
// CheckType atts.d QXmlAttributesPrivate.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( ) ;
}
} // namespace qxml
2012-02-04 00:59:31 +01:00
namespace stdarray {
void testStdArray ( )
{
# if USE_CXX11
2012-02-08 14:08:16 +01:00
std : : array < int , 4 > a = { { 1 , 2 , 3 , 4 } } ;
2012-05-17 18:16:31 +02:00
std : : array < QString , 4 > b = { { " 1 " , " 2 " , " 3 " , " 4 " } } ;
2012-02-04 00:59:31 +01:00
BREAK_HERE ;
// Expand a.
2012-02-09 23:02:18 +01:00
// Check a <4 items> std::array<int, 4u>.
2012-05-17 18:16:31 +02:00
// Check a <4 items> std::array<QString, 4u>.
2012-02-04 00:59:31 +01:00
// Continue.
2012-05-17 18:16:31 +02:00
dummyStatement ( & a , & b ) ;
2012-02-04 00:59:31 +01:00
# endif
}
} // namespace stdcomplex
2012-02-03 20:55:04 +01:00
namespace stdcomplex {
void testStdComplex ( )
{
std : : complex < double > c ( 1 , 2 ) ;
BREAK_HERE ;
// Expand c.
2012-02-04 00:59:31 +01:00
// Check c (1.000000, 2.000000) std::complex<double>.
2012-02-03 20:55:04 +01:00
// Continue.
dummyStatement ( & c ) ;
}
2012-02-04 00:59:31 +01:00
} // namespace stdcomplex
2012-02-03 20:55:04 +01:00
2011-11-18 15:03:58 +01:00
namespace stddeque {
void testStdDequeInt ( )
{
std : : deque < int > deque ;
deque . push_back ( 1 ) ;
deque . push_back ( 2 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand deque.
2011-12-14 12:26:37 +01:00
// Check deque <2 items> std::deque<int>.
2011-12-08 17:40:27 +01:00
// Check deque.0 1 int.
// Check deque.1 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & deque ) ;
}
void testStdDequeIntStar ( )
{
// This is not supposed to work with the compiled dumpers.
std : : deque < int * > deque ;
deque . push_back ( new int ( 1 ) ) ;
deque . push_back ( 0 ) ;
deque . push_back ( new int ( 2 ) ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand deque.
2011-12-14 12:26:37 +01:00
// Check deque <3 items> std::deque<int*>.
2011-12-08 17:40:27 +01:00
// CheckType deque.0 int.
// Check deque.1 0x0 int *.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
deque . pop_back ( ) ;
deque . pop_front ( ) ;
deque . pop_front ( ) ;
dummyStatement ( & deque ) ;
}
void testStdDequeFoo ( )
{
std : : deque < Foo > deque ;
deque . push_back ( 1 ) ;
deque . push_front ( 2 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand deque deque.0 deque.1.
2011-12-07 14:55:37 +01:00
// Check deque <2 items> std::deque<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType deque.0 Foo.
// Check deque.0.a 2 int.
// CheckType deque.1 Foo.
// Check deque.1.a 1 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & deque ) ;
}
void testStdDequeFooStar ( )
{
std : : deque < Foo * > deque ;
deque . push_back ( new Foo ( 1 ) ) ;
deque . push_back ( new Foo ( 2 ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand deque deque.0 deque.1.
2011-12-07 14:55:37 +01:00
// Check deque <2 items> std::deque<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType deque.0 Foo.
// Check deque.0.a 1 int.
// CheckType deque.1 Foo.
// Check deque.1.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & deque ) ;
}
void testStdDeque ( )
{
testStdDequeInt ( ) ;
testStdDequeIntStar ( ) ;
testStdDequeFoo ( ) ;
testStdDequeFooStar ( ) ;
}
} // namespace stddeque
namespace stdhashset {
void testStdHashSet ( )
{
// This is not supposed to work with the compiled dumpers.
# if USE_GCC_EXT
using namespace __gnu_cxx ;
hash_set < int > h ;
h . insert ( 1 ) ;
h . insert ( 194 ) ;
h . insert ( 2 ) ;
h . insert ( 3 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand h.
2011-12-14 12:26:37 +01:00
// Check h <4 items> __gnu__cxx::hash_set<int>.
2011-12-08 17:40:27 +01:00
// Check h.0 194 int.
// Check h.1 1 int.
// Check h.2 2 int.
// Check h.3 3 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & h ) ;
# endif
}
} // namespace stdhashset
namespace stdlist {
void testStdListInt ( )
{
std : : list < int > list ;
list . push_back ( 1 ) ;
list . push_back ( 2 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <2 items> std::list<int>.
2011-12-08 17:40:27 +01:00
// Check list.0 1 int.
// Check list.1 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
}
void testStdListIntStar ( )
{
std : : list < int * > list ;
list . push_back ( new int ( 1 ) ) ;
list . push_back ( 0 ) ;
list . push_back ( new int ( 2 ) ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <3 items> std::list<int*>.
2011-12-08 17:40:27 +01:00
// CheckType list.0 int.
// Check list.1 0x0 int *.
// CheckType list.2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
2011-11-16 16:37:12 +01:00
}
2011-11-18 15:03:58 +01:00
void testStdListIntBig ( )
2011-11-16 16:37:12 +01:00
{
2011-11-18 15:03:58 +01:00
// This is not supposed to work with the compiled dumpers.
std : : list < int > list ;
for ( int i = 0 ; i < 10000 ; + + i )
list . push_back ( i ) ;
2011-11-16 16:37:12 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <more than 1000 items> std::list<int>.
2011-12-08 17:40:27 +01:00
// Check list.0 0 int.
// Check list.999 999 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
2011-11-16 16:37:12 +01:00
}
2011-11-18 15:03:58 +01:00
void testStdListFoo ( )
2011-11-16 16:37:12 +01:00
{
2011-11-18 15:03:58 +01:00
std : : list < Foo > list ;
list . push_back ( 15 ) ;
list . push_back ( 16 ) ;
2011-11-16 16:37:12 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand list list.0 list.1.
2011-12-07 14:55:37 +01:00
// Check list <2 items> std::list<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType list.0 Foo.
// Check list.0.a 15 int.
// CheckType list.1 Foo.
// Check list.1.a 16 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
2011-11-16 16:37:12 +01:00
}
2011-11-18 15:03:58 +01:00
void testStdListFooStar ( )
2011-11-16 16:37:12 +01:00
{
2011-11-18 15:03:58 +01:00
std : : list < Foo * > list ;
list . push_back ( new Foo ( 1 ) ) ;
list . push_back ( 0 ) ;
list . push_back ( new Foo ( 2 ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand list list.0 list.2.
2011-12-07 14:55:37 +01:00
// Check list <3 items> std::list<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType list.0 Foo.
// Check list.0.a 1 int.
// Check list.1 0x0 Foo *.
// CheckType list.2 Foo.
// Check list.2.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
2011-11-16 16:37:12 +01:00
}
2011-11-18 15:03:58 +01:00
void testStdListBool ( )
2009-04-17 15:34:46 +02:00
{
2011-11-18 15:03:58 +01:00
std : : list < bool > list ;
list . push_back ( true ) ;
list . push_back ( false ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <2 items> std::list<bool>.
2011-12-08 17:40:27 +01:00
// Check list.0 true bool.
// Check list.1 false bool.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & list ) ;
2009-04-17 15:34:46 +02:00
}
2011-11-18 15:03:58 +01:00
void testStdList ( )
{
testStdListInt ( ) ;
testStdListIntStar ( ) ;
testStdListIntBig ( ) ;
testStdListFoo ( ) ;
testStdListFooStar ( ) ;
testStdListBool ( ) ;
}
2009-04-17 15:34:46 +02:00
2011-11-18 15:03:58 +01:00
} // namespace stdlist
2009-04-07 13:50:21 +02:00
2009-04-28 10:58:55 +02:00
2011-11-18 15:03:58 +01:00
namespace stdmap {
2009-04-28 10:58:55 +02:00
2011-11-18 15:03:58 +01:00
void testStdMapStringFoo ( )
{
// This is not supposed to work with the compiled dumpers.
std : : map < QString , Foo > map ;
map [ " 22.0 " ] = Foo ( 22 ) ;
map [ " 33.0 " ] = Foo ( 33 ) ;
map [ " 44.0 " ] = Foo ( 44 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.second map.2 map.2.second.
2011-12-07 14:55:37 +01:00
// Check map <3 items> std::map<QString, Foo>.
2011-12-08 17:40:27 +01:00
// Check map.0 std::pair<QString const, Foo>.
// Check map.0.first "22.0" QString.
// CheckType map.0.second Foo.
// Check map.0.second.a 22 int.
// Check map.1 std::pair<QString const, Foo>.
// Check map.2.first "44.0" QString.
// CheckType map.2.second Foo.
// Check map.2.second.a 44 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2011-08-24 16:23:10 +02:00
2011-11-18 15:03:58 +01:00
void testStdMapCharStarFoo ( )
2011-08-24 16:23:10 +02:00
{
2011-11-18 15:03:58 +01:00
std : : map < const char * , Foo > map ;
map [ " 22.0 " ] = Foo ( 22 ) ;
map [ " 33.0 " ] = Foo ( 33 ) ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.first map.0.second map.1 map.1.second.
2011-12-07 14:55:37 +01:00
// Check map <2 items> std::map<char const*, Foo>.
2011-12-08 17:40:27 +01:00
// Check map.0 std::pair<char const* const, Foo>.
// CheckType map.0.first char *.
// Check map.0.first.*first 50 '2' char.
// CheckType map.0.second Foo.
// Check map.0.second.a 22 int.
// Check map.1 std::pair<char const* const, Foo>.
// CheckType map.1.first char *.
// Check map.1.first.*first 51 '3' char.
// CheckType map.1.second Foo.
// Check map.1.second.a 33 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
2011-08-24 16:23:10 +02:00
}
2011-11-18 15:03:58 +01:00
void testStdMapUIntUInt ( )
2011-08-24 16:23:10 +02:00
{
2011-11-18 15:03:58 +01:00
std : : map < uint , uint > map ;
map [ 11 ] = 1 ;
map [ 22 ] = 2 ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand map.
2011-12-14 12:26:37 +01:00
// Check map <2 items> std::map<unsigned int, unsigned int>.
2011-12-08 17:40:27 +01:00
// Check map.11 1 unsigned int.
// Check map.22 2 unsigned int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
2011-08-24 16:23:10 +02:00
}
2011-11-18 15:03:58 +01:00
void testStdMapUIntStringList ( )
2011-08-24 16:23:10 +02:00
{
2011-11-18 15:03:58 +01:00
std : : map < uint , QStringList > map ;
map [ 11 ] = QStringList ( ) < < " 11 " ;
map [ 22 ] = QStringList ( ) < < " 22 " ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.first map.0.second map.1 map.1.second.
2011-12-07 14:55:37 +01:00
// Check map <2 items> std::map<unsigned int, QStringList>.
2011-12-08 17:40:27 +01:00
// Check map.0 std::pair<unsigned int const, QStringList>.
// Check map.0.first 11 unsigned int.
// Check map.0.second <1 items> QStringList.
// Check map.0.second.0 "11" QString.
// Check map.1 std::pair<unsigned int const, QStringList>.
// Check map.1.first 22 unsigned int.
// Check map.1.second <1 items> QStringList.
// Check map.1.second.0 "22" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
2011-08-24 16:23:10 +02:00
}
2011-11-18 15:03:58 +01:00
void testStdMapUIntStringListTypedef ( )
2011-08-24 16:23:10 +02:00
{
2011-11-18 15:03:58 +01:00
typedef std : : map < uint , QStringList > T ;
T map ;
map [ 11 ] = QStringList ( ) < < " 11 " ;
map [ 22 ] = QStringList ( ) < < " 22 " ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check map <2 items> stdmap::T.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
2011-08-24 16:23:10 +02:00
}
2011-11-18 15:03:58 +01:00
void testStdMapUIntFloat ( )
2011-08-24 16:23:10 +02:00
{
2011-11-18 15:03:58 +01:00
std : : map < uint , float > map ;
map [ 11 ] = 11.0 ;
map [ 22 ] = 22.0 ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand map.
2011-12-14 12:26:37 +01:00
// Check map <2 items> std::map<unsigned int, float>.
2011-12-08 17:40:27 +01:00
// Check map.11 11 float.
// Check map.22 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
2011-08-24 16:23:10 +02:00
}
2012-05-15 01:45:06 +02:00
void testStdMapUIntFloatIterator ( )
{
2012-05-29 12:16:34 +02:00
typedef std : : map < int , float > Map ;
2012-05-15 01:45:06 +02:00
Map map ;
map [ 11 ] = 11.0 ;
map [ 22 ] = 22.0 ;
map [ 33 ] = 33.0 ;
map [ 44 ] = 44.0 ;
map [ 55 ] = 55.0 ;
map [ 66 ] = 66.0 ;
Map : : iterator it1 = map . begin ( ) ;
Map : : iterator it2 = it1 ; + + it2 ;
Map : : iterator it3 = it2 ; + + it2 ;
Map : : iterator it4 = it3 ; + + it3 ;
Map : : iterator it5 = it4 ; + + it4 ;
Map : : iterator it6 = it5 ; + + it5 ;
BREAK_HERE ;
// Expand map.
2012-05-29 12:16:34 +02:00
// Check map <6 items> std::map<int, float>.
2012-05-15 01:45:06 +02:00
// Check map.11 11 float.
2012-05-29 12:16:34 +02:00
// Check it1.first 11 int.
2012-05-15 01:45:06 +02:00
// Check it1.second 11 float.
2012-05-29 12:16:34 +02:00
// Check it1.first 55 int.
2012-05-15 01:45:06 +02:00
// Check it1.second 55 float.
// Continue.
dummyStatement ( & map , & it1 , & it2 , & it3 , & it4 , & it5 , & it6 ) ;
}
2011-11-18 15:03:58 +01:00
void testStdMapStringFloat ( )
2011-08-24 16:23:10 +02:00
{
2011-11-18 15:03:58 +01:00
std : : map < QString , float > map ;
map [ " 11.0 " ] = 11.0 ;
map [ " 22.0 " ] = 22.0 ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.1.
2011-12-07 14:55:37 +01:00
// Check map <2 items> std::map<QString, float>.
2011-12-08 17:40:27 +01:00
// Check map.0 std::pair<QString const, float>.
// Check map.0.first "11.0" QString.
// Check map.0.second 11 float.
// Check map.1 std::pair<QString const, float>.
// Check map.1.first "22.0" QString.
// Check map.1.second 22 float.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
2011-08-24 16:23:10 +02:00
}
2011-11-18 15:03:58 +01:00
void testStdMapIntString ( )
{
std : : map < int , QString > map ;
map [ 11 ] = " 11.0 " ;
map [ 22 ] = " 22.0 " ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.1.
2011-12-07 14:55:37 +01:00
// Check map <2 items> std::map<int, QString>.
2011-12-08 17:40:27 +01:00
// Check map.0 std::pair<int const, QString>.
// Check map.0.first 11 int.
// Check map.0.second "11.0" QString.
// Check map.1 std::pair<int const, QString>.
// Check map.1.first 22 int.
// Check map.1.second "22.0" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2011-09-20 13:54:07 +02:00
2011-11-18 15:03:58 +01:00
void testStdMapStringPointer ( )
{
QObject ob ;
std : : map < QString , QPointer < QObject > > map ;
map [ " Hallo " ] = QPointer < QObject > ( & ob ) ;
map [ " Welt " ] = QPointer < QObject > ( & ob ) ;
map [ " . " ] = QPointer < QObject > ( & ob ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.2.
2011-12-07 14:55:37 +01:00
// Check map <3 items> std::map<QString, QPointer<QObject>>.
2011-12-08 17:40:27 +01:00
// Check map.0 std::pair<QString const, QPointer<QObject>>.
// Check map.0.first "." QString.
// CheckType map.0.second QPointer<QObject>.
// Check map.2 std::pair<QString const, QPointer<QObject>>.
// Check map.2.first "Welt" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & map ) ;
}
2011-09-20 13:54:07 +02:00
2011-11-18 15:03:58 +01:00
void testStdMap ( )
{
testStdMapStringFoo ( ) ;
testStdMapCharStarFoo ( ) ;
testStdMapUIntUInt ( ) ;
testStdMapUIntStringList ( ) ;
testStdMapUIntStringListTypedef ( ) ;
testStdMapUIntFloat ( ) ;
2012-05-15 01:45:06 +02:00
testStdMapUIntFloatIterator ( ) ;
2011-11-18 15:03:58 +01:00
testStdMapStringFloat ( ) ;
testStdMapIntString ( ) ;
testStdMapStringPointer ( ) ;
}
2011-08-24 16:23:10 +02:00
2011-11-18 15:03:58 +01:00
} // namespace stdmap
2010-06-11 13:44:18 +02:00
2009-04-07 13:50:21 +02:00
2012-02-02 13:18:10 +01:00
namespace stdptr {
2012-02-28 23:23:20 +01:00
void testStdUniquePtrInt ( )
2012-02-02 13:18:10 +01:00
{
# ifdef USE_CXX11
2012-02-02 19:50:47 +01:00
std : : unique_ptr < int > p ( new int ( 32 ) ) ;
2012-02-02 13:18:10 +01:00
BREAK_HERE ;
2012-02-09 23:02:18 +01:00
// Check p 32 std::unique_ptr<int, std::default_delete<int> >.
2012-02-02 13:18:10 +01:00
// Continue.
dummyStatement ( & p ) ;
# endif
}
2012-02-28 23:23:20 +01:00
void testStdUniquePtrFoo ( )
{
# ifdef USE_CXX11
std : : unique_ptr < Foo > p ( new Foo ) ;
BREAK_HERE ;
// Check p 32 std::unique_ptr<Foo, std::default_delete<Foo> >.
// Continue.
dummyStatement ( & p ) ;
# endif
}
void testStdSharedPtrInt ( )
2012-02-23 18:02:46 +01:00
{
# ifdef USE_CXX11
std : : shared_ptr < int > p ( new int ( 32 ) ) ;
BREAK_HERE ;
// Check p 32 std::shared_ptr<int, std::default_delete<int> >.
// Continue.
dummyStatement ( & p ) ;
# endif
}
2012-02-28 23:23:20 +01:00
void testStdSharedPtrFoo ( )
{
# ifdef USE_CXX11
std : : shared_ptr < Foo > p ( new Foo ) ;
BREAK_HERE ;
// Check p 32 std::shared_ptr<Foo, std::default_delete<int> >.
// Continue.
dummyStatement ( & p ) ;
# endif
}
2012-02-02 13:18:10 +01:00
void testStdPtr ( )
{
2012-02-28 23:23:20 +01:00
testStdUniquePtrInt ( ) ;
testStdUniquePtrFoo ( ) ;
testStdSharedPtrInt ( ) ;
testStdSharedPtrFoo ( ) ;
2012-02-02 13:18:10 +01:00
}
} // namespace stdptr
2011-11-18 15:03:58 +01:00
namespace stdset {
2011-08-15 13:32:46 +02:00
2011-11-18 15:03:58 +01:00
void testStdSetInt ( )
2011-08-15 13:32:46 +02:00
{
2011-11-18 15:03:58 +01:00
// This is not supposed to work with the compiled dumpers.
std : : set < int > set ;
set . insert ( 11 ) ;
set . insert ( 22 ) ;
set . insert ( 33 ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Check set <3 items> std::set<int>
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & set ) ;
2011-08-15 13:32:46 +02:00
}
2012-05-15 01:45:06 +02:00
void testStdSetIntIterator ( )
{
typedef std : : set < int > Set ;
Set set ;
set . insert ( 11.0 ) ;
set . insert ( 22.0 ) ;
set . insert ( 33.0 ) ;
set . insert ( 44.0 ) ;
set . insert ( 55.0 ) ;
set . insert ( 66.0 ) ;
Set : : iterator it1 = set . begin ( ) ;
Set : : iterator it2 = it1 ; + + it2 ;
Set : : iterator it3 = it2 ; + + it2 ;
Set : : iterator it4 = it3 ; + + it3 ;
Set : : iterator it5 = it4 ; + + it4 ;
Set : : iterator it6 = it5 ; + + it5 ;
BREAK_HERE ;
// Check set <6 items> std::set<int>.
// Check it1.key 11 unsigned int.
// Check it1.value 11 int.
// Check it1.key 55 unsigned int.
// Check it1.value 55 int.
dummyStatement ( & set , & it1 , & it2 , & it3 , & it4 , & it5 , & it6 ) ;
}
2011-11-18 15:03:58 +01:00
void testStdSetString ( )
{
std : : set < QString > set ;
set . insert ( " 22.0 " ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand set.
2011-12-14 12:26:37 +01:00
// Check set <1 items> std::set<QString>.
2011-12-08 17:40:27 +01:00
// Check set.0 "22.0" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & set ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testStdSetPointer ( )
{
QObject ob ;
std : : set < QPointer < QObject > > hash ;
QPointer < QObject > ptr ( & ob ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check hash <0 items> std::set<QPointer<QObject>, std::less<QPointer<QObject>>, std::allocator<QPointer<QObject>>>.
// Check ob "" QObject.
// CheckType ptr QPointer<QObject>.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & ptr ) ;
}
2008-12-11 16:10:47 +01:00
2011-11-18 15:03:58 +01:00
void testStdSet ( )
{
testStdSetInt ( ) ;
2012-05-15 01:45:06 +02:00
testStdSetIntIterator ( ) ;
2011-11-18 15:03:58 +01:00
testStdSetString ( ) ;
testStdSetPointer ( ) ;
}
2008-12-11 16:10:47 +01:00
2011-11-18 15:03:58 +01:00
} // namespace stdset
2009-03-11 13:31:38 +01:00
2008-12-10 14:37:15 +01:00
2011-08-15 13:32:46 +02:00
namespace stdstack {
2008-12-02 12:01:29 +01:00
2011-08-15 13:32:46 +02:00
void testStdStack1 ( )
{
// This does not work with the compiled dumpers.
2011-09-15 12:42:29 +02:00
std : : stack < int * > s ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s <0 items> std::stack<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( new int ( 1 ) ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <1 items> std::stack<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( 0 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <2 items> std::stack<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( new int ( 2 ) ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <3 items> std::stack<int*>.
2011-12-08 17:40:27 +01:00
// CheckType s.0 int.
// Check s.1 0x0 int *.
// CheckType s.2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
s . pop ( ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <2 items> std::stack<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . pop ( ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <1 items> std::stack<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . pop ( ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <0 items> std::stack<int*>.
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & s ) ;
2011-08-15 13:32:46 +02:00
}
2008-12-10 14:37:15 +01:00
2011-08-15 13:32:46 +02:00
void testStdStack2 ( )
{
2011-09-15 12:42:29 +02:00
std : : stack < int > s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s <0 items> std::stack<int>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( 1 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <1 items> std::stack<int>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( 2 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <2 items> std::stack<int>.
2011-12-08 17:40:27 +01:00
// Check s.0 1 int.
// Check s.1 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & s ) ;
2011-08-15 13:32:46 +02:00
}
2008-12-10 14:37:15 +01:00
2011-08-15 13:32:46 +02:00
void testStdStack3 ( )
{
2011-09-15 12:42:29 +02:00
std : : stack < Foo * > s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s <0 items> std::stack<Foo*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( new Foo ( 1 ) ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <1 items> std::stack<Foo*>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( new Foo ( 2 ) ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand s s.0 s.1.
2011-12-07 14:55:37 +01:00
// Check s <2 items> std::stack<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType s.0 Foo.
// Check s.0.a 1 int.
// CheckType s.1 Foo.
// Check s.1.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & s ) ;
2011-08-15 13:32:46 +02:00
}
2008-12-10 14:37:15 +01:00
2011-08-15 13:32:46 +02:00
void testStdStack4 ( )
{
2011-09-15 12:42:29 +02:00
std : : stack < Foo > s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check s <0 items> std::stack<Foo>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( 1 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check s <1 items> std::stack<Foo>.
// Continue.
2011-09-15 12:42:29 +02:00
s . push ( 2 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand s s.0 s.1.
2011-12-07 14:55:37 +01:00
// Check s <2 items> std::stack<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType s.0 Foo.
// Check s.0.a 1 int.
// CheckType s.1 Foo.
// Check s.1.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & s ) ;
2011-08-15 13:32:46 +02:00
}
2008-12-10 14:37:15 +01:00
2011-08-15 13:32:46 +02:00
void testStdStack ( )
{
testStdStack1 ( ) ;
testStdStack2 ( ) ;
testStdStack3 ( ) ;
testStdStack4 ( ) ;
}
} // namespace stdstack
namespace stdstring {
void testStdString1 ( )
{
std : : string str ;
std : : wstring wstr ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check str "" std::string.
// Check wstr "" std::wstring.
// Continue.
2011-08-15 13:32:46 +02:00
str + = " b " ;
wstr + = wchar_t ( ' e ' ) ;
str + = " d " ;
wstr + = wchar_t ( ' e ' ) ;
str + = " e " ;
str + = " b " ;
str + = " d " ;
str + = " e " ;
wstr + = wchar_t ( ' e ' ) ;
wstr + = wchar_t ( ' e ' ) ;
str + = " e " ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check str "bdebdee" std::string.
// Check wstr "eeee" std::wstring.
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & str , & wstr ) ;
}
void testStdString2 ( )
{
std : : string str = " foo " ;
QList < std : : string > l ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check l <0 items> QList<std::string>.
// Check str "foo" std::string.
// Continue.
2011-08-15 13:32:46 +02:00
l . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check l <1 items> QList<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
l . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check l <2 items> QList<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
l . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check l <3 items> QList<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
l . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <4 items> QList<std::string>.
2011-12-08 17:40:27 +01:00
// CheckType l.0 std::string.
// CheckType l.3 std::string.
// Check str "foo" std::string.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & str , & l ) ;
}
void testStdString3 ( )
{
std : : string str = " foo " ;
std : : vector < std : : string > v ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check str "foo" std::string.
// Check v <0 items> std::vector<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check v <1 items> std::vector<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check v <2 items> std::vector<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check v <3 items> std::vector<std::string>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( str ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand v.
2011-12-14 12:26:37 +01:00
// Check v <4 items> std::vector<std::string>.
2011-12-08 17:40:27 +01:00
// Check v.0 "foo" std::string.
// Check v.3 "foo" std::string.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & str , & v ) ;
}
void testStdString ( )
{
testStdString1 ( ) ;
testStdString2 ( ) ;
testStdString3 ( ) ;
}
} // namespace stdstring
namespace stdvector {
void testStdVector1 ( )
{
std : : vector < int * > v ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check v <0 items> std::vector<int*>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( new int ( 1 ) ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check v <1 items> std::vector<int*>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( 0 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check v <2 items> std::vector<int*>.
// Continue.
2011-08-15 13:32:46 +02:00
v . push_back ( new int ( 2 ) ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand v.
2011-12-14 12:26:37 +01:00
// Check v <3 items> std::vector<int*>.
2011-12-08 17:40:27 +01:00
// Check v.0 1 int.
// Check v.1 0x0 int *.
// Check v.2 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & v ) ;
}
void testStdVector2 ( )
{
std : : vector < int > v ;
v . push_back ( 1 ) ;
v . push_back ( 2 ) ;
v . push_back ( 3 ) ;
v . push_back ( 4 ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand v.
2011-12-14 12:26:37 +01:00
// Check v <4 items> std::vector<int>.
2011-12-08 17:40:27 +01:00
// Check v.0 1 int.
// Check v.3 4 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & v ) ;
}
void testStdVector3 ( )
{
std : : vector < Foo * > v ;
v . push_back ( new Foo ( 1 ) ) ;
v . push_back ( 0 ) ;
v . push_back ( new Foo ( 2 ) ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand v v.0 v.0.x v.2.
2011-12-07 14:55:37 +01:00
// Check v <3 items> std::vector<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType v.0 Foo.
// Check v.0.a 1 int.
// Check v.1 0x0 Foo *.
// CheckType v.2 Foo.
// Check v.2.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & v ) ;
}
void testStdVector4 ( )
{
2011-09-15 12:42:29 +02:00
std : : vector < Foo > v ;
v . push_back ( 1 ) ;
v . push_back ( 2 ) ;
v . push_back ( 3 ) ;
v . push_back ( 4 ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand v v.0 v.0.x.
2011-12-07 14:55:37 +01:00
// Check v <4 items> std::vector<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType v.0 Foo.
2012-04-13 13:24:21 +02:00
// Check v.1.a 2 int.
2011-12-08 17:40:27 +01:00
// CheckType v.3 Foo.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & v ) ;
2011-08-15 13:32:46 +02:00
}
2012-02-08 14:08:16 +01:00
void testStdVectorBool1 ( )
2011-08-15 13:32:46 +02:00
{
2011-09-15 12:42:29 +02:00
std : : vector < bool > v ;
v . push_back ( true ) ;
v . push_back ( false ) ;
v . push_back ( false ) ;
v . push_back ( true ) ;
v . push_back ( false ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand v.
2011-12-14 12:26:37 +01:00
// Check v <5 items> std::vector<bool>.
2012-03-02 19:09:13 +01:00
// Check v.0 true bool.
// Check v.1 false bool.
// Check v.2 false bool.
// Check v.3 true bool.
// Check v.4 false bool.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 12:42:29 +02:00
dummyStatement ( & v ) ;
2011-08-15 13:32:46 +02:00
}
2012-02-08 14:08:16 +01:00
void testStdVectorBool2 ( )
{
2012-03-02 19:09:13 +01:00
std : : vector < bool > v1 ( 65 , true ) ;
2012-02-08 14:08:16 +01:00
std : : vector < bool > v2 ( 65 ) ;
BREAK_HERE ;
// Expand v1.
// Expand v2.
2012-03-02 19:09:13 +01:00
// Check v1 <65 items> std::vector<bool>.
// Check v1.0 true bool.
// Check v1.64 true bool.
2012-02-08 14:08:16 +01:00
// Check v2 <65 items> std::vector<bool>.
2012-03-02 19:09:13 +01:00
// Check v2.0 false bool.
// Check v2.64 false bool.
2012-02-08 14:08:16 +01:00
// Continue.
dummyStatement ( & v1 , & v2 ) ;
}
2011-08-15 13:32:46 +02:00
void testStdVector6 ( )
{
std : : vector < std : : list < int > * > vector ;
std : : list < int > list ;
vector . push_back ( new std : : list < int > ( list ) ) ;
vector . push_back ( 0 ) ;
list . push_back ( 45 ) ;
vector . push_back ( new std : : list < int > ( list ) ) ;
vector . push_back ( 0 ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand list vector vector.2.
2011-12-07 14:55:37 +01:00
// Check list <1 items> std::list<int>.
2011-12-08 17:40:27 +01:00
// Check list.0 45 int.
2011-12-07 14:55:37 +01:00
// Check vector <4 items> std::vector<std::list<int>*>.
2011-12-08 17:40:27 +01:00
// Check vector.0 <0 items> std::list<int>.
// Check vector.2 <1 items> std::list<int>.
// Check vector.2.0 45 int.
// Check vector.3 0x0 std::list<int> *.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
dummyStatement ( & vector , & list ) ;
}
void testStdVector ( )
{
testStdVector1 ( ) ;
testStdVector2 ( ) ;
testStdVector3 ( ) ;
testStdVector4 ( ) ;
2012-02-08 14:08:16 +01:00
testStdVectorBool1 ( ) ;
testStdVectorBool2 ( ) ;
2011-08-15 13:32:46 +02:00
testStdVector6 ( ) ;
}
} // namespace stdvector
2008-12-10 14:37:15 +01:00
2011-10-20 15:20:50 +02:00
namespace stdstream {
void testStdStream ( )
{
using namespace std ;
ifstream is ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType is std::ifstream.
// Continue.
2011-10-20 15:20:50 +02:00
is . open ( " /etc/passwd " ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-10-20 15:20:50 +02:00
bool ok = is . good ( ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check ok true bool.
// Continue.
2011-10-20 15:20:50 +02:00
dummyStatement ( & is , & ok ) ;
}
} // namespace stdstream
2011-11-18 15:03:58 +01:00
namespace itemmodel {
void testItemModel ( )
{
//char buf[100];
//QString *s = static_cast<QString *>(static_cast<void *>(&(v.data_ptr().data.c)));
//QString *t = (QString *)&(v.data_ptr());
QStandardItemModel m ;
QStandardItem * i1 , * i2 , * i11 ;
m . appendRow ( QList < QStandardItem * > ( )
< < ( i1 = new QStandardItem ( " 1 " ) ) < < ( new QStandardItem ( " a " ) ) < < ( new QStandardItem ( " a2 " ) ) ) ;
QModelIndex mi = i1 - > index ( ) ;
m . appendRow ( QList < QStandardItem * > ( )
< < ( i2 = new QStandardItem ( " 2 " ) ) < < ( new QStandardItem ( " b " ) ) ) ;
i1 - > appendRow ( QList < QStandardItem * > ( )
< < ( i11 = new QStandardItem ( " 11 " ) ) < < ( new QStandardItem ( " aa " ) ) ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType i1 QStandardItem.
// CheckType i11 QStandardItem.
// CheckType i2 QStandardItem.
// Check m "" QStandardItemModel.
// Check mi "1" QModelIndex.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & i1 , & mi , & m , & i2 , & i11 ) ;
}
} // namespace itemmodel
2009-06-03 12:46:55 +02:00
2011-11-16 16:46:51 +01:00
namespace qstack {
void testQStackInt ( )
{
QStack < int > s ;
s . append ( 1 ) ;
s . append ( 2 ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <2 items> QStack<int>.
2011-12-08 17:40:27 +01:00
// Check s.0 1 int.
// Check s.1 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-16 16:46:51 +01:00
dummyStatement ( & s ) ;
}
void testQStackBig ( )
{
QStack < int > s ;
for ( int i = 0 ; i ! = 10000 ; + + i )
s . append ( i ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <10000 items> QStack<int>.
2011-12-08 17:40:27 +01:00
// Check s.0 0 int.
// Check s.1999 1999 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-16 16:46:51 +01:00
dummyStatement ( & s ) ;
}
void testQStackFooPointer ( )
{
QStack < Foo * > s ;
s . append ( new Foo ( 1 ) ) ;
s . append ( 0 ) ;
s . append ( new Foo ( 2 ) ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand s s.0 s.2.
2011-12-07 14:55:37 +01:00
// Check s <3 items> QStack<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType s.0 Foo.
// Check s.0.a 1 int.
// Check s.1 0x0 Foo *.
// CheckType s.2 Foo.
// Check s.2.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-16 16:46:51 +01:00
dummyStatement ( & s ) ;
}
void testQStackFoo ( )
{
QStack < Foo > s ;
s . append ( 1 ) ;
s . append ( 2 ) ;
s . append ( 3 ) ;
s . append ( 4 ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand s s.0 s.3.
2011-12-07 14:55:37 +01:00
// Check s <4 items> QStack<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType s.0 Foo.
// Check s.0.a 1 int.
// CheckType s.3 Foo.
// Check s.3.a 4 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-16 16:46:51 +01:00
dummyStatement ( & s ) ;
}
void testQStackBool ( )
{
QStack < bool > s ;
s . append ( true ) ;
s . append ( false ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// Check s <2 items> QStack<bool>.
2011-12-08 17:40:27 +01:00
// Check s.0 true bool.
// Check s.1 false bool.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-16 16:46:51 +01:00
dummyStatement ( & s ) ;
}
void testQStack ( )
{
testQStackInt ( ) ;
testQStackBig ( ) ;
testQStackFoo ( ) ;
testQStackFooPointer ( ) ;
testQStackBool ( ) ;
}
} // namespace qstack
2009-08-28 09:44:11 +02:00
2010-10-26 10:40:31 +02:00
2011-11-18 15:03:58 +01:00
namespace qurl {
void testQUrl ( )
{
QUrl url ( QString ( " http://www.nokia.com " ) ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check url "http://www.nokia.com" QUrl.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & url ) ;
}
} // namespace qurl
2010-10-26 10:40:31 +02:00
2008-12-02 12:01:29 +01:00
2011-09-20 13:54:07 +02:00
namespace qstring {
void testQStringQuotes ( )
{
QString str1 ( " Hello Qt " ) ; // --> Value: "Hello Qt"
QString str2 ( " Hello \n Qt " ) ; // --> Value: ""Hello\nQt"" (double quote not expected)
QString str3 ( " Hello \r Qt " ) ; // --> Value: ""HelloQt"" (double quote and missing \r not expected)
QString str4 ( " Hello \t Qt " ) ; // --> Value: "Hello\9Qt" (expected \t instead of \9)
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check str1 "Hello Qt" QString.
// Check str2 "Hello\nQt" QString.
// Check str3 "Hello\rQt" QString.
// Check str4 "Hello\tQt" QString.
// Continue.
2011-09-20 13:54:07 +02:00
dummyStatement ( & str1 , & str2 , & str3 , & str4 ) ;
}
void testQString1 ( )
{
QString str = " Hello " ;
str + = " big, " ;
str + = " \t " ;
str + = " \r " ;
str + = " \n " ;
str + = QLatin1Char ( 0 ) ;
str + = QLatin1Char ( 1 ) ;
str + = " fat " ;
2012-03-14 19:28:36 +01:00
str + = " World " ;
str . prepend ( " Prefix: " ) ;
2011-09-20 13:54:07 +02:00
BREAK_HERE ;
2012-03-14 19:28:36 +01:00
// Check str "Prefix: Hello big, \t\r\n\000\001 fat World" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-20 13:54:07 +02:00
dummyStatement ( & str ) ;
}
2012-03-14 19:28:36 +01:00
void testQString2 ( )
{
QChar data [ ] = { ' H ' , ' e ' , ' l ' , ' l ' , ' o ' } ;
QString str1 = QString : : fromRawData ( data , 4 ) ;
QString str2 = QString : : fromRawData ( data + 1 , 4 ) ;
BREAK_HERE ;
// Check str1 "Hell" QString.
// Check str2 "ello" QString.
// Continue.
dummyStatement ( & str1 , & str2 , & data ) ;
}
2011-09-20 13:54:07 +02:00
void stringRefTest ( const QString & refstring )
{
dummyStatement ( & refstring ) ;
}
void testQString3 ( )
{
QString str = " Hello " ;
str + = " big, " ;
str + = " fat " ;
str + = " World " ;
QString string ( " String Test " ) ;
QString * pstring = new QString ( " Pointer String Test " ) ;
stringRefTest ( QString ( " Ref String Test " ) ) ;
string = " Hi " ;
string + = " Du " ;
qDebug ( ) < < string ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType pstring QString.
// Check str "Hello big, fat World " QString.
// Check string "HiDu" QString.
// Continue.
delete pstring ;
2011-09-20 13:54:07 +02:00
dummyStatement ( & str , & string , pstring ) ;
}
void testQString ( )
{
testQString1 ( ) ;
2012-03-14 19:28:36 +01:00
testQString2 ( ) ;
2011-09-20 13:54:07 +02:00
testQString3 ( ) ;
testQStringQuotes ( ) ;
}
} // namespace qstring
2008-12-02 12:01:29 +01:00
2011-08-17 10:46:08 +02:00
namespace qstringlist {
void testQStringList ( )
{
QStringList l ;
l < < " Hello " ;
l < < " big, " ;
l < < " fat " ;
l . takeFirst ( ) ;
l < < " World " ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand l.
2011-12-14 12:26:37 +01:00
// Check l <3 items> QStringList.
2011-12-08 17:40:27 +01:00
// Check l.0 " big, " QString.
// Check l.1 " fat " QString.
// Check l.2 " World " QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-17 10:46:08 +02:00
dummyStatement ( & l ) ;
}
} // namespace qstringlist
2008-12-02 12:01:29 +01:00
2011-07-04 18:31:31 +02:00
namespace formats {
2011-06-28 16:31:31 +02:00
2011-07-04 18:31:31 +02:00
void testString ( )
{
const wchar_t * w = L " aöa " ;
QString u ;
if ( sizeof ( wchar_t ) = = 4 )
u = QString : : fromUcs4 ( ( uint * ) w ) ;
else
u = QString : : fromUtf16 ( ( ushort * ) w ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2012-03-15 16:37:24 +01:00
// Check u "aöa" QString.
2011-12-07 14:55:37 +01:00
// CheckType w wchar_t *.
// Continue.
2011-07-04 18:31:31 +02:00
// All: Select UTF-8 in "Change Format for Type" in L&W context menu.
// Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
// Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
dummyStatement ( & u , & w ) ;
}
2010-10-12 11:52:11 +02:00
2011-07-04 18:31:31 +02:00
void testCharPointers ( )
{
// These tests should result in properly displayed umlauts in the
// Locals&Watchers view. It is only support on gdb with Python.
const char * s = " aöa " ;
const char * t = " a \xc3 \xb6 " ;
const wchar_t * w = L " aöa " ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType s char *.
// CheckType t char *.
// CheckType w wchar_t *.
// Continue.
2011-07-04 18:31:31 +02:00
// All: Select UTF-8 in "Change Format for Type" in L&W context menu.
// Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
// Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
2011-12-14 11:15:03 +01:00
const unsigned char uu [ ] = { ' a ' , 153 /* ö Latin1 */ , ' a ' } ;
2011-11-04 17:38:39 +01:00
const unsigned char * u = uu ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType u unsigned char *.
// CheckType uu unsigned char [3].
// Continue.
2011-11-04 17:38:39 +01:00
2011-07-04 18:31:31 +02:00
// Make sure to undo "Change Format".
2011-11-04 17:38:39 +01:00
dummyStatement ( & s , & w , & t , & u ) ;
2011-07-04 18:31:31 +02:00
}
void testCharArrays ( )
{
// These tests should result in properly displayed umlauts in the
// Locals&Watchers view. It is only support on gdb with Python.
const char s [ ] = " aöa " ;
2011-11-30 11:09:10 +01:00
const char t [ ] = " aöax " ;
2011-07-04 18:31:31 +02:00
const wchar_t w [ ] = L " aöa " ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType s char [5].
// CheckType t char [6].
// CheckType w wchar_t [4].
// Continue.
2011-07-04 18:31:31 +02:00
// All: Select UTF-8 in "Change Format for Type" in L&W context menu.
// Windows: Select UTF-16 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".
2011-11-30 11:09:10 +01:00
dummyStatement ( & s , & w , & t ) ;
2011-07-04 18:31:31 +02:00
}
void testFormats ( )
{
testCharPointers ( ) ;
testCharArrays ( ) ;
testString ( ) ;
}
} // namespace formats
2010-10-12 11:52:11 +02:00
2011-11-18 15:03:58 +01:00
namespace text {
void testText ( )
{
//char *argv[] = { "xxx", 0 };
QTextDocument doc ;
doc . setPlainText ( " Hallo \n World " ) ;
QTextCursor tc ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType doc QTextDocument.
// Continue.
2011-11-18 15:03:58 +01:00
tc = doc . find ( " all " ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check tc 4 QTextCursor.
// Continue.
2011-11-18 15:03:58 +01:00
int pos = tc . position ( ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check pos 4 int.
// Continue.
2011-11-18 15:03:58 +01:00
int anc = tc . anchor ( ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check anc 1 int.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & pos , & anc ) ;
}
} // namespace text
2010-09-28 09:35:59 +02:00
2008-12-02 12:01:29 +01:00
2011-06-28 16:31:31 +02:00
namespace qthread {
2008-12-02 12:01:29 +01:00
2011-06-28 16:31:31 +02:00
class Thread : public QThread
{
public :
2011-09-19 11:21:22 +02:00
Thread ( ) { }
void setId ( int id ) { m_id = id ; }
2009-07-01 14:15:10 +02:00
2011-06-28 16:31:31 +02:00
void run ( )
{
int j = 2 ;
+ + j ;
2011-09-19 11:21:22 +02:00
for ( int i = 0 ; i ! = 1000 ; + + i ) {
2011-06-28 16:31:31 +02:00
//sleep(1);
std : : cerr < < m_id ;
}
if ( m_id = = 2 ) {
+ + j ;
}
2011-09-19 11:21:22 +02:00
if ( m_id = = 3 ) {
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand this.
2011-12-07 14:55:37 +01:00
// Check j 3 int.
// CheckType this qthread::Thread.
2012-03-20 18:55:12 +01:00
// Check this.@1 "This is thread #3" QThread.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-19 11:21:22 +02:00
dummyStatement ( this ) ;
}
2011-06-28 16:31:31 +02:00
std : : cerr < < j ;
}
private :
int m_id ;
} ;
void testQThread ( )
{
2011-09-19 11:21:22 +02:00
//return;
const int N = 14 ;
Thread thread [ N ] ;
for ( int i = 0 ; i ! = N ; + + i ) {
thread [ i ] . setId ( i ) ;
thread [ i ] . setObjectName ( " This is thread # " + QString : : number ( i ) ) ;
thread [ i ] . start ( ) ;
}
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand thread.
2011-12-14 12:26:37 +01:00
// CheckType thread qthread::Thread [14].
2011-12-08 17:40:27 +01:00
// Check thread.0 "This is thread #0" qthread::Thread.
// Check thread.13 "This is thread #13" qthread::Thread.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-19 11:21:22 +02:00
for ( int i = 0 ; i ! = N ; + + i ) {
thread [ i ] . wait ( ) ;
}
dummyStatement ( & thread ) ;
2011-06-28 16:31:31 +02:00
}
2008-12-02 12:01:29 +01:00
}
2010-05-20 11:34:00 +02:00
2011-06-28 16:31:31 +02:00
Q_DECLARE_METATYPE ( QHostAddress )
Q_DECLARE_METATYPE ( QList < int > )
Q_DECLARE_METATYPE ( QStringList )
# define COMMA ,
Q_DECLARE_METATYPE ( QMap < uint COMMA QStringList > )
namespace qvariant {
void testQVariant1 ( )
{
QVariant value ;
QVariant : : Type t = QVariant : : String ;
value = QVariant ( t , ( void * ) 0 ) ;
* ( QString * ) value . data ( ) = QString ( " Some string " ) ;
2011-12-07 14:55:37 +01:00
int i = 1 ;
BREAK_HERE ;
// Check t QVariant::String (10) QVariant::Type.
// Check value "Some string" QVariant (QString).
// Continue.
2011-06-28 16:31:31 +02:00
// Check the variant contains a proper QString.
2011-07-07 12:02:40 +02:00
dummyStatement ( & i ) ;
2011-06-28 16:31:31 +02:00
}
void testQVariant2 ( )
{
2011-12-07 14:55:37 +01:00
// Check var contains objects of the types indicated.
2011-06-28 16:31:31 +02:00
QVariant var ; // Type 0, invalid
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check var (invalid) QVariant (invalid).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( true ) ; // 1, bool
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var true QVariant (bool).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( 2 ) ; // 2, int
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 2 QVariant (int).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( 3u ) ; // 3, uint
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 3 QVariant (uint).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( qlonglong ( 4 ) ) ; // 4, qlonglong
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 4 QVariant (qlonglong).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( qulonglong ( 5 ) ) ; // 5, qulonglong
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 5 QVariant (qulonglong).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( double ( 6 ) ) ; // 6, double
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 6 QVariant (double).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( QChar ( 7 ) ) ; // 7, QChar
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var '?' (7) QVariant (QChar).
// Continue.
2011-06-28 16:31:31 +02:00
//None, # 8, QVariantMap
// None, # 9, QVariantList
var . setValue ( QString ( " Hello 10 " ) ) ; // 10, QString
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var "Hello 10" QVariant (QString).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( QRect ( 100 , 200 , 300 , 400 ) ) ; // 19 QRect
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 300x400+100+200 QVariant (QRect).
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( QRectF ( 100 , 200 , 300 , 400 ) ) ; // 19 QRectF
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check var 300x400+100+200 QVariant (QRectF).
// Continue.
2011-06-28 16:31:31 +02:00
/*
" QStringList " , # 11
" QByteArray " , # 12
" QBitArray " , # 13
" QDate " , # 14
" QTime " , # 15
" QDateTime " , # 16
" QUrl " , # 17
" QLocale " , # 18
" QRect " , # 19
" QRectF " , # 20
" QSize " , # 21
" QSizeF " , # 22
" QLine " , # 23
" QLineF " , # 24
" QPoint " , # 25
" QPointF " , # 26
" QRegExp " , # 27
*/
2011-08-17 10:46:08 +02:00
dummyStatement ( & var ) ;
2011-06-28 16:31:31 +02:00
}
void testQVariant3 ( )
{
QVariant var ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check var (invalid) QVariant (invalid).
// Continue.
2011-12-08 17:40:27 +01:00
2011-06-28 16:31:31 +02:00
// Check the list is updated properly.
var . setValue ( QStringList ( ) < < " World " ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand var.
2011-12-14 12:26:37 +01:00
// Check var <1 items> QVariant (QStringList).
2011-12-08 17:40:27 +01:00
// Check var.0 "World" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( QStringList ( ) < < " World " < < " Hello " ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand var.
2011-12-14 12:26:37 +01:00
// Check var <2 items> QVariant (QStringList).
2011-12-08 17:40:27 +01:00
// Check var.1 "Hello" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( QStringList ( ) < < " Hello " < < " Hello " ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand var.
2011-12-14 12:26:37 +01:00
// Check var <2 items> QVariant (QStringList).
2011-12-08 17:40:27 +01:00
// Check var.0 "Hello" QString.
// Check var.1 "Hello" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( QStringList ( ) < < " World " < < " Hello " < < " Hello " ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand var.
2011-12-14 12:26:37 +01:00
// Check var <3 items> QVariant (QStringList).
2011-12-08 17:40:27 +01:00
// Check var.0 "World" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
dummyStatement ( & var ) ;
}
void testQVariant4 ( )
{
QVariant var ;
QHostAddress ha ( " 127.0.0.1 " ) ;
var . setValue ( ha ) ;
QHostAddress ha1 = var . value < QHostAddress > ( ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand ha ha1 var.
2011-12-07 14:55:37 +01:00
// Check ha "127.0.0.1" QHostAddress.
2011-12-08 17:40:27 +01:00
// Check ha.a 0 quint32.
// CheckType ha.a6 Q_IPV6ADDR.
// Check ha.ipString "127.0.0.1" QString.
// Check ha.isParsed false bool.
// Check ha.protocol QAbstractSocket::UnknownNetworkLayerProtocol (-1) QAbstractSocket::NetworkLayerProtocol.
// Check ha.scopeId "" QString.
2011-12-07 14:55:37 +01:00
// Check ha1 "127.0.0.1" QHostAddress.
2011-12-08 17:40:27 +01:00
// Check ha1.a 0 quint32.
// CheckType ha1.a6 Q_IPV6ADDR.
// Check ha1.ipString "127.0.0.1" QString.
// Check ha1.isParsed false bool.
// Check ha1.protocol QAbstractSocket::UnknownNetworkLayerProtocol (-1) QAbstractSocket::NetworkLayerProtocol.
// Check ha1.scopeId "" QString.
2012-03-20 18:55:12 +01:00
// CheckType var QVariant (QHostAddress).
// Check var.data "127.0.0.1" QHostAddress.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
dummyStatement ( & ha1 ) ;
}
void testQVariant5 ( )
{
// This checks user defined types in QVariants.
typedef QMap < uint , QStringList > MyType ;
MyType my ;
my [ 1 ] = ( QStringList ( ) < < " Hello " ) ;
my [ 3 ] = ( QStringList ( ) < < " World " ) ;
QVariant var ;
var . setValue ( my ) ;
// FIXME: Known to break
//QString type = var.typeName();
2011-09-15 15:17:35 +02:00
var . setValue ( my ) ;
BREAK_HERE ;
2012-03-20 18:55:12 +01:00
// Expand my my.0 my.0.value my.1 my.1.value var var.data var.data.0 var.data.0.value var.data.1 var.data.1.value.
2011-12-07 14:55:37 +01:00
// Check my <2 items> qvariant::MyType.
2011-12-08 17:40:27 +01:00
// Check my.0 QMapNode<unsigned int, QStringList>.
// Check my.0.key 1 unsigned int.
// Check my.0.value <1 items> QStringList.
// Check my.0.value.0 "Hello" QString.
// Check my.1 QMapNode<unsigned int, QStringList>.
// Check my.1.key 3 unsigned int.
// Check my.1.value <1 items> QStringList.
// Check my.1.value.0 "World" QString.
2012-03-20 18:55:12 +01:00
// CheckType var QVariant (QMap<unsigned int , QStringList>).
// Check var.data <2 items> QMap<unsigned int, QStringList>.
// Check var.data.0 QMapNode<unsigned int, QStringList>.
// Check var.data.0.key 1 unsigned int.
// Check var.data.0.value <1 items> QStringList.
2011-12-08 17:40:27 +01:00
// Check var.0.value.0 "Hello" QString.
2012-03-20 18:55:12 +01:00
// Check var.data.1 QMapNode<unsigned int, QStringList>.
// Check var.data.1.key 3 unsigned int.
// Check var.data.1.value <1 items> QStringList.
// Check var.data.1.value.0 "World" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
var . setValue ( my ) ;
var . setValue ( my ) ;
var . setValue ( my ) ;
dummyStatement ( & var ) ;
}
void testQVariant6 ( )
2011-09-15 15:17:35 +02:00
{
QList < int > list ;
list < < 1 < < 2 < < 3 ;
QVariant variant = qVariantFromValue ( list ) ;
BREAK_HERE ;
2012-03-20 18:55:12 +01:00
// Expand list variant variant.data.
2011-12-07 14:55:37 +01:00
// Check list <3 items> QList<int>.
2011-12-08 17:40:27 +01:00
// Check list.0 1 int.
// Check list.1 2 int.
// Check list.2 3 int.
2012-03-20 18:55:12 +01:00
// CheckType variant QVariant (QList<int>).
// Check variant.data <3 items> QList<int>.
// Check variant.data.0 1 int.
// Check variant.data.1 2 int.
// Check variant.data.2 3 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 15:17:35 +02:00
list . clear ( ) ;
list = qVariantValue < QList < int > > ( variant ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand list.
2011-12-14 12:26:37 +01:00
// Check list <3 items> QList<int>.
2011-12-08 17:40:27 +01:00
// Check list.0 1 int.
// Check list.1 2 int.
// Check list.2 3 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 15:17:35 +02:00
dummyStatement ( & list ) ;
}
void testQVariantList ( )
2011-06-28 16:31:31 +02:00
{
QVariantList vl ;
2011-09-15 15:17:35 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check vl <0 items> QVariantList.
// Continue.
2011-06-28 16:31:31 +02:00
vl . append ( QVariant ( 1 ) ) ;
vl . append ( QVariant ( 2 ) ) ;
vl . append ( QVariant ( " Some String " ) ) ;
vl . append ( QVariant ( 21 ) ) ;
vl . append ( QVariant ( 22 ) ) ;
vl . append ( QVariant ( " 2Some String " ) ) ;
2011-09-15 15:17:35 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand vl.
2011-12-14 12:26:37 +01:00
// Check vl <6 items> QVariantList.
2011-12-08 17:40:27 +01:00
// CheckType vl.0 QVariant (int).
// CheckType vl.2 QVariant (QString).
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 15:17:35 +02:00
dummyStatement ( & vl ) ;
}
2011-06-28 16:31:31 +02:00
2011-09-15 15:17:35 +02:00
void testQVariantMap ( )
{
QVariantMap vm ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check vm <0 items> QVariantMap.
// Continue.
2011-09-15 15:17:35 +02:00
vm [ " a " ] = QVariant ( 1 ) ;
vm [ " b " ] = QVariant ( 2 ) ;
vm [ " c " ] = QVariant ( " Some String " ) ;
vm [ " d " ] = QVariant ( 21 ) ;
vm [ " e " ] = QVariant ( 22 ) ;
vm [ " f " ] = QVariant ( " 2Some String " ) ;
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand vm vm.0 vm.5.
2011-12-07 14:55:37 +01:00
// Check vm <6 items> QVariantMap.
2011-12-08 17:40:27 +01:00
// Check vm.0 QMapNode<QString, QVariant>.
// Check vm.0.key "a" QString.
// Check vm.0.value 1 QVariant (int).
// Check vm.5 QMapNode<QString, QVariant>.
// Check vm.5.key "f" QString.
// Check vm.5.value "2Some String" QVariant (QString).
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-15 15:17:35 +02:00
dummyStatement ( & vm ) ;
2011-06-28 16:31:31 +02:00
}
void testQVariant ( )
{
testQVariant1 ( ) ;
testQVariant2 ( ) ;
testQVariant3 ( ) ;
testQVariant4 ( ) ;
testQVariant5 ( ) ;
testQVariant6 ( ) ;
2011-09-15 15:17:35 +02:00
testQVariantList ( ) ;
testQVariantMap ( ) ;
2011-06-28 16:31:31 +02:00
}
} // namespace qvariant
2010-10-07 16:36:25 +02:00
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
namespace qvector {
2008-12-10 16:48:12 +01:00
2011-11-18 15:03:58 +01:00
void testQVectorIntBig ( )
2011-07-07 12:02:40 +02:00
{
// This tests the display of a big vector.
2011-11-18 15:03:58 +01:00
QVector < int > vec ( 10000 ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand vec.
2011-12-14 12:26:37 +01:00
// Check vec <10000 items> QVector<int>.
2011-12-08 17:40:27 +01:00
// Check vec.0 0 int.
// Check vec.1999 0 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-08 17:40:27 +01:00
2011-07-07 12:02:40 +02:00
// step over
// check that the display updates in reasonable time
2011-11-18 15:03:58 +01:00
vec [ 1 ] = 1 ;
vec [ 2 ] = 2 ;
vec . append ( 1 ) ;
vec . append ( 1 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand vec.
2011-12-14 12:26:37 +01:00
// Check vec <10002 items> QVector<int>.
2011-12-08 17:40:27 +01:00
// Check vec.1 1 int.
// Check vec.2 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & vec ) ;
2011-07-07 12:02:40 +02:00
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQVectorFoo ( )
2011-07-07 12:02:40 +02:00
{
// This tests the display of a vector of pointers to custom structs.
2011-11-18 15:03:58 +01:00
QVector < Foo > vec ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check vec <0 items> QVector<Foo>.
// Continue.
2011-07-07 12:02:40 +02:00
// step over, check display.
2011-11-18 15:03:58 +01:00
vec . append ( 1 ) ;
vec . append ( 2 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand vec vec.0 vec.1.
2011-12-07 14:55:37 +01:00
// Check vec <2 items> QVector<Foo>.
2011-12-08 17:40:27 +01:00
// CheckType vec.0 Foo.
// Check vec.0.a 1 int.
// CheckType vec.1 Foo.
// Check vec.1.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & vec ) ;
2011-07-07 12:02:40 +02:00
}
2008-12-02 12:01:29 +01:00
2011-08-15 13:32:46 +02:00
typedef QVector < Foo > FooVector ;
2011-11-18 15:03:58 +01:00
void testQVectorFooTypedef ( )
2011-08-15 13:32:46 +02:00
{
2011-11-18 15:03:58 +01:00
FooVector vec ;
vec . append ( Foo ( 2 ) ) ;
vec . append ( Foo ( 3 ) ) ;
dummyStatement ( & vec ) ;
2011-08-15 13:32:46 +02:00
}
2011-11-18 15:03:58 +01:00
void testQVectorFooStar ( )
2011-07-07 12:02:40 +02:00
{
// This tests the display of a vector of pointers to custom structs.
2011-11-18 15:03:58 +01:00
QVector < Foo * > vec ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check vec <0 items> QVector<Foo*>.
// Continue.
2011-07-07 12:02:40 +02:00
// step over
// check that the display is ok.
2011-11-18 15:03:58 +01:00
vec . append ( new Foo ( 1 ) ) ;
vec . append ( 0 ) ;
vec . append ( new Foo ( 2 ) ) ;
2011-07-07 12:02:40 +02:00
// switch "Auto derefencing pointers" in Locals context menu
// off and on again, and check result looks sane.
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand vec vec.0 vec.2.
2011-12-07 14:55:37 +01:00
// Check vec <3 items> QVector<Foo*>.
2011-12-08 17:40:27 +01:00
// CheckType vec.0 Foo.
// Check vec.0.a 1 int.
// Check vec.1 0x0 Foo *.
// CheckType vec.2 Foo.
// Check vec.2.a 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & vec ) ;
2011-07-07 12:02:40 +02:00
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQVectorBool ( )
2011-07-07 12:02:40 +02:00
{
// This tests the display of a vector of custom structs.
QVector < bool > vec ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check vec <0 items> QVector<bool>.
// Continue.
2011-07-07 12:02:40 +02:00
// step over
// check that the display is ok.
vec . append ( true ) ;
vec . append ( false ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand vec.
2011-12-14 12:26:37 +01:00
// Check vec <2 items> QVector<bool>.
2011-12-08 17:40:27 +01:00
// Check vec.0 true bool.
// Check vec.1 false bool.
2011-12-07 14:55:37 +01:00
// Continue.
2011-07-07 12:02:40 +02:00
dummyStatement ( & vec ) ;
}
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
void testQVectorListInt ( )
2011-07-07 12:02:40 +02:00
{
2011-11-18 15:03:58 +01:00
QVector < QList < int > > vec ;
QVector < QList < int > > * pv = & vec ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType pv QVector<QList<int>>.
// Check vec <0 items> QVector<QList<int>>.
// Continue.
2011-11-18 15:03:58 +01:00
vec . append ( QList < int > ( ) < < 1 ) ;
vec . append ( QList < int > ( ) < < 2 < < 3 ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand pv pv.0 pv.1 vec vec.0 vec.1.
2011-12-07 14:55:37 +01:00
// CheckType pv QVector<QList<int>>.
2011-12-08 17:40:27 +01:00
// Check pv.0 <1 items> QList<int>.
// Check pv.0.0 1 int.
// Check pv.1 <2 items> QList<int>.
// Check pv.1.0 2 int.
// Check pv.1.1 3 int.
2011-12-07 14:55:37 +01:00
// Check vec <2 items> QVector<QList<int>>.
2011-12-08 17:40:27 +01:00
// Check vec.0 <1 items> QList<int>.
// Check vec.0.0 1 int.
// Check vec.1 <2 items> QList<int>.
// Check vec.1.0 2 int.
// Check vec.1.1 3 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( pv , & vec ) ;
2011-07-07 12:02:40 +02:00
}
2009-05-25 17:19:42 +02:00
2011-07-07 12:02:40 +02:00
void testQVector ( )
{
2011-11-18 15:03:58 +01:00
testQVectorIntBig ( ) ;
testQVectorFoo ( ) ;
testQVectorFooTypedef ( ) ;
testQVectorFooStar ( ) ;
testQVectorBool ( ) ;
testQVectorListInt ( ) ;
2011-07-07 12:02:40 +02:00
}
2009-07-08 17:27:45 +02:00
2011-07-07 12:02:40 +02:00
} // namespace qvector
2009-07-08 17:27:45 +02:00
2011-07-07 12:02:40 +02:00
namespace noargs {
class Goo
{
public :
Goo ( const QString & str , const int n ) : str_ ( str ) , n_ ( n ) { }
private :
QString str_ ;
int n_ ;
} ;
typedef QList < Goo > GooList ;
void testNoArgumentName ( int i , int , int k )
{
// This is not supposed to work with the compiled dumpers.
GooList list ;
list . append ( Goo ( " Hello " , 1 ) ) ;
list . append ( Goo ( " World " , 2 ) ) ;
QList < Goo > list2 ;
list2 . append ( Goo ( " Hello " , 1 ) ) ;
list2 . append ( Goo ( " World " , 2 ) ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand list list.0 list.1 list2 list2.1.
2011-12-07 14:55:37 +01:00
// Check i 1 int.
// Check k 3 int.
// Check list <2 items> noargs::GooList.
2011-12-08 17:40:27 +01:00
// CheckType list.0 noargs::Goo.
// Check list.0.n_ 1 int.
// Check list.0.str_ "Hello" QString.
// CheckType list.1 noargs::Goo.
// Check list.1.n_ 2 int.
// Check list.1.str_ "World" QString.
2011-12-07 14:55:37 +01:00
// Check list2 <2 items> QList<noargs::Goo>.
2011-12-08 17:40:27 +01:00
// CheckType list2.0 noargs::Goo.
// Check list2.0.n_ 1 int.
// Check list2.0.str_ "Hello" QString.
// CheckType list2.1 noargs::Goo.
// Check list2.1.n_ 2 int.
// Check list2.1.str_ "World" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-07-07 12:02:40 +02:00
dummyStatement ( & i , & k ) ;
}
} // namespace noargs
2009-07-08 17:27:45 +02:00
2009-05-25 17:19:42 +02:00
2008-12-02 12:01:29 +01:00
void foo ( ) { }
void foo ( int ) { }
void foo ( QList < int > ) { }
void foo ( QList < QVector < int > > ) { }
void foo ( QList < QVector < int > * > ) { }
void foo ( QList < QVector < int * > * > ) { }
template < class T >
void foo ( QList < QVector < T > * > ) { }
2011-07-07 12:02:40 +02:00
namespace namespc {
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
class MyBase : public QObject
2008-12-02 12:01:29 +01:00
{
2011-07-07 12:02:40 +02:00
public :
MyBase ( ) { }
virtual void doit ( int i )
{
n = i ;
}
protected :
int n ;
} ;
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
namespace nested {
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
class MyFoo : public MyBase
{
public :
MyFoo ( ) { }
virtual void doit ( int i )
{
// Note there's a local 'n' and one in the base class.
n = i ;
}
protected :
int n ;
} ;
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
class MyBar : public MyFoo
{
public :
virtual void doit ( int i )
{
n = i + 1 ;
}
} ;
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
namespace {
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
class MyAnon : public MyBar
{
public :
virtual void doit ( int i )
{
n = i + 3 ;
}
} ;
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
namespace baz {
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
class MyBaz : public MyAnon
{
public :
virtual void doit ( int i )
{
n = i + 5 ;
}
} ;
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
} // namespace baz
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
} // namespace anon
2008-12-02 12:01:29 +01:00
2011-07-07 12:02:40 +02:00
} // namespace nested
void testNamespace ( )
{
// This checks whether classes with "special" names are
// properly displayed.
using namespace nested ;
MyFoo foo ;
MyBar bar ;
MyAnon anon ;
baz : : MyBaz baz ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType anon namespc::nested::(anonymous namespace)::MyAnon.
// CheckType bar namespc::nested::MyBar.
// CheckType baz namespc::nested::(anonymous namespace)::baz::MyBaz.
// CheckType foo namespc::nested::MyFoo.
// Continue.
2011-07-07 12:02:40 +02:00
// step into the doit() functions
baz . doit ( 1 ) ;
anon . doit ( 1 ) ;
foo . doit ( 1 ) ;
bar . doit ( 1 ) ;
dummyStatement ( ) ;
}
} // namespace namespc
2008-12-02 12:01:29 +01:00
2009-07-23 12:34:49 +02:00
class Z : public QObject
{
public :
Z ( ) {
f = new Foo ( ) ;
i = 0 ;
i = 1 ;
i = 2 ;
i = 3 ;
}
int i ;
Foo * f ;
} ;
2010-12-08 14:08:35 +01:00
void testMemoryView ( )
{
int a [ 20 ] ;
for ( int i = 0 ; i ! = 20 ; + + i )
a [ i ] = i ;
2012-02-08 14:08:16 +01:00
dummyStatement ( & a ) ;
2010-12-08 14:08:35 +01:00
}
2010-01-04 13:16:10 +01:00
QString fooxx ( )
{
return " bababa " ;
}
2011-07-08 08:52:53 +02:00
namespace basic {
// This tests display of basic types.
2011-08-16 17:32:34 +02:00
void testArray1 ( )
{
double d [ 3 ] [ 3 ] ;
for ( int i = 0 ; i ! = 3 ; + + i )
for ( int j = 0 ; j ! = 3 ; + + j )
d [ i ] [ j ] = i + j ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand d d.0.
2011-12-07 14:55:37 +01:00
// CheckType d double [3][3].
2011-12-08 17:40:27 +01:00
// CheckType d.0 double [3].
// Check d.0.0 0 double.
// Check d.0.2 2 double.
// CheckType d.2 double [3].
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 14:24:39 +01:00
dummyStatement ( & d ) ;
2011-08-16 17:32:34 +02:00
}
void testArray2 ( )
{
char c [ 20 ] ;
c [ 0 ] = ' a ' ;
c [ 1 ] = ' b ' ;
c [ 2 ] = ' c ' ;
c [ 3 ] = ' d ' ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand c.
2011-12-14 12:26:37 +01:00
// CheckType c char [20].
2011-12-08 17:40:27 +01:00
// Check c.0 97 'a' char.
// Check c.3 100 'd' char.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-16 17:32:34 +02:00
dummyStatement ( & c ) ;
}
void testArray3 ( )
{
QString s [ 20 ] ;
s [ 0 ] = " a " ;
s [ 1 ] = " b " ;
s [ 2 ] = " c " ;
s [ 3 ] = " d " ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// CheckType s QString [20].
2011-12-08 17:40:27 +01:00
// Check s.0 "a" QString.
// Check s.3 "d" QString.
// Check s.4 "" QString.
// Check s.19 "" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-16 17:32:34 +02:00
dummyStatement ( & s ) ;
}
void testArray4 ( )
{
QByteArray b [ 20 ] ;
b [ 0 ] = " a " ;
b [ 1 ] = " b " ;
b [ 2 ] = " c " ;
b [ 3 ] = " d " ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand b.
2011-12-14 12:26:37 +01:00
// CheckType b QByteArray [20].
2011-12-08 17:40:27 +01:00
// Check b.0 "a" QByteArray.
// Check b.3 "d" QByteArray.
// Check b.4 "" QByteArray.
// Check b.19 "" QByteArray.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-16 17:32:34 +02:00
dummyStatement ( & b ) ;
}
void testArray5 ( )
{
Foo foo [ 10 ] ;
//for (int i = 0; i != sizeof(foo)/sizeof(foo[0]); ++i) {
for ( int i = 0 ; i < 5 ; + + i ) {
foo [ i ] . a = i ;
foo [ i ] . doit ( ) ;
}
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand foo.
2011-12-14 12:26:37 +01:00
// CheckType foo Foo [10].
2011-12-08 17:40:27 +01:00
// CheckType foo.0 Foo.
// CheckType foo.9 Foo.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-16 17:32:34 +02:00
dummyStatement ( & foo ) ;
}
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-5326
2011-07-08 08:52:53 +02:00
void testChar ( )
{
2012-03-05 10:35:28 +01:00
char s [ 6 ] ;
2011-07-08 08:52:53 +02:00
s [ 0 ] = 0 ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2012-03-08 08:28:25 +01:00
// CheckType s char [6].
2011-12-08 17:40:27 +01:00
// Check s.0 0 '\0' char.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: Open pinnable tooltip.
// Manual: Step over.
// Manual: Check that display and tooltip look sane.
2012-03-08 08:28:25 +01:00
strcat ( s , " \" " ) ;
strcat ( s , " \" " ) ;
strcat ( s , " a " ) ;
strcat ( s , " b " ) ;
strcat ( s , " \" " ) ;
2011-12-14 12:26:37 +01:00
// Manual: Close tooltip.
2011-07-08 08:52:53 +02:00
dummyStatement ( & s ) ;
}
2011-07-12 09:29:06 +02:00
static char buf [ 20 ] = { 0 } ;
void testCharStar ( )
{
char * s = buf ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// CheckType s char *.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: Open pinnable tooltip.
// Manual: Step over.
// Manual: Check that display and tooltip look sane.
2011-07-12 09:29:06 +02:00
s = strcat ( s , " \" " ) ;
s = strcat ( s , " \" " ) ;
s = strcat ( s , " a " ) ;
s = strcat ( s , " b " ) ;
s = strcat ( s , " \" " ) ;
// Close tooltip.
dummyStatement ( & s ) ;
}
2011-08-15 13:32:46 +02:00
struct S
2011-07-08 08:52:53 +02:00
{
2011-08-15 13:32:46 +02:00
uint x : 1 ;
uint y : 1 ;
bool c : 1 ;
bool b ;
float f ;
double d ;
qreal q ;
int i ;
} ;
void testBitfields ( )
{
// This checks whether bitfields are properly displayed
S s ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// CheckType s basic::S.
2011-12-08 17:40:27 +01:00
// CheckType s.b bool.
// CheckType s.c bool.
// CheckType s.d double.
// CheckType s.f float.
// CheckType s.i int.
// CheckType s.q qreal.
// CheckType s.x uint.
// CheckType s.y uint.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
s . i = 0 ;
2011-08-15 13:32:46 +02:00
dummyStatement ( & s ) ;
2011-07-08 08:52:53 +02:00
}
2011-11-18 15:03:58 +01:00
struct Function
{
Function ( QByteArray var , QByteArray f , double min , double max )
: var ( var ) , f ( f ) , min ( min ) , max ( max ) { }
QByteArray var ;
QByteArray f ;
double min ;
double max ;
} ;
void testFunction ( )
{
// In order to use this, switch on the 'qDump__Function' in dumper.py
Function func ( " x " , " sin(x) " , 0, 1) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand func.
2011-12-14 12:26:37 +01:00
// CheckType func basic::Function.
2011-12-08 17:40:27 +01:00
// Check func.f "sin(x)" QByteArray.
// Check func.max 1 double.
// Check func.min 0 double.
// Check func.var "x" QByteArray.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
func . max = 10 ;
func . f = " cos(x) " ;
func . max = 4 ;
func . max = 5 ;
func . max = 6 ;
func . max = 7 ;
2011-12-08 17:40:27 +01:00
BREAK_HERE ;
// Expand func.
2011-12-14 12:26:37 +01:00
// CheckType func basic::Function.
2011-12-08 17:40:27 +01:00
// Check func.f "cos(x)" QByteArray.
// Check func.max 7 double.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & func ) ;
}
2011-08-15 13:32:46 +02:00
struct Color
{
int r , g , b , a ;
Color ( ) { r = 1 , g = 2 , b = 3 , a = 4 ; }
} ;
2010-11-16 17:09:25 +01:00
2011-08-15 13:32:46 +02:00
void testAlphabeticSorting ( )
{
// This checks whether alphabetic sorting of structure
// members work.
Color c ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand c.
2011-12-14 12:26:37 +01:00
// CheckType c basic::Color.
2011-12-08 17:40:27 +01:00
// Check c.a 4 int.
// Check c.b 3 int.
// Check c.g 2 int.
// Check c.r 1 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: Toogle "Sort Member Alphabetically" in context menu
// Manual: of "Locals and Expressions" view.
// Manual: Check that order of displayed members changes.
2011-08-15 13:32:46 +02:00
dummyStatement ( & c ) ;
}
2011-02-03 18:23:07 +01:00
2011-08-15 13:32:46 +02:00
namespace ns {
typedef unsigned long long vl ;
typedef vl verylong ;
}
void testTypedef ( )
2011-02-03 18:23:07 +01:00
{
2011-08-15 13:32:46 +02:00
typedef quint32 myType1 ;
typedef unsigned int myType2 ;
myType1 t1 = 0 ;
myType2 t2 = 0 ;
ns : : vl j = 1000 ;
ns : : verylong k = 1000 ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check j 1000 basic::ns::vl.
// Check k 1000 basic::ns::verylong.
// Check t1 0 basic::myType1.
// Check t2 0 basic::myType2.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & j , & k , & t1 , & t2 ) ;
2011-02-03 18:23:07 +01:00
}
2011-08-17 14:54:31 +02:00
void testStruct ( )
{
Foo f ( 2 ) ;
f . doit ( ) ;
f . doit ( ) ;
f . doit ( ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand f.
2011-12-14 12:26:37 +01:00
// CheckType f Foo.
2011-12-08 17:40:27 +01:00
// Check f.a 5 int.
// Check f.b 2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-17 14:54:31 +02:00
dummyStatement ( & f ) ;
}
2011-09-19 11:38:19 +02:00
void testUnion ( )
{
union U
{
int a ;
int b ;
} u ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand u.
2011-12-14 12:26:37 +01:00
// CheckType u basic::U.
2011-12-08 17:40:27 +01:00
// CheckType u.a int.
// CheckType u.b int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-09-19 11:38:19 +02:00
dummyStatement ( & u ) ;
}
2011-08-15 13:32:46 +02:00
void testUninitialized ( )
{
// This tests the display of uninitialized data.
2011-02-03 18:23:07 +01:00
2012-03-02 13:21:24 +01:00
BREAK_UNINITIALIZED_HERE ;
2011-12-07 14:55:37 +01:00
// Check hii <not accessible> QHash<int, int>.
// Check hss <not accessible> QHash<QString, QString>.
// Check li <not accessible> QList<int>.
2011-12-15 12:25:27 +01:00
// CheckType mii <not accessible> QMap<int, int>.
2011-12-07 14:55:37 +01:00
// Check mss <not accessible> QMap<QString, QString>.
// Check s <not accessible> QString.
// Check si <not accessible> QStack<int>.
// Check sl <not accessible> QStringList.
// Check sli <not accessible> std::list<int>.
// CheckType smii std::map<int, int>.
// CheckType smss std::map<std::string, std::string>.
// CheckType ss std::string.
// Check ssi <not accessible> std::stack<int>.
// Check ssl <not accessible> std::list<std::string>.
// CheckType svi std::vector<int>.
// Check vi <not accessible> QVector<int>.
// Continue.
2011-12-15 12:25:27 +01:00
// Manual: Note: All values should be <uninitialized> or random data.
// Manual: Check that nothing bad happens if items with random data
// Manual: are expanded.
2011-08-15 13:32:46 +02:00
QString s ;
QStringList sl ;
QMap < int , int > mii ;
QMap < QString , QString > mss ;
QHash < int , int > hii ;
QHash < QString , QString > hss ;
QList < int > li ;
QVector < int > vi ;
QStack < int > si ;
std : : string ss ;
std : : map < int , int > smii ;
std : : map < std : : string , std : : string > smss ;
std : : list < int > sli ;
std : : list < std : : string > ssl ;
std : : vector < int > svi ;
std : : stack < int > ssi ;
2011-08-18 16:14:34 +02:00
dummyStatement ( & s , & sl , & mii , & mss , & hii , & hss , & si , & vi , & li ,
& ss , & smii , & smss , & sli , & svi , & ssi , & ssl ) ;
2011-08-15 13:32:46 +02:00
}
void testTypeFormats ( )
2011-02-03 18:23:07 +01:00
{
2011-08-15 13:32:46 +02:00
// These tests should result in properly displayed umlauts in the
// Locals and Expressions view. It is only support on gdb with Python.
const char * s = " aöa " ;
const wchar_t * w = L " aöa " ;
QString u ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand s.
2011-12-14 12:26:37 +01:00
// CheckType s char *.
2012-03-02 19:09:13 +01:00
// Skip Check s.*s 97 'a' char.
2011-12-07 14:55:37 +01:00
// Check u "" QString.
// CheckType w wchar_t *.
// Continue.
2011-08-15 13:32:46 +02:00
// All: Select UTF-8 in "Change Format for Type" in L&W context menu.
// Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
// Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
if ( sizeof ( wchar_t ) = = 4 )
u = QString : : fromUcs4 ( ( uint * ) w ) ;
else
u = QString : : fromUtf16 ( ( ushort * ) w ) ;
// Make sure to undo "Change Format".
dummyStatement ( s , w ) ;
2011-02-03 18:23:07 +01:00
}
2011-08-15 13:32:46 +02:00
typedef void * VoidPtr ;
typedef const void * CVoidPtr ;
struct A
{
A ( ) : test ( 7 ) { }
int test ;
void doSomething ( CVoidPtr cp ) const ;
} ;
void A : : doSomething ( CVoidPtr cp ) const
{
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType cp basic::CVoidPtr.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & cp ) ;
2011-08-15 13:32:46 +02:00
}
2011-11-18 15:03:58 +01:00
void testPointer ( )
{
Foo * f = new Foo ( ) ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand f.
2011-12-14 12:26:37 +01:00
// CheckType f Foo.
2011-12-08 17:40:27 +01:00
// Check f.a 0 int.
// Check f.b 5 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( f ) ;
}
void testPointerTypedef ( )
2011-08-15 13:32:46 +02:00
{
A a ;
VoidPtr p = & a ;
CVoidPtr cp = & a ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType a basic::A.
// CheckType cp basic::CVoidPtr.
// CheckType p basic::VoidPtr.
// Continue.
2011-08-15 13:32:46 +02:00
a . doSomething ( cp ) ;
dummyStatement ( & a , & p ) ;
}
void testStringWithNewline ( )
{
QString hallo = " hallo \n welt " ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check hallo "hallo\nwelt" QString.
// Continue.
2011-08-15 13:32:46 +02:00
// Check that string is properly displayed.
dummyStatement ( & hallo ) ;
}
void testMemoryView ( )
{
int a [ 20 ] ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType a int [20].
// Continue.
2011-08-15 13:32:46 +02:00
// Select "Open Memory View" from Locals and Expressions
// context menu for item 'a'.
// Step several times.
// Check the contents of the memory view updates.
for ( int i = 0 ; i ! = 20 ; + + i )
a [ i ] = i ;
dummyStatement ( & a ) ;
}
void testColoredMemoryView ( )
{
int i = 42 ;
double d = 23 ;
QString s = " Foo " ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check d 23 double.
// Check i 42 int.
// Check s "Foo" QString.
// Continue.
2011-08-15 13:32:46 +02:00
// Select "Open Memory View" from Locals and Expressions
// context menu for item 'd'.
// Check that the opened memory view contains coloured items
// for 'i', 'd', and 's'.
dummyStatement ( & i , & d , & s ) ;
}
2011-08-16 16:57:53 +02:00
void testReference1 ( )
{
int a = 43 ;
const int & b = a ;
typedef int & Ref ;
const int c = 44 ;
const Ref d = a ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-11-25 16:29:25 +01:00
// Check a 43 int.
2012-05-07 15:04:06 +02:00
// Check b 43 int &.
2011-12-07 14:55:37 +01:00
// Check c 44 int.
// Check d 43 basic::Ref.
2011-11-25 16:29:25 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & a , & b , & c , & d ) ;
2011-08-16 16:57:53 +02:00
}
void testReference2 ( )
{
QString a = " hello " ;
const QString & b = fooxx ( ) ;
typedef QString & Ref ;
const QString c = " world " ;
const Ref d = a ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check a "hello" QString.
2012-05-07 15:04:06 +02:00
// Check b "bababa" QString &.
2011-12-07 14:55:37 +01:00
// Check c "world" QString.
// Check d "hello" basic::Ref.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & a , & b , & c , & d ) ;
2011-08-16 16:57:53 +02:00
}
2012-02-03 14:32:47 +01:00
void testReference3 ( const QString & a )
{
const QString & b = a ;
typedef QString & Ref ;
const Ref d = const_cast < Ref > ( a ) ;
BREAK_HERE ;
2012-05-07 15:04:06 +02:00
// Check a "hello" QString &.
// Check b "hello" QString &.
2012-02-03 14:32:47 +01:00
// Check d "hello" basic::Ref.
// Continue.
dummyStatement ( & a , & b , & d ) ;
}
2012-05-11 22:09:19 +02:00
void testDynamicReference ( )
{
DerivedClass d ;
BaseClass * b1 = & d ;
BaseClass & b2 = d ;
BREAK_HERE ;
// CheckType b1 DerivedClass *.
// CheckType b2 DerivedClass &.
// Continue.
int x = b1 - > foo ( ) ;
int y = b2 . foo ( ) ;
dummyStatement ( & d , & b1 , & b2 , & x , & y ) ;
}
2011-08-22 11:17:50 +02:00
void testLongEvaluation1 ( )
2011-08-17 14:54:31 +02:00
{
QDateTime time = QDateTime : : currentDateTime ( ) ;
2011-08-22 11:17:50 +02:00
const int N = 10000 ;
QDateTime bigv [ N ] ;
2011-08-19 15:47:34 +02:00
for ( int i = 0 ; i < 10000 ; + + i ) {
2011-08-22 11:17:50 +02:00
bigv [ i ] = time ;
2011-11-23 22:14:34 +01:00
time = time . addDays ( 1 ) ;
2011-08-22 11:17:50 +02:00
}
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand bigv.
2011-12-07 14:55:37 +01:00
// Check N 10000 int.
// CheckType bigv QDateTime [10000].
2011-12-08 17:40:27 +01:00
// CheckType bigv.0 QDateTime.
// CheckType bigv.9999 QDateTime.
2011-12-07 14:55:37 +01:00
// CheckType time QDateTime.
// Continue.
2011-12-14 12:26:37 +01:00
// Note: This is expected to _not_ take up to a minute.
2011-08-22 11:17:50 +02:00
dummyStatement ( & bigv ) ;
}
void testLongEvaluation2 ( )
{
const int N = 10000 ;
int bigv [ N ] ;
2011-08-19 15:47:34 +02:00
for ( int i = 0 ; i < 10000 ; + + i )
2011-08-22 11:17:50 +02:00
bigv [ i ] = i ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand bigv.
2011-12-07 14:55:37 +01:00
// Check N 10000 int.
// CheckType bigv int [10000].
2011-12-08 17:40:27 +01:00
// Check bigv.0 0 int.
// Check bigv.9999 9999 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Note: This is expected to take up to a minute.
2011-08-17 14:54:31 +02:00
dummyStatement ( & bigv ) ;
}
2011-08-18 16:14:34 +02:00
void testFork ( )
{
QProcess proc ;
proc . start ( " /bin/ls " ) ;
proc . waitForFinished ( ) ;
QByteArray ba = proc . readAllStandardError ( ) ;
ba . append ( ' x ' ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check ba "x" QByteArray.
// Check proc "" QProcess.
// Continue.
2011-08-18 16:14:34 +02:00
// Check there is some contents in ba. Error message is expected.
dummyStatement ( & ba ) ;
}
2011-08-25 10:56:00 +02:00
void testFunctionPointerHelper ( ) { }
2011-08-18 16:14:34 +02:00
void testFunctionPointer ( )
{
typedef void ( * func_t ) ( ) ;
2011-08-25 10:56:00 +02:00
func_t f2 = testFunctionPointerHelper ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// CheckType f2 basic::func_t.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
// Check there's a valid display for f2.
dummyStatement ( & f2 ) ;
}
2011-08-24 16:23:10 +02:00
void testPassByReferenceHelper ( Foo & f )
{
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand f.
2012-05-07 15:04:06 +02:00
// CheckType f Foo &.
2011-12-08 17:40:27 +01:00
// Check f.a 12 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-24 16:23:10 +02:00
+ + f . a ;
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand f.
2012-05-07 15:04:06 +02:00
// CheckType f Foo &.
2011-12-08 17:40:27 +01:00
// Check f.a 13 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-24 16:23:10 +02:00
}
void testPassByReference ( )
{
Foo f ( 12 ) ;
testPassByReferenceHelper ( f ) ;
dummyStatement ( & f ) ;
}
2011-11-15 16:57:43 +01:00
void testBigInt ( )
{
2011-11-15 18:28:20 +01:00
qint64 a = Q_INT64_C ( 0xF020304050607080 ) ;
quint64 b = Q_UINT64_C ( 0xF020304050607080 ) ;
2011-11-15 16:57:43 +01:00
quint64 c = std : : numeric_limits < quint64 > : : max ( ) - quint64 ( 1 ) ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check a -1143861252567568256 qint64.
// Check b -1143861252567568256 quint64.
// Check c -2 quint64.
// Continue.
2011-11-15 16:57:43 +01:00
dummyStatement ( & a , & b , & c ) ;
}
2011-11-18 15:03:58 +01:00
void testHidden ( )
{
int n = 1 ;
n = 2 ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check n 2 int.
// Continue.
2011-11-18 15:03:58 +01:00
n = 3 ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check n 3 int.
2011-11-18 15:03:58 +01:00
// Continue.
{
QString n = " 2 " ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check n "2" QString.
// Check n@1 3 int.
// Continue.
2011-11-18 15:03:58 +01:00
n = " 3 " ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check n "3" QString.
// Check n@1 3 int.
2011-11-18 15:03:58 +01:00
// Continue.
{
double n = 3.5 ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check n 3.5 double.
// Check n@1 "3" QString.
// Check n@2 3 int.
// Continue.
2011-11-18 15:03:58 +01:00
+ + n ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
// Check n 4.5 double.
// Check n@1 "3" QString.
// Check n@2 3 int.
2011-11-18 15:03:58 +01:00
// Continue.
dummyStatement ( & n ) ;
}
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check n "3" QString.
// Check n@1 3 int.
2011-11-18 15:03:58 +01:00
// Continue.
n = " 3 " ;
n = " 4 " ;
2011-12-08 17:40:27 +01:00
BREAK_HERE ;
// Check n "4" QString.
// Check n@1 3 int.
// Continue.
2011-11-18 15:03:58 +01:00
dummyStatement ( & n ) ;
}
+ + n ;
dummyStatement ( & n ) ;
}
2012-02-03 14:47:59 +01:00
int testReturnInt ( )
{
return 1 ;
}
bool testReturnBool ( )
{
return true ;
}
QString testReturnQString ( )
{
return " string " ;
}
void testReturn ( )
{
bool b = testReturnBool ( ) ;
BREAK_HERE ;
// Check b true bool.
// Continue.
int i = testReturnInt ( ) ;
BREAK_HERE ;
// Check i 1 int.
// Continue.
QString s = testReturnQString ( ) ;
BREAK_HERE ;
// Check s "string" QString.
// Continue.
dummyStatement ( & i , & b , & s ) ;
}
2011-08-15 13:32:46 +02:00
void testBasic ( )
{
2011-08-18 16:14:34 +02:00
testReference1 ( ) ;
testReference2 ( ) ;
2012-02-03 14:32:47 +01:00
testReference3 ( " hello " ) ;
2012-05-11 22:09:19 +02:00
testDynamicReference ( ) ;
2012-02-03 14:47:59 +01:00
testReturn ( ) ;
2011-08-16 17:32:34 +02:00
testArray1 ( ) ;
testArray2 ( ) ;
testArray3 ( ) ;
testArray4 ( ) ;
testArray5 ( ) ;
2011-08-15 13:32:46 +02:00
testChar ( ) ;
testCharStar ( ) ;
testBitfields ( ) ;
2011-11-18 15:03:58 +01:00
testFunction ( ) ;
2011-08-15 13:32:46 +02:00
testAlphabeticSorting ( ) ;
testTypedef ( ) ;
2011-11-18 15:03:58 +01:00
testPointer ( ) ;
testPointerTypedef ( ) ;
2011-08-17 14:54:31 +02:00
testStruct ( ) ;
2011-09-19 11:38:19 +02:00
testUnion ( ) ;
2011-08-15 13:32:46 +02:00
testUninitialized ( ) ;
testTypeFormats ( ) ;
testStringWithNewline ( ) ;
testMemoryView ( ) ;
testColoredMemoryView ( ) ;
2011-08-22 11:17:50 +02:00
testLongEvaluation1 ( ) ;
testLongEvaluation2 ( ) ;
2011-08-18 16:14:34 +02:00
testFork ( ) ;
testFunctionPointer ( ) ;
2011-08-24 16:23:10 +02:00
testPassByReference ( ) ;
2011-11-15 16:57:43 +01:00
testBigInt ( ) ;
2011-11-18 15:03:58 +01:00
testHidden ( ) ;
2011-08-15 13:32:46 +02:00
}
} // namespace basic
2011-02-03 18:23:07 +01:00
2011-08-18 16:14:34 +02:00
namespace io {
2010-05-27 18:23:51 +02:00
2011-08-18 16:14:34 +02:00
void testWCout ( )
{
using namespace std ;
wstring x = L " xxxxx " ;
wstring : : iterator i = x . begin ( ) ;
// Break here.
// Step.
while ( i ! = x . end ( ) ) {
wcout < < * i ;
i + + ;
}
wcout . flush ( ) ;
string y = " yyyyy " ;
string : : iterator j = y . begin ( ) ;
while ( j ! = y . end ( ) ) {
cout < < * j ;
j + + ;
}
cout . flush ( ) ;
}
2010-05-27 18:23:51 +02:00
2011-08-18 16:14:34 +02:00
void testWCout0 ( )
{
// Mixing cout and wcout does not work with gcc.
// See http://gcc.gnu.org/ml/gcc-bugs/2006-05/msg01193.html
// which also says "you can obtain something close to your
// expectations by calling std::ios::sync_with_stdio(false);
// at the beginning of your program."
using namespace std ;
//std::ios::sync_with_stdio(false);
// Break here.
// Step.
wcout < < L " WWWWWW " < < endl ;
wcerr < < L " YYYYYY " < < endl ;
cout < < " CCCCCC " < < endl ;
cerr < < " EEEEEE " < < endl ;
wcout < < L " WWWWWW " < < endl ;
wcerr < < L " YYYYYY " < < endl ;
cout < < " CCCCCC " < < endl ;
cerr < < " EEEEEE " < < endl ;
wcout < < L " WWWWWW " < < endl ;
wcerr < < L " YYYYYY " < < endl ;
cout < < " CCCCCC " < < 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 ;
2012-03-12 13:40:32 +01:00
std : : cout < < " Values are " < < i < < " and " < < j < < " . " < < std : : endl ;
2010-10-26 10:40:31 +02:00
}
2011-08-18 16:14:34 +02:00
void testIO ( )
{
testOutput ( ) ;
//testInput();
//testWCout();
//testWCout0();
}
} // namespace io
namespace sse {
void testSSE ( )
{
# ifdef __SSE__
float a [ 4 ] ;
float b [ 4 ] ;
int i ;
for ( i = 0 ; i < 4 ; i + + ) {
a [ i ] = 2 * i ;
b [ i ] = 2 * i ;
}
__m128 sseA , sseB ;
sseA = _mm_loadu_ps ( a ) ;
sseB = _mm_loadu_ps ( b ) ;
2011-12-14 12:26:37 +01:00
BREAK_HERE ;
// Expand a b.
2012-02-01 08:51:48 +01:00
// CheckType sseA __m128.
// CheckType sseB __m128.
2011-12-14 12:26:37 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & i , & sseA , & sseB ) ;
# endif
}
} // namespace sse
2010-10-26 10:40:31 +02:00
2011-11-18 15:03:58 +01:00
namespace qscript {
void testQScript ( )
{
# if USE_SCRIPTLIB
BREAK_UNINITIALIZED_HERE ;
QScriptEngine engine ;
QDateTime date = QDateTime : : currentDateTime ( ) ;
QScriptValue s ;
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check engine "" QScriptEngine.
// Check s (invalid) QScriptValue.
// Check x1 <not accessible> QString.
// Continue.
2011-11-18 15:03:58 +01:00
s = QScriptValue ( 33 ) ;
int x = s . toInt32 ( ) ;
s = QScriptValue ( QString ( " 34 " ) ) ;
QString x1 = s . toString ( ) ;
s = engine . newVariant ( QVariant ( 43 ) ) ;
QVariant v = s . toVariant ( ) ;
s = engine . newVariant ( QVariant ( 43.0 ) ) ;
s = engine . newVariant ( QVariant ( QString ( " sss " ) ) ) ;
s = engine . newDate ( date ) ;
date = s . toDateTime ( ) ;
s . setProperty ( " a " , QScriptValue ( ) ) ;
QScriptValue d = s . data ( ) ;
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Check d (invalid) QScriptValue.
2011-12-08 17:40:27 +01:00
// Check v 43 QVariant (int).
2012-02-01 08:51:48 +01:00
// Check x 33 int.
2011-12-08 17:40:27 +01:00
// Check x1 "34" QString.
2011-12-07 14:55:37 +01:00
// Continue.
2012-02-08 14:08:16 +01:00
dummyStatement ( & x1 , & v , & s , & d , & x ) ;
2011-11-18 15:03:58 +01:00
# else
dummyStatement ( ) ;
# endif
}
} // namespace script
2011-02-10 15:17:55 +01:00
2011-03-04 17:22:58 +01:00
2012-04-25 12:01:20 +02:00
namespace webkit {
void testWTFString ( )
{
# if USE_WEBKITLIB
BREAK_UNINITIALIZED_HERE ;
QWebPage p ;
BREAK_HERE ;
// CheckType p QWebPage.
// Continue.
dummyStatement ( & p ) ;
# else
dummyStatement ( ) ;
# endif
}
void testWebKit ( )
{
testWTFString ( ) ;
}
} // namespace webkit
2011-08-18 16:14:34 +02:00
namespace boost {
2011-03-04 16:49:25 +01:00
2011-08-18 16:14:34 +02:00
# if USE_BOOST
void testBoostOptional1 ( )
{
boost : : optional < int > i ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Check i <uninitialized> boost::optional<int>.
// Continue.
2011-08-18 16:14:34 +02:00
i = 1 ;
2011-12-15 12:25:27 +01:00
BREAK_HERE ;
// Check i 1 boost::optional<int>.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & i ) ;
}
void testBoostOptional2 ( )
{
boost : : optional < QStringList > sl ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Check sl <uninitialized> boost::optional<QStringList>.
// Continue.
2011-08-18 16:14:34 +02:00
sl = ( QStringList ( ) < < " xxx " < < " yyy " ) ;
sl . get ( ) . append ( " zzz " ) ;
2011-12-15 12:25:27 +01:00
BREAK_HERE ;
// Check sl <3 items> boost::optional<QStringList>.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & sl ) ;
}
void testBoostSharedPtr ( )
{
boost : : shared_ptr < int > s ;
boost : : shared_ptr < int > i ( new int ( 43 ) ) ;
boost : : shared_ptr < int > j = i ;
boost : : shared_ptr < QStringList > sl ( new QStringList ( QStringList ( ) < < " HUH! " ) ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Check s boost::shared_ptr<int>.
// Check i 43 boost::shared_ptr<int>.
// Check j 43 boost::shared_ptr<int>.
// Check sl <1 item> boost::shared_ptr<QStringList>.
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & s , & j , & sl ) ;
}
2011-12-12 17:50:50 +01:00
void testBoostGregorianDate ( )
{
using namespace boost ;
using namespace gregorian ;
date d ( 2005 , Nov , 29 ) ;
BREAK_HERE ;
// Check d Tue Nov 29 2005 boost::gregorian::date.
// Continue
d + = months ( 1 ) ;
BREAK_HERE ;
// Check d Thu Dec 29 2005 boost::gregorian::date.
// Continue
d + = months ( 1 ) ;
BREAK_HERE ;
// Check d Sun Jan 29 2006 boost::gregorian::date.
// Continue
// snap-to-end-of-month behavior kicks in:
d + = months ( 1 ) ;
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Check d Tue Feb 28 2006 boost::gregorian::date.
2011-12-12 17:50:50 +01:00
// Continue.
// Also end of the month (expected in boost)
d + = months ( 1 ) ;
BREAK_HERE ;
// Check d Fri Mar 31 2006 boost::gregorian::date.
// Continue.
// Not where we started (expected in boost)
d - = months ( 4 ) ;
BREAK_HERE ;
// Check d Tue Nov 30 2005 boost::gregorian::date.
// Continue.
dummyStatement ( & d ) ;
}
2012-01-20 14:35:34 +01:00
void testBoostPosixTimeTimeDuration ( )
{
using namespace boost ;
using namespace posix_time ;
time_duration d1 ( 1 , 0 , 0 ) ;
BREAK_HERE ;
2012-01-22 20:54:13 +02:00
// Check d1 01:00:00 boost::posix_time::time_duration.
2012-01-20 14:35:34 +01:00
// Continue.
time_duration d2 ( 0 , 1 , 0 ) ;
BREAK_HERE ;
2012-01-22 20:54:13 +02:00
// Check d2 00:01:00 boost::posix_time::time_duration.
2012-01-20 14:35:34 +01:00
// Continue.
time_duration d3 ( 0 , 0 , 1 ) ;
BREAK_HERE ;
2012-01-22 20:54:13 +02:00
// Check d3 00:00:01 boost::posix_time::time_duration.
2012-01-20 14:35:34 +01:00
// Continue.
dummyStatement ( & d1 , & d2 , & d3 ) ;
}
2012-04-21 00:49:59 +02:00
void testBoostBimap ( )
{
typedef boost : : bimap < int , int > B ;
B b ;
BREAK_HERE ;
// Check b <0 items> boost::B.
// Continue.
b . left . insert ( B : : left_value_type ( 1 , 2 ) ) ;
BREAK_HERE ;
// Check b <1 items> boost::B.
// Continue.
B : : left_const_iterator it = b . left . begin ( ) ;
int l = it - > first ;
int r = it - > second ;
// Continue.
dummyStatement ( & b , & l , & r ) ;
}
2012-01-20 14:35:34 +01:00
void testBoostPosixTimePtime ( )
{
using namespace boost ;
using namespace gregorian ;
using namespace posix_time ;
ptime p1 ( date ( 2002 , 1 , 10 ) , time_duration ( 1 , 0 , 0 ) ) ;
BREAK_HERE ;
// Check p1 Thu Jan 10 01:00:00 2002 boost::posix_time::ptime.
// Continue.
ptime p2 ( date ( 2002 , 1 , 10 ) , time_duration ( 0 , 0 , 0 ) ) ;
BREAK_HERE ;
2012-01-22 20:54:13 +02:00
// Check p2 Thu Jan 10 00:00:00 2002 boost::posix_time::ptime.
2012-01-20 14:35:34 +01:00
// Continue.
ptime p3 ( date ( 1970 , 1 , 1 ) , time_duration ( 0 , 0 , 0 ) ) ;
BREAK_HERE ;
2012-01-22 20:54:13 +02:00
// Check p3 Thu Jan 1 00:00:00 1970 boost::posix_time::ptime.
2012-01-20 14:35:34 +01:00
// Continue.
dummyStatement ( & p1 , & p2 , & p3 ) ;
}
2011-08-18 16:14:34 +02:00
void testBoost ( )
{
testBoostOptional1 ( ) ;
testBoostOptional2 ( ) ;
testBoostSharedPtr ( ) ;
2012-01-20 14:35:34 +01:00
testBoostPosixTimeTimeDuration ( ) ;
testBoostPosixTimePtime ( ) ;
2011-12-12 17:50:50 +01:00
testBoostGregorianDate ( ) ;
2012-04-21 00:49:59 +02:00
testBoostBimap ( ) ;
2011-08-18 16:14:34 +02:00
}
# else
void testBoost ( ) { }
# endif
} // namespace boost
2011-03-04 19:26:11 +01:00
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
namespace mpi {
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
struct structdata
{
int ints [ 8 ] ;
char chars [ 32 ] ;
double doubles [ 5 ] ;
} ;
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
enum type_t { MPI_LB , MPI_INT , MPI_CHAR , MPI_DOUBLE , MPI_UB } ;
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
struct tree_entry
{
tree_entry ( ) { }
tree_entry ( int l , int o , type_t t )
: blocklength ( l ) , offset ( o ) , type ( t )
{ }
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
int blocklength ;
int offset ;
type_t type ;
} ;
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
struct tree
{
enum kind_t { STRUCT } ;
void * base ;
kind_t kind ;
int count ;
tree_entry entries [ 20 ] ;
2011-03-15 11:23:06 +01:00
} ;
2011-08-17 14:54:31 +02:00
void testMPI ( )
{
structdata buffer = {
//{MPI_LB},
{ 0 , 1024 , 2048 , 3072 , 4096 , 5120 , 6144 } ,
{ " message to 1 of 2: hello " } ,
{ 0 , 3.14 , 6.2831853071795862 , 9.4247779607693793 , 13 } ,
//{MPI_UB}
} ;
2011-03-15 11:23:06 +01:00
2011-08-17 14:54:31 +02:00
tree x ;
x . base = & buffer ;
x . kind = tree : : STRUCT ;
x . count = 5 ;
x . entries [ 0 ] = tree_entry ( 1 , - 4 , MPI_LB ) ;
x . entries [ 1 ] = tree_entry ( 5 , 0 , MPI_INT ) ;
x . entries [ 2 ] = tree_entry ( 7 , 47 , MPI_CHAR ) ;
x . entries [ 3 ] = tree_entry ( 2 , 76 , MPI_DOUBLE ) ;
x . entries [ 4 ] = tree_entry ( 1 , 100 , MPI_UB ) ;
int i = x . count ;
i = buffer . ints [ 0 ] ;
i = buffer . ints [ 1 ] ;
i = buffer . ints [ 2 ] ;
i = buffer . ints [ 3 ] ;
/*
gdb ) print datatype
> $ 3 = {
> kind = STRUCT ,
> count = 5 ,
> entries = { {
> blocklength = 1 ,
> offset = - 4 ,
> type = MPI_LB
> } , {
> blocklength = 5 ,
> offset = 0 ,
> type = MPI_INT
> } , {
> blocklength = 7 ,
> offset = 47 ,
> type = MPI_CHAR
> } , {
> blocklength = 2 ,
> offset = 76 ,
> type = MPI_DOUBLE
> } , {
> blocklength = 1 ,
> offset = 100 ,
> type = MPI_UB
> } }
> }
*/
2012-02-23 17:53:17 +01:00
dummyStatement ( & i ) ;
2011-08-17 14:54:31 +02:00
}
} // namespace mpi
2011-03-15 11:23:06 +01:00
2011-05-12 20:03:58 +02:00
2011-07-07 12:02:40 +02:00
//namespace kr {
2011-05-12 20:03:58 +02:00
2011-07-07 12:02:40 +02:00
// FIXME: put in namespace kr, adjust qdump__KRBase in dumpers/qttypes.py
struct KRBase
{
enum Type { TYPE_A , TYPE_B } type ;
KRBase ( Type _type ) : type ( _type ) { }
} ;
2011-05-12 20:03:58 +02:00
2011-07-07 12:02:40 +02:00
struct KRA : KRBase { int x ; int y ; KRA ( ) : KRBase ( TYPE_A ) , x ( 1 ) , y ( 32 ) { } } ;
struct KRB : KRBase { KRB ( ) : KRBase ( TYPE_B ) { } } ;
2011-05-09 08:35:58 +02:00
2011-07-07 12:02:40 +02:00
//} // namespace kr
2011-05-12 20:03:58 +02:00
2011-08-24 16:23:10 +02:00
2011-07-07 12:02:40 +02:00
namespace kr {
// Only with python.
// This tests qdump__KRBase in dumpers/qttypes.py which uses
// a static typeflag to dispatch to subclasses.
void testKR ( )
{
KRBase * ptr1 = new KRA ;
KRBase * ptr2 = new KRB ;
ptr2 = new KRB ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand ptr1 ptr2.
2011-12-07 14:55:37 +01:00
// CheckType ptr1 KRBase.
2011-12-08 17:40:27 +01:00
// Check ptr1.type KRBase::TYPE_A (0) KRBase::Type.
2011-12-07 14:55:37 +01:00
// CheckType ptr2 KRBase.
2011-12-08 17:40:27 +01:00
// Check ptr2.type KRBase::TYPE_B (1) KRBase::Type.
2011-12-07 14:55:37 +01:00
// Continue.
2011-07-07 12:02:40 +02:00
dummyStatement ( & ptr1 , & ptr2 ) ;
}
} // namspace kr
2011-05-12 20:03:58 +02:00
2011-07-04 16:59:52 +02:00
namespace eigen {
2011-05-16 20:04:17 +02:00
2011-07-04 16:59:52 +02:00
void testEigen ( )
{
# if USE_EIGEN
using namespace Eigen ;
2011-05-17 11:30:44 +02:00
2011-07-04 16:59:52 +02:00
Vector3d test = Vector3d : : Zero ( ) ;
2011-05-16 20:04:17 +02:00
2011-07-04 16:59:52 +02:00
Matrix3d myMatrix = Matrix3d : : Constant ( 5 ) ;
MatrixXd myDynamicMatrix ( 30 , 10 ) ;
2011-05-16 20:04:17 +02:00
2011-07-04 16:59:52 +02:00
myDynamicMatrix ( 0 , 0 ) = 0 ;
myDynamicMatrix ( 1 , 0 ) = 1 ;
myDynamicMatrix ( 2 , 0 ) = 2 ;
2011-05-16 20:04:17 +02:00
2011-07-04 16:59:52 +02:00
Matrix < double , 12 , 15 , ColMajor > colMajorMatrix ;
Matrix < double , 12 , 15 , RowMajor > rowMajorMatrix ;
2011-05-16 20:04:17 +02:00
2011-07-04 16:59:52 +02:00
int k = 0 ;
for ( int i = 0 ; i ! = 12 ; + + i ) {
for ( int j = 0 ; j ! = 15 ; + + j ) {
colMajorMatrix ( i , j ) = k ;
rowMajorMatrix ( i , j ) = k ;
+ + k ;
}
}
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-15 12:25:27 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & colMajorMatrix , & rowMajorMatrix , & test ,
& myMatrix , & myDynamicMatrix ) ;
2011-07-04 16:59:52 +02:00
# endif
}
2011-05-16 20:04:17 +02:00
}
2011-07-04 16:59:52 +02:00
2011-06-22 10:42:40 +02:00
namespace bug842 {
2011-05-16 20:04:17 +02:00
2011-06-22 10:42:40 +02:00
void test842 ( )
{
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-842
2011-06-22 10:42:40 +02:00
qWarning ( " Test " ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-15 12:25:27 +01:00
// Manual: Check that Application Output pane contains string "Test".
2011-08-15 13:32:46 +02:00
dummyStatement ( ) ;
2011-06-22 10:42:40 +02:00
}
} // namespace bug842
namespace bug3611 {
void test3611 ( )
{
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-3611
2011-06-22 10:42:40 +02:00
typedef unsigned char byte ;
byte f = ' 2 ' ;
int * x = ( int * ) & f ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Check f 50 bug3611::byte.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-15 13:32:46 +02:00
// Step.
2011-06-22 10:42:40 +02:00
f + = 1 ;
f + = 1 ;
f + = 1 ;
2011-12-08 17:40:27 +01:00
BREAK_HERE ;
// Check f 53 bug3611::byte.
// Continue.
2011-08-04 17:14:22 +02:00
dummyStatement ( & f , & x ) ;
2011-06-22 10:42:40 +02:00
}
} // namespace bug3611
2011-06-06 14:08:13 +02:00
2011-06-22 10:42:40 +02:00
namespace bug4019 {
2011-05-23 10:56:40 +02:00
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-4019
2011-07-07 12:02:40 +02:00
2011-06-22 10:42:40 +02:00
class A4019
{
public :
A4019 ( ) : test ( 7 ) { }
int test ;
void doSomething ( ) const ;
} ;
2011-05-23 10:56:40 +02:00
2011-06-22 10:42:40 +02:00
void A4019 : : doSomething ( ) const
{
std : : cout < < test < < std : : endl ;
}
2011-05-23 10:56:40 +02:00
2011-06-22 10:42:40 +02:00
void test4019 ( )
{
A4019 a ;
a . doSomething ( ) ;
}
2011-05-23 10:56:40 +02:00
2011-06-22 10:42:40 +02:00
} // namespave bug4019
2011-05-27 15:19:46 +02:00
2011-12-14 08:27:42 +01:00
namespace bug4997 {
2011-06-22 13:16:29 +02:00
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-4997
2011-06-22 10:42:40 +02:00
2011-12-14 08:27:42 +01:00
void test4997 ( )
2011-06-22 10:42:40 +02:00
{
using namespace std ;
2011-12-14 08:27:42 +01:00
// cin.get(); // if commented out, the debugger doesn't stop at the breakpoint
// in the next line on Windows when "Run in Terminal" is used.^
dummyStatement ( ) ;
2011-06-22 10:42:40 +02:00
}
2011-05-27 15:19:46 +02:00
}
2011-12-14 08:27:42 +01:00
2011-06-22 14:57:20 +02:00
namespace bug4904 {
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-4904
2011-06-22 14:57:20 +02:00
struct CustomStruct {
int id ;
double dvalue ;
} ;
2011-08-17 14:54:31 +02:00
void test4904 ( )
2011-06-22 14:57:20 +02:00
{
QMap < int , CustomStruct > map ;
CustomStruct cs1 ;
cs1 . id = 1 ;
cs1 . dvalue = 3.14 ;
CustomStruct cs2 = cs1 ;
cs2 . id = - 1 ;
map . insert ( cs1 . id , cs1 ) ;
map . insert ( cs2 . id , cs2 ) ;
2011-06-22 17:51:59 +02:00
QMap < int , CustomStruct > : : iterator it = map . begin ( ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand map map.0 map.0.value.
2011-12-07 14:55:37 +01:00
// Check map <2 items> QMap<int, bug4904::CustomStruct>.
2011-12-08 17:40:27 +01:00
// Check map.0 QMapNode<int, bug4904::CustomStruct>.
// Check map.0.key -1 int.
// CheckType map.0.value bug4904::CustomStruct.
// Check map.0.value.dvalue 3.1400000000000001 double.
// Check map.0.value.id -1 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-17 14:54:31 +02:00
dummyStatement ( & it ) ;
2011-06-22 14:57:20 +02:00
}
} // namespace bug4904
2011-06-15 16:23:28 +02:00
2011-06-22 17:01:59 +02:00
namespace bug5046 {
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-5046
2011-06-22 17:01:59 +02:00
struct Foo { int a , b , c ; } ;
2011-08-17 14:54:31 +02:00
void test5046 ( )
2011-06-22 17:01:59 +02:00
{
Foo f ;
f . a = 1 ;
2011-06-22 17:51:59 +02:00
f . b = 2 ;
f . c = 3 ;
2011-08-17 14:54:31 +02:00
f . a = 4 ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-08 17:40:27 +01:00
// Expand f.
2011-12-14 12:26:37 +01:00
// CheckType f bug5046::Foo.
2011-12-08 17:40:27 +01:00
// Check f.a 4 int.
// Check f.b 2 int.
// Check f.c 3 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-12-14 12:26:37 +01:00
// Manual: pop up main editor tooltip over 'f'
// Manual: verify that the entry is expandable, and expansion works
2011-08-17 14:54:31 +02:00
dummyStatement ( & f ) ;
2011-06-22 17:01:59 +02:00
}
} // namespace bug5046
2011-06-22 10:42:40 +02:00
namespace bug5106 {
2011-06-15 16:23:28 +02:00
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-5106
2011-06-15 16:23:28 +02:00
2011-06-22 10:42:40 +02:00
class A5106
{
public :
A5106 ( int a , int b ) : m_a ( a ) , m_b ( b ) { }
virtual int test ( ) { return 5 ; }
private :
int m_a , m_b ;
} ;
2011-06-15 16:23:28 +02:00
2011-06-22 10:42:40 +02:00
class B5106 : public A5106
{
public :
B5106 ( int c , int a , int b ) : A5106 ( a , b ) , m_c ( c ) { }
2011-08-24 13:51:49 +02:00
virtual int test ( ) { return 4 ; BREAK_HERE ; }
2011-06-22 10:42:40 +02:00
private :
int m_c ;
} ;
void test5106 ( )
{
B5106 b ( 1 , 2 , 3 ) ;
b . test ( ) ;
2011-06-22 13:16:29 +02:00
b . A5106 : : test ( ) ;
2011-06-22 10:42:40 +02:00
}
} // namespace bug5106
namespace bug5184 {
2012-01-26 22:11:10 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-5184
2011-06-22 10:42:40 +02:00
2011-06-22 13:16:29 +02:00
// Note: The report there shows type field "QUrl &" instead of QUrl.
// It's unclear how this can happen. It should never have been like
// that with a stock 7.2 and any version of Creator.
2011-08-24 16:23:10 +02:00
void helper ( const QUrl & url )
2011-06-22 10:42:40 +02:00
{
QNetworkRequest request ( url ) ;
QList < QByteArray > raw = request . rawHeaderList ( ) ;
2011-08-24 16:23:10 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check raw <0 items> QList<QByteArray>.
// CheckType request QNetworkRequest.
2012-05-07 15:04:06 +02:00
// Check url "http://127.0.0.1/" QUrl &.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-24 16:23:10 +02:00
dummyStatement ( & request , & raw ) ;
2011-06-22 10:42:40 +02:00
}
2011-06-22 13:16:29 +02:00
void test5184 ( )
{
QUrl url ( QString ( " http://127.0.0.1/ " ) ) ;
helper ( url ) ;
}
2011-06-22 10:42:40 +02:00
} // namespace bug5184
2011-06-15 16:23:28 +02:00
2011-05-23 10:56:40 +02:00
2011-06-20 12:46:32 +02:00
namespace qc42170 {
2011-06-22 10:42:40 +02:00
// http://www.qtcentre.org/threads/42170-How-to-watch-data-of-actual-type-in-debugger
2011-06-20 12:46:32 +02:00
struct Object
{
Object ( int id_ ) : id ( id_ ) { }
virtual ~ Object ( ) { }
int id ;
} ;
2011-06-28 16:31:31 +02:00
struct Point : Object
2011-06-20 12:46:32 +02:00
{
2011-08-17 14:54:31 +02:00
Point ( double x_ , double y_ ) : Object ( 1 ) , x ( x_ ) , y ( y_ ) { }
2011-06-20 12:46:32 +02:00
double x , y ;
} ;
struct Circle : Point
{
2011-08-17 14:54:31 +02:00
Circle ( double x_ , double y_ , double r_ ) : Point ( x_ , y_ ) , r ( r_ ) { id = 2 ; }
2011-06-20 12:46:32 +02:00
double r ;
} ;
2011-06-28 16:31:31 +02:00
void helper ( Object * obj )
2011-06-20 12:46:32 +02:00
{
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// CheckType obj qc42170::Circle.
// Continue.
2011-06-28 16:31:31 +02:00
// Check that obj is shown as a 'Circle' object.
dummyStatement ( obj ) ;
2011-06-20 12:46:32 +02:00
}
2011-06-22 10:42:40 +02:00
void test42170 ( )
2011-06-20 12:46:32 +02:00
{
2011-08-17 14:54:31 +02:00
Circle * circle = new Circle ( 1.5 , - 2.5 , 3.0 ) ;
2011-06-20 15:23:28 +02:00
Object * obj = circle ;
helper ( circle ) ;
helper ( obj ) ;
2011-06-20 12:46:32 +02:00
}
} // namespace qc42170
2011-08-16 12:25:54 +02:00
namespace bug5799 {
2012-01-26 19:39:54 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-5799
2011-08-16 12:25:54 +02:00
typedef struct { int m1 ; int m2 ; } S1 ;
struct S2 : S1 { } ;
typedef struct S3 { int m1 ; int m2 ; } S3 ;
struct S4 : S3 { } ;
void test5799 ( )
{
S2 s2 ;
s2 . m1 = 5 ;
S4 s4 ;
s4 . m1 = 5 ;
2011-08-16 16:57:53 +02:00
S1 a1 [ 10 ] ;
typedef S1 Array [ 10 ] ;
Array a2 ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2012-03-20 18:55:12 +01:00
// Expand s2 s2.@1 s4 s4.@1
2011-12-07 14:55:37 +01:00
// CheckType a1 bug5799::S1 [10].
// CheckType a2 bug5799::Array.
// CheckType s2 bug5799::S2.
2012-03-20 18:55:12 +01:00
// CheckType s2.@1 bug5799::S1.
// Check s2.@1.m1 5 int.
// CheckType s2.@1.m2 int.
2011-12-07 14:55:37 +01:00
// CheckType s4 bug5799::S4.
2012-03-20 18:55:12 +01:00
// CheckType s4.@1 bug5799::S3.
// Check s4.@1.m1 5 int.
// CheckType s4.@1.m2 int.
2011-12-07 14:55:37 +01:00
// Continue.
2011-08-18 16:14:34 +02:00
dummyStatement ( & s2 , & s4 , & a1 , & a2 ) ;
2011-08-16 12:25:54 +02:00
}
} // namespace bug5799
2012-01-16 18:49:01 +01:00
namespace bug6813 {
2012-01-26 19:39:54 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-6813
2012-01-16 18:49:01 +01:00
void test6813 ( )
{
int foo = 0 ;
int * bar = & foo ;
//std::cout << "&foo: " << &foo << "; bar: " << bar << "; &bar: " << &bar;
dummyStatement ( & foo , & bar ) ;
}
} // namespace bug6813
2011-06-20 17:53:59 +02:00
namespace qc41700 {
2011-06-22 10:42:40 +02:00
// http://www.qtcentre.org/threads/41700-How-to-watch-STL-containers-iterators-during-debugging
void test41700 ( )
2011-06-20 17:53:59 +02:00
{
using namespace std ;
typedef map < string , list < string > > map_t ;
map_t m ;
m [ " one " ] . push_back ( " a " ) ;
m [ " one " ] . push_back ( " b " ) ;
m [ " one " ] . push_back ( " c " ) ;
m [ " two " ] . push_back ( " 1 " ) ;
m [ " two " ] . push_back ( " 2 " ) ;
m [ " two " ] . push_back ( " 3 " ) ;
2011-06-28 16:31:31 +02:00
map_t : : const_iterator it = m . begin ( ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-14 12:26:37 +01:00
// Expand m m.0 m.0.second m.1 m.1.second.
2011-12-07 14:55:37 +01:00
// Check m <2 items> qc41700::map_t.
2011-12-08 17:40:27 +01:00
// Check m.0 std::pair<std::string const, std::list<std::string>>.
// Check m.0.first "one" std::string.
// Check m.0.second <3 items> std::list<std::string>.
// Check m.0.second.0 "a" std::string.
// Check m.0.second.1 "b" std::string.
// Check m.0.second.2 "c" std::string.
// Check m.1 std::pair<std::string const, std::list<std::string>>.
// Check m.1.first "two" std::string.
// Check m.1.second <3 items> std::list<std::string>.
// Check m.1.second.0 "1" std::string.
// Check m.1.second.1 "2" std::string.
// Check m.1.second.2 "3" std::string.
2011-12-07 14:55:37 +01:00
// Continue.
2011-06-28 16:31:31 +02:00
dummyStatement ( & it ) ;
2011-06-20 17:53:59 +02:00
}
} // namespace qc41700
2011-08-24 16:23:10 +02:00
2011-06-29 11:48:12 +02:00
namespace cp42895 {
// http://codepaster.europe.nokia.com/?id=42895
void g ( int c , int d )
{
qDebug ( ) < < c < < d ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-12-07 14:55:37 +01:00
// Check c 3 int.
// Check d 4 int.
// Continue.
2011-06-29 11:48:12 +02:00
// Check there are frames for g and f in the stack view.
dummyStatement ( & c , & d ) ;
}
void f ( int a , int b )
{
g ( a , b ) ;
}
void test42895 ( )
{
f ( 3 , 4 ) ;
}
} // namespace cp
2011-11-03 19:19:10 +01:00
namespace bug6465 {
2012-01-26 19:39:54 +01:00
// https://bugreports.qt-project.org/browse/QTCREATORBUG-6465
2011-11-03 19:19:10 +01:00
void test6465 ( )
{
typedef char Foo [ 20 ] ;
Foo foo = " foo " ;
char bar [ 20 ] = " baz " ;
// BREAK HERE
dummyStatement ( & foo , & bar ) ;
}
} // namespace bug6465
2012-01-24 09:56:13 +01:00
namespace bug6857 {
class MyFile : public QFile
{
public :
MyFile ( const QString & fileName )
: QFile ( fileName ) { }
} ;
void test6857 ( )
{
MyFile file ( " /tmp/tt " ) ;
2012-03-02 19:09:13 +01:00
file . setObjectName ( " A file " ) ;
2012-01-24 09:56:13 +01:00
BREAK_HERE ;
// Expand file.
2012-03-20 18:55:12 +01:00
// Check file "A file" bug6857::MyFile.
// Check file.@1 "/tmp/tt" QFile.
2012-01-24 09:56:13 +01:00
// Continue.
dummyStatement ( & file ) ;
}
}
2012-01-24 13:29:21 +01:00
namespace bug6858 {
class MyFile : public QFile
{
public :
MyFile ( const QString & fileName )
: QFile ( fileName ) { }
} ;
void test6858 ( )
{
MyFile file ( " /tmp/tt " ) ;
2012-03-02 19:09:13 +01:00
file . setObjectName ( " Another file " ) ;
2012-01-24 13:29:21 +01:00
QFile * pfile = & file ;
BREAK_HERE ;
2012-03-02 19:09:13 +01:00
// Check pfile "Another file" bug6858::MyFile.
2012-03-20 18:55:12 +01:00
// Check pfile.@1 "/tmp/tt" QFile.
2012-01-24 13:29:21 +01:00
// Continue.
dummyStatement ( & file , pfile ) ;
}
}
2012-03-14 14:39:01 +01:00
namespace bug6863 {
class MyObject : public QObject
{
Q_OBJECT
public :
MyObject ( ) { }
} ;
void setProp ( QObject * obj )
{
obj - > setProperty ( " foo " , " bar " ) ;
BREAK_HERE ;
// Expand obj.
// Check obj.[QObject].properties <2 items>.
// Continue.
dummyStatement ( & obj ) ;
}
void test6863 ( )
{
2012-03-14 19:28:54 +01:00
QFile file ( " /tmp/tt " ) ;
setProp ( & file ) ;
2012-03-14 14:39:01 +01:00
MyObject obj ;
setProp ( & obj ) ;
}
}
2012-02-22 17:53:00 +01:00
namespace bug6933 {
class Base
{
public :
2012-04-02 18:57:36 +03:00
Base ( ) : a ( 21 ) { }
2012-02-22 17:53:00 +01:00
virtual ~ Base ( ) { }
int a ;
} ;
class Derived : public Base
{
2012-04-02 18:57:36 +03:00
public :
Derived ( ) : b ( 42 ) { }
int b ;
2012-02-22 17:53:00 +01:00
} ;
void test6933 ( )
{
Derived d ;
Base * b = & d ;
BREAK_HERE ;
// Expand b b.bug6933::Base
2012-03-02 19:09:13 +01:00
// Check b.[bug6933::Base].[vptr]
2012-04-02 18:57:36 +03:00
// Check b.b 42 int.
2012-03-15 16:34:07 +01:00
// Continue.
2012-02-22 17:53:00 +01:00
dummyStatement ( & d , b ) ;
}
}
2012-01-24 13:29:21 +01:00
2011-08-04 17:14:22 +02:00
namespace varargs {
void test ( const char * format , . . . )
{
va_list arg ;
va_start ( arg , format ) ;
int i = va_arg ( arg , int ) ;
double f = va_arg ( arg , double ) ;
va_end ( arg ) ;
dummyStatement ( & i , & f ) ;
}
void testVaList ( )
{
test ( " abc " , 1 , 2.0 ) ;
}
} // namespace varargs
2011-08-17 14:54:31 +02:00
2011-11-28 18:57:25 +01:00
namespace gdb13393 {
struct Base {
Base ( ) : a ( 1 ) { }
virtual ~ Base ( ) { } // Enforce type to have RTTI
int a ;
} ;
struct Derived : public Base {
Derived ( ) : b ( 2 ) { }
int b ;
} ;
struct S
{
Base * ptr ;
const Base * ptrConst ;
Base & ref ;
const Base & refConst ;
S ( Derived & d )
: ptr ( & d ) , ptrConst ( & d ) , ref ( d ) , refConst ( d )
{ }
} ;
void test13393 ( )
{
Derived d ;
S s ( d ) ;
Base * ptr = & d ;
const Base * ptrConst = & d ;
2011-11-29 12:20:06 +01:00
Base & ref = d ;
2011-11-28 18:57:25 +01:00
const Base & refConst = d ;
Base * * ptrToPtr = & ptr ;
# if USE_BOOST
boost : : shared_ptr < Base > sharedPtr ( new Derived ( ) ) ;
# else
int sharedPtr = 1 ;
# endif
2011-12-07 14:55:37 +01:00
BREAK_HERE ;
2012-03-20 18:55:12 +01:00
// Expand d ptr ptr.@1 ptrConst ptrToPtr ref refConst s.
2011-12-07 14:55:37 +01:00
// CheckType d gdb13393::Derived.
2012-03-20 18:55:12 +01:00
// CheckType d.@1 gdb13393::Base.
2011-12-08 17:40:27 +01:00
// Check d.b 2 int.
2011-12-07 14:55:37 +01:00
// CheckType ptr gdb13393::Derived.
2012-03-20 18:55:12 +01:00
// CheckType ptr.@1 gdb13393::Base.
// Check ptr.@1.a 1 int.
2011-12-07 14:55:37 +01:00
// CheckType ptrConst gdb13393::Derived.
2012-03-20 18:55:12 +01:00
// CheckType ptrConst.@1 gdb13393::Base.
2012-03-02 19:09:13 +01:00
// Check ptrConst.b 2 int.
2011-12-07 14:55:37 +01:00
// CheckType ptrToPtr gdb13393::Derived.
2011-12-08 17:40:27 +01:00
// CheckType ptrToPtr.[vptr] .
2012-04-13 13:09:52 +02:00
// Check ptrToPtr.@1.a 1 int.
2011-12-07 14:55:37 +01:00
// CheckType ref gdb13393::Derived.
2011-12-08 17:40:27 +01:00
// CheckType ref.[vptr] .
2012-04-13 13:09:52 +02:00
// Check ref.@1.a 1 int.
2011-12-07 14:55:37 +01:00
// CheckType refConst gdb13393::Derived.
2011-12-08 17:40:27 +01:00
// CheckType refConst.[vptr] .
2012-04-13 13:09:52 +02:00
// Check refConst.@1.a 1 int.
2011-12-07 14:55:37 +01:00
// CheckType s gdb13393::S.
2011-12-08 17:40:27 +01:00
// CheckType s.ptr gdb13393::Derived.
// CheckType s.ptrConst gdb13393::Derived.
// CheckType s.ref gdb13393::Derived.
// CheckType s.refConst gdb13393::Derived.
2011-12-07 14:55:37 +01:00
// Check sharedPtr 1 int.
// Continue.
2011-11-28 18:57:25 +01:00
dummyStatement ( & d , & s , & ptrToPtr , & sharedPtr , & ptrConst , & refConst , & ref ) ;
}
} // namespace gdb13393
2011-12-14 08:12:00 +01:00
namespace gdb10586 {
// http://sourceware.org/bugzilla/show_bug.cgi?id=10586. fsf/MI errors out
// on -var-list-children on an anonymous union. mac/MI was fixed in 2006.
// The proposed fix has been reported to crash gdb steered from eclipse.
// http://sourceware.org/ml/gdb-patches/2011-12/msg00420.html
// Check we are not harmed by either version.
void testmi ( )
{
struct test {
struct { int a ; float b ; } ;
struct { int c ; float d ; } ;
} v = { { 1 , 2 } , { 3 , 4 } } ;
BREAK_HERE ;
// Expand v.
2011-12-15 12:25:27 +01:00
// Check v gdb10586::test.
2012-02-01 08:51:48 +01:00
// Check v.a 1 int.
2011-12-14 08:12:00 +01:00
// Continue.
dummyStatement ( & v ) ;
}
void testeclipse ( )
{
struct { int x ; struct { int a ; } ; struct { int b ; } ; } v = { 1 , { 2 } , { 3 } } ;
struct s { int x , y ; } n = { 10 , 20 } ;
BREAK_HERE ;
2012-02-01 08:51:48 +01:00
// Expand v.
// Expand n.
// CheckType v {...}.
// CheckType n gdb10586::s.
// Check v.a 2 int.
2012-03-20 18:55:12 +01:00
// Check v.b 3 int.
// Check v.x 1 int.
// Check n.x 10 int.
// Check n.y 20 int.
2011-12-14 08:12:00 +01:00
// Continue.
2012-03-05 10:35:28 +01:00
dummyStatement ( & v , & n ) ;
2011-12-14 08:12:00 +01:00
}
void test10586 ( )
{
testmi ( ) ;
testeclipse ( ) ;
}
} // namespace gdb10586
2011-10-20 15:28:53 +02:00
namespace valgrind {
void testLeak ( )
{
new int [ 100 ] ; // Leaks intentionally.
}
void testValgrind ( )
{
testLeak ( ) ;
}
} // namespace valgrind
2011-08-18 16:14:34 +02:00
namespace sanity {
2011-08-17 14:54:31 +02:00
2011-08-18 16:14:34 +02:00
// A very quick check.
void testSanity ( )
{
std : : string s ;
s = " hallo " ;
s + = " hallo " ;
2011-08-17 14:54:31 +02:00
2011-08-18 16:14:34 +02:00
QVector < int > qv ;
qv . push_back ( 2 ) ;
2011-08-17 14:54:31 +02:00
2011-08-18 16:14:34 +02:00
std : : vector < int > v ;
v . push_back ( 2 ) ;
2011-08-17 14:54:31 +02:00
2011-08-18 16:14:34 +02:00
QStringList list ;
list < < " aaa " < < " bbb " < < " cc " ;
QList < const char * > list2 ;
list2 < < " foo " ;
list2 < < " bar " ;
list2 < < 0 ;
list2 < < " baz " ;
list2 < < 0 ;
QObject obj ;
obj . setObjectName ( " An Object " ) ;
2011-08-24 13:51:49 +02:00
BREAK_HERE ;
2011-11-25 16:29:25 +01:00
// Check list <3 items> QStringList
// Check list2 <5 items> QList<char const*>
// Check obj "An Object" QObject
// Check qv <1 items> QVector<int>
2011-12-07 14:55:37 +01:00
// Check s "hallohallo" std::string
// Check v <1 items> std::vector<int>
2011-11-25 16:29:25 +01:00
// Continue
2011-08-18 16:14:34 +02:00
dummyStatement ( & s , & qv , & v , & list , & list2 , & obj ) ;
}
2011-11-18 15:03:58 +01:00
} // namespace sanity
2011-08-18 16:14:34 +02:00
2011-10-20 15:28:53 +02:00
2011-08-18 16:14:34 +02:00
int main ( int argc , char * argv [ ] )
{
2011-11-18 15:03:58 +01:00
QApplication app ( argc , argv ) ;
2012-04-11 14:11:07 +02:00
QChar c ( 0x1E9E ) ;
bool b = c . isPrint ( ) ;
qDebug ( ) < < c < < b ;
2011-12-14 10:14:41 +01:00
// Notify Creator about auto run intention.
if ( USE_AUTORUN )
qWarning ( " Creator: Switch on magic autorun. " ) ;
else
qWarning ( " Creator: Switch off magic autorun. " ) ;
2011-08-18 16:14:34 +02:00
// For a very quick check, step into this one.
sanity : : testSanity ( ) ;
// Check for normal dumpers.
basic : : testBasic ( ) ;
2011-08-05 15:06:14 +02:00
qhostaddress : : testQHostAddress ( ) ;
2011-08-04 17:14:22 +02:00
varargs : : testVaList ( ) ;
2011-08-18 16:14:34 +02:00
formats : : testFormats ( ) ;
2011-08-17 14:54:31 +02:00
breakpoints : : testBreakpoints ( ) ;
2011-08-24 16:23:10 +02:00
peekandpoke : : testPeekAndPoke3 ( ) ;
2011-08-17 14:54:31 +02:00
anon : : testAnonymous ( ) ;
2009-06-23 10:24:25 +02:00
2011-11-18 15:03:58 +01:00
itemmodel : : testItemModel ( ) ;
2011-07-07 12:02:40 +02:00
noargs : : testNoArgumentName ( 1 , 2 , 3 ) ;
2011-11-18 15:03:58 +01:00
text : : testText ( ) ;
2011-08-18 16:14:34 +02:00
io : : testIO ( ) ;
2011-11-18 15:03:58 +01:00
catchthrow : : testCatchThrow ( ) ;
plugin : : testPlugin ( ) ;
valgrind : : testValgrind ( ) ;
namespc : : testNamespace ( ) ;
painting : : testPainting ( ) ;
2012-04-25 12:01:20 +02:00
webkit : : testWebKit ( ) ;
2008-12-10 14:37:15 +01:00
2012-02-04 00:59:31 +01:00
stdarray : : testStdArray ( ) ;
2012-02-03 20:55:04 +01:00
stdcomplex : : testStdComplex ( ) ;
2011-11-18 15:03:58 +01:00
stddeque : : testStdDeque ( ) ;
stdlist : : testStdList ( ) ;
stdhashset : : testStdHashSet ( ) ;
stdmap : : testStdMap ( ) ;
stdset : : testStdSet ( ) ;
2011-08-15 13:32:46 +02:00
stdstack : : testStdStack ( ) ;
2011-11-18 15:03:58 +01:00
stdstream : : testStdStream ( ) ;
2011-08-15 13:32:46 +02:00
stdstring : : testStdString ( ) ;
stdvector : : testStdVector ( ) ;
2012-02-02 19:50:47 +01:00
stdptr : : testStdPtr ( ) ;
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
qbytearray : : testQByteArray ( ) ;
qdatetime : : testDateTime ( ) ;
2012-03-05 10:57:38 +01:00
qdir : : testQDir ( ) ;
2011-11-18 15:03:58 +01:00
qfileinfo : : testQFileInfo ( ) ;
qhash : : testQHash ( ) ;
qlinkedlist : : testQLinkedList ( ) ;
2011-09-15 12:42:29 +02:00
qlist : : testQList ( ) ;
2011-11-18 15:03:58 +01:00
qlocale : : testQLocale ( ) ;
qmap : : testQMap ( ) ;
qobject : : testQObject ( ) ;
qrect : : testGeometry ( ) ;
qregexp : : testQRegExp ( ) ;
qregion : : testQRegion ( ) ;
qscript : : testQScript ( ) ;
2011-11-16 16:37:12 +01:00
qset : : testQSet ( ) ;
2011-08-24 16:23:10 +02:00
qsharedpointer : : testQSharedPointer ( ) ;
2011-11-18 15:03:58 +01:00
qstack : : testQStack ( ) ;
2011-08-17 10:46:08 +02:00
qstringlist : : testQStringList ( ) ;
2011-11-18 15:03:58 +01:00
qstring : : testQString ( ) ;
2011-09-19 11:21:22 +02:00
qthread : : testQThread ( ) ;
2011-11-18 15:03:58 +01:00
qurl : : testQUrl ( ) ;
2011-06-28 16:31:31 +02:00
qvariant : : testQVariant ( ) ;
2011-07-07 12:02:40 +02:00
qvector : : testQVector ( ) ;
2011-11-18 15:03:58 +01:00
qxml : : testQXmlAttributes ( ) ;
2008-12-08 11:58:36 +01:00
2011-08-18 16:14:34 +02:00
// Third party data types.
boost : : testBoost ( ) ;
eigen : : testEigen ( ) ;
kr : : testKR ( ) ;
mpi : : testMPI ( ) ;
sse : : testSSE ( ) ;
2008-12-08 11:58:36 +01:00
2011-08-18 16:14:34 +02:00
// The following tests are specific to certain bugs.
// 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 ( ) ;
2011-12-14 08:27:42 +01:00
bug4997 : : test4997 ( ) ;
2011-08-18 16:14:34 +02:00
bug5106 : : test5106 ( ) ;
bug5184 : : test5184 ( ) ;
bug5799 : : test5799 ( ) ;
2012-01-16 18:49:01 +01:00
bug6813 : : test6813 ( ) ;
2011-11-03 19:19:10 +01:00
bug6465 : : test6465 ( ) ;
2012-01-24 09:56:13 +01:00
bug6857 : : test6857 ( ) ;
2012-01-24 13:29:21 +01:00
bug6858 : : test6858 ( ) ;
2012-03-14 14:39:01 +01:00
bug6863 : : test6863 ( ) ;
2012-02-22 17:53:00 +01:00
bug6933 : : test6933 ( ) ;
2011-11-28 18:57:25 +01:00
gdb13393 : : test13393 ( ) ;
2011-12-14 08:12:00 +01:00
gdb10586 : : test10586 ( ) ;
2008-12-02 12:01:29 +01:00
2011-11-18 15:03:58 +01:00
final : : testFinal ( & app ) ;
2011-08-24 13:51:49 +02:00
2010-10-04 12:19:28 +02:00
return 0 ;
2008-12-02 12:01:29 +01:00
}
2011-08-23 12:47:30 +02:00
# include "simple_test_app.moc"