10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Holger Hans Peter Freyther
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is free software; you can redistribute it and/or
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modify it under the terms of the GNU Library General Public
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * License as published by the Free Software Foundation; either
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * version 2 of the License, or (at your option) any later version.
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is distributed in the hope that it will be useful,
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Library General Public License for more details.
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * You should have received a copy of the GNU Library General Public License
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Boston, MA 02110-1301, USA.
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QtTest/QtTest>
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebframe.h>
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebview.h>
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qpainter.h>
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/**
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Starts an event loop that runs until the given signal is received.
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Optionally the event loop
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * can return earlier on a timeout.
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * \return \p true if the requested signal was received
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *         \p false on timeout
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic bool waitForSignal(QObject* obj, const char* signal, int timeout = 0)
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QEventLoop loop;
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QObject::connect(obj, signal, &loop, SLOT(quit()));
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTimer timer;
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QSignalSpy timeoutSpy(&timer, SIGNAL(timeout()));
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if (timeout > 0) {
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        timer.setSingleShot(true);
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        timer.start(timeout);
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    loop.exec();
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return timeoutSpy.isEmpty();
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass tst_Loading : public QObject
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Q_OBJECT
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic:
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic Q_SLOTS:
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void init();
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void cleanup();
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate Q_SLOTS:
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void load_data();
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void load();
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate:
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebView* m_view;
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPage* m_page;
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_Loading::init()
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_view = new QWebView;
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_page = m_view->page();
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QSize viewportSize(1024, 768);
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_view->setFixedSize(viewportSize);
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_page->setViewportSize(viewportSize);
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_Loading::cleanup()
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    delete m_view;
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_Loading::load_data()
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::addColumn<QUrl>("url");
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("amazon") << QUrl("http://www.amazon.com");
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("kde") << QUrl("http://www.kde.org");
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QTest::newRow("apple") << QUrl("http://www.apple.com");
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_Loading::load()
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QFETCH(QUrl, url);
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QBENCHMARK {
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_view->load(url);
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        // really wait for loading, painting is in another test
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        ::waitForSignal(m_view, SIGNAL(loadFinished(bool)));
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQTEST_MAIN(tst_Loading)
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "tst_loading.moc"
106