File indexing completed on 2024-04-28 04:55:54

0001 /* ============================================================
0002 * Falkon - Qt web browser
0003 * Copyright (C) 2018 Anmol Gautam <tarptaeya@gmail.com>
0004 *
0005 * This program is free software: you can redistribute it and/or modify
0006 * it under the terms of the GNU General Public License as published by
0007 * the Free Software Foundation, either version 3 of the License, or
0008 * (at your option) any later version.
0009 *
0010 * This program is distributed in the hope that it will be useful,
0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0013 * GNU General Public License for more details.
0014 *
0015 * You should have received a copy of the GNU General Public License
0016 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0017 * ============================================================ */
0018 #include "qmlbookmarksapitest.h"
0019 #include "autotests.h"
0020 #include "mainapplication.h"
0021 #include "bookmarks.h"
0022 #include "qml/api/bookmarks/qmlbookmarktreenode.h"
0023 
0024 void QmlBookmarksApiTest::initTestCase()
0025 {
0026 }
0027 
0028 void QmlBookmarksApiTest::cleanupTestCase()
0029 {
0030 }
0031 
0032 void QmlBookmarksApiTest::testBookmarkTreeNodeType()
0033 {
0034     auto type = BookmarkItem::Type(m_testHelper.evaluate(QSL("Falkon.Bookmarks.rootItem().type")).toInt());
0035     QCOMPARE(mApp->bookmarks()->rootItem()->type(), type);
0036 
0037     type = BookmarkItem::Type(m_testHelper.evaluate(QSL("Falkon.Bookmarks.toolbarFolder().type")).toInt());
0038     QCOMPARE(mApp->bookmarks()->toolbarFolder()->type(), type);
0039 }
0040 
0041 void QmlBookmarksApiTest::testBookmarkTreeNode()
0042 {
0043     QObject *bookmark = m_testHelper.evaluateQObject(QSL("Falkon.Bookmarks.toolbarFolder()"));
0044     QVERIFY(bookmark);
0045     auto toolbarFolder = mApp->bookmarks()->toolbarFolder();
0046 
0047     QCOMPARE(toolbarFolder->title(), bookmark->property("title").toString());
0048     QCOMPARE(toolbarFolder->urlString(), bookmark->property("url").toString());
0049     QCOMPARE(toolbarFolder->description(), bookmark->property("description").toString());
0050     QCOMPARE(!mApp->bookmarks()->canBeModified(toolbarFolder), bookmark->property("unmodifiable").toBool());
0051     auto* parent = qvariant_cast<QObject*>(bookmark->property("parent"));
0052     QVERIFY(parent);
0053     QCOMPARE(mApp->bookmarks()->rootItem()->title(), parent->property("title").toString());
0054 }
0055 
0056 void QmlBookmarksApiTest::testBookmarksCreation()
0057 {
0058     auto item = new BookmarkItem(BookmarkItem::Url);
0059     item->setTitle(QSL("Example Domain"));
0060     item->setUrl(QUrl(QSL("https://example.com/")));
0061     item->setDescription(QSL("Testing bookmark description"));
0062 
0063     QObject *qmlBookmarks = m_testHelper.evaluateQObject(QSL("Falkon.Bookmarks"));
0064     QVERIFY(qmlBookmarks);
0065 
0066     QSignalSpy qmlBookmarksSpy(qmlBookmarks, SIGNAL(created(QmlBookmarkTreeNode*)));
0067     mApp->bookmarks()->addBookmark(mApp->bookmarks()->toolbarFolder(), item);
0068 
0069     QCOMPARE(qmlBookmarksSpy.count(), 1);
0070 
0071     auto *created = qvariant_cast<QObject*>(qmlBookmarksSpy.at(0).at(0));
0072     QVERIFY(created);
0073     QCOMPARE(item->title(), created->property("title").toString());
0074 
0075     qRegisterMetaType<BookmarkItem*>();
0076     QSignalSpy bookmarksSpy(mApp->bookmarks(), &Bookmarks::bookmarkAdded);
0077 
0078     auto out = m_testHelper.evaluate(QL1S("Falkon.Bookmarks.create({"
0079                                 "    parent: Falkon.Bookmarks.toolbarFolder(),"
0080                                 "    title: 'Example Plugin',"
0081                                 "    url: 'https://another-example.com'"
0082                                 "});"));
0083     QVERIFY(out.toBool());
0084 
0085     QCOMPARE(bookmarksSpy.count(), 1);
0086     auto* createdItem = qvariant_cast<BookmarkItem*>(bookmarksSpy.at(0).at(0));
0087     QVERIFY(createdItem);
0088     QCOMPARE(createdItem->title(), QSL("Example Plugin"));
0089 }
0090 
0091 void QmlBookmarksApiTest::testBookmarksExistence()
0092 {
0093     // in continuation from testBookmarksCreation
0094 
0095     auto result = m_testHelper.evaluate(QSL("Falkon.Bookmarks.isBookmarked('https://example.com/')")).toBool();
0096     QVERIFY(result);
0097     QCOMPARE(mApp->bookmarks()->isBookmarked(QUrl(QSL("https://example.com/"))), result);
0098 }
0099 
0100 void QmlBookmarksApiTest::testBookmarksModification()
0101 {
0102     // in continuation from testBookmarksExistence
0103 
0104     QObject *qmlBookmarks = m_testHelper.evaluateQObject(QSL("Falkon.Bookmarks"));
0105     QVERIFY(qmlBookmarks);
0106 
0107     QSignalSpy qmlBookmarksSpy(qmlBookmarks, SIGNAL(changed(QmlBookmarkTreeNode*)));
0108     BookmarkItem* item = mApp->bookmarks()->searchBookmarks(QSL("https://example.com/")).at(0);
0109     item->setTitle(QSL("Modified Example Domain"));
0110     mApp->bookmarks()->changeBookmark(item);
0111 
0112     QCOMPARE(qmlBookmarksSpy.count(), 1);
0113 
0114     auto *modified = qvariant_cast<QObject*>(qmlBookmarksSpy.at(0).at(0));
0115     QVERIFY(modified);
0116     QCOMPARE(modified->property("title").toString(), QSL("Modified Example Domain"));
0117 
0118     qRegisterMetaType<BookmarkItem*>();
0119     QSignalSpy bookmarksSpy(mApp->bookmarks(), &Bookmarks::bookmarkChanged);
0120 
0121     auto out = m_testHelper.evaluate(QL1S("Falkon.Bookmarks.update(Falkon.Bookmarks.get('https://another-example.com'),{"
0122                                 "    title: 'Modified Example Plugin'"
0123                                 "})"));
0124     QVERIFY(out.toBool());
0125 
0126     QCOMPARE(bookmarksSpy.count(), 1);
0127     auto* modifiedItem = qvariant_cast<BookmarkItem*>(bookmarksSpy.at(0).at(0));
0128     QVERIFY(modifiedItem);
0129     QCOMPARE(modifiedItem->title(), QSL("Modified Example Plugin"));
0130 }
0131 
0132 void QmlBookmarksApiTest::testBookmarksRemoval()
0133 {
0134     // in continuation from testBookmarksModification
0135 
0136     QObject *qmlBookmarks = m_testHelper.evaluateQObject(QSL("Falkon.Bookmarks"));
0137     QVERIFY(qmlBookmarks);
0138 
0139     QSignalSpy qmlBookmarksSpy(qmlBookmarks, SIGNAL(removed(QmlBookmarkTreeNode*)));
0140     BookmarkItem* item = mApp->bookmarks()->searchBookmarks(QSL("https://example.com/")).at(0);
0141     mApp->bookmarks()->removeBookmark(item);
0142 
0143     QCOMPARE(qmlBookmarksSpy.count(), 1);
0144 
0145     auto *removed = qvariant_cast<QObject*>(qmlBookmarksSpy.at(0).at(0));
0146     QVERIFY(removed);
0147     QCOMPARE(removed->property("title").toString(), QSL("Modified Example Domain"));
0148 
0149     qRegisterMetaType<BookmarkItem*>();
0150     QSignalSpy bookmarksSpy(mApp->bookmarks(), &Bookmarks::bookmarkRemoved);
0151 
0152     auto out = m_testHelper.evaluate(QSL("Falkon.Bookmarks.remove(Falkon.Bookmarks.get('https://another-example.com'))"));
0153     QVERIFY(out.toBool());
0154 
0155     QCOMPARE(bookmarksSpy.count(), 1);
0156     auto* removedItem = qvariant_cast<BookmarkItem*>(bookmarksSpy.at(0).at(0));
0157     QVERIFY(removedItem);
0158     QCOMPARE(removedItem->title(), QSL("Modified Example Plugin"));
0159 }
0160 
0161 FALKONTEST_MAIN(QmlBookmarksApiTest)