Files
tdesktop/Telegram/ThirdParty/kcoreaddons/autotests/kurlmimedatatest.cpp
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Close stale issues and PRs / stale (push) Successful in 13s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
init
2026-02-16 15:50:16 +03:00

163 lines
5.5 KiB
C++

/*
This file is part of the KDE libraries
SPDX-FileCopyrightText: 2005 David Faure <faure@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "kurlmimedatatest.h"
#include <QMimeData>
#include <QTest>
#include <kurlmimedata.h>
QTEST_MAIN(KUrlMimeDataTest)
void KUrlMimeDataTest::testURLList()
{
QMimeData *mimeData = new QMimeData();
QVERIFY(!mimeData->hasUrls());
QList<QUrl> urls;
urls.append(QUrl(QLatin1String("https://www.kde.org")));
urls.append(QUrl(QLatin1String("http://wstephenson:secret@example.com/path")));
urls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
QMap<QString, QString> metaData;
metaData[QLatin1String("key")] = QLatin1String("value");
metaData[QLatin1String("key2")] = QLatin1String("value2");
KUrlMimeData::setUrls(QList<QUrl>(), urls, mimeData);
KUrlMimeData::setMetaData(metaData, mimeData);
QVERIFY(mimeData->hasUrls());
QVERIFY(mimeData->hasText());
QMap<QString, QString> decodedMetaData;
QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
QVERIFY(!decodedURLs.isEmpty());
QList<QUrl> expectedUrls = urls;
expectedUrls[1] = QUrl(QLatin1String("http://wstephenson:secret@example.com/path")); // password kept, unlike in KDE4, but that's okay, it's not displayed
QCOMPARE(expectedUrls, decodedURLs);
const QList<QUrl> qurls = mimeData->urls();
QCOMPARE(qurls.count(), urls.count());
for (int i = 0; i < qurls.count(); ++i) {
QCOMPARE(qurls[i], decodedURLs[i]);
}
QVERIFY(!decodedMetaData.isEmpty());
QCOMPARE(decodedMetaData[QLatin1String("key")], QString::fromLatin1("value"));
QCOMPARE(decodedMetaData[QLatin1String("key2")], QString::fromLatin1("value2"));
delete mimeData;
}
void KUrlMimeDataTest::testOneURL()
{
QUrl oneURL(QLatin1String("file:///tmp"));
QList<QUrl> oneEltList;
oneEltList.append(oneURL);
QMimeData *mimeData = new QMimeData();
KUrlMimeData::setUrls(QList<QUrl>(), oneEltList, mimeData);
QVERIFY(mimeData->hasUrls());
QMap<QString, QString> decodedMetaData;
QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
QVERIFY(!decodedURLs.isEmpty());
QCOMPARE(decodedURLs.count(), 1);
QCOMPARE(decodedURLs[0], oneURL);
QVERIFY(decodedMetaData.isEmpty());
delete mimeData;
}
void KUrlMimeDataTest::testFromQUrl()
{
QList<QUrl> qurls;
qurls.append(QUrl(QLatin1String("https://www.kde.org")));
qurls.append(QUrl(QLatin1String("file:///home/dfaure/konqtests/Mat%C3%A9riel")));
QMimeData *mimeData = new QMimeData();
KUrlMimeData::setUrls(QList<QUrl>(), qurls, mimeData);
QVERIFY(mimeData->hasUrls());
QMap<QString, QString> decodedMetaData;
QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferKdeUrls, &decodedMetaData);
QVERIFY(!decodedURLs.isEmpty());
QCOMPARE(decodedURLs.count(), 2);
QCOMPARE(decodedURLs[0], qurls[0]);
QCOMPARE(decodedURLs[1], qurls[1]);
QVERIFY(decodedMetaData.isEmpty());
delete mimeData;
}
void KUrlMimeDataTest::testMostLocalUrlList_data()
{
QTest::addColumn<bool>("withKdeUrls");
QTest::addColumn<bool>("withLocalUrls");
QTest::addColumn<bool>("expectedLocalUrls");
QTest::newRow("both") << true << true << false;
QTest::newRow("local_only") << false << true << true;
QTest::newRow("kde_only") << true << false << false;
}
void KUrlMimeDataTest::testMostLocalUrlList()
{
QFETCH(bool, withKdeUrls);
QFETCH(bool, withLocalUrls);
QFETCH(bool, expectedLocalUrls);
QMimeData *mimeData = new QMimeData();
QList<QUrl> urls;
urls.append(QUrl(QLatin1String("desktop:/foo")));
urls.append(QUrl(QLatin1String("desktop:/bar")));
QList<QUrl> localUrls;
localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/foo")));
localUrls.append(QUrl(QLatin1String("file:/home/dfaure/Desktop/bar")));
if (withKdeUrls && withLocalUrls) {
KUrlMimeData::setUrls(urls, localUrls, mimeData);
} else if (withKdeUrls) {
KUrlMimeData::setUrls(urls, {}, mimeData);
} else if (withLocalUrls) {
KUrlMimeData::setUrls({}, localUrls, mimeData);
}
QVERIFY(mimeData->hasUrls());
QVERIFY(mimeData->hasText());
// The support for urls is done in hasText, a direct call to hasFormat will say false.
// QVERIFY(mimeData->hasFormat(QLatin1String("text/plain")));
// urlsFromMimeData decodes the real "kde" urls by default, if any
QList<QUrl> decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData);
QVERIFY(!decodedURLs.isEmpty());
if (expectedLocalUrls) {
QCOMPARE(decodedURLs, localUrls);
} else {
QCOMPARE(decodedURLs, urls);
}
// urlsFromMimeData can also be told to decode the "most local" urls
decodedURLs = KUrlMimeData::urlsFromMimeData(mimeData, KUrlMimeData::PreferLocalUrls);
QVERIFY(!decodedURLs.isEmpty());
if (withLocalUrls) {
QCOMPARE(decodedURLs, localUrls);
} else {
QCOMPARE(decodedURLs, urls);
}
// QMimeData decodes the "most local" urls
const QList<QUrl> qurls = mimeData->urls();
if (withLocalUrls) {
QCOMPARE(qurls.count(), localUrls.count());
for (int i = 0; i < qurls.count(); ++i) {
QCOMPARE(qurls[i], static_cast<QUrl>(localUrls[i]));
}
} else {
QCOMPARE(qurls.count(), 0);
}
delete mimeData;
}
#include "moc_kurlmimedatatest.cpp"