kurlmimedatatest.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. This file is part of the KDE libraries
  3. SPDX-FileCopyrightText: 2005 David Faure <faure@kde.org>
  4. SPDX-License-Identifier: LGPL-2.0-or-later
  5. */
  6. #include "kurlmimedatatest.h"
  7. #include <QMimeData>
  8. #include <QTest>
  9. #include <kurlmimedata.h>
  10. QTEST_MAIN(KUrlMimeDataTest)
  11. void KUrlMimeDataTest::testURLList()
  12. {
  13. QMimeData *mimeData = new QMimeData();
  14. QVERIFY(!mimeData->hasUrls());
  15. QList<QUrl> urls;
  16. urls.append(QUrl(QLatin1String("https://www.kde.org")));
  17. urls.append(QUrl(QLatin1String("http://wstephenson:secret@example.com/path")));
  18. urls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
  19. QMap<QString, QString> metaData;
  20. metaData[QLatin1String("key")] = QLatin1String("value");
  21. metaData[QLatin1String("key2")] = QLatin1String("value2");
  22. KUrlMimeData::setUrls(QList<QUrl>(), urls, mimeData);
  23. KUrlMimeData::setMetaData(metaData, mimeData);
  24. QVERIFY(mimeData->hasUrls());
  25. QVERIFY(mimeData->hasText());
  26. QMap<QString, QString> decodedMetaData;
  27. QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
  28. QVERIFY(!decodedURLs.isEmpty());
  29. QList<QUrl> expectedUrls = urls;
  30. expectedUrls[1] = QUrl(QLatin1String("http://wstephenson:secret@example.com/path")); // password kept, unlike in KDE4, but that's okay, it's not displayed
  31. QCOMPARE(expectedUrls, decodedURLs);
  32. const QList<QUrl> qurls = mimeData->urls();
  33. QCOMPARE(qurls.count(), urls.count());
  34. for (int i = 0; i < qurls.count(); ++i) {
  35. QCOMPARE(qurls[i], decodedURLs[i]);
  36. }
  37. QVERIFY(!decodedMetaData.isEmpty());
  38. QCOMPARE(decodedMetaData[QLatin1String("key")], QString::fromLatin1("value"));
  39. QCOMPARE(decodedMetaData[QLatin1String("key2")], QString::fromLatin1("value2"));
  40. delete mimeData;
  41. }
  42. void KUrlMimeDataTest::testOneURL()
  43. {
  44. QUrl oneURL(QLatin1String("file:///tmp"));
  45. QList<QUrl> oneEltList;
  46. oneEltList.append(oneURL);
  47. QMimeData *mimeData = new QMimeData();
  48. KUrlMimeData::setUrls(QList<QUrl>(), oneEltList, mimeData);
  49. QVERIFY(mimeData->hasUrls());
  50. QMap<QString, QString> decodedMetaData;
  51. QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
  52. QVERIFY(!decodedURLs.isEmpty());
  53. QCOMPARE(decodedURLs.count(), 1);
  54. QCOMPARE(decodedURLs[0], oneURL);
  55. QVERIFY(decodedMetaData.isEmpty());
  56. delete mimeData;
  57. }
  58. void KUrlMimeDataTest::testFromQUrl()
  59. {
  60. QList<QUrl> qurls;
  61. qurls.append(QUrl(QLatin1String("https://www.kde.org")));
  62. qurls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
  63. QMimeData *mimeData = new QMimeData();
  64. KUrlMimeData::setUrls(QList<QUrl>(), qurls, mimeData);
  65. QVERIFY(mimeData->hasUrls());
  66. QMap<QString, QString> decodedMetaData;
  67. QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
  68. QVERIFY(!decodedURLs.isEmpty());
  69. QCOMPARE(decodedURLs.count(), 2);
  70. QCOMPARE(decodedURLs[0], qurls[0]);
  71. QCOMPARE(decodedURLs[1], qurls[1]);
  72. QVERIFY(decodedMetaData.isEmpty());
  73. delete mimeData;
  74. }
  75. void KUrlMimeDataTest::testMostLocalUrlList_data()
  76. {
  77. QTest::addColumn<bool>("withKdeUrls");
  78. QTest::addColumn<bool>("withLocalUrls");
  79. QTest::addColumn<bool>("expectedLocalUrls");
  80. QTest::newRow("both") << true << true << false;
  81. QTest::newRow("local_only") << false << true << true;
  82. QTest::newRow("kde_only") << true << false << false;
  83. }
  84. void KUrlMimeDataTest::testMostLocalUrlList()
  85. {
  86. QFETCH(bool, withKdeUrls);
  87. QFETCH(bool, withLocalUrls);
  88. QFETCH(bool, expectedLocalUrls);
  89. QMimeData *mimeData = new QMimeData();
  90. QList<QUrl> urls;
  91. urls.append(QUrl(QLatin1String("desktop:/foo")));
  92. urls.append(QUrl(QLatin1String("desktop:/bar")));
  93. QList<QUrl> localUrls;
  94. localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/foo")));
  95. localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/bar")));
  96. if (withKdeUrls && withLocalUrls) {
  97. KUrlMimeData::setUrls(urls, localUrls, mimeData);
  98. } else if (withKdeUrls) {
  99. KUrlMimeData::setUrls(urls, {}, mimeData);
  100. } else if (withLocalUrls) {
  101. KUrlMimeData::setUrls({}, localUrls, mimeData);
  102. }
  103. QVERIFY(mimeData->hasUrls());
  104. QVERIFY(mimeData->hasText());
  105. // The support for urls is done in hasText, a direct call to hasFormat will say false.
  106. // QVERIFY(mimeData->hasFormat(QLatin1String("text/plain")));
  107. // urlsFromMimeData decodes the real "kde" urls by default, if any
  108. QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData);
  109. QVERIFY(!decodedURLs.isEmpty());
  110. if (expectedLocalUrls) {
  111. QCOMPARE(decodedURLs, localUrls);
  112. } else {
  113. QCOMPARE(decodedURLs, urls);
  114. }
  115. // urlsFromMimeData can also be told to decode the "most local" urls
  116. decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferLocalUrls);
  117. QVERIFY(!decodedURLs.isEmpty());
  118. if (withLocalUrls) {
  119. QCOMPARE(decodedURLs, localUrls);
  120. } else {
  121. QCOMPARE(decodedURLs, urls);
  122. }
  123. // QMimeData decodes the "most local" urls
  124. const QList<QUrl> qurls = mimeData->urls();
  125. if (withLocalUrls) {
  126. QCOMPARE(qurls.count(), localUrls.count());
  127. for (int i = 0; i < qurls.count(); ++i) {
  128. QCOMPARE(qurls[i], static_cast<QUrl>(localUrls[i]));
  129. }
  130. } else {
  131. QCOMPARE(qurls.count(), 0);
  132. }
  133. delete mimeData;
  134. }
  135. #include "moc_kurlmimedatatest.cpp"