1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the test suite of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
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 http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 
43 #include <QtTest/QtTest>
44 
45 #include <QMimeData>
46 
47 class tst_QMimeData : public QObject
48 {
49     Q_OBJECT
50 public:
tst_QMimeData()51     tst_QMimeData()
52     {
53     }
54 
55 private slots:
56     void clear() const;
57     void colorData() const;
58     void data() const;
59     void formats() const;
60     void hasColor() const;
61     void hasFormat() const;
62     void hasHtml() const;
63     void hasImage() const;
64     // hasText() covered by setText()
65     // hasUrls() covered by setUrls()
66     // html() covered by setHtml()
67     void imageData() const;
68     void removeFormat() const;
69     // setColorData() covered by hasColor()
70     // setData() covered in a few different tests
71     void setHtml() const;
72     // setImageData() covered in a few tests
73     void setText() const;
74     void setUrls() const;
75     // text() covered in setText()
76     // urls() covered by setUrls()
77 };
78 
clear() const79 void tst_QMimeData::clear() const
80 {
81     QMimeData mimeData;
82 
83     // set, clear, verify empty
84     mimeData.setData("text/plain", "pirates");
85     QVERIFY(mimeData.hasText());
86     mimeData.clear();
87     QVERIFY(mimeData.hasText() == false);
88 
89     // repopulate, verify not empty
90     mimeData.setData("text/plain", "pirates");
91     QVERIFY(mimeData.hasText());
92 }
93 
colorData() const94 void tst_QMimeData::colorData() const
95 {
96     QMimeData mimeData;
97     QColor red = Qt::red;
98     QColor blue = Qt::blue;
99 
100     // set, verify
101     mimeData.setColorData(red);
102     QVERIFY(mimeData.hasColor());
103     QCOMPARE(qvariant_cast<QColor>(mimeData.colorData()), red);
104 
105     // change, verify
106     mimeData.setColorData(Qt::blue);
107     QVERIFY(mimeData.hasColor());
108     QCOMPARE(qvariant_cast<QColor>(mimeData.colorData()), blue);
109 }
110 
data() const111 void tst_QMimeData::data() const
112 {
113     QMimeData mimeData;
114 
115     // set text, verify
116     mimeData.setData("text/plain", "pirates");
117     QCOMPARE(mimeData.data("text/plain"), QByteArray("pirates"));
118     QVERIFY(mimeData.data("text/html").length() == 0);
119 
120     // html time
121     mimeData.setData("text/html", "ninjas");
122     QCOMPARE(mimeData.data("text/html"), QByteArray("ninjas"));
123     QCOMPARE(mimeData.data("text/plain"), QByteArray("pirates")); // make sure text not damaged
124     QCOMPARE(mimeData.data("text/html"), mimeData.html().toLatin1());
125 }
126 
formats() const127 void tst_QMimeData::formats() const
128 {
129     QMimeData mimeData;
130 
131     // set text, verify
132     mimeData.setData("text/plain", "pirates");
133     QCOMPARE(mimeData.formats(), QStringList() << "text/plain");
134 
135     // set html, verify
136     mimeData.setData("text/html", "ninjas");
137     QCOMPARE(mimeData.formats(), QStringList() << "text/plain" << "text/html");
138 
139     // clear, verify
140     mimeData.clear();
141     QCOMPARE(mimeData.formats(), QStringList());
142 
143     // set an odd format, verify
144     mimeData.setData("foo/bar", "somevalue");
145     QCOMPARE(mimeData.formats(), QStringList() << "foo/bar");
146 }
147 
hasColor() const148 void tst_QMimeData::hasColor() const
149 {
150     QMimeData mimeData;
151 
152     // initial state
153     QVERIFY(mimeData.hasColor() == false);
154 
155     // set, verify
156     mimeData.setColorData(QColor(Qt::red));
157     QVERIFY(mimeData.hasColor());
158 
159     // clear, verify
160     mimeData.clear();
161     QVERIFY(mimeData.hasColor() == false);
162 
163     // set something else, verify
164     mimeData.setData("text/plain", "pirates");
165     QVERIFY(mimeData.hasColor() == false);
166 }
167 
hasFormat() const168 void tst_QMimeData::hasFormat() const
169 {
170     QMimeData mimeData;
171 
172     // initial state
173     QVERIFY(mimeData.hasFormat("text/plain") == false);
174 
175     // add, verify
176     mimeData.setData("text/plain", "pirates");
177     QVERIFY(mimeData.hasFormat("text/plain"));
178     QVERIFY(mimeData.hasFormat("text/html") == false);
179 
180     // clear, verify
181     mimeData.clear();
182     QVERIFY(mimeData.hasFormat("text/plain") == false);
183     QVERIFY(mimeData.hasFormat("text/html") == false);
184 }
185 
hasHtml() const186 void tst_QMimeData::hasHtml() const
187 {
188     QMimeData mimeData;
189 
190     // initial state
191     QVERIFY(mimeData.hasHtml() == false);
192 
193     // add plain, verify false
194     mimeData.setData("text/plain", "pirates");
195     QVERIFY(mimeData.hasHtml() == false);
196 
197     // add html, verify
198     mimeData.setData("text/html", "ninjas");
199     QVERIFY(mimeData.hasHtml());
200 
201     // clear, verify
202     mimeData.clear();
203     QVERIFY(mimeData.hasHtml() == false);
204 
205     // readd, verify
206     mimeData.setData("text/html", "ninjas");
207     QVERIFY(mimeData.hasHtml());
208 }
209 
hasImage() const210 void tst_QMimeData::hasImage() const
211 {
212     QMimeData mimeData;
213 
214     // initial state
215     QVERIFY(mimeData.hasImage() == false);
216 
217     // add text, verify false
218     mimeData.setData("text/plain", "pirates");
219     QVERIFY(mimeData.hasImage() == false);
220 
221     // add image
222     mimeData.setImageData(QImage());
223     QVERIFY(mimeData.hasImage());
224 
225     // clear, verify
226     mimeData.clear();
227     QVERIFY(mimeData.hasImage() == false);
228 }
229 
imageData() const230 void tst_QMimeData::imageData() const
231 {
232     QMimeData mimeData;
233 
234     // initial state
235     QCOMPARE(mimeData.imageData(), QVariant());
236 
237     // set, test
238     mimeData.setImageData(QImage());
239     QVERIFY(mimeData.hasImage());
240     QCOMPARE(mimeData.imageData(), QVariant(QImage()));
241 
242     // clear, verify
243     mimeData.clear();
244     QCOMPARE(mimeData.imageData(), QVariant());
245 }
246 
removeFormat() const247 void tst_QMimeData::removeFormat() const
248 {
249     QMimeData mimeData;
250 
251     // add, verify
252     mimeData.setData("text/plain", "pirates");
253     QVERIFY(mimeData.hasFormat("text/plain"));
254 
255     // add another, verify
256     mimeData.setData("text/html", "ninjas");
257     QVERIFY(mimeData.hasFormat("text/html"));
258 
259     // remove, verify
260     mimeData.removeFormat("text/plain");
261     QVERIFY(mimeData.hasFormat("text/plain") == false);
262     QVERIFY(mimeData.hasFormat("text/html"));
263 
264     // remove, verify
265     mimeData.removeFormat("text/html");
266     QVERIFY(mimeData.hasFormat("text/plain") == false);
267     QVERIFY(mimeData.hasFormat("text/html") == false);
268 }
269 
setHtml() const270 void tst_QMimeData::setHtml() const
271 {
272     QMimeData mimeData;
273 
274     // initial state
275     QVERIFY(mimeData.hasHtml() == false);
276 
277     // add html, verify
278     mimeData.setHtml("ninjas");
279     QVERIFY(mimeData.hasHtml());
280     QCOMPARE(mimeData.html(), QLatin1String("ninjas"));
281 
282     // reset html
283     mimeData.setHtml("pirates");
284     QVERIFY(mimeData.hasHtml());
285     QCOMPARE(mimeData.html(), QLatin1String("pirates"));
286 }
287 
setText() const288 void tst_QMimeData::setText() const
289 {
290     QMimeData mimeData;
291 
292     // verify initial state
293     QCOMPARE(mimeData.text(), QLatin1String(""));
294     QVERIFY(mimeData.hasText() == false);
295 
296     // set, verify
297     mimeData.setText("pirates");
298     QVERIFY(mimeData.hasText());
299     QCOMPARE(mimeData.text(), QLatin1String("pirates"));
300     QCOMPARE(mimeData.text().toLatin1(), mimeData.data("text/plain"));
301 
302     // reset, verify
303     mimeData.setText("ninjas");
304     QVERIFY(mimeData.hasText());
305     QCOMPARE(mimeData.text(), QLatin1String("ninjas"));
306     QCOMPARE(mimeData.text().toLatin1(), mimeData.data("text/plain"));
307 
308     // clear, verify
309     mimeData.clear();
310     QCOMPARE(mimeData.text(), QLatin1String(""));
311     QVERIFY(mimeData.hasText() == false);
312 }
313 
setUrls() const314 void tst_QMimeData::setUrls() const
315 {
316     QMimeData mimeData;
317     QList<QUrl> shortUrlList;
318     QList<QUrl> longUrlList;
319 
320     // set up
321     shortUrlList += QUrl("http://qt.nokia.com");
322     longUrlList = shortUrlList;
323     longUrlList += QUrl("http://www.google.com");
324 
325     // verify initial state
326     QVERIFY(mimeData.hasUrls() == false);
327 
328     // set a few, verify
329     mimeData.setUrls(shortUrlList);
330     QCOMPARE(mimeData.urls(), shortUrlList);
331 
332     // change them, verify
333     mimeData.setUrls(longUrlList);
334     QCOMPARE(mimeData.urls(), longUrlList);
335 
336     // clear, verify
337     mimeData.clear();
338     QVERIFY(mimeData.hasUrls() == false);
339 }
340 
341 
342 QTEST_MAIN(tst_QMimeData)
343 #include "tst_qmimedata.moc"
344