96
103
{ return SubOpenSearchEngine::suggestions(suggestions); }
106
class SuggestionsTestNetworkReply : public QNetworkReply
111
SuggestionsTestNetworkReply(const QNetworkRequest &request, QObject *parent = 0)
112
: QNetworkReply(parent)
114
setOperation(QNetworkAccessManager::GetOperation);
116
setUrl(request.url());
117
setOpenMode(QIODevice::ReadOnly);
119
expectedResult.setFileName(":/suggestions.txt");
120
expectedResult.open(QIODevice::ReadOnly);
121
setError(QNetworkReply::NoError, tr("No Error"));
123
QTimer::singleShot(50, this, SLOT(sendSuggestions()));
126
~SuggestionsTestNetworkReply()
131
qint64 bytesAvailable() const
133
return expectedResult.bytesAvailable() + QNetworkReply::bytesAvailable();
138
expectedResult.close();
141
qint64 readData(char *data, qint64 maxSize)
143
return expectedResult.read(data, maxSize);
151
void sendSuggestions()
154
setHeader(QNetworkRequest::ContentTypeHeader, QByteArray("text/html"));
155
setHeader(QNetworkRequest::ContentLengthHeader, expectedResult.bytesAvailable());
156
setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200);
157
setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, QByteArray("Ok"));
159
emit metaDataChanged();
161
emit downloadProgress(expectedResult.size(), expectedResult.size());
166
QFile expectedResult;
169
class SuggestionsTestNetworkAccessManager : public QNetworkAccessManager
172
SuggestionsTestNetworkAccessManager(QObject *parent = 0)
173
: QNetworkAccessManager(parent)
177
QNetworkRequest lastRequest;
178
Operation lastOperation;
179
bool lastOutgoingData;
182
QNetworkReply *createRequest(QNetworkAccessManager::Operation operation, const QNetworkRequest &request, QIODevice *outgoingData = 0)
184
lastOperation = operation;
185
lastRequest = request;
186
lastOutgoingData = (bool)outgoingData;
188
return new SuggestionsTestNetworkReply(request, 0);
192
class Delegate : public OpenSearchEngineDelegate
196
: OpenSearchEngineDelegate()
205
void performSearchRequest(const QNetworkRequest &request,
206
QNetworkAccessManager::Operation operation,
207
const QByteArray &data)
210
lastRequest = request;
211
lastOperation = operation;
215
QNetworkRequest lastRequest;
216
QNetworkAccessManager::Operation lastOperation;
99
221
// This will be called before the first test function is executed.
100
222
// It is only called once.
101
223
void tst_OpenSearchEngine::initTestCase()
136
258
QCOMPARE(engine.operator==(other), true);
137
259
QCOMPARE(engine.providesSuggestions(), false);
138
260
engine.requestSuggestions(QString());
139
QCOMPARE(engine.searchParameters(), QList<OpenSearchEngine::Parameter>());
261
QCOMPARE(engine.searchParameters(), QList<Parameter>());
140
262
QCOMPARE(engine.searchUrl(QString()), QUrl());
141
263
QCOMPARE(engine.searchUrlTemplate(), QString());
142
264
engine.setDescription(QString());
143
265
engine.setImage(QImage());
144
266
engine.setImageUrl(QString());
145
267
engine.setName(QString());
146
engine.setSearchParameters(QList<OpenSearchEngine::Parameter>());
268
engine.setSearchParameters(QList<Parameter>());
147
269
engine.setSearchUrlTemplate(QString());
148
engine.setSuggestionsParameters(QList<OpenSearchEngine::Parameter>());
270
engine.setSuggestionsParameters(QList<Parameter>());
149
271
engine.setSuggestionsUrlTemplate(QString());
150
QCOMPARE(engine.suggestionsParameters(), QList<OpenSearchEngine::Parameter>());
272
QCOMPARE(engine.suggestionsParameters(), QList<Parameter>());
151
273
QCOMPARE(engine.suggestionsUrl(QString()), QUrl());
152
274
QCOMPARE(engine.suggestionsUrlTemplate(), QString());
153
275
engine.call_imageChanged();
154
276
engine.call_loadImage();
155
QVERIFY(engine.call_networkAccessManager());
277
QVERIFY(!engine.networkAccessManager());
278
QNetworkAccessManager manager;
279
engine.setNetworkAccessManager(&manager);
280
QCOMPARE(engine.networkAccessManager(), &manager);
156
281
QCOMPARE(engine.call_parseTemplate(QString(), QString()), QString());
157
282
engine.call_suggestions(QStringList());
194
325
QPixmap image(1, 1);
196
327
image.save(&imageBuffer, "PNG");
197
engine.setImageUrl(QString("data:image/png;base64,").append(imageBuffer.buffer().toBase64()));
328
QString imageUrl = QString("data:image/png;base64,").append(imageBuffer.buffer().toBase64());
329
engine.setImageUrl(imageUrl);
198
330
QCOMPARE(engine.image(), QImage());
200
332
QTRY_COMPARE(spy0.count(), 1);
201
333
QCOMPARE(spy1.count(), 0);
202
334
QVERIFY(engine.image() != QImage());
336
SubOpenSearchEngine engine2;
337
QSignalSpy spy2(&engine2, SIGNAL(imageChanged()));
339
QVERIFY(engine2.imageUrl().isEmpty());
340
engine2.setImage(engine.image());
341
QCOMPARE(engine2.imageUrl(), imageUrl);
343
QCOMPARE(spy2.count(), 1);
205
346
void tst_OpenSearchEngine::imageUrl_data()
372
521
void tst_OpenSearchEngine::requestSuggestions_data()
374
523
QTest::addColumn<QString>("searchTerm");
375
QTest::addColumn<QStringList>("suggestions");
376
QTest::newRow("null") << QString() << QStringList();
377
QTest::newRow("foo") << QString("foo") << (QStringList());
378
// TODO load a real engine and make sure it returns a suggestion
524
QTest::addColumn<QString>("method");
525
QTest::addColumn<QNetworkAccessManager::Operation>("lastOperation");
526
QTest::newRow("null") << QString() << QString() << QNetworkAccessManager::GetOperation;
527
QTest::newRow("foo") << QString("foo") << QString("get") << QNetworkAccessManager::GetOperation;
528
QTest::newRow("bar") << QString("bar") << QString("post") << QNetworkAccessManager::PostOperation;
529
QTest::newRow("baz") << QString("baz") << QString("put") << QNetworkAccessManager::GetOperation;
532
Q_DECLARE_METATYPE(QNetworkAccessManager::Operation)
381
533
// public void requestSuggestions(QString const &searchTerm)
382
534
void tst_OpenSearchEngine::requestSuggestions()
384
536
QFETCH(QString, searchTerm);
385
QFETCH(QStringList, suggestions);
537
QFETCH(QString, method);
538
QFETCH(QNetworkAccessManager::Operation, lastOperation);
540
SuggestionsTestNetworkAccessManager manager;
387
541
SubOpenSearchEngine engine;
389
QSignalSpy spy0(&engine, SIGNAL(imageChanged()));
390
QSignalSpy spy1(&engine, SIGNAL(suggestions(QStringList const&)));
542
engine.setNetworkAccessManager(&manager);
543
engine.setSuggestionsMethod(method);
544
engine.setSuggestionsUrlTemplate("http://foobar.baz");
545
engine.setSuggestionsParameters(Parameters() << Parameter("a", "b"));
547
QVERIFY(engine.providesSuggestions());
549
QSignalSpy spy(&engine, SIGNAL(suggestions(QStringList const&)));
392
551
engine.requestSuggestions(searchTerm);
394
QCOMPARE(spy0.count(), 0);
395
QTRY_COMPARE(spy1.count(), suggestions.count());
396
//QCOMPARE(spy1.value(0), suggestions);
553
if (searchTerm.isEmpty()) {
555
QCOMPARE(spy.count(), 0);
557
QTRY_COMPARE(spy.count(), 1);
559
QStringList suggestions;
560
suggestions << "sears" << "search engines" << "search engine" << "search" << "sears.com" << "seattle times";
561
QCOMPARE(spy.at(0).at(0).toStringList(), suggestions);
563
QCOMPARE(manager.lastOperation, lastOperation);
564
QCOMPARE(manager.lastOutgoingData, lastOperation == QNetworkAccessManager::PostOperation);
568
void tst_OpenSearchEngine::requestSuggestionsCrash()
570
SuggestionsTestNetworkAccessManager manager;
571
SubOpenSearchEngine engine;
572
engine.setNetworkAccessManager(&manager);
573
engine.setSuggestionsUrlTemplate("http://foobar.baz");
575
QVERIFY(engine.providesSuggestions());
577
QSignalSpy spy(&engine, SIGNAL(suggestions(QStringList const&)));
579
QStringList colors = QColor::colorNames();
581
for (int i = 0; i < colors.count(); ++i)
582
engine.requestSuggestions(colors.at(i));
584
QTRY_COMPARE(spy.count(), 1);
586
QStringList suggestions;
587
suggestions << "sears" << "search engines" << "search engine" << "search" << "sears.com" << "seattle times";
588
QCOMPARE(spy.at(0).at(0).toStringList(), suggestions);
399
591
void tst_OpenSearchEngine::searchParameters_data()
401
593
QTest::addColumn<Parameters>("searchParameters");
402
QTest::newRow("null") << QList<OpenSearchEngine::Parameter>();
403
QTest::newRow("something") << (Parameters() << OpenSearchEngine::Parameter("a", "b"));
594
QTest::newRow("null") << QList<Parameter>();
595
QTest::newRow("something") << (Parameters() << Parameter("a", "b"));
406
// public QList<OpenSearchEngine::Parameter> searchParameters() const
598
// public QList<Parameter> searchParameters() const
407
599
void tst_OpenSearchEngine::searchParameters()
409
601
QFETCH(Parameters, searchParameters);
611
810
QFETCH(QString, languageCode);
612
811
QFETCH(QString, url);
614
QVERIFY(BrowserApplication::instance()->languageManager()->isLanguageAvailable(languageCode));
615
BrowserApplication::instance()->languageManager()->setCurrentLanguage(languageCode);
616
QCOMPARE(BrowserApplication::instance()->languageManager()->currentLanguage(), languageCode);
813
QLocale::setDefault(QLocale(languageCode));
618
815
SubOpenSearchEngine engine;
619
816
QCOMPARE(engine.call_parseTemplate(QString("foo"), QString("http://foobar.baz/?l={language}")), url);
819
void tst_OpenSearchEngine::requestMethods()
821
SubOpenSearchEngine engine;
823
QCOMPARE(engine.searchMethod(), QString("get"));
824
QCOMPARE(engine.suggestionsMethod(), QString("get"));
826
engine.setSearchMethod("post");
827
QCOMPARE(engine.searchMethod(), QString("post"));
828
QCOMPARE(engine.suggestionsMethod(), QString("get"));
830
engine.setSearchMethod("get");
831
QCOMPARE(engine.searchMethod(), QString("get"));
832
QCOMPARE(engine.suggestionsMethod(), QString("get"));
834
engine.setSuggestionsMethod("PoSt");
835
QCOMPARE(engine.searchMethod(), QString("get"));
836
QCOMPARE(engine.suggestionsMethod(), QString("post"));
838
engine.setSearchMethod("foo");
839
QCOMPARE(engine.searchMethod(), QString("get"));
840
QCOMPARE(engine.suggestionsMethod(), QString("post"));
842
engine.setSuggestionsMethod("bar");
843
QCOMPARE(engine.searchMethod(), QString("get"));
844
QCOMPARE(engine.suggestionsMethod(), QString("post"));
847
void tst_OpenSearchEngine::delegate()
849
SubOpenSearchEngine engine;
850
engine.setName(QString("foo"));
851
engine.setDescription(QString("bar"));
852
engine.setSearchUrlTemplate(QString("http://foobar.baz/?q={searchTerms}"));
854
QCOMPARE(engine.delegate(), (Delegate*)0);
855
engine.setDelegate(0);
856
QCOMPARE(engine.delegate(), (Delegate*)0);
857
engine.requestSearchResults(QString("baz"));
860
engine.setDelegate(&delegate);
861
QCOMPARE(engine.delegate(), &delegate);
862
engine.requestSearchResults(QString("baz"));
864
QCOMPARE(delegate.callsCount, 1);
865
QCOMPARE(delegate.lastOperation, QNetworkAccessManager::GetOperation);
866
QCOMPARE(delegate.lastData, QByteArray());
867
QNetworkRequest request(QUrl(engine.call_parseTemplate(QString("baz"), engine.searchUrlTemplate())));
868
QCOMPARE(delegate.lastRequest, request);
869
QVERIFY(delegate.lastRequest.url().hasQueryItem("q"));
870
QCOMPARE(delegate.lastRequest.url().queryItemValue("q"), QString("baz"));
872
engine.setSearchParameters(Parameters() << Parameter("a", "b") << Parameter("b", "c"));
873
engine.requestSearchResults(QString("baz"));
875
QCOMPARE(delegate.callsCount, 2);
876
QCOMPARE(delegate.lastOperation, QNetworkAccessManager::GetOperation);
877
QCOMPARE(delegate.lastData, QByteArray());
879
QVERIFY(delegate.lastRequest.url().hasQueryItem("a"));
880
QCOMPARE(delegate.lastRequest.url().queryItemValue("a"), QString("b"));
881
QVERIFY(delegate.lastRequest.url().hasQueryItem("b"));
882
QCOMPARE(delegate.lastRequest.url().queryItemValue("b"), QString("c"));
883
QVERIFY(delegate.lastRequest.url().hasQueryItem("q"));
884
QCOMPARE(delegate.lastRequest.url().queryItemValue("q"), QString("baz"));
886
QUrl url(engine.call_parseTemplate(QString("baz"), engine.searchUrlTemplate()));
887
QCOMPARE(delegate.lastRequest.url().toString(QUrl::RemoveQuery), url.toString(QUrl::RemoveQuery));
889
engine.setSearchMethod(QString("post"));
890
engine.requestSearchResults(QString("baz"));
892
QCOMPARE(delegate.callsCount, 3);
893
QCOMPARE(delegate.lastOperation, QNetworkAccessManager::PostOperation);
894
request = QNetworkRequest(QUrl(engine.call_parseTemplate(QString("baz"), engine.searchUrlTemplate())));
895
QCOMPARE(delegate.lastRequest, request);
896
QVERIFY(delegate.lastRequest.url().hasQueryItem("q"));
897
QCOMPARE(delegate.lastRequest.url().queryItemValue("q"), QString("baz"));
899
QVERIFY(!delegate.lastData.isEmpty());
900
QStringList query = QString(delegate.lastData).split('&');
901
QCOMPARE(query.count(), 2);
902
QCOMPARE(query, QStringList() << "a=b" << "b=c");
622
905
QTEST_MAIN(tst_OpenSearchEngine)
623
906
#include "tst_opensearchengine.moc"