File indexing completed on 2024-04-21 04:55:39

0001 /* ============================================================
0002 * Falkon - Qt web browser
0003 * Copyright (C) 2018 David Rosca <nowrep@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 "locationbartest.h"
0019 #include "autotests.h"
0020 #include "locationbar.h"
0021 #include "searchenginesmanager.h"
0022 #include "bookmarks.h"
0023 #include "bookmarkitem.h"
0024 #include "qzsettings.h"
0025 
0026 static void removeBookmarks(BookmarkItem *parent)
0027 {
0028     for (BookmarkItem *child : parent->children()) {
0029         mApp->bookmarks()->removeBookmark(child);
0030         removeBookmarks(child);
0031     }
0032 }
0033 
0034 void LocationBarTest::initTestCase()
0035 {
0036 }
0037 
0038 void LocationBarTest::cleanupTestCase()
0039 {
0040 }
0041 
0042 void LocationBarTest::init()
0043 {
0044     mApp->searchEnginesManager()->setAllEngines({});
0045     removeBookmarks(mApp->bookmarks()->rootItem());
0046 }
0047 
0048 void LocationBarTest::loadActionBasicTest()
0049 {
0050     LocationBar::LoadAction action;
0051 
0052     action = LocationBar::loadAction(QSL("http://kde.org"));
0053     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0054     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
0055 
0056     action = LocationBar::loadAction(QSL("kde.org"));
0057     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0058     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
0059 
0060     action = LocationBar::loadAction(QSL("localhost"));
0061     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0062     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost")));
0063 
0064     action = LocationBar::loadAction(QSL("localhost/test/path?x=2"));
0065     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0066     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost/test/path?x=2")));
0067 
0068     action = LocationBar::loadAction(QSL("host.com/test/path?x=2"));
0069     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0070     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://host.com/test/path?x=2")));
0071 
0072     action = LocationBar::loadAction(QSL("not-url"));
0073     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0074 
0075     action = LocationBar::loadAction(QSL("not url with spaces"));
0076     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0077 
0078     action = LocationBar::loadAction(QSL("falkon:about"));
0079     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0080     QCOMPARE(action.loadRequest.url(), QUrl(QSL("falkon:about")));
0081 }
0082 
0083 void LocationBarTest::loadActionBookmarksTest()
0084 {
0085     auto* bookmark = new BookmarkItem(BookmarkItem::Url);
0086     bookmark->setTitle(QSL("KDE Bookmark title"));
0087     bookmark->setUrl(QUrl(QSL("http://kde.org")));
0088     bookmark->setKeyword(QSL("kde-bookmark"));
0089     mApp->bookmarks()->addBookmark(mApp->bookmarks()->unsortedFolder(), bookmark);
0090 
0091     LocationBar::LoadAction action;
0092 
0093     action = LocationBar::loadAction(QSL("http://kde.org"));
0094     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0095     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
0096 
0097     action = LocationBar::loadAction(QSL("kde-bookmark-notkeyword"));
0098     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0099 
0100     action = LocationBar::loadAction(QSL("kde-bookmark"));
0101     QCOMPARE(action.type, LocationBar::LoadAction::Bookmark);
0102     QCOMPARE(action.bookmark, bookmark);
0103     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
0104 }
0105 
0106 void LocationBarTest::loadActionSearchTest()
0107 {
0108     SearchEngine engine;
0109     engine.name = QSL("Test Engine");
0110     engine.url = QSL("http://test/%s");
0111     engine.shortcut = QSL("t");
0112     mApp->searchEnginesManager()->addEngine(engine);
0113     mApp->searchEnginesManager()->setDefaultEngine(engine);
0114 
0115     LocationBar::LoadAction action;
0116 
0117     action = LocationBar::loadAction(QSL("search term"));
0118     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0119     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/search%20term")));
0120 
0121     action = LocationBar::loadAction(QSL("t search term"));
0122     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0123     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/search%20term")));
0124 
0125     action = LocationBar::loadAction(QSL(" ttt-notsearch"));
0126     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0127     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/ttt-notsearch")));
0128 }
0129 
0130 void LocationBarTest::loadAction_kdebug389491()
0131 {
0132     // "site:website.com searchterm" and "link:website.com" are loaded instead of searched
0133 
0134     SearchEngine engine;
0135     engine.name = QSL("Test Engine");
0136     engine.url = QSL("http://test/%s");
0137     engine.shortcut = QSL("t");
0138     mApp->searchEnginesManager()->addEngine(engine);
0139     mApp->searchEnginesManager()->setActiveEngine(engine);
0140 
0141     LocationBar::LoadAction action;
0142 
0143     action = LocationBar::loadAction(QSL("site:website.com searchterm"));
0144     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0145     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/site%3Awebsite.com%20searchterm")));
0146 
0147     action = LocationBar::loadAction(QSL("link:website.com"));
0148     QCOMPARE(action.type, LocationBar::LoadAction::Search);
0149     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/link%3Awebsite.com")));
0150 
0151     action = LocationBar::loadAction(QSL("http://website.com?search=searchterm and another"));
0152     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0153     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://website.com?search=searchterm and another")));
0154 }
0155 
0156 void LocationBarTest::loadActionSpecialSchemesTest()
0157 {
0158     LocationBar::LoadAction action;
0159 
0160     action = LocationBar::loadAction(QSL("data:image/png;base64,xxxxx"));
0161     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0162     QCOMPARE(action.loadRequest.url(), QUrl(QSL("data:image/png;base64,xxxxx")));
0163 
0164     action = LocationBar::loadAction(QSL("falkon:about"));
0165     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0166     QCOMPARE(action.loadRequest.url(), QUrl(QSL("falkon:about")));
0167 
0168     action = LocationBar::loadAction(QSL("file:test.html"));
0169     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0170     QCOMPARE(action.loadRequest.url(), QUrl(QSL("file:test.html")));
0171 
0172     action = LocationBar::loadAction(QSL("about:blank"));
0173     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0174     QCOMPARE(action.loadRequest.url(), QUrl(QSL("about:blank")));
0175 
0176     action = LocationBar::loadAction(QSL("javascript:test"));
0177     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0178     QCOMPARE(action.loadRequest.url(), QUrl(QSL("javascript:test")));
0179 
0180     action = LocationBar::loadAction(QSL("javascript:alert(' test ');"));
0181     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0182     QCOMPARE(action.loadRequest.url(), QUrl(QSL("javascript:alert('%20test%20');")));
0183 }
0184 
0185 void LocationBarTest::loadAction_issue2578()
0186 {
0187     // typed text is not correctly transformed to QUrl when searchFromAddressBar is disabled
0188 
0189     qzSettings->searchFromAddressBar = false;
0190 
0191     LocationBar::LoadAction action;
0192 
0193     action = LocationBar::loadAction(QSL("github.com"));
0194     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0195     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://github.com")));
0196 
0197     action = LocationBar::loadAction(QSL("github"));
0198     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0199     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://github")));
0200 
0201     action = LocationBar::loadAction(QSL("github/test/path"));
0202     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0203     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://github/test/path")));
0204 
0205     action = LocationBar::loadAction(QSL("localhost"));
0206     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0207     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost")));
0208 
0209     action = LocationBar::loadAction(QSL("localhost/test/path"));
0210     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0211     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost/test/path")));
0212 
0213     action = LocationBar::loadAction(QSL("github.com foo bar"));
0214     QCOMPARE(action.type, LocationBar::LoadAction::Invalid);
0215 }
0216 
0217 void LocationBarTest::loadAction_kdebug392445()
0218 {
0219     // %20 in url will make it incorrectly treat as web search
0220 
0221     qzSettings->searchFromAddressBar = true;
0222 
0223     LocationBar::LoadAction action;
0224 
0225     action = LocationBar::loadAction(QSL("http://www.example.com/my%20beautiful%20page"));
0226     QCOMPARE(action.type, LocationBar::LoadAction::Url);
0227     QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://www.example.com/my%20beautiful%20page")));
0228 }
0229 
0230 FALKONTEST_MAIN(LocationBarTest)