File indexing completed on 2024-04-28 11:35:09

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2005 David Faure <faure@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "kurlmimedatatest.h"
0009 #include <QMimeData>
0010 #include <QTest>
0011 #include <kurlmimedata.h>
0012 
0013 QTEST_MAIN(KUrlMimeDataTest)
0014 
0015 void KUrlMimeDataTest::testURLList()
0016 {
0017     QMimeData *mimeData = new QMimeData();
0018     QVERIFY(!mimeData->hasUrls());
0019 
0020     QList<QUrl> urls;
0021     urls.append(QUrl(QLatin1String("https://www.kde.org")));
0022     urls.append(QUrl(QLatin1String("http://wstephenson:secret@example.com/path")));
0023     urls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
0024     QMap<QString, QString> metaData;
0025     metaData[QLatin1String("key")] = QLatin1String("value");
0026     metaData[QLatin1String("key2")] = QLatin1String("value2");
0027 
0028     KUrlMimeData::setUrls(QList<QUrl>(), urls, mimeData);
0029     KUrlMimeData::setMetaData(metaData, mimeData);
0030 
0031     QVERIFY(mimeData->hasUrls());
0032     QVERIFY(mimeData->hasText());
0033 
0034     QMap<QString, QString> decodedMetaData;
0035     QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
0036     QVERIFY(!decodedURLs.isEmpty());
0037     QList<QUrl> expectedUrls = urls;
0038     expectedUrls[1] = QUrl(QLatin1String("http://wstephenson:secret@example.com/path")); // password kept, unlike in KDE4, but that's okay, it's not displayed
0039     QCOMPARE(expectedUrls, decodedURLs);
0040 
0041     const QList<QUrl> qurls = mimeData->urls();
0042     QCOMPARE(qurls.count(), urls.count());
0043     for (int i = 0; i < qurls.count(); ++i) {
0044         QCOMPARE(qurls[i], decodedURLs[i]);
0045     }
0046 
0047     QVERIFY(!decodedMetaData.isEmpty());
0048     QCOMPARE(decodedMetaData[QLatin1String("key")], QString::fromLatin1("value"));
0049     QCOMPARE(decodedMetaData[QLatin1String("key2")], QString::fromLatin1("value2"));
0050 
0051     delete mimeData;
0052 }
0053 
0054 void KUrlMimeDataTest::testOneURL()
0055 {
0056     QUrl oneURL(QLatin1String("file:///tmp"));
0057     QList<QUrl> oneEltList;
0058     oneEltList.append(oneURL);
0059     QMimeData *mimeData = new QMimeData();
0060 
0061     KUrlMimeData::setUrls(QList<QUrl>(), oneEltList, mimeData);
0062     QVERIFY(mimeData->hasUrls());
0063 
0064     QMap<QString, QString> decodedMetaData;
0065     QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
0066     QVERIFY(!decodedURLs.isEmpty());
0067     QCOMPARE(decodedURLs.count(), 1);
0068     QCOMPARE(decodedURLs[0], oneURL);
0069     QVERIFY(decodedMetaData.isEmpty());
0070     delete mimeData;
0071 }
0072 
0073 void KUrlMimeDataTest::testFromQUrl()
0074 {
0075     QList<QUrl> qurls;
0076     qurls.append(QUrl(QLatin1String("https://www.kde.org")));
0077     qurls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
0078     QMimeData *mimeData = new QMimeData();
0079     KUrlMimeData::setUrls(QList<QUrl>(), qurls, mimeData);
0080     QVERIFY(mimeData->hasUrls());
0081 
0082     QMap<QString, QString> decodedMetaData;
0083     QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
0084     QVERIFY(!decodedURLs.isEmpty());
0085     QCOMPARE(decodedURLs.count(), 2);
0086     QCOMPARE(decodedURLs[0], qurls[0]);
0087     QCOMPARE(decodedURLs[1], qurls[1]);
0088     QVERIFY(decodedMetaData.isEmpty());
0089     delete mimeData;
0090 }
0091 
0092 void KUrlMimeDataTest::testMostLocalUrlList_data()
0093 {
0094     QTest::addColumn<bool>("withKdeUrls");
0095     QTest::addColumn<bool>("withLocalUrls");
0096     QTest::addColumn<bool>("expectedLocalUrls");
0097 
0098     QTest::newRow("both") << true << true << false;
0099     QTest::newRow("local_only") << false << true << true;
0100     QTest::newRow("kde_only") << true << false << false;
0101 }
0102 
0103 void KUrlMimeDataTest::testMostLocalUrlList()
0104 {
0105     QFETCH(bool, withKdeUrls);
0106     QFETCH(bool, withLocalUrls);
0107     QFETCH(bool, expectedLocalUrls);
0108 
0109     QMimeData *mimeData = new QMimeData();
0110     QList<QUrl> urls;
0111     urls.append(QUrl(QLatin1String("desktop:/foo")));
0112     urls.append(QUrl(QLatin1String("desktop:/bar")));
0113     QList<QUrl> localUrls;
0114     localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/foo")));
0115     localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/bar")));
0116 
0117     if (withKdeUrls && withLocalUrls) {
0118         KUrlMimeData::setUrls(urls, localUrls, mimeData);
0119     } else if (withKdeUrls) {
0120         KUrlMimeData::setUrls(urls, {}, mimeData);
0121     } else if (withLocalUrls) {
0122         KUrlMimeData::setUrls({}, localUrls, mimeData);
0123     }
0124 
0125     QVERIFY(mimeData->hasUrls());
0126     QVERIFY(mimeData->hasText());
0127     // The support for urls is done in hasText, a direct call to hasFormat will say false.
0128     // QVERIFY(mimeData->hasFormat(QLatin1String("text/plain")));
0129 
0130     // urlsFromMimeData decodes the real "kde" urls by default, if any
0131     QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData);
0132     QVERIFY(!decodedURLs.isEmpty());
0133     if (expectedLocalUrls) {
0134         QCOMPARE(decodedURLs, localUrls);
0135     } else {
0136         QCOMPARE(decodedURLs, urls);
0137     }
0138 
0139     // urlsFromMimeData can also be told to decode the "most local" urls
0140     decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferLocalUrls);
0141     QVERIFY(!decodedURLs.isEmpty());
0142     if (withLocalUrls) {
0143         QCOMPARE(decodedURLs, localUrls);
0144     } else {
0145         QCOMPARE(decodedURLs, urls);
0146     }
0147 
0148     // QMimeData decodes the "most local" urls
0149     const QList<QUrl> qurls = mimeData->urls();
0150     if (withLocalUrls) {
0151         QCOMPARE(qurls.count(), localUrls.count());
0152         for (int i = 0; i < qurls.count(); ++i) {
0153             QCOMPARE(qurls[i], static_cast<QUrl>(localUrls[i]));
0154         }
0155     } else {
0156         QCOMPARE(qurls.count(), 0);
0157     }
0158 
0159     delete mimeData;
0160 }
0161 
0162 #include "moc_kurlmimedatatest.cpp"