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