1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com> |
5 | ** Contact: https://www.qt.io/licensing/ |
6 | ** |
7 | ** This file is part of the test suite of the Qt Toolkit. |
8 | ** |
9 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
10 | ** Commercial License Usage |
11 | ** Licensees holding valid commercial Qt licenses may use this file in |
12 | ** accordance with the commercial license agreement provided with the |
13 | ** Software or, alternatively, in accordance with the terms contained in |
14 | ** a written agreement between you and The Qt Company. For licensing terms |
15 | ** and conditions see https://www.qt.io/terms-conditions. For further |
16 | ** information use the contact form at https://www.qt.io/contact-us. |
17 | ** |
18 | ** GNU General Public License Usage |
19 | ** Alternatively, this file may be used under the terms of the GNU |
20 | ** General Public License version 3 as published by the Free Software |
21 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
22 | ** included in the packaging of this file. Please review the following |
23 | ** information to ensure the GNU General Public License requirements will |
24 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
25 | ** |
26 | ** $QT_END_LICENSE$ |
27 | ** |
28 | ****************************************************************************/ |
29 | |
30 | #include <QtTest/QtTest> |
31 | #include <QtCore/qversionnumber.h> |
32 | #include <QtCore/qlibraryinfo.h> |
33 | |
34 | class tst_QVersionNumber : public QObject |
35 | { |
36 | Q_OBJECT |
37 | |
38 | private: |
39 | void singleInstanceData(); |
40 | void comparisonData(); |
41 | |
42 | private slots: |
43 | void initTestCase(); |
44 | void constructorDefault(); |
45 | void constructorVersioned_data(); |
46 | void constructorVersioned(); |
47 | void constructorExplicit(); |
48 | void constructorCopy_data(); |
49 | void constructorCopy(); |
50 | void compareGreater_data(); |
51 | void compareGreater(); |
52 | void compareGreaterEqual_data(); |
53 | void compareGreaterEqual(); |
54 | void compareLess_data(); |
55 | void compareLess(); |
56 | void compareLessEqual_data(); |
57 | void compareLessEqual(); |
58 | void compareEqual_data(); |
59 | void compareEqual(); |
60 | void compareNotEqual_data(); |
61 | void compareNotEqual(); |
62 | void compare_data(); |
63 | void compare(); |
64 | void isPrefixOf_data(); |
65 | void isPrefixOf(); |
66 | void commonPrefix_data(); |
67 | void commonPrefix(); |
68 | void normalized_data(); |
69 | void normalized(); |
70 | void isNormalized_data(); |
71 | void isNormalized(); |
72 | void assignment_data(); |
73 | void assignment(); |
74 | void fromString_data(); |
75 | void fromString(); |
76 | void toString_data(); |
77 | void toString(); |
78 | void isNull_data(); |
79 | void isNull(); |
80 | void serialize_data(); |
81 | void serialize(); |
82 | void moveSemantics(); |
83 | void qtVersion(); |
84 | }; |
85 | |
86 | void tst_QVersionNumber::singleInstanceData() |
87 | { |
88 | QTest::addColumn<QVector<int> >(name: "segments" ); |
89 | QTest::addColumn<QVersionNumber>(name: "expectedVersion" ); |
90 | QTest::addColumn<QString>(name: "expectedString" ); |
91 | QTest::addColumn<QString>(name: "constructionString" ); |
92 | QTest::addColumn<int>(name: "suffixIndex" ); |
93 | QTest::addColumn<bool>(name: "isNull" ); |
94 | |
95 | // segments expectedVersion expectedString constructionString suffixIndex null |
96 | QTest::newRow(dataTag: "null" ) << QVector<int>() << QVersionNumber(QVector<int>()) << QString() << QString() << 0 << true; |
97 | QTest::newRow(dataTag: "text" ) << QVector<int>() << QVersionNumber(QVector<int>()) << QString() << QStringLiteral("text" ) << 0 << true; |
98 | QTest::newRow(dataTag: " text" ) << QVector<int>() << QVersionNumber(QVector<int>()) << QString() << QStringLiteral(" text" ) << 0 << true; |
99 | QTest::newRow(dataTag: "Empty String" ) << QVector<int>() << QVersionNumber(QVector<int>()) << QString() << QStringLiteral("Empty String" ) << 0 << true; |
100 | QTest::newRow(dataTag: "-1.-2" ) << (QVector<int>()) << QVersionNumber() << QStringLiteral("" ) << QStringLiteral("-1.-2" ) << 0 << true; |
101 | QTest::newRow(dataTag: "1.-2-3" ) << (QVector<int>() << 1) << QVersionNumber(QVector<int>() << 1) << QStringLiteral("1" ) << QStringLiteral("1.-2-3" ) << 1 << false; |
102 | QTest::newRow(dataTag: "1.2-3" ) << (QVector<int>() << 1 << 2) << QVersionNumber(QVector<int>() << 1 << 2) << QStringLiteral("1.2" ) << QStringLiteral("1.2-3" ) << 3 << false; |
103 | QTest::newRow(dataTag: "0" ) << (QVector<int>() << 0) << QVersionNumber(QVector<int>() << 0) << QStringLiteral("0" ) << QStringLiteral("0" ) << 1 << false; |
104 | QTest::newRow(dataTag: "0.1" ) << (QVector<int>() << 0 << 1) << QVersionNumber(QVector<int>() << 0 << 1) << QStringLiteral("0.1" ) << QStringLiteral("0.1" ) << 3 << false; |
105 | QTest::newRow(dataTag: "0.1.2" ) << (QVector<int>() << 0 << 1 << 2) << QVersionNumber(0, 1, 2) << QStringLiteral("0.1.2" ) << QStringLiteral("0.1.2" ) << 5 << false; |
106 | QTest::newRow(dataTag: "0.1.2alpha" ) << (QVector<int>() << 0 << 1 << 2) << QVersionNumber(0, 1, 2) << QStringLiteral("0.1.2" ) << QStringLiteral("0.1.2alpha" ) << 5 << false; |
107 | QTest::newRow(dataTag: "0.1.2-alpha" ) << (QVector<int>() << 0 << 1 << 2) << QVersionNumber(0, 1, 2) << QStringLiteral("0.1.2" ) << QStringLiteral("0.1.2-alpha" ) << 5 << false; |
108 | QTest::newRow(dataTag: "0.1.2.alpha" ) << (QVector<int>() << 0 << 1 << 2) << QVersionNumber(0, 1, 2) << QStringLiteral("0.1.2" ) << QStringLiteral("0.1.2.alpha" ) << 5 << false; |
109 | QTest::newRow(dataTag: "0.1.2.3alpha" ) << (QVector<int>() << 0 << 1 << 2 << 3) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3) << QStringLiteral("0.1.2.3" ) << QStringLiteral("0.1.2.3alpha" ) << 7 << false; |
110 | QTest::newRow(dataTag: "0.1.2.3.alpha" ) << (QVector<int>() << 0 << 1 << 2 << 3) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3) << QStringLiteral("0.1.2.3" ) << QStringLiteral("0.1.2.3.alpha" ) << 7 << false; |
111 | QTest::newRow(dataTag: "0.1.2.3.4.alpha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4) << QStringLiteral("0.1.2.3.4" ) << QStringLiteral("0.1.2.3.4.alpha" ) << 9 << false; |
112 | QTest::newRow(dataTag: "0.1.2.3.4 alpha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4) << QStringLiteral("0.1.2.3.4" ) << QStringLiteral("0.1.2.3.4 alpha" ) << 9 << false; |
113 | QTest::newRow(dataTag: "0.1.2.3.4 alp ha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4) << QStringLiteral("0.1.2.3.4" ) << QStringLiteral("0.1.2.3.4 alp ha" ) << 9 << false; |
114 | QTest::newRow(dataTag: "0.1.2.3.4alp ha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4) << QStringLiteral("0.1.2.3.4" ) << QStringLiteral("0.1.2.3.4alp ha" ) << 9 << false; |
115 | QTest::newRow(dataTag: "0.1.2.3.4alpha " ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4) << QStringLiteral("0.1.2.3.4" ) << QStringLiteral("0.1.2.3.4alpha " ) << 9 << false; |
116 | QTest::newRow(dataTag: "0.1.2.3.4.5alpha " ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5) << QStringLiteral("0.1.2.3.4.5" ) << QStringLiteral("0.1.2.3.4.5alpha " ) << 11 << false; |
117 | QTest::newRow(dataTag: "0.1.2.3.4.5.6alpha " ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6) << QStringLiteral("0.1.2.3.4.5.6" ) << QStringLiteral("0.1.2.3.4.5.6alpha " ) << 13 << false; |
118 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.7alpha " ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7) << QStringLiteral("0.1.2.3.4.5.6.7" ) << QStringLiteral("0.1.2.3.4.5.6.7alpha " ) << 15 << false; |
119 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.7.8alpha " ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QStringLiteral("0.1.2.3.4.5.6.7.8" ) << QStringLiteral("0.1.2.3.4.5.6.7.8alpha " ) << 17 << false; |
120 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.7.8.alpha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QStringLiteral("0.1.2.3.4.5.6.7.8" ) << QStringLiteral("0.1.2.3.4.5.6.7.8.alpha" ) << 17 << false; |
121 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.7.8 alpha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QStringLiteral("0.1.2.3.4.5.6.7.8" ) << QStringLiteral("0.1.2.3.4.5.6.7.8 alpha" ) << 17 << false; |
122 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.7.8 alp ha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QStringLiteral("0.1.2.3.4.5.6.7.8" ) << QStringLiteral("0.1.2.3.4.5.6.7.8 alp ha" ) << 17 << false; |
123 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.7.8alp ha" ) << (QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QVersionNumber(QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8) << QStringLiteral("0.1.2.3.4.5.6.7.8" ) << QStringLiteral("0.1.2.3.4.5.6.7.8alp ha" ) << 17 << false; |
124 | QTest::newRow(dataTag: "10.09" ) << (QVector<int>() << 10 << 9) << QVersionNumber(QVector<int>() << 10 << 9) << QStringLiteral("10.9" ) << QStringLiteral("10.09" ) << 5 << false; |
125 | QTest::newRow(dataTag: "10.0x" ) << (QVector<int>() << 10 << 0) << QVersionNumber(QVector<int>() << 10 << 0) << QStringLiteral("10.0" ) << QStringLiteral("10.0x" ) << 4 << false; |
126 | QTest::newRow(dataTag: "10.0xTest" ) << (QVector<int>() << 10 << 0) << QVersionNumber(QVector<int>() << 10 << 0) << QStringLiteral("10.0" ) << QStringLiteral("10.0xTest" ) << 4 << false; |
127 | QTest::newRow(dataTag: "127.09" ) << (QVector<int>() << 127 << 9) << QVersionNumber(QVector<int>() << 127 << 9) << QStringLiteral("127.9" ) << QStringLiteral("127.09" ) << 6 << false; |
128 | QTest::newRow(dataTag: "127.0x" ) << (QVector<int>() << 127 << 0) << QVersionNumber(QVector<int>() << 127 << 0) << QStringLiteral("127.0" ) << QStringLiteral("127.0x" ) << 5 << false; |
129 | QTest::newRow(dataTag: "127.0xTest" ) << (QVector<int>() << 127 << 0) << QVersionNumber(QVector<int>() << 127 << 0) << QStringLiteral("127.0" ) << QStringLiteral("127.0xTest" ) << 5 << false; |
130 | QTest::newRow(dataTag: "128.09" ) << (QVector<int>() << 128 << 9) << QVersionNumber(QVector<int>() << 128 << 9) << QStringLiteral("128.9" ) << QStringLiteral("128.09" ) << 6 << false; |
131 | QTest::newRow(dataTag: "128.0x" ) << (QVector<int>() << 128 << 0) << QVersionNumber(QVector<int>() << 128 << 0) << QStringLiteral("128.0" ) << QStringLiteral("128.0x" ) << 5 << false; |
132 | QTest::newRow(dataTag: "128.0xTest" ) << (QVector<int>() << 128 << 0) << QVersionNumber(QVector<int>() << 128 << 0) << QStringLiteral("128.0" ) << QStringLiteral("128.0xTest" ) << 5 << false; |
133 | } |
134 | |
135 | namespace UglyOperator { |
136 | // ugh, but the alternative (operator <<) is even worse... |
137 | static inline QVector<int> operator+(QVector<int> v, int i) { v.push_back(t: i); return v; } |
138 | } |
139 | |
140 | void tst_QVersionNumber::comparisonData() |
141 | { |
142 | QTest::addColumn<QVersionNumber>(name: "lhs" ); |
143 | QTest::addColumn<QVersionNumber>(name: "rhs" ); |
144 | QTest::addColumn<bool>(name: "equal" ); |
145 | QTest::addColumn<bool>(name: "notEqual" ); |
146 | QTest::addColumn<bool>(name: "lessThan" ); |
147 | QTest::addColumn<bool>(name: "lessThanOrEqual" ); |
148 | QTest::addColumn<bool>(name: "greaterThan" ); |
149 | QTest::addColumn<bool>(name: "greaterThanOrEqual" ); |
150 | QTest::addColumn<int>(name: "compareResult" ); |
151 | QTest::addColumn<bool>(name: "isPrefix" ); |
152 | QTest::addColumn<QVersionNumber>(name: "common" ); |
153 | |
154 | // LHS RHS == != < <= > >= compareResult isPrefixOf commonPrefix |
155 | QTest::newRow(dataTag: "null, null" ) << QVersionNumber() << QVersionNumber() << true << false << false << true << false << true << 0 << true << QVersionNumber(); |
156 | QTest::newRow(dataTag: "null, 0" ) << QVersionNumber() << QVersionNumber(0) << false << true << true << true << false << false << -1 << true << QVersionNumber(); |
157 | QTest::newRow(dataTag: "0, null" ) << QVersionNumber(0) << QVersionNumber() << false << true << false << false << true << true << 1 << false << QVersionNumber(); |
158 | QTest::newRow(dataTag: "0, 0" ) << QVersionNumber(0) << QVersionNumber(0) << true << false << false << true << false << true << 0 << true << QVersionNumber(0); |
159 | QTest::newRow(dataTag: "1.0, 1.0" ) << QVersionNumber(1, 0) << QVersionNumber(1, 0) << true << false << false << true << false << true << 0 << true << QVersionNumber(1, 0); |
160 | QTest::newRow(dataTag: "1, 1.0" ) << QVersionNumber(1) << QVersionNumber(1, 0) << false << true << true << true << false << false << -1 << true << QVersionNumber(1); |
161 | QTest::newRow(dataTag: "1.0, 1" ) << QVersionNumber(1, 0) << QVersionNumber(1) << false << true << false << false << true << true << 1 << false << QVersionNumber(1); |
162 | |
163 | QTest::newRow(dataTag: "0.1.2, 0.1" ) << QVersionNumber(0, 1, 2) << QVersionNumber(0, 1) << false << true << false << false << true << true << 2 << false << QVersionNumber(0, 1); |
164 | QTest::newRow(dataTag: "0.1, 0.1.2" ) << QVersionNumber(0, 1) << QVersionNumber(0, 1, 2) << false << true << true << true << false << false << -2 << true << QVersionNumber(0, 1); |
165 | QTest::newRow(dataTag: "0.1.2, 0.1.2" ) << QVersionNumber(0, 1, 2) << QVersionNumber(0, 1, 2) << true << false << false << true << false << true << 0 << true << QVersionNumber(0, 1, 2); |
166 | QTest::newRow(dataTag: "0.1.2, 1.1.2" ) << QVersionNumber(0, 1, 2) << QVersionNumber(1, 1, 2) << false << true << true << true << false << false << -1 << false << QVersionNumber(); |
167 | QTest::newRow(dataTag: "1.1.2, 0.1.2" ) << QVersionNumber(1, 1, 2) << QVersionNumber(0, 1, 2) << false << true << false << false << true << true << 1 << false << QVersionNumber(); |
168 | QTest::newRow(dataTag: "1, -1" ) << QVersionNumber(1) << QVersionNumber(-1) << false << true << false << false << true << true << 2 << false << QVersionNumber(); |
169 | QTest::newRow(dataTag: "-1, 1" ) << QVersionNumber(-1) << QVersionNumber(1) << false << true << true << true << false << false << -2 << false << QVersionNumber(); |
170 | QTest::newRow(dataTag: "0.1, 0.-1" ) << QVersionNumber(0, 1) << QVersionNumber(0, -1) << false << true << false << false << true << true << 2 << false << QVersionNumber(0); |
171 | QTest::newRow(dataTag: "0.-1, 0.1" ) << QVersionNumber(0, -1) << QVersionNumber(0, 1) << false << true << true << true << false << false << -2 << false << QVersionNumber(0); |
172 | QTest::newRow(dataTag: "0.-1, 0" ) << QVersionNumber(0, -1) << QVersionNumber(0) << false << true << true << true << false << false << -1 << false << QVersionNumber(0); |
173 | QTest::newRow(dataTag: "0, 0.-1" ) << QVersionNumber(0) << QVersionNumber(0, -1) << false << true << false << false << true << true << 1 << true << QVersionNumber(0); |
174 | |
175 | QTest::newRow(dataTag: "0.127.2, 0.127" ) << QVersionNumber(0, 127, 2) << QVersionNumber(0, 127) << false << true << false << false << true << true << 2 << false << QVersionNumber(0, 127); |
176 | QTest::newRow(dataTag: "0.127, 0.127.2" ) << QVersionNumber(0, 127) << QVersionNumber(0, 127, 2) << false << true << true << true << false << false << -2 << true << QVersionNumber(0, 127); |
177 | QTest::newRow(dataTag: "0.127.2, 0.127.2" ) << QVersionNumber(0, 127, 2) << QVersionNumber(0, 127, 2) << true << false << false << true << false << true << 0 << true << QVersionNumber(0, 127, 2); |
178 | QTest::newRow(dataTag: "0.127.2, 127.127.2" ) << QVersionNumber(0, 127, 2) << QVersionNumber(127, 127, 2) << false << true << true << true << false << false << -127 << false << QVersionNumber(); |
179 | QTest::newRow(dataTag: "127.127.2, 0.127.2" ) << QVersionNumber(127, 127, 2) << QVersionNumber(0, 127, 2) << false << true << false << false << true << true << 127 << false << QVersionNumber(); |
180 | QTest::newRow(dataTag: "127, -128" ) << QVersionNumber(127) << QVersionNumber(-128) << false << true << false << false << true << true << 255 << false << QVersionNumber(); |
181 | QTest::newRow(dataTag: "-128, 127" ) << QVersionNumber(-128) << QVersionNumber(127) << false << true << true << true << false << false << -255 << false << QVersionNumber(); |
182 | QTest::newRow(dataTag: "0.127, 0.-128" ) << QVersionNumber(0, 127) << QVersionNumber(0, -128) << false << true << false << false << true << true << 255 << false << QVersionNumber(0); |
183 | QTest::newRow(dataTag: "0.-128, 0.127" ) << QVersionNumber(0, -128) << QVersionNumber(0, 127) << false << true << true << true << false << false << -255 << false << QVersionNumber(0); |
184 | QTest::newRow(dataTag: "0.-128, 0" ) << QVersionNumber(0, -128) << QVersionNumber(0) << false << true << true << true << false << false << -128 << false << QVersionNumber(0); |
185 | QTest::newRow(dataTag: "0, 0.-128" ) << QVersionNumber(0) << QVersionNumber(0, -128) << false << true << false << false << true << true << 128 << true << QVersionNumber(0); |
186 | |
187 | QTest::newRow(dataTag: "0.128.2, 0.128" ) << QVersionNumber(0, 128, 2) << QVersionNumber(0, 128) << false << true << false << false << true << true << 2 << false << QVersionNumber(0, 128); |
188 | QTest::newRow(dataTag: "0.128, 0.128.2" ) << QVersionNumber(0, 128) << QVersionNumber(0, 128, 2) << false << true << true << true << false << false << -2 << true << QVersionNumber(0, 128); |
189 | QTest::newRow(dataTag: "0.128.2, 0.128.2" ) << QVersionNumber(0, 128, 2) << QVersionNumber(0, 128, 2) << true << false << false << true << false << true << 0 << true << QVersionNumber(0, 128, 2); |
190 | QTest::newRow(dataTag: "0.128.2, 128.128.2" ) << QVersionNumber(0, 128, 2) << QVersionNumber(128, 128, 2) << false << true << true << true << false << false << -128 << false << QVersionNumber(); |
191 | QTest::newRow(dataTag: "128.128.2, 0.128.2" ) << QVersionNumber(128, 128, 2) << QVersionNumber(0, 128, 2) << false << true << false << false << true << true << 128 << false << QVersionNumber(); |
192 | QTest::newRow(dataTag: "128, -129" ) << QVersionNumber(128) << QVersionNumber(-129) << false << true << false << false << true << true << 257 << false << QVersionNumber(); |
193 | QTest::newRow(dataTag: "-129, 128" ) << QVersionNumber(-129) << QVersionNumber(128) << false << true << true << true << false << false << -257 << false << QVersionNumber(); |
194 | QTest::newRow(dataTag: "0.128, 0.-129" ) << QVersionNumber(0, 128) << QVersionNumber(0, -129) << false << true << false << false << true << true << 257 << false << QVersionNumber(0); |
195 | QTest::newRow(dataTag: "0.-129, 0.128" ) << QVersionNumber(0, -129) << QVersionNumber(0, 128) << false << true << true << true << false << false << -257 << false << QVersionNumber(0); |
196 | QTest::newRow(dataTag: "0.-129, 0" ) << QVersionNumber(0, -129) << QVersionNumber(0) << false << true << true << true << false << false << -129 << false << QVersionNumber(0); |
197 | QTest::newRow(dataTag: "0, 0.-129" ) << QVersionNumber(0) << QVersionNumber(0, -129) << false << true << false << false << true << true << 129 << true << QVersionNumber(0); |
198 | |
199 | const QVector<int> common = QVector<int>() << 0 << 1 << 2 << 3 << 4 << 5 << 6; |
200 | using namespace UglyOperator; |
201 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.1.2, 0.1.2.3.4.5.6.0.1" ) << QVersionNumber(common + 0 + 1 + 2) << QVersionNumber(common + 0 + 1) << false << true << false << false << true << true << 2 << false << QVersionNumber(common + 0 + 1); |
202 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.1, 0.1.2.3.4.5.6.0.1.2" ) << QVersionNumber(common + 0 + 1) << QVersionNumber(common + 0 + 1 + 2) << false << true << true << true << false << false << -2 << true << QVersionNumber(common + 0 + 1); |
203 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.1.2, 0.1.2.3.4.5.6.0.1.2" ) << QVersionNumber(common + 0 + 1 + 2) << QVersionNumber(common + 0 + 1 + 2) << true << false << false << true << false << true << 0 << true << QVersionNumber(common + 0 + 1 + 2); |
204 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.1.2, 0.1.2.3.4.5.6.1.1.2" ) << QVersionNumber(common + 0 + 1 + 2) << QVersionNumber(common + 1 + 1 + 2) << false << true << true << true << false << false << -1 << false << QVersionNumber(common); |
205 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.1.1.2, 0.1.2.3.4.5.6.0.1.2" ) << QVersionNumber(common + 1 + 1 + 2) << QVersionNumber(common + 0 + 1 + 2) << false << true << false << false << true << true << 1 << false << QVersionNumber(common); |
206 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.1, 0.1.2.3.4.5.6.-1" ) << QVersionNumber(common + 1) << QVersionNumber(common + -1) << false << true << false << false << true << true << 2 << false << QVersionNumber(common); |
207 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.-1, 0.1.2.3.4.5.6.1" ) << QVersionNumber(common + -1) << QVersionNumber(common + 1) << false << true << true << true << false << false << -2 << false << QVersionNumber(common); |
208 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.1, 0.1.2.3.4.5.6.0.-1" ) << QVersionNumber(common + 0 + 1) << QVersionNumber(common + 0 + -1) << false << true << false << false << true << true << 2 << false << QVersionNumber(common + 0); |
209 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.-1, 0.1.2.3.4.5.6.0.1" ) << QVersionNumber(common + 0 + -1) << QVersionNumber(common + 0 + 1) << false << true << true << true << false << false << -2 << false << QVersionNumber(common + 0); |
210 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0.-1, 0.1.2.3.4.5.6.0" ) << QVersionNumber(common + 0 + -1) << QVersionNumber(common + 0) << false << true << true << true << false << false << -1 << false << QVersionNumber(common + 0); |
211 | QTest::newRow(dataTag: "0.1.2.3.4.5.6.0, 0.1.2.3.4.5.6.0.-1" ) << QVersionNumber(common + 0) << QVersionNumber(common + 0 + -1) << false << true << false << false << true << true << 1 << true << QVersionNumber(common + 0); |
212 | } |
213 | |
214 | void tst_QVersionNumber::initTestCase() |
215 | { |
216 | qRegisterMetaType<QVector<int> >(); |
217 | } |
218 | |
219 | void tst_QVersionNumber::constructorDefault() |
220 | { |
221 | QVersionNumber version; |
222 | |
223 | QCOMPARE(version.majorVersion(), 0); |
224 | QCOMPARE(version.minorVersion(), 0); |
225 | QCOMPARE(version.microVersion(), 0); |
226 | QVERIFY(version.segments().isEmpty()); |
227 | } |
228 | |
229 | void tst_QVersionNumber::constructorVersioned_data() |
230 | { |
231 | singleInstanceData(); |
232 | } |
233 | |
234 | void tst_QVersionNumber::constructorVersioned() |
235 | { |
236 | QFETCH(QVector<int>, segments); |
237 | QFETCH(QVersionNumber, expectedVersion); |
238 | |
239 | QVersionNumber version(segments); |
240 | QCOMPARE(version.majorVersion(), expectedVersion.majorVersion()); |
241 | QCOMPARE(version.minorVersion(), expectedVersion.minorVersion()); |
242 | QCOMPARE(version.microVersion(), expectedVersion.microVersion()); |
243 | QCOMPARE(version.segments(), expectedVersion.segments()); |
244 | } |
245 | |
246 | void tst_QVersionNumber::constructorExplicit() |
247 | { |
248 | QVersionNumber v1(1); |
249 | QVersionNumber v2(QVector<int>() << 1); |
250 | |
251 | QCOMPARE(v1.segments(), v2.segments()); |
252 | |
253 | QVersionNumber v3(1, 2); |
254 | QVersionNumber v4(QVector<int>() << 1 << 2); |
255 | |
256 | QCOMPARE(v3.segments(), v4.segments()); |
257 | |
258 | QVersionNumber v5(1, 2, 3); |
259 | QVersionNumber v6(QVector<int>() << 1 << 2 << 3); |
260 | |
261 | QCOMPARE(v5.segments(), v6.segments()); |
262 | |
263 | QVersionNumber v7(4, 5, 6); |
264 | QVersionNumber v8 = {4, 5, 6}; |
265 | |
266 | QCOMPARE(v7.segments(), v8.segments()); |
267 | } |
268 | |
269 | void tst_QVersionNumber::constructorCopy_data() |
270 | { |
271 | singleInstanceData(); |
272 | } |
273 | |
274 | void tst_QVersionNumber::constructorCopy() |
275 | { |
276 | QFETCH(QVector<int>, segments); |
277 | QFETCH(QVersionNumber, expectedVersion); |
278 | |
279 | QVersionNumber original(segments); |
280 | QVersionNumber version(original); |
281 | |
282 | QCOMPARE(version.majorVersion(), expectedVersion.majorVersion()); |
283 | QCOMPARE(version.minorVersion(), expectedVersion.minorVersion()); |
284 | QCOMPARE(version.microVersion(), expectedVersion.microVersion()); |
285 | QCOMPARE(version.segments(), expectedVersion.segments()); |
286 | } |
287 | |
288 | void tst_QVersionNumber::compareGreater_data() |
289 | { |
290 | comparisonData(); |
291 | } |
292 | |
293 | void tst_QVersionNumber::compareGreater() |
294 | { |
295 | QFETCH(QVersionNumber, lhs); |
296 | QFETCH(QVersionNumber, rhs); |
297 | QFETCH(bool, greaterThan); |
298 | |
299 | QCOMPARE(lhs > rhs, greaterThan); |
300 | } |
301 | |
302 | void tst_QVersionNumber::compareGreaterEqual_data() |
303 | { |
304 | comparisonData(); |
305 | } |
306 | |
307 | void tst_QVersionNumber::compareGreaterEqual() |
308 | { |
309 | QFETCH(QVersionNumber, lhs); |
310 | QFETCH(QVersionNumber, rhs); |
311 | QFETCH(bool, greaterThanOrEqual); |
312 | |
313 | QCOMPARE(lhs >= rhs, greaterThanOrEqual); |
314 | } |
315 | |
316 | void tst_QVersionNumber::compareLess_data() |
317 | { |
318 | comparisonData(); |
319 | } |
320 | |
321 | void tst_QVersionNumber::compareLess() |
322 | { |
323 | QFETCH(QVersionNumber, lhs); |
324 | QFETCH(QVersionNumber, rhs); |
325 | QFETCH(bool, lessThan); |
326 | |
327 | QCOMPARE(lhs < rhs, lessThan); |
328 | } |
329 | |
330 | void tst_QVersionNumber::compareLessEqual_data() |
331 | { |
332 | comparisonData(); |
333 | } |
334 | |
335 | void tst_QVersionNumber::compareLessEqual() |
336 | { |
337 | QFETCH(QVersionNumber, lhs); |
338 | QFETCH(QVersionNumber, rhs); |
339 | QFETCH(bool, lessThanOrEqual); |
340 | |
341 | QCOMPARE(lhs <= rhs, lessThanOrEqual); |
342 | } |
343 | |
344 | void tst_QVersionNumber::compareEqual_data() |
345 | { |
346 | comparisonData(); |
347 | } |
348 | |
349 | void tst_QVersionNumber::compareEqual() |
350 | { |
351 | QFETCH(QVersionNumber, lhs); |
352 | QFETCH(QVersionNumber, rhs); |
353 | QFETCH(bool, equal); |
354 | |
355 | QCOMPARE(lhs == rhs, equal); |
356 | } |
357 | |
358 | void tst_QVersionNumber::compareNotEqual_data() |
359 | { |
360 | comparisonData(); |
361 | } |
362 | |
363 | void tst_QVersionNumber::compareNotEqual() |
364 | { |
365 | QFETCH(QVersionNumber, lhs); |
366 | QFETCH(QVersionNumber, rhs); |
367 | QFETCH(bool, notEqual); |
368 | |
369 | QCOMPARE(lhs != rhs, notEqual); |
370 | } |
371 | |
372 | void tst_QVersionNumber::compare_data() |
373 | { |
374 | comparisonData(); |
375 | } |
376 | |
377 | void tst_QVersionNumber::compare() |
378 | { |
379 | QFETCH(QVersionNumber, lhs); |
380 | QFETCH(QVersionNumber, rhs); |
381 | QFETCH(int, compareResult); |
382 | |
383 | QCOMPARE(QVersionNumber::compare(lhs, rhs), compareResult); |
384 | } |
385 | |
386 | void tst_QVersionNumber::isPrefixOf_data() |
387 | { |
388 | comparisonData(); |
389 | } |
390 | |
391 | void tst_QVersionNumber::isPrefixOf() |
392 | { |
393 | QFETCH(QVersionNumber, lhs); |
394 | QFETCH(QVersionNumber, rhs); |
395 | QFETCH(bool, isPrefix); |
396 | |
397 | QCOMPARE(lhs.isPrefixOf(rhs), isPrefix); |
398 | } |
399 | |
400 | void tst_QVersionNumber::commonPrefix_data() |
401 | { |
402 | comparisonData(); |
403 | } |
404 | |
405 | void tst_QVersionNumber::commonPrefix() |
406 | { |
407 | QFETCH(QVersionNumber, lhs); |
408 | QFETCH(QVersionNumber, rhs); |
409 | QFETCH(QVersionNumber, common); |
410 | |
411 | QVersionNumber calculatedPrefix = QVersionNumber::commonPrefix(v1: lhs, v2: rhs); |
412 | QCOMPARE(calculatedPrefix, common); |
413 | QCOMPARE(calculatedPrefix.segments(), common.segments()); |
414 | } |
415 | |
416 | void tst_QVersionNumber::normalized_data() |
417 | { |
418 | QTest::addColumn<QVersionNumber>(name: "version" ); |
419 | QTest::addColumn<QVersionNumber>(name: "expected" ); |
420 | |
421 | QTest::newRow(dataTag: "0" ) << QVersionNumber(0) << QVersionNumber(); |
422 | QTest::newRow(dataTag: "1" ) << QVersionNumber(1) << QVersionNumber(1); |
423 | QTest::newRow(dataTag: "1.2" ) << QVersionNumber(1, 2) << QVersionNumber(1, 2); |
424 | QTest::newRow(dataTag: "1.0" ) << QVersionNumber(1, 0) << QVersionNumber(1); |
425 | QTest::newRow(dataTag: "1.0.0" ) << QVersionNumber(1, 0, 0) << QVersionNumber(1); |
426 | QTest::newRow(dataTag: "1.0.1" ) << QVersionNumber(1, 0, 1) << QVersionNumber(1, 0, 1); |
427 | QTest::newRow(dataTag: "1.0.1.0" ) << QVersionNumber(QVector<int>() << 1 << 0 << 1 << 0) << QVersionNumber(1, 0, 1); |
428 | QTest::newRow(dataTag: "0.0.1.0" ) << QVersionNumber(QVector<int>() << 0 << 0 << 1 << 0) << QVersionNumber(0, 0, 1); |
429 | } |
430 | |
431 | void tst_QVersionNumber::normalized() |
432 | { |
433 | QFETCH(QVersionNumber, version); |
434 | QFETCH(QVersionNumber, expected); |
435 | |
436 | QCOMPARE(version.normalized(), expected); |
437 | QCOMPARE(std::move(version).normalized(), expected); |
438 | } |
439 | |
440 | void tst_QVersionNumber::isNormalized_data() |
441 | { |
442 | QTest::addColumn<QVersionNumber>(name: "version" ); |
443 | QTest::addColumn<bool>(name: "expected" ); |
444 | |
445 | QTest::newRow(dataTag: "null" ) << QVersionNumber() << true; |
446 | QTest::newRow(dataTag: "0" ) << QVersionNumber(0) << false; |
447 | QTest::newRow(dataTag: "1" ) << QVersionNumber(1) << true; |
448 | QTest::newRow(dataTag: "1.2" ) << QVersionNumber(1, 2) << true; |
449 | QTest::newRow(dataTag: "1.0" ) << QVersionNumber(1, 0) << false; |
450 | QTest::newRow(dataTag: "1.0.0" ) << QVersionNumber(1, 0, 0) << false; |
451 | QTest::newRow(dataTag: "1.0.1" ) << QVersionNumber(1, 0, 1) << true; |
452 | } |
453 | |
454 | void tst_QVersionNumber::isNormalized() |
455 | { |
456 | QFETCH(QVersionNumber, version); |
457 | QFETCH(bool, expected); |
458 | |
459 | QCOMPARE(version.isNormalized(), expected); |
460 | } |
461 | |
462 | void tst_QVersionNumber::assignment_data() |
463 | { |
464 | singleInstanceData(); |
465 | } |
466 | |
467 | void tst_QVersionNumber::assignment() |
468 | { |
469 | QFETCH(QVector<int>, segments); |
470 | QFETCH(QVersionNumber, expectedVersion); |
471 | |
472 | QVersionNumber original(segments); |
473 | QVersionNumber version; |
474 | version = original; |
475 | |
476 | QCOMPARE(version.majorVersion(), expectedVersion.majorVersion()); |
477 | QCOMPARE(version.minorVersion(), expectedVersion.minorVersion()); |
478 | QCOMPARE(version.microVersion(), expectedVersion.microVersion()); |
479 | QCOMPARE(version.segments(), expectedVersion.segments()); |
480 | } |
481 | |
482 | void tst_QVersionNumber::fromString_data() |
483 | { |
484 | singleInstanceData(); |
485 | |
486 | const quint64 largerThanIntCanHold = quint64(std::numeric_limits<int>::max()) + 1; |
487 | const QString largerThanIntCanHoldString0 = QString::number(largerThanIntCanHold) + ".0" ; |
488 | const QString largerThanIntCanHoldString1 = "0." + QString::number(largerThanIntCanHold); |
489 | |
490 | QTest::newRow(qPrintable(largerThanIntCanHoldString0)) |
491 | << QVector<int>() << QVersionNumber() << QString() << largerThanIntCanHoldString0 << 0 << true; |
492 | QTest::newRow(qPrintable(largerThanIntCanHoldString1)) |
493 | << QVector<int>(0) << QVersionNumber(0) << QStringLiteral("0" ) << largerThanIntCanHoldString1 << 1 << true; |
494 | |
495 | const QString largerThanULongLongCanHoldString0 = QString::number(std::numeric_limits<qulonglong>::max()) + "0.0" ; // 10x ULLONG_MAX |
496 | const QString largerThanULongLongCanHoldString1 = "0." + QString::number(std::numeric_limits<qulonglong>::max()) + '0'; // 10x ULLONG_MAX |
497 | |
498 | QTest::newRow(qPrintable(largerThanULongLongCanHoldString0)) |
499 | << QVector<int>() << QVersionNumber() << QString() << largerThanULongLongCanHoldString0 << 0 << true; |
500 | QTest::newRow(qPrintable(largerThanULongLongCanHoldString1)) |
501 | << QVector<int>(0) << QVersionNumber(0) << QStringLiteral("0" ) << largerThanULongLongCanHoldString1 << 1 << true; |
502 | } |
503 | |
504 | void tst_QVersionNumber::fromString() |
505 | { |
506 | QFETCH(QString, constructionString); |
507 | QFETCH(QVersionNumber, expectedVersion); |
508 | QFETCH(int, suffixIndex); |
509 | |
510 | int index; |
511 | QCOMPARE(QVersionNumber::fromString(constructionString), expectedVersion); |
512 | QCOMPARE(QVersionNumber::fromString(constructionString, &index), expectedVersion); |
513 | QCOMPARE(index, suffixIndex); |
514 | |
515 | QCOMPARE(QVersionNumber::fromString(QStringView(constructionString)), expectedVersion); |
516 | QCOMPARE(QVersionNumber::fromString(QStringView(constructionString), &index), expectedVersion); |
517 | QCOMPARE(index, suffixIndex); |
518 | |
519 | QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1())), expectedVersion); |
520 | QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1()), &index), expectedVersion); |
521 | QCOMPARE(index, suffixIndex); |
522 | } |
523 | |
524 | void tst_QVersionNumber::toString_data() |
525 | { |
526 | singleInstanceData(); |
527 | |
528 | // segments expectedVersion expectedString constructionString suffixIndex null |
529 | QTest::newRow(dataTag: "-1" ) << (QVector<int>() << -1) << QVersionNumber(-1) << QString("-1" ) << QString() << 0 << true; |
530 | QTest::newRow(dataTag: "-1.0" ) << (QVector<int>() << -1 << 0) << QVersionNumber(-1, 0) << QString("-1.0" ) << QString() << 0 << true; |
531 | QTest::newRow(dataTag: "1.-2" ) << (QVector<int>() << 1 << -2) << QVersionNumber(1, -2) << QString("1.-2" ) << QString() << 0 << true; |
532 | } |
533 | |
534 | void tst_QVersionNumber::toString() |
535 | { |
536 | QFETCH(QVersionNumber, expectedVersion); |
537 | QFETCH(QString, expectedString); |
538 | |
539 | QCOMPARE(expectedVersion.toString(), expectedString); |
540 | } |
541 | |
542 | void tst_QVersionNumber::isNull_data() |
543 | { |
544 | singleInstanceData(); |
545 | } |
546 | |
547 | void tst_QVersionNumber::isNull() |
548 | { |
549 | QFETCH(QVector<int>, segments); |
550 | QFETCH(bool, isNull); |
551 | |
552 | QVersionNumber version(segments); |
553 | |
554 | QCOMPARE(version.isNull(), isNull); |
555 | } |
556 | |
557 | void tst_QVersionNumber::serialize_data() |
558 | { |
559 | singleInstanceData(); |
560 | } |
561 | |
562 | void tst_QVersionNumber::serialize() |
563 | { |
564 | QFETCH(QVector<int>, segments); |
565 | |
566 | QVersionNumber original(segments); |
567 | QVersionNumber version; |
568 | |
569 | QByteArray buffer; |
570 | { |
571 | QDataStream ostream(&buffer, QIODevice::WriteOnly); |
572 | ostream << original; |
573 | } |
574 | { |
575 | QDataStream istream(buffer); |
576 | istream >> version; |
577 | } |
578 | |
579 | QCOMPARE(version.majorVersion(), original.majorVersion()); |
580 | QCOMPARE(version.minorVersion(), original.minorVersion()); |
581 | QCOMPARE(version.microVersion(), original.microVersion()); |
582 | QCOMPARE(version.segments(), original.segments()); |
583 | } |
584 | |
585 | void tst_QVersionNumber::moveSemantics() |
586 | { |
587 | // QVersionNumber(QVersionNumber &&) |
588 | { |
589 | QVersionNumber v1(1, 2, 3); |
590 | QVersionNumber v2 = std::move(v1); |
591 | QCOMPARE(v2, QVersionNumber(1, 2, 3)); |
592 | } |
593 | // QVersionNumber &operator=(QVersionNumber &&) |
594 | { |
595 | QVersionNumber v1(1, 2, 3); |
596 | QVersionNumber v2; |
597 | v2 = std::move(v1); |
598 | QCOMPARE(v2, QVersionNumber(1, 2, 3)); |
599 | } |
600 | // QVersionNumber(QVector<int> &&) |
601 | { |
602 | QVector<int> segments = QVector<int>() << 1 << 2 << 3; |
603 | QVersionNumber v1(segments); |
604 | QVersionNumber v2(std::move(segments)); |
605 | QVERIFY(!v1.isNull()); |
606 | QVERIFY(!v2.isNull()); |
607 | QCOMPARE(v1, v2); |
608 | } |
609 | #ifdef Q_COMPILER_REF_QUALIFIERS |
610 | // normalized() |
611 | { |
612 | QVersionNumber v(1, 0, 0); |
613 | QVERIFY(!v.isNull()); |
614 | QVersionNumber nv; |
615 | nv = v.normalized(); |
616 | QVERIFY(!v.isNull()); |
617 | QVERIFY(!nv.isNull()); |
618 | QVERIFY(nv.isNormalized()); |
619 | nv = std::move(v).normalized(); |
620 | QVERIFY(!nv.isNull()); |
621 | QVERIFY(nv.isNormalized()); |
622 | } |
623 | // segments() |
624 | { |
625 | QVersionNumber v(1, 2, 3); |
626 | QVERIFY(!v.isNull()); |
627 | QVector<int> segments; |
628 | segments = v.segments(); |
629 | QVERIFY(!v.isNull()); |
630 | QVERIFY(!segments.empty()); |
631 | segments = std::move(v).segments(); |
632 | QVERIFY(!segments.empty()); |
633 | } |
634 | #endif |
635 | } |
636 | |
637 | void tst_QVersionNumber::qtVersion() |
638 | { |
639 | QVersionNumber v = QLibraryInfo::version(); |
640 | QVERIFY(!v.isNull()); |
641 | QCOMPARE(v.majorVersion(), QT_VERSION_MAJOR); |
642 | // we can't compare the minor and micro version: |
643 | // the library may change without the test being recompiled |
644 | |
645 | QCOMPARE(v.toString(), QString(qVersion())); |
646 | } |
647 | |
648 | QTEST_APPLESS_MAIN(tst_QVersionNumber) |
649 | |
650 | #include "tst_qversionnumber.moc" |
651 | |