Falkon Develop
Cross-platform Qt-based web browser
locationbartest.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "locationbartest.h"
19#include "autotests.h"
20#include "locationbar.h"
22#include "bookmarks.h"
23#include "bookmarkitem.h"
24#include "qzsettings.h"
25
26static void removeBookmarks(BookmarkItem *parent)
27{
28 for (BookmarkItem *child : parent->children()) {
29 mApp->bookmarks()->removeBookmark(child);
30 removeBookmarks(child);
31 }
32}
33
34void LocationBarTest::initTestCase()
35{
36}
37
38void LocationBarTest::cleanupTestCase()
39{
40}
41
42void LocationBarTest::init()
43{
44 mApp->searchEnginesManager()->setAllEngines({});
45 removeBookmarks(mApp->bookmarks()->rootItem());
46}
47
48void LocationBarTest::loadActionBasicTest()
49{
51
52 action = LocationBar::loadAction(QSL("http://kde.org"));
53 QCOMPARE(action.type, LocationBar::LoadAction::Url);
54 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
55
56 action = LocationBar::loadAction(QSL("kde.org"));
57 QCOMPARE(action.type, LocationBar::LoadAction::Url);
58 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
59
60 action = LocationBar::loadAction(QSL("localhost"));
61 QCOMPARE(action.type, LocationBar::LoadAction::Url);
62 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost")));
63
64 action = LocationBar::loadAction(QSL("localhost/test/path?x=2"));
65 QCOMPARE(action.type, LocationBar::LoadAction::Url);
66 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost/test/path?x=2")));
67
68 action = LocationBar::loadAction(QSL("host.com/test/path?x=2"));
69 QCOMPARE(action.type, LocationBar::LoadAction::Url);
70 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://host.com/test/path?x=2")));
71
72 action = LocationBar::loadAction(QSL("not-url"));
73 QCOMPARE(action.type, LocationBar::LoadAction::Search);
74
75 action = LocationBar::loadAction(QSL("not url with spaces"));
76 QCOMPARE(action.type, LocationBar::LoadAction::Search);
77
78 action = LocationBar::loadAction(QSL("falkon:about"));
79 QCOMPARE(action.type, LocationBar::LoadAction::Url);
80 QCOMPARE(action.loadRequest.url(), QUrl(QSL("falkon:about")));
81}
82
83void LocationBarTest::loadActionBookmarksTest()
84{
85 auto* bookmark = new BookmarkItem(BookmarkItem::Url);
86 bookmark->setTitle(QSL("KDE Bookmark title"));
87 bookmark->setUrl(QUrl(QSL("http://kde.org")));
88 bookmark->setKeyword(QSL("kde-bookmark"));
89 mApp->bookmarks()->addBookmark(mApp->bookmarks()->unsortedFolder(), bookmark);
90
92
93 action = LocationBar::loadAction(QSL("http://kde.org"));
94 QCOMPARE(action.type, LocationBar::LoadAction::Url);
95 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
96
97 action = LocationBar::loadAction(QSL("kde-bookmark-notkeyword"));
98 QCOMPARE(action.type, LocationBar::LoadAction::Search);
99
100 action = LocationBar::loadAction(QSL("kde-bookmark"));
101 QCOMPARE(action.type, LocationBar::LoadAction::Bookmark);
102 QCOMPARE(action.bookmark, bookmark);
103 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://kde.org")));
104}
105
106void LocationBarTest::loadActionSearchTest()
107{
108 SearchEngine engine;
109 engine.name = QSL("Test Engine");
110 engine.url = QSL("http://test/%s");
111 engine.shortcut = QSL("t");
112 mApp->searchEnginesManager()->addEngine(engine);
113 mApp->searchEnginesManager()->setDefaultEngine(engine);
114
116
117 action = LocationBar::loadAction(QSL("search term"));
118 QCOMPARE(action.type, LocationBar::LoadAction::Search);
119 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/search%20term")));
120
121 action = LocationBar::loadAction(QSL("t search term"));
122 QCOMPARE(action.type, LocationBar::LoadAction::Search);
123 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/search%20term")));
124
125 action = LocationBar::loadAction(QSL(" ttt-notsearch"));
126 QCOMPARE(action.type, LocationBar::LoadAction::Search);
127 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/ttt-notsearch")));
128}
129
130void LocationBarTest::loadAction_kdebug389491()
131{
132 // "site:website.com searchterm" and "link:website.com" are loaded instead of searched
133
134 SearchEngine engine;
135 engine.name = QSL("Test Engine");
136 engine.url = QSL("http://test/%s");
137 engine.shortcut = QSL("t");
138 mApp->searchEnginesManager()->addEngine(engine);
139 mApp->searchEnginesManager()->setActiveEngine(engine);
140
142
143 action = LocationBar::loadAction(QSL("site:website.com searchterm"));
144 QCOMPARE(action.type, LocationBar::LoadAction::Search);
145 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/site%3Awebsite.com%20searchterm")));
146
147 action = LocationBar::loadAction(QSL("link:website.com"));
148 QCOMPARE(action.type, LocationBar::LoadAction::Search);
149 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://test/link%3Awebsite.com")));
150
151 action = LocationBar::loadAction(QSL("http://website.com?search=searchterm and another"));
152 QCOMPARE(action.type, LocationBar::LoadAction::Url);
153 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://website.com?search=searchterm and another")));
154}
155
156void LocationBarTest::loadActionSpecialSchemesTest()
157{
159
160 action = LocationBar::loadAction(QSL("data:image/png;base64,xxxxx"));
161 QCOMPARE(action.type, LocationBar::LoadAction::Url);
162 QCOMPARE(action.loadRequest.url(), QUrl(QSL("data:image/png;base64,xxxxx")));
163
164 action = LocationBar::loadAction(QSL("falkon:about"));
165 QCOMPARE(action.type, LocationBar::LoadAction::Url);
166 QCOMPARE(action.loadRequest.url(), QUrl(QSL("falkon:about")));
167
168 action = LocationBar::loadAction(QSL("file:test.html"));
169 QCOMPARE(action.type, LocationBar::LoadAction::Url);
170 QCOMPARE(action.loadRequest.url(), QUrl(QSL("file:test.html")));
171
172 action = LocationBar::loadAction(QSL("about:blank"));
173 QCOMPARE(action.type, LocationBar::LoadAction::Url);
174 QCOMPARE(action.loadRequest.url(), QUrl(QSL("about:blank")));
175
176 action = LocationBar::loadAction(QSL("javascript:test"));
177 QCOMPARE(action.type, LocationBar::LoadAction::Url);
178 QCOMPARE(action.loadRequest.url(), QUrl(QSL("javascript:test")));
179
180 action = LocationBar::loadAction(QSL("javascript:alert(' test ');"));
181 QCOMPARE(action.type, LocationBar::LoadAction::Url);
182 QCOMPARE(action.loadRequest.url(), QUrl(QSL("javascript:alert('%20test%20');")));
183}
184
185void LocationBarTest::loadAction_issue2578()
186{
187 // typed text is not correctly transformed to QUrl when searchFromAddressBar is disabled
188
189 qzSettings->searchFromAddressBar = false;
190
192
193 action = LocationBar::loadAction(QSL("github.com"));
194 QCOMPARE(action.type, LocationBar::LoadAction::Url);
195 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://github.com")));
196
197 action = LocationBar::loadAction(QSL("github"));
198 QCOMPARE(action.type, LocationBar::LoadAction::Url);
199 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://github")));
200
201 action = LocationBar::loadAction(QSL("github/test/path"));
202 QCOMPARE(action.type, LocationBar::LoadAction::Url);
203 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://github/test/path")));
204
205 action = LocationBar::loadAction(QSL("localhost"));
206 QCOMPARE(action.type, LocationBar::LoadAction::Url);
207 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost")));
208
209 action = LocationBar::loadAction(QSL("localhost/test/path"));
210 QCOMPARE(action.type, LocationBar::LoadAction::Url);
211 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://localhost/test/path")));
212
213 action = LocationBar::loadAction(QSL("github.com foo bar"));
214 QCOMPARE(action.type, LocationBar::LoadAction::Invalid);
215}
216
217void LocationBarTest::loadAction_kdebug392445()
218{
219 // %20 in url will make it incorrectly treat as web search
220
221 qzSettings->searchFromAddressBar = true;
222
224
225 action = LocationBar::loadAction(QSL("http://www.example.com/my%20beautiful%20page"));
226 QCOMPARE(action.type, LocationBar::LoadAction::Url);
227 QCOMPARE(action.loadRequest.url(), QUrl(QSL("http://www.example.com/my%20beautiful%20page")));
228}
229
#define FALKONTEST_MAIN(Test)
Definition: autotests.h:23
QList< BookmarkItem * > children() const
QUrl url() const
Definition: loadrequest.cpp:44
static LoadAction loadAction(const QString &text)
#define mApp
#define QSL(x)
Definition: qzcommon.h:40
#define qzSettings
Definition: qzsettings.h:69
BookmarkItem * bookmark
Definition: locationbar.h:55
LoadRequest loadRequest
Definition: locationbar.h:56