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)