1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the test suite of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
21 | ** included in the packaging of this file. Please review the following |
22 | ** information to ensure the GNU General Public License requirements will |
23 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
24 | ** |
25 | ** $QT_END_LICENSE$ |
26 | ** |
27 | ****************************************************************************/ |
28 | |
29 | |
30 | #include <QtTest/QtTest> |
31 | #include <QtCore/QUrl> |
32 | #include <QtNetwork/QNetworkCookie> |
33 | |
34 | |
35 | class tst_QNetworkCookie: public QObject |
36 | { |
37 | Q_OBJECT |
38 | |
39 | private slots: |
40 | void getterSetter(); |
41 | |
42 | void parseSingleCookie_data(); |
43 | void parseSingleCookie(); |
44 | |
45 | void parseMultipleCookies_data(); |
46 | void parseMultipleCookies(); |
47 | }; |
48 | |
49 | void tst_QNetworkCookie::getterSetter() |
50 | { |
51 | QNetworkCookie cookie; |
52 | QNetworkCookie otherCookie; |
53 | |
54 | QCOMPARE(cookie, otherCookie); |
55 | QCOMPARE(cookie, otherCookie); |
56 | QVERIFY(!(cookie != otherCookie)); |
57 | |
58 | QVERIFY(!cookie.isSecure()); |
59 | QVERIFY(cookie.isSessionCookie()); |
60 | QVERIFY(!cookie.expirationDate().isValid()); |
61 | QVERIFY(cookie.domain().isEmpty()); |
62 | QVERIFY(cookie.path().isEmpty()); |
63 | QVERIFY(cookie.name().isEmpty()); |
64 | QVERIFY(cookie.value().isEmpty()); |
65 | |
66 | // change something |
67 | cookie.setName("foo" ); |
68 | QVERIFY(!(cookie == otherCookie)); |
69 | QVERIFY(cookie != otherCookie); |
70 | |
71 | // test getters and setters: |
72 | QCOMPARE(cookie.name(), QByteArray("foo" )); |
73 | cookie.setName(0); |
74 | QVERIFY(cookie.name().isEmpty()); |
75 | |
76 | cookie.setValue("bar" ); |
77 | QCOMPARE(cookie.value(), QByteArray("bar" )); |
78 | cookie.setValue(0); |
79 | QVERIFY(cookie.value().isEmpty()); |
80 | |
81 | cookie.setPath("/" ); |
82 | QCOMPARE(cookie.path(), QString("/" )); |
83 | cookie.setPath(QString()); |
84 | QVERIFY(cookie.path().isEmpty()); |
85 | |
86 | cookie.setDomain(".tld" ); |
87 | QCOMPARE(cookie.domain(), QString(".tld" )); |
88 | cookie.setDomain(QString()); |
89 | QVERIFY(cookie.domain().isEmpty()); |
90 | |
91 | QDateTime now = QDateTime::currentDateTime(); |
92 | cookie.setExpirationDate(now); |
93 | QCOMPARE(cookie.expirationDate(), now); |
94 | QVERIFY(!cookie.isSessionCookie()); |
95 | cookie.setExpirationDate(QDateTime()); |
96 | QVERIFY(!cookie.expirationDate().isValid()); |
97 | QVERIFY(cookie.isSessionCookie()); |
98 | |
99 | cookie.setSecure(true); |
100 | QVERIFY(cookie.isSecure()); |
101 | cookie.setSecure(false); |
102 | QVERIFY(!cookie.isSecure()); |
103 | |
104 | QCOMPARE(cookie, otherCookie); |
105 | } |
106 | |
107 | void tst_QNetworkCookie::parseSingleCookie_data() |
108 | { |
109 | QTest::addColumn<QString>(name: "cookieString" ); |
110 | QTest::addColumn<QNetworkCookie>(name: "expectedCookie" ); |
111 | |
112 | QNetworkCookie cookie; |
113 | cookie.setName("a" ); |
114 | QTest::newRow(dataTag: "basic" ) << "a=" << cookie; |
115 | QTest::newRow(dataTag: "basic2" ) << " a=" << cookie; |
116 | QTest::newRow(dataTag: "basic3" ) << "a= " << cookie; |
117 | QTest::newRow(dataTag: "basic4" ) << " a= " << cookie; |
118 | QTest::newRow(dataTag: "basic5" ) << " a= ;" << cookie; |
119 | QTest::newRow(dataTag: "basic6" ) << " a=; " << cookie; |
120 | QTest::newRow(dataTag: "basic7" ) << " a =" << cookie; |
121 | QTest::newRow(dataTag: "basic8" ) << " a = " << cookie; |
122 | |
123 | cookie.setValue("b" ); |
124 | QTest::newRow(dataTag: "with-value" ) << "a=b" << cookie; |
125 | QTest::newRow(dataTag: "with-value2" ) << " a=b" << cookie; |
126 | QTest::newRow(dataTag: "with-value3" ) << "a=b " << cookie; |
127 | QTest::newRow(dataTag: "with-value4" ) << " a=b " << cookie; |
128 | QTest::newRow(dataTag: "with-value5" ) << " a=b ;" << cookie; |
129 | QTest::newRow(dataTag: "with-value6" ) << "a =b" << cookie; |
130 | QTest::newRow(dataTag: "with-value7" ) << "a= b" << cookie; |
131 | QTest::newRow(dataTag: "with-value8" ) << "a = b" << cookie; |
132 | QTest::newRow(dataTag: "with-value9" ) << "a = b " << cookie; |
133 | |
134 | cookie.setValue("\",\"" ); |
135 | QTest::newRow(dataTag: "with-value-with-special1" ) << "a = \",\" " << cookie; |
136 | cookie.setValue("\"" ); |
137 | QTest::newRow(dataTag: "with-value-with-special2" ) << "a = \";\" " << cookie; |
138 | cookie.setValue("\" \"" ); |
139 | QTest::newRow(dataTag: "with-value-with-special3" ) << "a = \" \" " << cookie; |
140 | cookie.setValue("\"\\\"\"" ); |
141 | QTest::newRow(dataTag: "with-value-with-special4" ) << "a = \"\\\"\" " << cookie; |
142 | cookie.setValue("\"\\\"a, b" ); |
143 | QTest::newRow(dataTag: "with-value-with-special5" ) << "a = \"\\\"a, b; c\\\"\"" << cookie; |
144 | // RFC6265 states that cookie values shouldn't contain commas, but we still allow them |
145 | // since they are only reserved for future compatibility and other browsers do the same. |
146 | cookie.setValue("," ); |
147 | QTest::newRow(dataTag: "with-value-with-special6" ) << "a = ," << cookie; |
148 | cookie.setValue(",b" ); |
149 | QTest::newRow(dataTag: "with-value-with-special7" ) << "a = ,b" << cookie; |
150 | cookie.setValue("b," ); |
151 | QTest::newRow(dataTag: "with-value-with-special8" ) << "a = b," << cookie; |
152 | |
153 | cookie.setValue("b c" ); |
154 | QTest::newRow(dataTag: "with-value-with-whitespace" ) << "a = b c" << cookie; |
155 | |
156 | cookie.setValue("\"b\"" ); |
157 | QTest::newRow(dataTag: "quoted-value" ) << "a = \"b\"" << cookie; |
158 | cookie.setValue("\"b c\"" ); |
159 | QTest::newRow(dataTag: "quoted-value-with-whitespace" ) << "a = \"b c\"" << cookie; |
160 | |
161 | cookie.setValue("b" ); |
162 | cookie.setSecure(true); |
163 | QTest::newRow(dataTag: "secure" ) << "a=b;secure" << cookie; |
164 | QTest::newRow(dataTag: "secure2" ) << "a=b;secure " << cookie; |
165 | QTest::newRow(dataTag: "secure3" ) << "a=b; secure" << cookie; |
166 | QTest::newRow(dataTag: "secure4" ) << "a=b; secure " << cookie; |
167 | QTest::newRow(dataTag: "secure5" ) << "a=b ;secure" << cookie; |
168 | QTest::newRow(dataTag: "secure6" ) << "a=b ;secure " << cookie; |
169 | QTest::newRow(dataTag: "secure7" ) << "a=b ; secure " << cookie; |
170 | QTest::newRow(dataTag: "secure8" ) << "a=b; Secure" << cookie; |
171 | |
172 | cookie.setSecure(false); |
173 | cookie.setHttpOnly(true); |
174 | QTest::newRow(dataTag: "httponly" ) << "a=b;httponly" << cookie; |
175 | QTest::newRow(dataTag: "httponly2" ) << "a=b;HttpOnly " << cookie; |
176 | QTest::newRow(dataTag: "httponly3" ) << "a=b; httpOnly" << cookie; |
177 | QTest::newRow(dataTag: "httponly4" ) << "a=b; HttpOnly " << cookie; |
178 | QTest::newRow(dataTag: "httponly5" ) << "a=b ;HttpOnly" << cookie; |
179 | QTest::newRow(dataTag: "httponly6" ) << "a=b ;httponly " << cookie; |
180 | QTest::newRow(dataTag: "httponly7" ) << "a=b ; HttpOnly " << cookie; |
181 | QTest::newRow(dataTag: "httponly8" ) << "a=b; Httponly" << cookie; |
182 | |
183 | cookie.setHttpOnly(false); |
184 | cookie.setPath("/" ); |
185 | QTest::newRow(dataTag: "path1" ) << "a=b;path=/" << cookie; |
186 | QTest::newRow(dataTag: "path2" ) << "a=b; path=/" << cookie; |
187 | QTest::newRow(dataTag: "path3" ) << "a=b;path=/ " << cookie; |
188 | QTest::newRow(dataTag: "path4" ) << "a=b;path =/ " << cookie; |
189 | QTest::newRow(dataTag: "path5" ) << "a=b;path= / " << cookie; |
190 | QTest::newRow(dataTag: "path6" ) << "a=b;path = / " << cookie; |
191 | QTest::newRow(dataTag: "path7" ) << "a=b;Path = / " << cookie; |
192 | QTest::newRow(dataTag: "path8" ) << "a=b; PATH = / " << cookie; |
193 | |
194 | cookie.setPath("/foo" ); |
195 | QTest::newRow(dataTag: "path9" ) << "a=b;path=/foo" << cookie; |
196 | |
197 | // some weird paths: |
198 | cookie.setPath("/with%20spaces" ); |
199 | QTest::newRow(dataTag: "path-with-spaces" ) << "a=b;path=/with%20spaces" << cookie; |
200 | QTest::newRow(dataTag: "path-with-spaces2" ) << "a=b; path=/with%20spaces " << cookie; |
201 | cookie.setPath(QString()); |
202 | QTest::newRow(dataTag: "invalid-path-with-spaces3" ) << "a=b; path=\"/with spaces\"" << cookie; |
203 | QTest::newRow(dataTag: "invalid-path-with-spaces4" ) << "a=b; path = \"/with spaces\" " << cookie; |
204 | cookie.setPath("/with spaces" ); |
205 | QTest::newRow(dataTag: "path-with-spaces5" ) << "a=b; path=/with spaces" << cookie; |
206 | QTest::newRow(dataTag: "path-with-spaces6" ) << "a=b; path = /with spaces " << cookie; |
207 | |
208 | cookie.setPath("/with\"Quotes" ); |
209 | QTest::newRow(dataTag: "path-with-quotes" ) << "a=b; path = /with\"Quotes" << cookie; |
210 | cookie.setPath(QString()); |
211 | QTest::newRow(dataTag: "invalid-path-with-quotes2" ) << "a=b; path = \"/with\\\"Quotes\"" << cookie; |
212 | |
213 | cookie.setPath(QString::fromUtf8(str: "/R\303\251sum\303\251" )); |
214 | QTest::newRow(dataTag: "path-with-utf8" ) << QString::fromUtf8(str: "a=b;path=/R\303\251sum\303\251" ) << cookie; |
215 | cookie.setPath("/R%C3%A9sum%C3%A9" ); |
216 | QTest::newRow(dataTag: "path-with-utf8-2" ) << "a=b;path=/R%C3%A9sum%C3%A9" << cookie; |
217 | |
218 | cookie.setPath(QString()); |
219 | cookie.setDomain("qt-project.org" ); |
220 | QTest::newRow(dataTag: "plain-domain1" ) << "a=b;domain=qt-project.org" << cookie; |
221 | QTest::newRow(dataTag: "plain-domain2" ) << "a=b; domain=qt-project.org " << cookie; |
222 | QTest::newRow(dataTag: "plain-domain3" ) << "a=b;domain=QT-PROJECT.ORG" << cookie; |
223 | QTest::newRow(dataTag: "plain-domain4" ) << "a=b;DOMAIN = QT-PROJECT.ORG" << cookie; |
224 | |
225 | cookie.setDomain(".qt-project.org" ); |
226 | QTest::newRow(dataTag: "dot-domain1" ) << "a=b;domain=.qt-project.org" << cookie; |
227 | QTest::newRow(dataTag: "dot-domain2" ) << "a=b; domain=.qt-project.org" << cookie; |
228 | QTest::newRow(dataTag: "dot-domain3" ) << "a=b; domain=.QT-PROJECT.ORG" << cookie; |
229 | QTest::newRow(dataTag: "dot-domain4" ) << "a=b; Domain = .QT-PROJECT.ORG" << cookie; |
230 | |
231 | cookie.setDomain(QString::fromUtf8(str: ".d\303\270gn\303\245pent.troll.no" )); |
232 | QTest::newRow(dataTag: "idn-domain1" ) << "a=b;domain=.xn--dgnpent-gxa2o.troll.no" << cookie; |
233 | QTest::newRow(dataTag: "idn-domain2" ) << QString::fromUtf8(str: "a=b;domain=.d\303\270gn\303\245pent.troll.no" ) << cookie; |
234 | QTest::newRow(dataTag: "idn-domain3" ) << "a=b;domain=.XN--DGNPENT-GXA2O.TROLL.NO" << cookie; |
235 | QTest::newRow(dataTag: "idn-domain4" ) << QString::fromUtf8(str: "a=b;domain=.D\303\230GN\303\205PENT.troll.NO" ) << cookie; |
236 | |
237 | cookie.setDomain(".qt-project.org" ); |
238 | cookie.setPath("/" ); |
239 | QTest::newRow(dataTag: "two-fields" ) << "a=b;domain=.qt-project.org;path=/" << cookie; |
240 | QTest::newRow(dataTag: "two-fields2" ) << "a=b; domain=.qt-project.org; path=/" << cookie; |
241 | QTest::newRow(dataTag: "two-fields3" ) << "a=b; domain=.qt-project.org ; path=/ " << cookie; |
242 | QTest::newRow(dataTag: "two-fields4" ) << "a=b;path=/; domain=.qt-project.org" << cookie; |
243 | QTest::newRow(dataTag: "two-fields5" ) << "a=b; path=/ ; domain=.qt-project.org" << cookie; |
244 | QTest::newRow(dataTag: "two-fields6" ) << "a=b; path= / ; domain =.qt-project.org" << cookie; |
245 | |
246 | cookie.setSecure(true); |
247 | QTest::newRow(dataTag: "three-fields" ) << "a=b;domain=.qt-project.org;path=/;secure" << cookie; |
248 | QTest::newRow(dataTag: "three-fields2" ) << "a=b;secure;path=/;domain=.qt-project.org" << cookie; |
249 | QTest::newRow(dataTag: "three-fields3" ) << "a=b;secure;domain=.qt-project.org; path=/" << cookie; |
250 | QTest::newRow(dataTag: "three-fields4" ) << "a = b;secure;domain=.qt-project.org; path=/" << cookie; |
251 | |
252 | cookie = QNetworkCookie(); |
253 | cookie.setName("a" ); |
254 | cookie.setValue("b" ); |
255 | cookie.setExpirationDate(QDateTime(QDate(2012, 1, 29), QTime(23, 59, 59), Qt::UTC)); |
256 | QTest::newRow(dataTag: "broken-expiration1" ) << "a=b; expires=Sun, 29-Jan-2012 23:59:59;" << cookie; |
257 | |
258 | cookie.setExpirationDate(QDateTime(QDate(1999, 11, 9), QTime(23, 12, 40), Qt::UTC)); |
259 | QTest::newRow(dataTag: "expiration1" ) << "a=b;expires=Wednesday, 09-Nov-1999 23:12:40 GMT" << cookie; |
260 | QTest::newRow(dataTag: "expiration2" ) << "a=b;expires=Wed, 09-Nov-1999 23:12:40 GMT" << cookie; |
261 | QTest::newRow(dataTag: "expiration3" ) << "a=b; expires=Wednesday, 09-Nov-1999 23:12:40 GMT " << cookie; |
262 | QTest::newRow(dataTag: "expiration-utc" ) << "a=b;expires=Wednesday, 09-Nov-1999 23:12:40 UTC" << cookie; |
263 | |
264 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 0, 0), Qt::UTC)); |
265 | QTest::newRow(dataTag: "time-0" ) << "a=b;expires=14 Apr 89 03:20" << cookie; |
266 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 0), Qt::UTC)); |
267 | QTest::newRow(dataTag: "time-1" ) << "a=b;expires=14 Apr 89 03:20:12" << cookie; |
268 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 88), Qt::UTC)); |
269 | QTest::newRow(dataTag: "time-2" ) << "a=b;expires=14 Apr 89 03:20:12.88" << cookie; |
270 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 88), Qt::UTC)); |
271 | QTest::newRow(dataTag: "time-3" ) << "a=b;expires=14 Apr 89 03:20:12.88am" << cookie; |
272 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(15, 20, 12, 88), Qt::UTC)); |
273 | QTest::newRow(dataTag: "time-4" ) << "a=b;expires=14 Apr 89 03:20:12.88pm" << cookie; |
274 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 88), Qt::UTC)); |
275 | QTest::newRow(dataTag: "time-5" ) << "a=b;expires=14 Apr 89 03:20:12.88 Am" << cookie; |
276 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(15, 20, 12, 88), Qt::UTC)); |
277 | QTest::newRow(dataTag: "time-6" ) << "a=b;expires=14 Apr 89 03:20:12.88 PM" << cookie; |
278 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(15, 20, 12, 88), Qt::UTC)); |
279 | QTest::newRow(dataTag: "time-7" ) << "a=b;expires=14 Apr 89 3:20:12.88 PM" << cookie; |
280 | |
281 | // normal months |
282 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 1), Qt::UTC)); |
283 | QTest::newRow(dataTag: "months-1" ) << "a=b;expires=Jan 1 89 1:1" << cookie; |
284 | cookie.setExpirationDate(QDateTime(QDate(1989, 2, 1), QTime(1, 1), Qt::UTC)); |
285 | QTest::newRow(dataTag: "months-2" ) << "a=b;expires=Feb 1 89 1:1" << cookie; |
286 | cookie.setExpirationDate(QDateTime(QDate(1989, 3, 1), QTime(1, 1), Qt::UTC)); |
287 | QTest::newRow(dataTag: "months-3" ) << "a=b;expires=mar 1 89 1:1" << cookie; |
288 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 1), QTime(1, 1), Qt::UTC)); |
289 | QTest::newRow(dataTag: "months-4" ) << "a=b;expires=Apr 1 89 1:1" << cookie; |
290 | cookie.setExpirationDate(QDateTime(QDate(1989, 5, 1), QTime(1, 1), Qt::UTC)); |
291 | QTest::newRow(dataTag: "months-5" ) << "a=b;expires=May 1 89 1:1" << cookie; |
292 | cookie.setExpirationDate(QDateTime(QDate(1989, 6, 1), QTime(1, 1), Qt::UTC)); |
293 | QTest::newRow(dataTag: "months-6" ) << "a=b;expires=Jun 1 89 1:1" << cookie; |
294 | cookie.setExpirationDate(QDateTime(QDate(1989, 7, 1), QTime(1, 1), Qt::UTC)); |
295 | QTest::newRow(dataTag: "months-7" ) << "a=b;expires=Jul 1 89 1:1" << cookie; |
296 | cookie.setExpirationDate(QDateTime(QDate(1989, 8, 1), QTime(1, 1), Qt::UTC)); |
297 | QTest::newRow(dataTag: "months-8" ) << "a=b;expires=Aug 1 89 1:1" << cookie; |
298 | cookie.setExpirationDate(QDateTime(QDate(1989, 9, 1), QTime(1, 1), Qt::UTC)); |
299 | QTest::newRow(dataTag: "months-9" ) << "a=b;expires=Sep 1 89 1:1" << cookie; |
300 | cookie.setExpirationDate(QDateTime(QDate(1989, 10, 1), QTime(1, 1), Qt::UTC)); |
301 | QTest::newRow(dataTag: "months-10" ) << "a=b;expires=Oct 1 89 1:1" << cookie; |
302 | cookie.setExpirationDate(QDateTime(QDate(1989, 11, 1), QTime(1, 1), Qt::UTC)); |
303 | QTest::newRow(dataTag: "months-11" ) << "a=b;expires=Nov 1 89 1:1" << cookie; |
304 | cookie.setExpirationDate(QDateTime(QDate(1989, 12, 1), QTime(1, 1), Qt::UTC)); |
305 | QTest::newRow(dataTag: "months-12" ) << "a=b;expires=Dec 1 89 1:1" << cookie; |
306 | |
307 | // extra months |
308 | cookie.setExpirationDate(QDateTime(QDate(1989, 12, 1), QTime(1, 1), Qt::UTC)); |
309 | QTest::newRow(dataTag: "months-13" ) << "a=b;expires=December 1 89 1:1" << cookie; |
310 | QTest::newRow(dataTag: "months-14" ) << "a=b;expires=1 89 1:1 Dec" << cookie; |
311 | //cookie.setExpirationDate(QDateTime()); |
312 | //QTest::newRow("months-15") << "a=b;expires=1 89 1:1 De" << cookie; |
313 | cookie.setExpirationDate(QDateTime(QDate(2024, 2, 29), QTime(1, 1), Qt::UTC)); |
314 | QTest::newRow(dataTag: "months-16" ) << "a=b;expires=2024 29 Feb 1:1" << cookie; |
315 | cookie.setExpirationDate(QDateTime(QDate(2024, 2, 29), QTime(1, 1), Qt::UTC)); |
316 | QTest::newRow(dataTag: "months-17" ) << "a=b;expires=Fri, 29-Feb-2024 01:01:00 GMT" << cookie; |
317 | QTest::newRow(dataTag: "months-18" ) << "a=b;expires=2024 29 Feb 1:1 GMT" << cookie; |
318 | |
319 | // normal offsets |
320 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
321 | QTest::newRow(dataTag: "zoneoffset-0" ) << "a=b;expires=Jan 1 89 8:0 PST" << cookie; |
322 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
323 | QTest::newRow(dataTag: "zoneoffset-1" ) << "a=b;expires=Jan 1 89 8:0 PDT" << cookie; |
324 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
325 | QTest::newRow(dataTag: "zoneoffset-2" ) << "a=b;expires=Jan 1 89 7:0 MST" << cookie; |
326 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
327 | QTest::newRow(dataTag: "zoneoffset-3" ) << "a=b;expires=Jan 1 89 7:0 MDT" << cookie; |
328 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
329 | QTest::newRow(dataTag: "zoneoffset-4" ) << "a=b;expires=Jan 1 89 6:0 CST" << cookie; |
330 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
331 | QTest::newRow(dataTag: "zoneoffset-5" ) << "a=b;expires=Jan 1 89 6:0 CDT" << cookie; |
332 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
333 | QTest::newRow(dataTag: "zoneoffset-6" ) << "a=b;expires=Jan 1 89 5:0 EST" << cookie; |
334 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
335 | QTest::newRow(dataTag: "zoneoffset-7" ) << "a=b;expires=Jan 1 89 5:0 EDT" << cookie; |
336 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
337 | QTest::newRow(dataTag: "zoneoffset-8" ) << "a=b;expires=Jan 1 89 4:0 AST" << cookie; |
338 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
339 | QTest::newRow(dataTag: "zoneoffset-9" ) << "a=b;expires=Jan 1 89 3:0 NST" << cookie; |
340 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
341 | QTest::newRow(dataTag: "zoneoffset-10" ) << "a=b;expires=Jan 1 89 0:0 GMT" << cookie; |
342 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
343 | QTest::newRow(dataTag: "zoneoffset-11" ) << "a=b;expires=Jan 1 89 0:0 BST" << cookie; |
344 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC)); |
345 | QTest::newRow(dataTag: "zoneoffset-12" ) << "a=b;expires=Jan 1 89 23:0 MET" << cookie; |
346 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC)); |
347 | QTest::newRow(dataTag: "zoneoffset-13" ) << "a=b;expires=Jan 1 89 22:0 EET" << cookie; |
348 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC)); |
349 | QTest::newRow(dataTag: "zoneoffset-14" ) << "a=b;expires=Jan 1 89 15:0 JST" << cookie; |
350 | |
351 | // extra offsets |
352 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC)); |
353 | QTest::newRow(dataTag: "zoneoffset-15" ) << "a=b;expires=Jan 1 89 15:0 JST+1" << cookie; |
354 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC)); |
355 | QTest::newRow(dataTag: "zoneoffset-16" ) << "a=b;expires=Jan 1 89 0:0 GMT+1" << cookie; |
356 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
357 | QTest::newRow(dataTag: "zoneoffset-17" ) << "a=b;expires=Jan 1 89 1:0 GMT-1" << cookie; |
358 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC)); |
359 | QTest::newRow(dataTag: "zoneoffset-18" ) << "a=b;expires=Jan 1 89 0:0 GMT+01" << cookie; |
360 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 5), Qt::UTC)); |
361 | QTest::newRow(dataTag: "zoneoffset-19" ) << "a=b;expires=Jan 1 89 0:0 GMT+0105" << cookie; |
362 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
363 | QTest::newRow(dataTag: "zoneoffset-20" ) << "a=b;expires=Jan 1 89 0:0 GMT+015" << cookie; |
364 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
365 | QTest::newRow(dataTag: "zoneoffset-21" ) << "a=b;expires=Jan 1 89 0:0 GM" << cookie; |
366 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
367 | QTest::newRow(dataTag: "zoneoffset-22" ) << "a=b;expires=Jan 1 89 0:0 GMT" << cookie; |
368 | |
369 | // offsets from gmt |
370 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC)); |
371 | QTest::newRow(dataTag: "zoneoffset-23" ) << "a=b;expires=Jan 1 89 0:0 +1" << cookie; |
372 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC)); |
373 | QTest::newRow(dataTag: "zoneoffset-24" ) << "a=b;expires=Jan 1 89 0:0 +01" << cookie; |
374 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 1), Qt::UTC)); |
375 | QTest::newRow(dataTag: "zoneoffset-25" ) << "a=b;expires=Jan 1 89 0:0 +0101" << cookie; |
376 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC)); |
377 | QTest::newRow(dataTag: "zoneoffset-26" ) << "a=b;expires=Jan 1 89 1:0 -1" << cookie; |
378 | |
379 | // Y2k |
380 | cookie.setExpirationDate(QDateTime(QDate(2000, 1, 1), QTime(0, 0), Qt::UTC)); |
381 | QTest::newRow(dataTag: "year-0" ) << "a=b;expires=Jan 1 00 0:0" << cookie; |
382 | cookie.setExpirationDate(QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC)); |
383 | QTest::newRow(dataTag: "year-1" ) << "a=b;expires=Jan 1 70 0:0" << cookie; |
384 | cookie.setExpirationDate(QDateTime(QDate(1971, 1, 1), QTime(0, 0), Qt::UTC)); |
385 | QTest::newRow(dataTag: "year-2" ) << "a=b;expires=Jan 1 71 0:0" << cookie; |
386 | |
387 | // Day, month, year |
388 | cookie.setExpirationDate(QDateTime(QDate(2013, 1, 2), QTime(0, 0), Qt::UTC)); |
389 | QTest::newRow(dataTag: "date-0" ) << "a=b;expires=Jan 2 13 0:0" << cookie; |
390 | QTest::newRow(dataTag: "date-1" ) << "a=b;expires=1-2-13 0:0" << cookie; |
391 | QTest::newRow(dataTag: "date-2" ) << "a=b;expires=1/2/13 0:0" << cookie; |
392 | QTest::newRow(dataTag: "date-3" ) << "a=b;expires=Jan 2 13 0:0" << cookie; |
393 | QTest::newRow(dataTag: "date-4" ) << "a=b;expires=Jan 2, 13 0:0" << cookie; |
394 | QTest::newRow(dataTag: "date-5" ) << "a=b;expires=1-2-13 0:0" << cookie; |
395 | QTest::newRow(dataTag: "date-6" ) << "a=b;expires=1/2/13 0:0" << cookie; |
396 | |
397 | // Known Year, determine month and day |
398 | cookie.setExpirationDate(QDateTime(QDate(1995, 1, 13), QTime(0, 0), Qt::UTC)); |
399 | QTest::newRow(dataTag: "knownyear-0" ) << "a=b;expires=13/1/95 0:0" << cookie; |
400 | QTest::newRow(dataTag: "knownyear-1" ) << "a=b;expires=95/13/1 0:0" << cookie; |
401 | QTest::newRow(dataTag: "knownyear-2" ) << "a=b;expires=1995/1/13 0:0" << cookie; |
402 | QTest::newRow(dataTag: "knownyear-3" ) << "a=b;expires=1995/13/1 0:0" << cookie; |
403 | cookie.setExpirationDate(QDateTime(QDate(1995, 1, 2), QTime(0, 0), Qt::UTC)); |
404 | QTest::newRow(dataTag: "knownyear-4" ) << "a=b;expires=1/2/95 0:0" << cookie; |
405 | QTest::newRow(dataTag: "knownyear-5" ) << "a=b;expires=95/1/2 0:0" << cookie; |
406 | |
407 | // Known Year, Known day, determining month |
408 | cookie.setExpirationDate(QDateTime(QDate(1995, 1, 13), QTime(0, 0), Qt::UTC)); |
409 | QTest::newRow(dataTag: "knownYD-0" ) << "a=b;expires=13/1/95 0:0" << cookie; |
410 | QTest::newRow(dataTag: "knownYD-1" ) << "a=b;expires=1/13/95 0:0" << cookie; |
411 | QTest::newRow(dataTag: "knownYD-2" ) << "a=b;expires=95/13/1 0:0" << cookie; |
412 | QTest::newRow(dataTag: "knownYD-3" ) << "a=b;expires=95/1/13 0:0" << cookie; |
413 | |
414 | // Month comes before Year |
415 | cookie.setExpirationDate(QDateTime(QDate(2021, 03, 26), QTime(0, 0), Qt::UTC)); |
416 | QTest::newRow(dataTag: "month-0" ) << "a=b;expires=26/03/21 0:0" << cookie; |
417 | cookie.setExpirationDate(QDateTime(QDate(2015, 12, 30), QTime(16, 25, 0, 0), Qt::UTC)); |
418 | QTest::newRow(dataTag: "month-1" ) << "a=b;expires=wed 16:25pm December 2015 30" << cookie; |
419 | cookie.setExpirationDate(QDateTime(QDate(2031, 11, 11), QTime(16, 25, 0, 0), Qt::UTC)); |
420 | QTest::newRow(dataTag: "month-2" ) << "a=b;expires=16:25 11 31 11" << cookie; |
421 | |
422 | // The very ambiguous cases |
423 | // Matching Firefox's behavior of guessing month, day, year in those cases |
424 | cookie.setExpirationDate(QDateTime(QDate(2013, 10, 2), QTime(0, 0), Qt::UTC)); |
425 | QTest::newRow(dataTag: "ambiguousd-0" ) << "a=b;expires=10/2/13 0:0" << cookie; |
426 | cookie.setExpirationDate(QDateTime(QDate(2013, 2, 10), QTime(0, 0), Qt::UTC)); |
427 | QTest::newRow(dataTag: "ambiguousd-1" ) << "a=b;expires=2/10/13 0:0" << cookie; |
428 | cookie.setExpirationDate(QDateTime(QDate(2010, 2, 3), QTime(0, 0), Qt::UTC)); |
429 | QTest::newRow(dataTag: "ambiguousd-2" ) << "a=b;expires=2/3/10 0:0" << cookie; |
430 | |
431 | // FYI If you try these in Firefox it won't set a cookie for the following two string |
432 | // because 03 is turned into the year at which point it is expired |
433 | cookie.setExpirationDate(QDateTime(QDate(2003, 2, 10), QTime(0, 0), Qt::UTC)); |
434 | QTest::newRow(dataTag: "ambiguousd-3" ) << "a=b;expires=2/10/3 0:0" << cookie; |
435 | cookie.setExpirationDate(QDateTime(QDate(2003, 10, 2), QTime(0, 0), Qt::UTC)); |
436 | QTest::newRow(dataTag: "ambiguousd-4" ) << "a=b;expires=10/2/3 0:0" << cookie; |
437 | |
438 | // These are the cookies that firefox's source says it can parse |
439 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 0, 0), Qt::UTC)); |
440 | QTest::newRow(dataTag: "firefox-0" ) << "a=b;expires=14 Apr 89 03:20" << cookie; |
441 | |
442 | cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 0, 0), Qt::UTC)); |
443 | QTest::newRow(dataTag: "firefox-1" ) << "a=b;expires=14 Apr 89 03:20 GMT" << cookie; |
444 | |
445 | cookie.setExpirationDate(QDateTime(QDate(1989, 3, 17), QTime(4, 1, 33, 0), Qt::UTC)); |
446 | QTest::newRow(dataTag: "firefox-2" ) << "a=b;expires=Fri, 17 Mar 89 4:01:33" << cookie; |
447 | |
448 | cookie.setExpirationDate(QDateTime(QDate(1989, 3, 17), QTime(4, 1, 0, 0), Qt::UTC)); |
449 | QTest::newRow(dataTag: "firefox-3" ) << "a=b;expires=Fri, 17 Mar 89 4:01 GMT" << cookie; |
450 | |
451 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 16), QTime(16-8, 12, 0, 0), Qt::UTC)); |
452 | QTest::newRow(dataTag: "firefox-4" ) << "a=b;expires=Mon Jan 16 16:12 PDT 1989" << cookie; |
453 | |
454 | cookie.setExpirationDate(QDateTime(QDate(1989, 1, 16), QTime(17, 42, 0, 0), Qt::UTC)); |
455 | QTest::newRow(dataTag: "firefox-5" ) << "a=b;expires=Mon Jan 16 16:12 +0130 1989" << cookie; |
456 | |
457 | cookie.setExpirationDate(QDateTime(QDate(1992, 5, 6), QTime(16-9, 41, 0, 0), Qt::UTC)); |
458 | QTest::newRow(dataTag: "firefox-6" ) << "a=b;expires=6 May 1992 16:41-JST (Wednesday)" << cookie; |
459 | |
460 | cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(10, 59, 12, 82), Qt::UTC)); |
461 | QTest::newRow(dataTag: "firefox-7" ) << "a=b;expires=22-AUG-1993 10:59:12.82" << cookie; |
462 | |
463 | cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(22, 59, 0, 0), Qt::UTC)); |
464 | QTest::newRow(dataTag: "firefox-8" ) << "a=b;expires=22-AUG-1993 10:59pm" << cookie; |
465 | |
466 | cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(12, 59, 0, 0), Qt::UTC)); |
467 | QTest::newRow(dataTag: "firefox-9" ) << "a=b;expires=22-AUG-1993 12:59am" << cookie; |
468 | |
469 | cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(12, 59, 0, 0), Qt::UTC)); |
470 | QTest::newRow(dataTag: "firefox-10" ) << "a=b;expires=22-AUG-1993 12:59 PM" << cookie; |
471 | |
472 | cookie.setExpirationDate(QDateTime(QDate(1995, 8, 4), QTime(15, 54, 0, 0), Qt::UTC)); |
473 | QTest::newRow(dataTag: "firefox-11" ) << "a=b;expires=Friday, August 04, 1995 3:54 PM" << cookie; |
474 | |
475 | cookie.setExpirationDate(QDateTime(QDate(1995, 6, 21), QTime(16, 24, 34, 0), Qt::UTC)); |
476 | QTest::newRow(dataTag: "firefox-12" ) << "a=b;expires=06/21/95 04:24:34 PM" << cookie; |
477 | |
478 | cookie.setExpirationDate(QDateTime(QDate(1995, 6, 20), QTime(21, 7, 0, 0), Qt::UTC)); |
479 | QTest::newRow(dataTag: "firefox-13" ) << "a=b;expires=20/06/95 21:07" << cookie; |
480 | |
481 | cookie.setExpirationDate(QDateTime(QDate(1995, 6, 8), QTime(19-5, 32, 48, 0), Qt::UTC)); |
482 | QTest::newRow(dataTag: "firefox-14" ) << "a=b;expires=95-06-08 19:32:48 EDT" << cookie; |
483 | |
484 | // Edge cases caught by fuzzing |
485 | // These are about the default cause creates dates that don't exits |
486 | cookie.setExpirationDate(QDateTime(QDate(2030, 2, 25), QTime(1, 1, 0, 0), Qt::UTC)); |
487 | QTest::newRow(dataTag: "fuzz-0" ) << "a=b; expires=30 -000002 1:1 25;" << cookie; |
488 | |
489 | cookie.setExpirationDate(QDateTime(QDate(2031, 11, 20), QTime(1, 1, 0, 0), Qt::UTC)); |
490 | QTest::newRow(dataTag: "fuzz-1" ) << "a=b; expires=31 11 20 1:1;" << cookie; |
491 | |
492 | // April only has 30 days |
493 | cookie.setExpirationDate(QDateTime(QDate(2031, 4, 30), QTime(1, 1, 0, 0), Qt::UTC)); |
494 | QTest::newRow(dataTag: "fuzz-2" ) << "a=b; expires=31 30 4 1:1" << cookie; |
495 | |
496 | // 9 must be the month so 31 can't be the day |
497 | cookie.setExpirationDate(QDateTime(QDate(2031, 9, 21), QTime(1, 1, 0, 0), Qt::UTC)); |
498 | QTest::newRow(dataTag: "fuzz-3" ) << "a=b; expires=31 21 9 1:1" << cookie; |
499 | |
500 | // Year is known, then fallback to defaults of filling in month and day |
501 | cookie.setExpirationDate(QDateTime(QDate(2031, 11, 1), QTime(1, 1, 0, 0), Qt::UTC)); |
502 | QTest::newRow(dataTag: "fuzz-4" ) << "a=b; expires=31 11 01 1:1" << cookie; |
503 | |
504 | // 2 must be the month so 30 can't be the day |
505 | cookie.setExpirationDate(QDateTime(QDate(2030, 2, 20), QTime(1, 1, 0, 0), Qt::UTC)); |
506 | QTest::newRow(dataTag: "fuzz-5" ) << "a=b; expires=30 02 20 1:1" << cookie; |
507 | |
508 | cookie.setExpirationDate(QDateTime(QDate(2021, 12, 22), QTime(1, 1, 0, 0), Qt::UTC)); |
509 | QTest::newRow(dataTag: "fuzz-6" ) << "a=b; expires=2021 12 22 1:1" << cookie; |
510 | |
511 | cookie.setExpirationDate(QDateTime(QDate(2029, 2, 23), QTime(1, 1, 0, 0), Qt::UTC)); |
512 | QTest::newRow(dataTag: "fuzz-7" ) << "a=b; expires=29 23 Feb 1:1" << cookie; |
513 | |
514 | // 11 and 6 don't have 31 days |
515 | cookie.setExpirationDate(QDateTime(QDate(2031, 11, 06), QTime(1, 1, 0, 0), Qt::UTC)); |
516 | QTest::newRow(dataTag: "fuzz-8" ) << "a=b; expires=31 11 06 1:1" << cookie; |
517 | |
518 | // two-digit years: |
519 | // from 70 until 99, we assume 20th century |
520 | cookie.setExpirationDate(QDateTime(QDate(1999, 11, 9), QTime(23, 12, 40), Qt::UTC)); |
521 | QTest::newRow(dataTag: "expiration-2digit1" ) << "a=b; expires=Wednesday, 09-Nov-99 23:12:40 GMT " << cookie; |
522 | cookie.setExpirationDate(QDateTime(QDate(1970, 1, 1), QTime(23, 12, 40), Qt::UTC)); |
523 | QTest::newRow(dataTag: "expiration-2digit2" ) << "a=b; expires=Thursday, 01-Jan-70 23:12:40 GMT " << cookie; |
524 | // from 00 until 69, we assume 21st century |
525 | cookie.setExpirationDate(QDateTime(QDate(2000, 1, 1), QTime(23, 12, 40), Qt::UTC)); |
526 | QTest::newRow(dataTag: "expiration-2digit3" ) << "a=b; expires=Saturday, 01-Jan-00 23:12:40 GMT " << cookie; |
527 | cookie.setExpirationDate(QDateTime(QDate(2020, 1, 1), QTime(23, 12, 40), Qt::UTC)); |
528 | QTest::newRow(dataTag: "expiration-2digit4" ) << "a=b; expires=Wednesday, 01-Jan-20 23:12:40 GMT " << cookie; |
529 | cookie.setExpirationDate(QDateTime(QDate(2069, 1, 1), QTime(23, 12, 40), Qt::UTC)); |
530 | QTest::newRow(dataTag: "expiration-2digit5" ) << "a=b; expires=Wednesday, 01-Jan-69 23:12:40 GMT " << cookie; |
531 | |
532 | cookie.setExpirationDate(QDateTime(QDate(1999, 11, 9), QTime(23, 12, 40), Qt::UTC)); |
533 | |
534 | cookie.setPath("/" ); |
535 | QTest::newRow(dataTag: "expires+path" ) << "a=b; expires=Wed, 09-Nov-1999 23:12:40 GMT; path=/" << cookie; |
536 | QTest::newRow(dataTag: "path+expires" ) << "a=b; path=/;expires=Wed, 09-Nov-1999 23:12:40 GMT " << cookie; |
537 | |
538 | cookie.setDomain(".qt-project.org" ); |
539 | QTest::newRow(dataTag: "full" ) << "a=b; domain=.qt-project.org;expires=Wed, 09-Nov-1999 23:12:40 GMT;path=/" << cookie; |
540 | QTest::newRow(dataTag: "full2" ) << "a=b;path=/; expires=Wed, 09-Nov-1999 23:12:40 GMT ;domain=.qt-project.org" << cookie; |
541 | |
542 | // cookies obtained from the network: |
543 | cookie = QNetworkCookie("__siteid" , "1" ); |
544 | cookie.setPath("/" ); |
545 | cookie.setExpirationDate(QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59), Qt::UTC)); |
546 | QTest::newRow(dataTag: "network2" ) << "__siteid=1; expires=Fri, 31-Dec-9999 23:59:59 GMT; path=/" << cookie; |
547 | |
548 | cookie = QNetworkCookie("YM.LC" , "v=2&m=9993_262838_159_1558_1063_0_5649_4012_3776161073,9426_260205_549_1295_1336_0_5141_4738_3922731647,6733_258196_952_1364_643_0_3560_-1_0,3677_237633_1294_1294_19267_0_3244_29483_4102206176,1315_235149_1693_1541_941_0_3224_1691_1861378060,1858_214311_2100_1298_19538_0_2873_30900_716411652,6258_212007_2506_1285_1017_0_2868_3606_4288540264,3743_207884_2895_1362_2759_0_2545_7114_3388520216,2654_205253_3257_1297_1332_0_2504_4682_3048534803,1891_184881_3660_1291_19079_0_978_29178_2592538685&f=1&n=20&s=date&o=down&e=1196548712&b=Inbox&u=removed" ); |
549 | cookie.setPath("/" ); |
550 | cookie.setDomain("mail.yahoo.com" ); |
551 | QTest::newRow(dataTag: "network3" ) << "YM.LC=v=2&m=9993_262838_159_1558_1063_0_5649_4012_3776161073,9426_260205_549_1295_1336_0_5141_4738_3922731647,6733_258196_952_1364_643_0_3560_-1_0,3677_237633_1294_1294_19267_0_3244_29483_4102206176,1315_235149_1693_1541_941_0_3224_1691_1861378060,1858_214311_2100_1298_19538_0_2873_30900_716411652,6258_212007_2506_1285_1017_0_2868_3606_4288540264,3743_207884_2895_1362_2759_0_2545_7114_3388520216,2654_205253_3257_1297_1332_0_2504_4682_3048534803,1891_184881_3660_1291_19079_0_978_29178_2592538685&f=1&n=20&s=date&o=down&e=1196548712&b=Inbox&u=removed; path=/; domain=mail.yahoo.com" << cookie; |
552 | |
553 | cookie = QNetworkCookie("__ac" , "\"c2hhdXNtYW46U2FTYW80Wm8%3D\"" ); |
554 | cookie.setPath("/" ); |
555 | cookie.setExpirationDate(QDateTime(QDate(2008, 8, 30), QTime(20, 21, 49), Qt::UTC)); |
556 | QTest::newRow(dataTag: "network4" ) << "__ac=\"c2hhdXNtYW46U2FTYW80Wm8%3D\"; Path=/; Expires=Sat, 30 Aug 2008 20:21:49 +0000" << cookie; |
557 | |
558 | // linkedin.com sends cookies in quotes and expects the cookie in quotes |
559 | cookie = QNetworkCookie("leo_auth_token" , "\"GST:UroVXaxYA3sVSkoVjMNH9bj4dZxVzK2yekgrAUxMfUsyLTNyPjoP60:1298974875:b675566ae32ab36d7a708c0efbf446a5c22b9fca\"" ); |
560 | cookie.setPath("/" ); |
561 | cookie.setExpirationDate(QDateTime(QDate(2011, 3, 1), QTime(10, 51, 14), Qt::UTC)); |
562 | QTest::newRow(dataTag: "network5" ) << "leo_auth_token=\"GST:UroVXaxYA3sVSkoVjMNH9bj4dZxVzK2yekgrAUxMfUsyLTNyPjoP60:1298974875:b675566ae32ab36d7a708c0efbf446a5c22b9fca\"; Version=1; Max-Age=1799; Expires=Tue, 01-Mar-2011 10:51:14 GMT; Path=/" << cookie; |
563 | |
564 | // cookie containing JSON data (illegal for server, client should accept) - QTBUG-26002 |
565 | cookie = QNetworkCookie("xploreCookies" , "{\"desktopReportingUrl\":\"null\",\"userIds\":\"1938850\",\"contactEmail\":\"NA\",\"contactName\":\"NA\",\"enterpriseLicenseId\":\"0\",\"openUrlTxt\":\"NA\",\"customerSurvey\":\"NA\",\"standardsLicenseId\":\"0\",\"openUrl\":\"NA\",\"smallBusinessLicenseId\":\"0\", \"instImage\":\"1938850_univ skovde.gif\",\"isMember\":\"false\",\"products\":\"IEL|VDE|\",\"openUrlImgLoc\":\"NA\",\"isIp\":\"true\",\"instName\": \"University of XXXXXX\",\"oldSessionKey\":\"LmZ8hlXo5a9uZx2Fnyw1564T1ZOWMnf3Dk*oDx2FQHwbg6RYefyrhC8PL2wx3Dx3D-18x2d8723DyqXRnkILyGpmx2Fh9wgx3Dx3Dc2lAOhHqGSKT78xxGwXZxxCgx3Dx3D-XrL4FnIlW2OPkqtVJq0LkQx3Dx3D-tujOLwhFqtX7Pa7HGqmCXQx3Dx3D\", \"isChargebackUser\":\"false\",\"isInst\":\"true\"}" ); |
566 | cookie.setDomain(".ieee.org" ); |
567 | cookie.setPath("/" ); |
568 | QTest::newRow(dataTag: "network6" ) << "xploreCookies={\"desktopReportingUrl\":\"null\",\"userIds\":\"1938850\",\"contactEmail\":\"NA\",\"contactName\":\"NA\",\"enterpriseLicenseId\":\"0\",\"openUrlTxt\":\"NA\",\"customerSurvey\":\"NA\",\"standardsLicenseId\":\"0\",\"openUrl\":\"NA\",\"smallBusinessLicenseId\":\"0\", \"instImage\":\"1938850_univ skovde.gif\",\"isMember\":\"false\",\"products\":\"IEL|VDE|\",\"openUrlImgLoc\":\"NA\",\"isIp\":\"true\",\"instName\": \"University of XXXXXX\",\"oldSessionKey\":\"LmZ8hlXo5a9uZx2Fnyw1564T1ZOWMnf3Dk*oDx2FQHwbg6RYefyrhC8PL2wx3Dx3D-18x2d8723DyqXRnkILyGpmx2Fh9wgx3Dx3Dc2lAOhHqGSKT78xxGwXZxxCgx3Dx3D-XrL4FnIlW2OPkqtVJq0LkQx3Dx3D-tujOLwhFqtX7Pa7HGqmCXQx3Dx3D\", \"isChargebackUser\":\"false\",\"isInst\":\"true\"}; domain=.ieee.org; path=/" << cookie; |
569 | } |
570 | |
571 | void tst_QNetworkCookie::parseSingleCookie() |
572 | { |
573 | QFETCH(QString, cookieString); |
574 | QFETCH(QNetworkCookie, expectedCookie); |
575 | |
576 | QList<QNetworkCookie> result = QNetworkCookie::parseCookies(cookieString: cookieString.toUtf8()); |
577 | |
578 | //QEXPECT_FAIL("network2", "QDateTime parsing problem: the date is beyond year 8000", Abort); |
579 | QCOMPARE(result.count(), 1); |
580 | QCOMPARE(result.at(0), expectedCookie); |
581 | |
582 | result = QNetworkCookie::parseCookies(cookieString: result.at(i: 0).toRawForm()); |
583 | QCOMPARE(result.count(), 1); |
584 | |
585 | // Drop any millisecond information, if there's any |
586 | QDateTime dt = expectedCookie.expirationDate(); |
587 | if (dt.isValid()) { |
588 | QTime t = dt.time(); |
589 | dt.setTime(t.addMSecs(ms: -t.msec())); |
590 | expectedCookie.setExpirationDate(dt); |
591 | } |
592 | |
593 | QCOMPARE(result.at(0), expectedCookie); |
594 | } |
595 | |
596 | void tst_QNetworkCookie::parseMultipleCookies_data() |
597 | { |
598 | QTest::addColumn<QString>(name: "cookieString" ); |
599 | QTest::addColumn<QList<QNetworkCookie> >(name: "expectedCookies" ); |
600 | |
601 | QList<QNetworkCookie> list; |
602 | QTest::newRow(dataTag: "empty" ) << "" << list; |
603 | |
604 | // these are technically empty cookies: |
605 | QTest::newRow(dataTag: "invalid-01" ) << ";" << list; |
606 | QTest::newRow(dataTag: "invalid-02" ) << " " << list; |
607 | QTest::newRow(dataTag: "invalid-03" ) << " ," << list; |
608 | QTest::newRow(dataTag: "invalid-04" ) << ";;,, ; ; , , ; , ;" << list; |
609 | |
610 | // these are really invalid: |
611 | // reason: malformed NAME=VALUE pair |
612 | QTest::newRow(dataTag: "invalid-05" ) << "foo" << list; |
613 | QTest::newRow(dataTag: "invalid-06" ) << "=b" << list; |
614 | QTest::newRow(dataTag: "invalid-07" ) << ";path=/" << list; |
615 | |
616 | // these should be accepted by RFC6265 but ignoring the expires field |
617 | // reason: malformed expiration date string |
618 | QNetworkCookie datelessCookie; |
619 | datelessCookie.setName("a" ); |
620 | datelessCookie.setValue("b" ); |
621 | list << datelessCookie; |
622 | QTest::newRow(dataTag: "expiration-empty" ) << "a=b;expires=" << list; |
623 | QTest::newRow(dataTag: "expiration-invalid-01" ) << "a=b;expires=foobar" << list; |
624 | QTest::newRow(dataTag: "expiration-invalid-02" ) << "a=b;expires=foobar, abc" << list; |
625 | QTest::newRow(dataTag: "expiration-invalid-03" ) << "a=b; expires=123" << list; // used to ASSERT |
626 | datelessCookie.setPath("/" ); |
627 | list.clear(); |
628 | list << datelessCookie; |
629 | QTest::newRow(dataTag: "expiration-invalid-04" ) << "a=b;expires=foobar, dd-mmm-yyyy hh:mm:ss GMT; path=/" << list; |
630 | QTest::newRow(dataTag: "expiration-invalid-05" ) << "a=b;expires=foobar, 32-Caz-1999 24:01:60 GMT; path=/" << list; |
631 | |
632 | // cookies obtained from the network: |
633 | QNetworkCookie cookie; |
634 | cookie = QNetworkCookie("id" , "51706646077999719" ); |
635 | cookie.setDomain(".bluestreak.com" ); |
636 | cookie.setPath("/" ); |
637 | cookie.setExpirationDate(QDateTime(QDate(2017, 12, 05), QTime(9, 11, 7), Qt::UTC)); |
638 | list << cookie; |
639 | cookie.setName("bb" ); |
640 | cookie.setValue("\\\"K14144t\\\"_AAQ\\\"ototrK_A_ttot44AQ4KwoRQtoto|" ); |
641 | list << cookie; |
642 | cookie.setName("adv" ); |
643 | cookie.setValue(QByteArray()); |
644 | list << cookie; |
645 | QTest::newRow(dataTag: "network1" ) << "id=51706646077999719 bb=\"K14144t\"_AAQ\"ototrK_A_ttot44AQ4KwoRQtoto| adv=; Domain=.bluestreak.com; expires=Tuesday 05-Dec-2017 09:11:07 GMT; path=/;" << list; |
646 | |
647 | QNetworkCookie cookieA; |
648 | cookieA.setName("a" ); |
649 | cookieA.setValue("b" ); |
650 | |
651 | QNetworkCookie cookieB; |
652 | cookieB.setName("c" ); |
653 | cookieB.setValue("d" ); |
654 | |
655 | // NewLine |
656 | cookieA.setExpirationDate(QDateTime(QDate(2009, 3, 10), QTime(7, 0, 0, 0), Qt::UTC)); |
657 | cookieB.setExpirationDate(QDateTime(QDate(2009, 3, 20), QTime(7, 0, 0, 0), Qt::UTC)); |
658 | list = QList<QNetworkCookie>() << cookieA << cookieB; |
659 | QTest::newRow(dataTag: "real-0" ) << "a=b; expires=Tue Mar 10 07:00:00 2009 GMT\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list; |
660 | QTest::newRow(dataTag: "real-1" ) << "a=b; expires=Tue Mar 10 07:00:00 2009 GMT\n\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list; |
661 | QTest::newRow(dataTag: "real-2" ) << "a=b; expires=Mar 10 07:00:00 2009 GMT, Tue\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list; |
662 | |
663 | // Match firefox's behavior |
664 | cookieA.setPath("/foo" ); |
665 | list = QList<QNetworkCookie>() << cookieA << cookieB; |
666 | QTest::newRow(dataTag: "real-3" ) << "a=b; expires=Mar 10 07:00:00 2009 GMT, Tue; path=/foo\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list; |
667 | |
668 | // do not accept cookies with non-alphanumeric characters in domain field (QTBUG-11029) |
669 | cookie = QNetworkCookie("NonAlphNumDomName" , "NonAlphNumDomValue" ); |
670 | cookie.setDomain("!@#$%^&*();:." ); // the ';' is actually problematic, because it is a separator |
671 | list = QList<QNetworkCookie>(); |
672 | QTest::newRow(dataTag: "domain-non-alpha-numeric" ) << "NonAlphNumDomName=NonAlphNumDomValue; domain=!@#$%^&*()" << list; |
673 | } |
674 | |
675 | void tst_QNetworkCookie::parseMultipleCookies() |
676 | { |
677 | QFETCH(QString, cookieString); |
678 | QFETCH(QList<QNetworkCookie>, expectedCookies); |
679 | |
680 | QList<QNetworkCookie> result = QNetworkCookie::parseCookies(cookieString: cookieString.toUtf8()); |
681 | |
682 | QEXPECT_FAIL("network1" , "Apparently multiple cookies set in one request (and an invalid date)" , Abort); |
683 | QCOMPARE(result, expectedCookies); |
684 | } |
685 | |
686 | QTEST_MAIN(tst_QNetworkCookie) |
687 | #include "tst_qnetworkcookie.moc" |
688 | |