File indexing completed on 2024-05-12 04:44:23
0001 // SPDX-FileCopyrightText: Lukas Sommer <sommerluk@gmail.com> 0002 // SPDX-License-Identifier: BSD-2-Clause OR MIT 0003 0004 // First included header is the public header of the class we are testing; 0005 // this forces the header to be self-contained. 0006 #include "constpropagatinguniquepointer.h" 0007 0008 #include <qglobal.h> 0009 #include <qobject.h> 0010 #include <qrect.h> 0011 #include <qtest.h> 0012 #include <qtestcase.h> 0013 0014 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) 0015 #include <qtmetamacros.h> 0016 #else 0017 #include <qobjectdefs.h> 0018 #include <qstring.h> 0019 #endif 0020 0021 static void snippet01() 0022 { 0023 //! [example] 0024 // A ConstPropagatingUniquePointer pointing to a new QObject 0025 PerceptualColor::ConstPropagatingUniquePointer<QObject> myPointer(new QObject()); 0026 //! [example] 0027 } 0028 0029 namespace PerceptualColor 0030 { 0031 class TestConstPropagatingUniquePointer : public QObject 0032 { 0033 Q_OBJECT 0034 0035 public: 0036 explicit TestConstPropagatingUniquePointer(QObject *parent = nullptr) 0037 : QObject(parent) 0038 , pointerToQRectF(new QRectF) 0039 { 0040 } 0041 0042 private: 0043 ConstPropagatingUniquePointer<QRectF> pointerToQRectF; 0044 0045 private Q_SLOTS: 0046 0047 void initTestCase() 0048 { 0049 // Called before the first test function is executed 0050 } 0051 0052 void cleanupTestCase() 0053 { 0054 // Called after the last test function was executed 0055 } 0056 0057 void init() 0058 { 0059 // Called before each test function is executed 0060 } 0061 void cleanup() 0062 { 0063 // Called after every test function 0064 } 0065 0066 void testConstructorDestructor() 0067 { 0068 ConstPropagatingUniquePointer<QObject> test; 0069 } 0070 0071 void testDefaultConstructor() 0072 { 0073 ConstPropagatingUniquePointer<QObject> test; 0074 QCOMPARE(test.get(), nullptr); 0075 } 0076 0077 // NOTE Should break on compile time when the function is const. 0078 void testNonConstAccess() 0079 { 0080 // The following line should not break 0081 pointerToQRectF->setHeight(5); 0082 } 0083 0084 // NOTE Should break on compile time when the function is const. 0085 void testBackCopy01() 0086 { 0087 QRectF temp; 0088 *pointerToQRectF = temp; 0089 } 0090 0091 void testConstAccess01() const 0092 { 0093 // The following line should not break 0094 qreal height = pointerToQRectF->height(); 0095 Q_UNUSED(height) 0096 } 0097 0098 void testConstAccess02() 0099 { 0100 // The following line should not break 0101 qreal height = pointerToQRectF->height(); 0102 Q_UNUSED(height) 0103 } 0104 0105 void testCopy01() const 0106 { 0107 QRectF temp = *pointerToQRectF; 0108 Q_UNUSED(temp) 0109 } 0110 0111 void testCopy02() 0112 { 0113 QRectF temp = *pointerToQRectF; 0114 Q_UNUSED(temp) 0115 } 0116 0117 void testReset() 0118 { 0119 ConstPropagatingUniquePointer<int> ptr(new int(42)); 0120 QCOMPARE(*ptr, 42); 0121 0122 ptr.reset(new int(23)); 0123 QCOMPARE(*ptr, 23); 0124 0125 ptr.reset(); 0126 QCOMPARE(ptr.operator->(), nullptr); 0127 QCOMPARE(ptr.get(), nullptr); 0128 } 0129 0130 void testSwap1() 0131 { 0132 ConstPropagatingUniquePointer<int> ptr1(new int(42)); 0133 ConstPropagatingUniquePointer<int> ptr2(new int(23)); 0134 QCOMPARE(*ptr1, 42); 0135 QCOMPARE(*ptr2, 23); 0136 0137 ptr1.swap(ptr2); 0138 QCOMPARE(*ptr1, 23); 0139 QCOMPARE(*ptr2, 42); 0140 } 0141 0142 void testSwap2() 0143 { 0144 ConstPropagatingUniquePointer<int> ptr1(new int(42)); 0145 ConstPropagatingUniquePointer<int> ptr2; 0146 QCOMPARE(*ptr1, 42); 0147 QCOMPARE(ptr2.operator->(), nullptr); 0148 0149 ptr1.swap(ptr2); 0150 QCOMPARE(ptr1.operator->(), nullptr); 0151 QCOMPARE(*ptr2, 42); 0152 } 0153 0154 void testGet() 0155 { 0156 ConstPropagatingUniquePointer<int> ptr(new int(42)); 0157 QCOMPARE(*ptr.get(), 42); 0158 QVERIFY(ptr.get() != nullptr); 0159 } 0160 0161 void testGet2() 0162 { 0163 ConstPropagatingUniquePointer<int> ptr; 0164 QCOMPARE(ptr.get(), nullptr); 0165 } 0166 0167 void testSnippet01() 0168 { 0169 snippet01(); 0170 } 0171 }; 0172 0173 } // namespace PerceptualColor 0174 0175 QTEST_MAIN(PerceptualColor::TestConstPropagatingUniquePointer) 0176 // The following “include” is necessary because we do not use a header file: 0177 #include "testconstpropagatinguniquepointer.moc"