Advance Wayland and KDE package bring-up

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-14 10:51:06 +01:00
parent 51f3c21121
commit cf12defd28
15214 changed files with 20594243 additions and 269 deletions
@@ -0,0 +1,160 @@
/*
This file is part of the KDE libraries
SPDX-FileCopyrightText: 2005 David Faure <faure@kde.org>
SPDX-License-Identifier: LGPL-2.0-only
*/
#include <kbookmark.h>
#include <kbookmarkmanager.h>
#include <QDir>
#include <QMimeData>
#include <QObject>
#include <QStandardPaths>
#include <QTest>
class KBookmarkTest : public QObject
{
Q_OBJECT
private Q_SLOTS:
void initTestCase();
void cleanupTestCase();
void testMimeDataOneBookmark();
void testMimeDataBookmarkList();
void testFileCreatedExternally();
void testBookmarkManager();
};
static const QString placesFile()
{
const QString datadir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
QDir().mkpath(datadir);
return datadir + "/user-places.xbel";
}
void KBookmarkTest::initTestCase()
{
QStandardPaths::setTestModeEnabled(true);
QFile::remove(placesFile());
}
void KBookmarkTest::cleanupTestCase()
{
QFile::remove(placesFile());
}
static void compareBookmarks(const KBookmark &initialBookmark, const KBookmark &decodedBookmark)
{
QCOMPARE(decodedBookmark.url(), initialBookmark.url());
QCOMPARE(decodedBookmark.icon(), initialBookmark.icon());
QCOMPARE(decodedBookmark.text(), initialBookmark.text());
QCOMPARE(decodedBookmark.description(), initialBookmark.description());
QDomNamedNodeMap decodedAttribs = decodedBookmark.internalElement().attributes();
QDomNamedNodeMap initialAttribs = initialBookmark.internalElement().attributes();
QCOMPARE(decodedAttribs.count(), initialAttribs.count());
for (int i = 0; i < decodedAttribs.length(); ++i) {
QDomAttr decodedAttr = decodedAttribs.item(i).toAttr();
QDomAttr initialAttr = initialAttribs.item(i).toAttr();
QCOMPARE(decodedAttr.name(), initialAttr.name());
QCOMPARE(decodedAttr.value(), initialAttr.value());
}
}
void KBookmarkTest::testMimeDataOneBookmark()
{
QMimeData *mimeData = new QMimeData;
KBookmark bookmark = KBookmark::standaloneBookmark(QStringLiteral("KDE"), QUrl(QStringLiteral("http://www.kde.org")), QStringLiteral("icon"));
bookmark.setDescription(QStringLiteral("Comment"));
QVERIFY(!bookmark.isNull());
bookmark.populateMimeData(mimeData);
QDomDocument doc;
QVERIFY(mimeData->hasUrls());
QVERIFY(KBookmark::List::canDecode(mimeData));
const KBookmark::List decodedBookmarks = KBookmark::List::fromMimeData(mimeData, doc);
QVERIFY(!decodedBookmarks.isEmpty());
QCOMPARE(decodedBookmarks.count(), 1);
QVERIFY(!decodedBookmarks[0].isNull());
compareBookmarks(bookmark, decodedBookmarks[0]);
// Do like keditbookmarks's paste code: (CreateCommand::execute)
// Crashed before passing "doc" to fromMimeData (#160679)
QDomElement clonedElem = decodedBookmarks[0].internalElement().cloneNode().toElement();
delete mimeData;
}
void KBookmarkTest::testMimeDataBookmarkList()
{
QMimeData *mimeData = new QMimeData;
KBookmark bookmark1 = KBookmark::standaloneBookmark(QStringLiteral("KDE"), QUrl(QStringLiteral("http://www.kde.org")), QStringLiteral("icon"));
bookmark1.setDescription(QStringLiteral("KDE comment"));
QVERIFY(!bookmark1.isNull());
KBookmark bookmark2 = KBookmark::standaloneBookmark(QStringLiteral("KOffice"), QUrl(QStringLiteral("http://www.koffice.org")), QStringLiteral("koicon"));
bookmark2.setDescription(QStringLiteral("KOffice comment"));
QVERIFY(!bookmark2.isNull());
bookmark2.setMetaDataItem(QStringLiteral("key"), QStringLiteral("value"));
KBookmark::List initialBookmarks;
initialBookmarks.append(bookmark1);
initialBookmarks.append(bookmark2);
initialBookmarks.populateMimeData(mimeData);
QDomDocument doc;
QVERIFY(mimeData->hasUrls());
QVERIFY(KBookmark::List::canDecode(mimeData));
const KBookmark::List decodedBookmarks = KBookmark::List::fromMimeData(mimeData, doc);
QCOMPARE(decodedBookmarks.count(), 2);
QVERIFY(!decodedBookmarks[0].isNull());
QVERIFY(!decodedBookmarks[1].isNull());
compareBookmarks(bookmark1, decodedBookmarks[0]);
compareBookmarks(bookmark2, decodedBookmarks[1]);
delete mimeData;
}
void KBookmarkTest::testFileCreatedExternally()
{
KBookmarkManager sharedBookmarkManager(placesFile());
QVERIFY(sharedBookmarkManager.root().first().isNull());
QFile file(placesFile());
QVERIFY(file.open(QIODevice::WriteOnly));
file.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><xbel version=\"1.0\"><bookmark href=\"file:///external\"><title>external</title></bookmark></xbel>");
file.close();
QTRY_VERIFY(!sharedBookmarkManager.root().first().isNull());
KBookmark bk = sharedBookmarkManager.root().first();
QCOMPARE(bk.url().toString(), QString("file:///external"));
QCOMPARE(bk.fullText(), QString("external"));
}
void KBookmarkTest::testBookmarkManager()
{
// like kfileplacesmodel.cpp used to do
const QString placesModelFile = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/kfileplaces/bookmarks.xml";
KBookmarkManager bookmarkManager(placesModelFile);
// like kfileplacessharedbookmarks.cpp does
KBookmarkManager sharedBookmarkManager(placesFile());
// like kfilebookmarkhandler.cpp does
QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kfile/bookmarks.xml"));
if (file.isEmpty()) {
file = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/kfile/bookmarks.xml";
}
KBookmarkManager manager(file);
// This is just to check an old crash in the global-static destructor, not doing anything with
// these managers yet.
Q_UNUSED(bookmarkManager);
Q_UNUSED(sharedBookmarkManager);
Q_UNUSED(manager);
}
QTEST_MAIN(KBookmarkTest)
#include "kbookmarktest.moc"