QtBase  v6.3.1
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions | Variables
tst_qmetatype.cpp File Reference
#include "tst_qmetatype.h"
#include <QtCore/private/qmetaobjectbuilder_p.h>
#include <algorithm>
#include <memory>
#include <vector>
#include "tst_qmetatype.moc"
Include dependency graph for tst_qmetatype.cpp:

Go to the source code of this file.

Classes

struct  CheckTypeTraits::NoOperators
 
struct  BaseGenericType
 
struct  GenericGadgetType
 
struct  GenericPODType
 
struct  Foo
 [4] More...
 
class  CustomQObject
 
class  CustomGadget
 
class  CustomGadget_NonDefaultConstructible
 
class  CustomNonQObject
 
class  GadgetDerived
 
class  GadgetDerivedAndTyped< T >
 
class  Bar
 
class  MetaTypeTorturer
 
struct  TestSpace::Foo
 
struct  TestSpace::QungTfu
 
class  CustomObject
 
struct  SecondBase
 
class  CustomMultiInheritanceObject
 
class  C
 
class  M
 
class  P
 
class  IsRegisteredDummyType
 
struct  isEnumTest_Struct0
 
struct  isEnumTest_Struct1
 
struct  CustomComparable
 
struct  UnregisteredType
 
class  AutoMetaTypeObject
 
class  MyObject
 [0] More...
 
struct  StreamingTraits< T >
 
struct  CustomStreamableType
 
class  MyGadget
 
class  MyQObjectFromGadget
 
struct  MetaTypeIdStruct< int >
 
struct  RegisterMetaTypeStruct< int >
 
struct  MetaTypeIdStructDefaultTemplateValue< i >
 
struct  RegisterMetaTypeStructDefaultTemplateValue< i >
 
struct  S
 

Namespaces

 CheckTypeTraits
 
 TestSpace
 

Macros

#define ADD_TESTSPACE(F)   TestSpace::F
 
#define TYPENAME_DATA(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << #RealType;
 
#define TST_QMETATYPE_TYPE_DATA(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << QByteArray( #RealType );
 
#define TST_QMETATYPE_TYPE_DATA_ALIAS(MetaTypeName, MetaTypeId, AliasType, RealTypeString)    QTest::newRow(RealTypeString) << int(QMetaType::MetaTypeName) << QByteArray( #AliasType );
 
#define CHECK_BUILTIN(MetaTypeName, MetaTypeId, RealType)   static_assert_trigger< RealType >::value &&
 
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(QMetaType::typeName(QMetaType::MetaTypeName)) << int(QMetaType::MetaTypeName);
 
#define RETURN_CREATE_FUNCTION(MetaTypeName, MetaTypeId, RealType)
 
#define RETURN_CREATE_COPY_FUNCTION(MetaTypeName, MetaTypeId, RealType)
 
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << getSize<RealType>;
 
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << size_t(getAlignOf<RealType>());
 
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType)
 
#define RETURN_CONSTRUCT_FUNCTION(MetaTypeName, MetaTypeId, RealType)
 
#define RETURN_CONSTRUCT_COPY_FUNCTION(MetaTypeName, MetaTypeId, RealType)
 
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(QMetaType::typeName(QMetaType::MetaTypeName)) << int(QMetaType::MetaTypeName) << orderingFor(QMetaType::MetaTypeName);
 
#define ADD_METATYPE_CASE(MetaTypeName, MetaTypeId, RealType)    case QMetaType::MetaTypeName:
 
#define TEST_SEQUENTIAL_CONTAINER(CONTAINER, VALUE_TYPE)
 
#define TEST_OWNING_SMARTPOINTER(SMARTPOINTER, ELEMENT_TYPE, FLAG_TEST, FROMVARIANTFUNCTION)
 
#define TEST_NONOWNING_SMARTPOINTER(SMARTPOINTER, ELEMENT_TYPE, FLAG_TEST, FROMVARIANTFUNCTION)
 
#define TEST_WEAK_SMARTPOINTER(ELEMENT_TYPE, FLAG_TEST)
 
#define DECLARE_NONSTREAMABLE(Type)    template<> struct StreamingTraits<Type> { enum { isStreamable = 0 }; };
 
#define DECLARE_WIDGETS_CLASS_NONSTREAMABLE(MetaTypeName, MetaTypeId, RealType)    DECLARE_NONSTREAMABLE(RealType)
 
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType)    QTest::newRow(#RealType) << MetaTypeId << bool(StreamingTraits<RealType>::isStreamable);
 
#define METATYPE_ID_FUNCTION(Type, MetaTypeId, Name)    case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value; break;
 
#define REGISTER_METATYPE_FUNCTION(Type, MetaTypeId, Name)    case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value; break;
 
#define METATYPE_ID_STRUCT(Type, MetaTypeId, Name)
 
#define REGISTER_METATYPE_STRUCT(Type, MetaTypeId, Name)
 

Typedefs

using CheckTypeTraits::Nested = QVector< std::pair< int, QMap< QStringList, QVariant > >>
 
using CheckTypeTraits::Nested2 = QVector< std::pair< int, QVector< QPair< QStringList, QVariant > >> >
 
using RegisteredType = QPair< std::shared_ptr< BaseGenericType >, std::shared_ptr< QMetaObject > >
 
typedef void(* TypeTestFunction) ()
 
typedef QPair< C, MQPairCM
 
typedef QPair< C, PQPairCP
 
typedef QPair< M, CQPairMC
 
typedef QPair< M, MQPairMM
 
typedef QPair< M, PQPairMP
 
typedef QPair< P, CQPairPC
 
typedef QPair< P, MQPairPM
 
typedef QPair< P, PQPairPP
 
typedef QString CustomString
 
typedef QHash< int, uintIntUIntHash
 
typedef QMap< int, uintIntUIntMap
 
typedef QPair< int, uintIntUIntPair
 
typedef QHash< int, CustomComparableIntComparableHash
 
typedef QMap< int, CustomComparableIntComparableMap
 
typedef QPair< int, CustomComparableIntComparablePair
 
typedef QHash< int, int > IntIntHash
 
typedef int NaturalNumber
 
typedef MyObjectMyObjectPtr
 

Enumerations

enum  FlagsDataEnum
 
enum  isEnumTest_Enum0
 
enum  isEnumTest_Enum1
 

Functions

template<>
void testCreateHelper< QMetaType::Void > ()
 
template<>
void testCreateCopyHelper< QMetaType::Void > ()
 
template<typename T >
auto getAlignOf ()
 
 Q_DECLARE_METATYPE (CustomObject *)
 
 Q_DECLARE_METATYPE (CustomMultiInheritanceObject *)
 
 Q_DECLARE_METATYPE (FlagsDataEnum)
 
template<>
void testConstructHelper< QMetaType::Void > ()
 
template<>
void testConstructCopyHelper< QMetaType::Void > ()
 
 Q_DECLARE_METATYPE (CustomString) void tst_QMetaType
 
QDataStreamoperator<< (QDataStream &out, const CustomStreamableType &t)
 
QDataStreamoperator>> (QDataStream &in, CustomStreamableType &t)
 
 Q_DECLARE_METATYPE (MyGadget)
 
 Q_DECLARE_METATYPE (MyGadget *)
 
 Q_DECLARE_METATYPE (const QMetaObject *)
 
 Q_DECLARE_METATYPE (Qt::ScrollBarPolicy)
 
 Q_DECLARE_METATYPE (MyGadget::MyEnum)
 
 Q_DECLARE_METATYPE (MyQObjectFromGadget *)
 

Variables

QT_BEGIN_NAMESPACE QT_END_NAMESPACE typedef QPair< C, CQPairCC
 
template<typename T >
constexpr size_t getSize = sizeof(T)
 
template<>
constexpr size_t getSize< void > = 0
 

Macro Definition Documentation

◆ ADD_METATYPE_CASE

#define ADD_METATYPE_CASE (   MetaTypeName,
  MetaTypeId,
  RealType 
)     case QMetaType::MetaTypeName:

◆ ADD_METATYPE_TEST_ROW [1/6]

#define ADD_METATYPE_TEST_ROW (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(QMetaType::typeName(QMetaType::MetaTypeName)) << int(QMetaType::MetaTypeName);

◆ ADD_METATYPE_TEST_ROW [2/6]

#define ADD_METATYPE_TEST_ROW (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << getSize<RealType>;

◆ ADD_METATYPE_TEST_ROW [3/6]

#define ADD_METATYPE_TEST_ROW (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << size_t(getAlignOf<RealType>());

◆ ADD_METATYPE_TEST_ROW [4/6]

#define ADD_METATYPE_TEST_ROW (   MetaTypeName,
  MetaTypeId,
  RealType 
)
Value:

◆ ADD_METATYPE_TEST_ROW [5/6]

#define ADD_METATYPE_TEST_ROW (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(QMetaType::typeName(QMetaType::MetaTypeName)) << int(QMetaType::MetaTypeName) << orderingFor(QMetaType::MetaTypeName);

◆ ADD_METATYPE_TEST_ROW [6/6]

#define ADD_METATYPE_TEST_ROW (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(#RealType) << MetaTypeId << bool(StreamingTraits<RealType>::isStreamable);

◆ ADD_TESTSPACE

#define ADD_TESTSPACE (   F)    TestSpace::F

Definition at line 514 of file tst_qmetatype.cpp.

◆ CHECK_BUILTIN

#define CHECK_BUILTIN (   MetaTypeName,
  MetaTypeId,
  RealType 
)    static_assert_trigger< RealType >::value &&

Definition at line 716 of file tst_qmetatype.cpp.

◆ DECLARE_NONSTREAMABLE

#define DECLARE_NONSTREAMABLE (   Type)     template<> struct StreamingTraits<Type> { enum { isStreamable = 0 }; };

Definition at line 1862 of file tst_qmetatype.cpp.

◆ DECLARE_WIDGETS_CLASS_NONSTREAMABLE

#define DECLARE_WIDGETS_CLASS_NONSTREAMABLE (   MetaTypeName,
  MetaTypeId,
  RealType 
)     DECLARE_NONSTREAMABLE(RealType)

Definition at line 1872 of file tst_qmetatype.cpp.

◆ METATYPE_ID_FUNCTION

#define METATYPE_ID_FUNCTION (   Type,
  MetaTypeId,
  Name 
)     case ::qMetaTypeId< Name >(): metaType = MetaTypeIdStruct<MetaTypeId>::Value; break;

Definition at line 2040 of file tst_qmetatype.cpp.

◆ METATYPE_ID_STRUCT

#define METATYPE_ID_STRUCT (   Type,
  MetaTypeId,
  Name 
)
Value:
template<> \
{ \
enum { Value = ::qMetaTypeId< Name >() }; \
};

Definition at line 2056 of file tst_qmetatype.cpp.

◆ REGISTER_METATYPE_FUNCTION

#define REGISTER_METATYPE_FUNCTION (   Type,
  MetaTypeId,
  Name 
)     case qRegisterMetaType< Name >(): metaType = RegisterMetaTypeStruct<MetaTypeId>::Value; break;

Definition at line 2043 of file tst_qmetatype.cpp.

◆ REGISTER_METATYPE_STRUCT

#define REGISTER_METATYPE_STRUCT (   Type,
  MetaTypeId,
  Name 
)
Value:
template<> \
{ \
enum { Value = qRegisterMetaType< Name >() }; \
};

Definition at line 2063 of file tst_qmetatype.cpp.

◆ RETURN_CONSTRUCT_COPY_FUNCTION

#define RETURN_CONSTRUCT_COPY_FUNCTION (   MetaTypeName,
  MetaTypeId,
  RealType 
)
Value:
case QMetaType::MetaTypeName: \
return testConstructCopyHelper<QMetaType::MetaTypeName>;

◆ RETURN_CONSTRUCT_FUNCTION

#define RETURN_CONSTRUCT_FUNCTION (   MetaTypeName,
  MetaTypeId,
  RealType 
)
Value:
case QMetaType::MetaTypeName: \
return testConstructHelper<QMetaType::MetaTypeName>;

◆ RETURN_CREATE_COPY_FUNCTION

#define RETURN_CREATE_COPY_FUNCTION (   MetaTypeName,
  MetaTypeId,
  RealType 
)
Value:
case QMetaType::MetaTypeName: \
return testCreateCopyHelper<QMetaType::MetaTypeName>;

◆ RETURN_CREATE_FUNCTION

#define RETURN_CREATE_FUNCTION (   MetaTypeName,
  MetaTypeId,
  RealType 
)
Value:
case QMetaType::MetaTypeName: \
return testCreateHelper<QMetaType::MetaTypeName>;

◆ TEST_NONOWNING_SMARTPOINTER

#define TEST_NONOWNING_SMARTPOINTER (   SMARTPOINTER,
  ELEMENT_TYPE,
  FLAG_TEST,
  FROMVARIANTFUNCTION 
)
Value:
{ \
ELEMENT_TYPE elem; \
SMARTPOINTER < ELEMENT_TYPE > sp(&elem); \
sp.data()->setObjectName("Test name"); \
QVariant v = QVariant::fromValue(sp); \
QCOMPARE(v.typeName(), #SMARTPOINTER "<" #ELEMENT_TYPE ">"); \
QVERIFY(QMetaType::typeFlags(::qMetaTypeId<SMARTPOINTER < ELEMENT_TYPE > >()) & QMetaType::FLAG_TEST); \
SMARTPOINTER < QObject > extractedPtr = FROMVARIANTFUNCTION<QObject>(v); \
QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \
}
int qMetaTypeId()
Definition: qmetatype.h:1302
static auto fromValue(const T &value) -> std::enable_if_t< std::is_copy_constructible_v< T >, QVariant >
Definition: qvariant.h:391
GLsizei const GLfloat * v
[13]
#define sp

◆ TEST_OWNING_SMARTPOINTER

#define TEST_OWNING_SMARTPOINTER (   SMARTPOINTER,
  ELEMENT_TYPE,
  FLAG_TEST,
  FROMVARIANTFUNCTION 
)
Value:
{ \
SMARTPOINTER < ELEMENT_TYPE > sp(new ELEMENT_TYPE); \
sp.data()->setObjectName("Test name"); \
QVariant v = QVariant::fromValue(sp); \
QCOMPARE(v.typeName(), #SMARTPOINTER "<" #ELEMENT_TYPE ">"); \
QVERIFY(QMetaType::typeFlags(::qMetaTypeId<SMARTPOINTER < ELEMENT_TYPE > >()) & QMetaType::FLAG_TEST); \
SMARTPOINTER < QObject > extractedPtr = FROMVARIANTFUNCTION<QObject>(v); \
QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \
}

◆ TEST_SEQUENTIAL_CONTAINER

#define TEST_SEQUENTIAL_CONTAINER (   CONTAINER,
  VALUE_TYPE 
)
Value:
{ \
CONTAINER<VALUE_TYPE> innerContainer; \
innerContainer.push_back(42); \
QVERIFY(*QVariant::fromValue(innerContainer).value<CONTAINER<VALUE_TYPE> >().begin() == 42); \
QList<CONTAINER<VALUE_TYPE> > outerContainer; \
outerContainer << innerContainer; \
QVERIFY(*QVariant::fromValue(outerContainer).value<QList<CONTAINER<VALUE_TYPE> > >().first().begin() == 42); \
}
Definition: qlist.h:108
EGLOutputLayerEXT EGLint EGLAttrib value
GLint first
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)

◆ TEST_WEAK_SMARTPOINTER

#define TEST_WEAK_SMARTPOINTER (   ELEMENT_TYPE,
  FLAG_TEST 
)
Value:
{ \
ELEMENT_TYPE elem; \
QSharedPointer < ELEMENT_TYPE > shared(new ELEMENT_TYPE); \
QWeakPointer < ELEMENT_TYPE > sp(shared); \
sp.toStrongRef()->setObjectName("Test name"); \
QVariant v = QVariant::fromValue(sp); \
QCOMPARE(v.typeName(), "QWeakPointer<" #ELEMENT_TYPE ">"); \
QVERIFY(QMetaType::typeFlags(::qMetaTypeId<QWeakPointer < ELEMENT_TYPE > >()) & QMetaType::FLAG_TEST); \
}
The QWeakPointer class holds a weak reference to a shared pointer.

◆ TST_QMETATYPE_TYPE_DATA

#define TST_QMETATYPE_TYPE_DATA (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << QByteArray( #RealType );

◆ TST_QMETATYPE_TYPE_DATA_ALIAS

#define TST_QMETATYPE_TYPE_DATA_ALIAS (   MetaTypeName,
  MetaTypeId,
  AliasType,
  RealTypeString 
)     QTest::newRow(RealTypeString) << int(QMetaType::MetaTypeName) << QByteArray( #AliasType );

◆ TYPENAME_DATA

#define TYPENAME_DATA (   MetaTypeName,
  MetaTypeId,
  RealType 
)     QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << #RealType;

Definition at line 588 of file tst_qmetatype.cpp.

Typedef Documentation

◆ CustomString

Definition at line 1402 of file tst_qmetatype.cpp.

◆ IntComparableHash

Definition at line 1560 of file tst_qmetatype.cpp.

◆ IntComparableMap

Definition at line 1562 of file tst_qmetatype.cpp.

◆ IntComparablePair

Definition at line 1564 of file tst_qmetatype.cpp.

◆ IntIntHash

typedef QHash<int, int> IntIntHash

Definition at line 1567 of file tst_qmetatype.cpp.

◆ IntUIntHash

typedef QHash<int, uint> IntUIntHash

Definition at line 1541 of file tst_qmetatype.cpp.

◆ IntUIntMap

typedef QMap<int, uint> IntUIntMap

Definition at line 1543 of file tst_qmetatype.cpp.

◆ IntUIntPair

typedef QPair<int, uint> IntUIntPair

Definition at line 1545 of file tst_qmetatype.cpp.

◆ MyObjectPtr

Definition at line 1605 of file tst_qmetatype.cpp.

◆ NaturalNumber

typedef int NaturalNumber

Definition at line 1568 of file tst_qmetatype.cpp.

◆ QPairCM

typedef QPair<C,M> QPairCM

Definition at line 957 of file tst_qmetatype.cpp.

◆ QPairCP

typedef QPair<C,P> QPairCP

Definition at line 958 of file tst_qmetatype.cpp.

◆ QPairMC

typedef QPair<M,C> QPairMC

Definition at line 959 of file tst_qmetatype.cpp.

◆ QPairMM

typedef QPair<M,M> QPairMM

Definition at line 960 of file tst_qmetatype.cpp.

◆ QPairMP

typedef QPair<M,P> QPairMP

Definition at line 961 of file tst_qmetatype.cpp.

◆ QPairPC

typedef QPair<P,C> QPairPC

Definition at line 962 of file tst_qmetatype.cpp.

◆ QPairPM

typedef QPair<P,M> QPairPM

Definition at line 963 of file tst_qmetatype.cpp.

◆ QPairPP

typedef QPair<P,P> QPairPP

Definition at line 964 of file tst_qmetatype.cpp.

◆ RegisteredType

using RegisteredType = QPair<std::shared_ptr<BaseGenericType>, std::shared_ptr<QMetaObject> >

Definition at line 248 of file tst_qmetatype.cpp.

◆ TypeTestFunction

typedef void(* TypeTestFunction) ()

Definition at line 764 of file tst_qmetatype.cpp.

Enumeration Type Documentation

◆ FlagsDataEnum

Definition at line 976 of file tst_qmetatype.cpp.

◆ isEnumTest_Enum0

Definition at line 1496 of file tst_qmetatype.cpp.

◆ isEnumTest_Enum1

Definition at line 1499 of file tst_qmetatype.cpp.

Function Documentation

◆ getAlignOf()

template<typename T >
auto getAlignOf ( )

Definition at line 883 of file tst_qmetatype.cpp.

◆ operator<<()

QDataStream& operator<< ( QDataStream out,
const CustomStreamableType t 
)

Definition at line 1934 of file tst_qmetatype.cpp.

◆ operator>>()

QDataStream& operator>> ( QDataStream in,
CustomStreamableType t 
)

Definition at line 1939 of file tst_qmetatype.cpp.

◆ Q_DECLARE_METATYPE() [1/10]

Q_DECLARE_METATYPE ( const QMetaObject )

◆ Q_DECLARE_METATYPE() [2/10]

Q_DECLARE_METATYPE ( CustomMultiInheritanceObject )

◆ Q_DECLARE_METATYPE() [3/10]

Q_DECLARE_METATYPE ( CustomObject )

◆ Q_DECLARE_METATYPE() [4/10]

Q_DECLARE_METATYPE ( CustomString  )

Definition at line 1403 of file tst_qmetatype.cpp.

Here is the call graph for this function:

◆ Q_DECLARE_METATYPE() [5/10]

Q_DECLARE_METATYPE ( FlagsDataEnum  )

◆ Q_DECLARE_METATYPE() [6/10]

Q_DECLARE_METATYPE ( MyGadget )

◆ Q_DECLARE_METATYPE() [7/10]

Q_DECLARE_METATYPE ( MyGadget  )

◆ Q_DECLARE_METATYPE() [8/10]

Q_DECLARE_METATYPE ( MyGadget::MyEnum  )

◆ Q_DECLARE_METATYPE() [9/10]

Q_DECLARE_METATYPE ( MyQObjectFromGadget )

◆ Q_DECLARE_METATYPE() [10/10]

Q_DECLARE_METATYPE ( Qt::ScrollBarPolicy  )

◆ testConstructCopyHelper< QMetaType::Void >()

template<>
void testConstructCopyHelper< QMetaType::Void > ( )

Definition at line 1310 of file tst_qmetatype.cpp.

Here is the call graph for this function:

◆ testConstructHelper< QMetaType::Void >()

template<>
void testConstructHelper< QMetaType::Void > ( )

Definition at line 1150 of file tst_qmetatype.cpp.

Here is the call graph for this function:

◆ testCreateCopyHelper< QMetaType::Void >()

template<>
void testCreateCopyHelper< QMetaType::Void > ( )

Definition at line 803 of file tst_qmetatype.cpp.

Here is the call graph for this function:

◆ testCreateHelper< QMetaType::Void >()

template<>
void testCreateHelper< QMetaType::Void > ( )

Definition at line 754 of file tst_qmetatype.cpp.

Here is the call graph for this function:

Variable Documentation

◆ getSize

template<typename T >
constexpr size_t getSize = sizeof(T)
constexpr

Definition at line 839 of file tst_qmetatype.cpp.

◆ getSize< void >

template<>
constexpr size_t getSize< void > = 0
constexpr

Definition at line 841 of file tst_qmetatype.cpp.

◆ QPairCC

Definition at line 956 of file tst_qmetatype.cpp.