~ubuntu-branches/ubuntu/oneiric/arora/oneiric

« back to all changes in this revision

Viewing changes to autotests/opensearchengine/tst_opensearchengine.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Roderick B. Greening
  • Date: 2009-09-10 15:24:04 UTC
  • mfrom: (1.1.10 upstream)
  • Revision ID: james.westby@ubuntu.com-20090910152404-668k22ux3mfap6g0
Tags: 0.9.0-0ubuntu1
* New upstream release
* Update patches:
  - kubuntu_02_default_bookmarks.diff
* Remove patches:
  - kubuntu_04_startpage_spacing.diff (fixed upstream)
  - kubuntu_05_manpages.diff (fixed upstream)
  - kubuntu_07_adblock.diff (unstable/unsuitable)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * Copyright 2009 Benjamin C. Meyer <ben@meyerhome.net>
 
3
 * Copyright 2009 Jakub Wieczorek <faw217@gmail.com>
3
4
 *
4
5
 * This program is free software; you can redistribute it and/or modify
5
6
 * it under the terms of the GNU General Public License as published by
18
19
 */
19
20
 
20
21
#include <qtest.h>
21
 
 
22
 
#include "qtest_arora.h"
23
 
#include "languagemanager.h"
24
 
 
 
22
#include "qtry.h"
 
23
#include "opensearchengine.h"
 
24
#include "opensearchenginedelegate.h"
 
25
 
 
26
#include <qbuffer.h>
 
27
#include <qfile.h>
 
28
#include <qlocale.h>
 
29
#include <qnetworkaccessmanager.h>
 
30
#include <qnetworkreply.h>
 
31
#include <qnetworkrequest.h>
25
32
#include <qsignalspy.h>
26
 
#include <opensearchengine.h>
27
 
#include <qbuffer.h>
 
33
#include <qtimer.h>
28
34
 
29
 
#include <qdebug.h>
 
35
typedef OpenSearchEngine::Parameters Parameters;
 
36
typedef OpenSearchEngine::Parameter Parameter;
30
37
 
31
38
class tst_OpenSearchEngine : public QObject
32
39
{
58
65
    void providesSuggestions();
59
66
    void requestSuggestions_data();
60
67
    void requestSuggestions();
 
68
    void requestSuggestionsCrash();
61
69
    void searchParameters_data();
62
70
    void searchParameters();
63
71
    void searchUrl_data();
74
82
    void parseTemplate();
75
83
    void languageCodes_data();
76
84
    void languageCodes();
 
85
    void requestMethods();
 
86
    void delegate();
77
87
};
78
88
 
79
89
// Subclass that exposes the protected functions.
86
96
    void call_loadImage() const
87
97
        { return SubOpenSearchEngine::loadImage(); }
88
98
 
89
 
    QNetworkAccessManager *call_networkAccessManager() const
90
 
        { return SubOpenSearchEngine::networkAccessManager(); }
91
 
 
92
99
    QString call_parseTemplate(QString const &searchTerm, QString const &searchTemplate) const
93
100
        { return SubOpenSearchEngine::parseTemplate(searchTerm, searchTemplate); }
94
101
 
96
103
        { return SubOpenSearchEngine::suggestions(suggestions); }
97
104
};
98
105
 
 
106
class SuggestionsTestNetworkReply : public QNetworkReply
 
107
{
 
108
    Q_OBJECT
 
109
 
 
110
public:
 
111
    SuggestionsTestNetworkReply(const QNetworkRequest &request, QObject *parent = 0)
 
112
        : QNetworkReply(parent)
 
113
    {
 
114
        setOperation(QNetworkAccessManager::GetOperation);
 
115
        setRequest(request);
 
116
        setUrl(request.url());
 
117
        setOpenMode(QIODevice::ReadOnly);
 
118
 
 
119
        expectedResult.setFileName(":/suggestions.txt");
 
120
        expectedResult.open(QIODevice::ReadOnly);
 
121
        setError(QNetworkReply::NoError, tr("No Error"));
 
122
 
 
123
        QTimer::singleShot(50, this, SLOT(sendSuggestions()));
 
124
    }
 
125
 
 
126
    ~SuggestionsTestNetworkReply()
 
127
    {
 
128
        close();
 
129
    }
 
130
 
 
131
    qint64 bytesAvailable() const
 
132
    {
 
133
        return expectedResult.bytesAvailable() + QNetworkReply::bytesAvailable();
 
134
    }
 
135
 
 
136
    void close()
 
137
    {
 
138
        expectedResult.close();
 
139
    }
 
140
 
 
141
    qint64 readData(char *data, qint64 maxSize)
 
142
    {
 
143
        return expectedResult.read(data, maxSize);
 
144
    }
 
145
 
 
146
    void abort()
 
147
    {
 
148
    }
 
149
 
 
150
private slots:
 
151
    void sendSuggestions()
 
152
    {
 
153
        // Publish result
 
154
        setHeader(QNetworkRequest::ContentTypeHeader, QByteArray("text/html"));
 
155
        setHeader(QNetworkRequest::ContentLengthHeader, expectedResult.bytesAvailable());
 
156
        setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200);
 
157
        setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, QByteArray("Ok"));
 
158
 
 
159
        emit metaDataChanged();
 
160
        emit readyRead();
 
161
        emit downloadProgress(expectedResult.size(), expectedResult.size());
 
162
        emit finished();
 
163
    }
 
164
 
 
165
private:
 
166
    QFile expectedResult;
 
167
};
 
168
 
 
169
class SuggestionsTestNetworkAccessManager : public QNetworkAccessManager
 
170
{
 
171
public:
 
172
    SuggestionsTestNetworkAccessManager(QObject *parent = 0)
 
173
        : QNetworkAccessManager(parent)
 
174
    {
 
175
    }
 
176
 
 
177
    QNetworkRequest lastRequest;
 
178
    Operation lastOperation;
 
179
    bool lastOutgoingData;
 
180
 
 
181
protected:
 
182
    QNetworkReply *createRequest(QNetworkAccessManager::Operation operation, const QNetworkRequest &request, QIODevice *outgoingData = 0)
 
183
    {
 
184
        lastOperation = operation;
 
185
        lastRequest = request;
 
186
        lastOutgoingData = (bool)outgoingData;
 
187
 
 
188
        return new SuggestionsTestNetworkReply(request, 0);
 
189
    }
 
190
};
 
191
 
 
192
class Delegate : public OpenSearchEngineDelegate
 
193
{
 
194
    public:
 
195
        Delegate()
 
196
            : OpenSearchEngineDelegate()
 
197
            , callsCount(0)
 
198
        {
 
199
        }
 
200
 
 
201
        ~Delegate()
 
202
        {
 
203
        }
 
204
 
 
205
        void performSearchRequest(const QNetworkRequest &request,
 
206
                                  QNetworkAccessManager::Operation operation,
 
207
                                  const QByteArray &data)
 
208
        {
 
209
            ++callsCount;
 
210
            lastRequest = request;
 
211
            lastOperation = operation;
 
212
            lastData = data;
 
213
        }
 
214
 
 
215
        QNetworkRequest lastRequest;
 
216
        QNetworkAccessManager::Operation lastOperation;
 
217
        QByteArray lastData;
 
218
        int callsCount;
 
219
};
 
220
 
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());
158
283
}
176
301
 
177
302
    engine.setDescription(description);
178
303
    QCOMPARE(engine.description(), description);
 
304
    QCOMPARE(engine.property("description").toString(), description);
 
305
    engine.setProperty("description", QString());
 
306
    QCOMPARE(engine.property("description").toString(), QString());
179
307
 
180
308
    QCOMPARE(spy0.count(), 0);
181
309
    QCOMPARE(spy1.count(), 0);
186
314
{
187
315
    SubOpenSearchEngine engine;
188
316
 
 
317
    QNetworkAccessManager manager;
 
318
    engine.setNetworkAccessManager(&manager);
 
319
 
189
320
    QSignalSpy spy0(&engine, SIGNAL(imageChanged()));
190
321
    QSignalSpy spy1(&engine, SIGNAL(suggestions(QStringList const&)));
191
322
 
194
325
    QPixmap image(1, 1);
195
326
    image.fill();
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());
199
331
 
200
332
    QTRY_COMPARE(spy0.count(), 1);
201
333
    QCOMPARE(spy1.count(), 0);
202
334
    QVERIFY(engine.image() != QImage());
 
335
 
 
336
    SubOpenSearchEngine engine2;
 
337
    QSignalSpy spy2(&engine2, SIGNAL(imageChanged()));
 
338
 
 
339
    QVERIFY(engine2.imageUrl().isEmpty());
 
340
    engine2.setImage(engine.image());
 
341
    QCOMPARE(engine2.imageUrl(), imageUrl);
 
342
 
 
343
    QCOMPARE(spy2.count(), 1);
203
344
}
204
345
 
205
346
void tst_OpenSearchEngine::imageUrl_data()
221
362
 
222
363
    engine.setImageUrl(imageUrl);
223
364
    QCOMPARE(engine.imageUrl(), imageUrl);
 
365
    QCOMPARE(engine.property("imageUrl").toString(), imageUrl);
 
366
    engine.setProperty("imageUrl", QString());
 
367
    QCOMPARE(engine.property("imageUrl").toString(), QString());
224
368
 
225
369
    QCOMPARE(spy0.count(), 0);
226
370
    QCOMPARE(spy1.count(), 0);
276
420
 
277
421
    engine.setName(name);
278
422
    QCOMPARE(engine.name(), name);
 
423
    QCOMPARE(engine.property("name").toString(), name);
 
424
    engine.setProperty("name", QString());
 
425
    QCOMPARE(engine.property("name").toString(), QString());
279
426
 
280
427
    QCOMPARE(spy0.count(), 0);
281
428
    QCOMPARE(spy1.count(), 0);
292
439
    QVERIFY(engine1 < engine2);
293
440
}
294
441
 
295
 
typedef OpenSearchEngine::Parameters Parameters;
296
442
Q_DECLARE_METATYPE(Parameters)
297
443
void tst_OpenSearchEngine::operatorequal_data()
298
444
{
316
462
    QTest::newRow("imageUrl") << QString() << QString() << QString("x") << QString() << QString()
317
463
                          << Parameters() << Parameters()
318
464
                          << false;
 
465
    QTest::newRow("parameters") << QString() << QString() << QString() << QString() << QString()
 
466
                          << (Parameters() << Parameter("a", "b")) << Parameters()
 
467
                          << false;
319
468
}
320
469
 
321
470
// public bool operator==(OpenSearchEngine const &other) const
372
521
void tst_OpenSearchEngine::requestSuggestions_data()
373
522
{
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;
379
530
}
380
531
 
 
532
Q_DECLARE_METATYPE(QNetworkAccessManager::Operation)
381
533
// public void requestSuggestions(QString const &searchTerm)
382
534
void tst_OpenSearchEngine::requestSuggestions()
383
535
{
384
536
    QFETCH(QString, searchTerm);
385
 
    QFETCH(QStringList, suggestions);
 
537
    QFETCH(QString, method);
 
538
    QFETCH(QNetworkAccessManager::Operation, lastOperation);
386
539
 
 
540
    SuggestionsTestNetworkAccessManager manager;
387
541
    SubOpenSearchEngine engine;
388
 
 
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"));
 
546
 
 
547
    QVERIFY(engine.providesSuggestions());
 
548
 
 
549
    QSignalSpy spy(&engine, SIGNAL(suggestions(QStringList const&)));
391
550
 
392
551
    engine.requestSuggestions(searchTerm);
393
552
 
394
 
    QCOMPARE(spy0.count(), 0);
395
 
    QTRY_COMPARE(spy1.count(), suggestions.count());
396
 
    //QCOMPARE(spy1.value(0), suggestions);
 
553
    if (searchTerm.isEmpty()) {
 
554
        QTest::qWait(200);
 
555
        QCOMPARE(spy.count(), 0);
 
556
    } else {
 
557
        QTRY_COMPARE(spy.count(), 1);
 
558
 
 
559
        QStringList suggestions;
 
560
        suggestions << "sears" << "search engines" << "search engine" << "search" << "sears.com" << "seattle times";
 
561
        QCOMPARE(spy.at(0).at(0).toStringList(), suggestions);
 
562
 
 
563
        QCOMPARE(manager.lastOperation, lastOperation);
 
564
        QCOMPARE(manager.lastOutgoingData, lastOperation == QNetworkAccessManager::PostOperation);
 
565
    }
 
566
}
 
567
 
 
568
void tst_OpenSearchEngine::requestSuggestionsCrash()
 
569
{
 
570
    SuggestionsTestNetworkAccessManager manager;
 
571
    SubOpenSearchEngine engine;
 
572
    engine.setNetworkAccessManager(&manager);
 
573
    engine.setSuggestionsUrlTemplate("http://foobar.baz");
 
574
 
 
575
    QVERIFY(engine.providesSuggestions());
 
576
 
 
577
    QSignalSpy spy(&engine, SIGNAL(suggestions(QStringList const&)));
 
578
 
 
579
    QStringList colors = QColor::colorNames();
 
580
 
 
581
    for (int i = 0; i < colors.count(); ++i)
 
582
        engine.requestSuggestions(colors.at(i));
 
583
 
 
584
    QTRY_COMPARE(spy.count(), 1);
 
585
 
 
586
    QStringList suggestions;
 
587
    suggestions << "sears" << "search engines" << "search engine" << "search" << "sears.com" << "seattle times";
 
588
    QCOMPARE(spy.at(0).at(0).toStringList(), suggestions);
397
589
}
398
590
 
399
591
void tst_OpenSearchEngine::searchParameters_data()
400
592
{
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"));
404
596
}
405
597
 
406
 
// public QList<OpenSearchEngine::Parameter> searchParameters() const
 
598
// public QList<Parameter> searchParameters() const
407
599
void tst_OpenSearchEngine::searchParameters()
408
600
{
409
601
    QFETCH(Parameters, searchParameters);
415
607
 
416
608
    engine.setSearchParameters(searchParameters);
417
609
    QCOMPARE(engine.searchParameters(), searchParameters);
 
610
    QCOMPARE(qvariant_cast<Parameters>(engine.property("searchParameters")), searchParameters);
418
611
 
419
612
    QCOMPARE(spy0.count(), 0);
420
613
    QCOMPARE(spy1.count(), 0);
432
625
    QTest::newRow("empty") << QString() << QString("http://foobar.baz/?q={searchTerms}")
433
626
                    << Parameters() << QUrl(QString("http://foobar.baz/?q="));
434
627
    QTest::newRow("parameters") << QString("baz") << QString("http://foobar.baz/?q={searchTerms}")
435
 
                    << (Parameters() << OpenSearchEngine::Parameter("abc", "{searchTerms}") << OpenSearchEngine::Parameter("x", "yz"))
 
628
                    << (Parameters() << Parameter("abc", "{searchTerms}") << Parameter("x", "yz"))
436
629
                    << QUrl(QString("http://foobar.baz/?q=baz&abc=baz&x=yz"));
437
630
}
438
631
 
469
662
    QSignalSpy spy1(&engine, SIGNAL(suggestions(QStringList const&)));
470
663
 
471
664
    engine.setSearchUrlTemplate(searchUrlTemplate);
 
665
    QCOMPARE(engine.property("searchUrlTemplate").toString(), searchUrlTemplate);
 
666
    engine.setProperty("searchUrlTemplate", QString());
 
667
    QCOMPARE(engine.property("searchUrlTemplate").toString(), QString());
 
668
    engine.setProperty("searchUrlTemplate", searchUrlTemplate);
472
669
    QCOMPARE(engine.searchUrlTemplate(), searchUrlTemplate);
473
670
 
474
671
    QCOMPARE(spy0.count(), 0);
478
675
void tst_OpenSearchEngine::suggestionsParameters_data()
479
676
{
480
677
    QTest::addColumn<Parameters>("suggestionsParameters");
481
 
    QTest::newRow("null") << QList<OpenSearchEngine::Parameter>();
482
 
    QTest::newRow("something") << (Parameters() << OpenSearchEngine::Parameter("a", "b"));
 
678
    QTest::newRow("null") << QList<Parameter>();
 
679
    QTest::newRow("something") << (Parameters() << Parameter("a", "b"));
483
680
}
484
681
 
485
 
// public QList<OpenSearchEngine::Parameter> suggestionsParameters() const
 
682
// public QList<Parameter> suggestionsParameters() const
486
683
void tst_OpenSearchEngine::suggestionsParameters()
487
684
{
488
685
    QFETCH(Parameters, suggestionsParameters);
511
708
    QTest::newRow("empty") << QString() << QString("http://foobar.baz/?q={searchTerms}")
512
709
                    << Parameters() << QUrl(QString("http://foobar.baz/?q="));
513
710
    QTest::newRow("parameters") << QString("baz") << QString("http://foobar.baz/?q={searchTerms}")
514
 
                    << (Parameters() << OpenSearchEngine::Parameter("a", "bc"))
 
711
                    << (Parameters() << Parameter("a", "bc"))
515
712
                    << QUrl(QString("http://foobar.baz/?q=baz&a=bc"));
516
713
}
517
714
 
556
753
 
557
754
void tst_OpenSearchEngine::parseTemplate_data()
558
755
{
559
 
    QString lang = BrowserApplication::languageManager()->currentLanguage().replace(QLatin1Char('_'), QLatin1Char('-'));
 
756
    QString lang = QLocale().name().replace(QLatin1Char('_'), QLatin1Char('-'));
560
757
 
561
758
    QTest::addColumn<QString>("searchTerm");
562
759
    QTest::addColumn<QString>("searchTemplate");
573
770
                               "sp=0&amp;l=%1&amp;ie=UTF-8&amp;oe=UTF-8").arg(lang)
574
771
                    << true;
575
772
    QTest::newRow("tricky") << QString("{count}") << QString("http://foobar.baz/q={searchTerms}&amp;count={count}")
576
 
                    << QString("http://foobar.baz/q={count}&amp;count=20") << true;
 
773
                    << QString("http://foobar.baz/q=%7Bcount%7D&amp;count=20") << true;
577
774
    QTest::newRow("multiple") << QString("abc") << QString("http://foobar.baz/?q={searchTerms}&amp;x={searchTerms}")
578
775
                    << QString("http://foobar.baz/?q=abc&amp;x=abc") << true;
579
776
    QTest::newRow("referrer") << QString("foo")
581
778
                    << QString("http://foobar.baz/?q=foo&amp;a=tst_opensearchengine"
582
779
                               "&amp;b=tst_opensearchengine&amp;c=tst_opensearchengine")
583
780
                    << true;
 
781
    QTest::newRow("inputEncoding") << QString("c++") << QString("http://foobar.baz/?q={searchTerms}")
 
782
                    << QString("http://foobar.baz/?q=c%2B%2B") << true;
584
783
}
585
784
 
586
785
// protected QString parseTemplate(QString const &searchTerm, QString const &searchTemplate) const
602
801
    QTest::addColumn<QString>("languageCode");
603
802
    QTest::addColumn<QString>("url");
604
803
 
605
 
    QTest::newRow("es") << QString("es") << QString("http://foobar.baz/?l=es");
 
804
    QTest::newRow("es") << QString("es") << QString("http://foobar.baz/?l=es-ES");
606
805
    QTest::newRow("pt_BR") << QString("pt_BR") << QString("http://foobar.baz/?l=pt-BR");
607
806
}
608
807
 
611
810
    QFETCH(QString, languageCode);
612
811
    QFETCH(QString, url);
613
812
 
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));
617
814
 
618
815
    SubOpenSearchEngine engine;
619
816
    QCOMPARE(engine.call_parseTemplate(QString("foo"), QString("http://foobar.baz/?l={language}")), url);
620
817
}
621
818
 
 
819
void tst_OpenSearchEngine::requestMethods()
 
820
{
 
821
    SubOpenSearchEngine engine;
 
822
 
 
823
    QCOMPARE(engine.searchMethod(), QString("get"));
 
824
    QCOMPARE(engine.suggestionsMethod(), QString("get"));
 
825
 
 
826
    engine.setSearchMethod("post");
 
827
    QCOMPARE(engine.searchMethod(), QString("post"));
 
828
    QCOMPARE(engine.suggestionsMethod(), QString("get"));
 
829
 
 
830
    engine.setSearchMethod("get");
 
831
    QCOMPARE(engine.searchMethod(), QString("get"));
 
832
    QCOMPARE(engine.suggestionsMethod(), QString("get"));
 
833
 
 
834
    engine.setSuggestionsMethod("PoSt");
 
835
    QCOMPARE(engine.searchMethod(), QString("get"));
 
836
    QCOMPARE(engine.suggestionsMethod(), QString("post"));
 
837
 
 
838
    engine.setSearchMethod("foo");
 
839
    QCOMPARE(engine.searchMethod(), QString("get"));
 
840
    QCOMPARE(engine.suggestionsMethod(), QString("post"));
 
841
 
 
842
    engine.setSuggestionsMethod("bar");
 
843
    QCOMPARE(engine.searchMethod(), QString("get"));
 
844
    QCOMPARE(engine.suggestionsMethod(), QString("post"));
 
845
}
 
846
 
 
847
void tst_OpenSearchEngine::delegate()
 
848
{
 
849
    SubOpenSearchEngine engine;
 
850
    engine.setName(QString("foo"));
 
851
    engine.setDescription(QString("bar"));
 
852
    engine.setSearchUrlTemplate(QString("http://foobar.baz/?q={searchTerms}"));
 
853
 
 
854
    QCOMPARE(engine.delegate(), (Delegate*)0);
 
855
    engine.setDelegate(0);
 
856
    QCOMPARE(engine.delegate(), (Delegate*)0);
 
857
    engine.requestSearchResults(QString("baz"));
 
858
 
 
859
    Delegate delegate;
 
860
    engine.setDelegate(&delegate);
 
861
    QCOMPARE(engine.delegate(), &delegate);
 
862
    engine.requestSearchResults(QString("baz"));
 
863
 
 
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"));
 
871
 
 
872
    engine.setSearchParameters(Parameters() << Parameter("a", "b") << Parameter("b", "c"));
 
873
    engine.requestSearchResults(QString("baz"));
 
874
 
 
875
    QCOMPARE(delegate.callsCount, 2);
 
876
    QCOMPARE(delegate.lastOperation, QNetworkAccessManager::GetOperation);
 
877
    QCOMPARE(delegate.lastData, QByteArray());
 
878
 
 
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"));
 
885
 
 
886
    QUrl url(engine.call_parseTemplate(QString("baz"), engine.searchUrlTemplate()));
 
887
    QCOMPARE(delegate.lastRequest.url().toString(QUrl::RemoveQuery), url.toString(QUrl::RemoveQuery));
 
888
 
 
889
    engine.setSearchMethod(QString("post"));
 
890
    engine.requestSearchResults(QString("baz"));
 
891
 
 
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"));
 
898
 
 
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");
 
903
}
 
904
 
622
905
QTEST_MAIN(tst_OpenSearchEngine)
623
906
#include "tst_opensearchengine.moc"
624
907