File indexing completed on 2024-04-28 15:20:12
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"