181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "../util.h"
22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <QAction>
32bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QColor>
481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QDebug>
581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QDeclarativeComponent>
681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QDeclarativeEngine>
72daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <QDeclarativeItem>
881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QDeclarativeProperty>
981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QDeclarativeView>
1081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QDir>
1181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QGraphicsWebView>
1281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QTest>
132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <QVariant>
1481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <QWebFrame>
152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "qdeclarativewebview_p.h"
1681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochQT_BEGIN_NAMESPACE
1881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
1981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass tst_QDeclarativeWebView : public QObject {
2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    Q_OBJECT
2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic:
2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    tst_QDeclarativeWebView();
2481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate slots:
262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void cleanupTestCase();
272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void basicProperties();
292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void elementAreaAt();
302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void historyNav();
312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void javaScript();
322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void loadError();
332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void multipleWindows();
342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void newWindowComponent();
352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void newWindowParent();
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void preferredWidthTest();
3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void preferredHeightTest();
3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void preferredWidthDefaultTest();
3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void preferredHeightDefaultTest();
402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void pressGrabTime();
412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void renderingEnabled();
422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void setHtml();
432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void settings();
442bde8e466a4451c7319e3a072d118917957d6554Steve Block#if QT_VERSION >= 0x040703
452bde8e466a4451c7319e3a072d118917957d6554Steve Block    void backgroundColor();
462bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate:
4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void checkNoErrors(const QDeclarativeComponent&);
502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QString tmpDir() const
512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    {
522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        static QString tmpd = QDir::tempPath() + "/tst_qdeclarativewebview-"
532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            + QDateTime::currentDateTime().toString(QLatin1String("yyyyMMddhhmmss"));
542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return tmpd;
552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch};
5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochtst_QDeclarativeWebView::tst_QDeclarativeWebView()
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    Q_UNUSED(waitForSignal)
6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic QString strippedHtml(QString html)
642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    html.replace(QRegExp("\\s+"), "");
662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return html;
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic QString fileContents(const QString& filename)
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QFile file(filename);
722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    file.open(QIODevice::ReadOnly);
732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return QString::fromUtf8(file.readAll());
742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic void removeRecursive(const QString& dirname)
772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDir dir(dirname);
792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QFileInfoList entries(dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot));
802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    for (int i = 0; i < entries.count(); ++i)
812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        if (entries[i].isDir())
822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            removeRecursive(entries[i].filePath());
832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        else
842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            dir.remove(entries[i].fileName());
852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDir().rmdir(dirname);
862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::cleanupTestCase()
892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    removeRecursive(tmpDir());
912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::basicProperties()
942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/basic.qml"));
972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QWebSettings::enablePersistentStorage(tmpDir());
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = component.create();
1012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
1022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
1032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("title").toString(), QLatin1String("Basic"));
1042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(qvariant_cast<QPixmap>(wv->property("icon")).width(), 48);
1052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QEXPECT_FAIL("", "'icon' property isn't working", Continue);
1062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(qvariant_cast<QPixmap>(wv->property("icon")), QPixmap("qrc:///resources/basic.png"));
1072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("statusText").toString(), QLatin1String("status here"));
1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(strippedHtml(fileContents(":/resources/basic.html")), strippedHtml(wv->property("html").toString()));
1092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QEXPECT_FAIL("", "TODO: get preferred width from QGraphicsWebView result", Continue);
1102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("preferredWidth").toInt(), 0);
1112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QEXPECT_FAIL("", "TODO: get preferred height from QGraphicsWebView result", Continue);
1122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("preferredHeight").toInt(), 0);
1132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("url").toUrl(), QUrl("qrc:///resources/basic.html"));
1142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("status").toInt(), int(QDeclarativeWebView::Ready));
1152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* reloadAction = wv->property("reload").value<QAction*>();
1172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(reloadAction);
1182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(reloadAction->isEnabled());
1192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* backAction = wv->property("back").value<QAction*>();
1202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(backAction);
1212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!backAction->isEnabled());
1222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* forwardAction = wv->property("forward").value<QAction*>();
1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(forwardAction);
1242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!forwardAction->isEnabled());
1252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* stopAction = wv->property("stop").value<QAction*>();
1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(stopAction);
1272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!stopAction->isEnabled());
1282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("pixelCacheSize", 0); // mainly testing that it doesn't crash or anything!
1302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("pixelCacheSize").toInt(), 0);
1312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    reloadAction->trigger();
1322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
1332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
1342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::elementAreaAt()
1362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
1372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSKIP("This test should be changed to test 'heuristicZoom' instead.", SkipAll);
1382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
1392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/elements.qml"));
1402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
1412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeWebView* wv = qobject_cast<QDeclarativeWebView*>(component.create());
1422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
1432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
1442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Areas from elements.html.
1462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    const QRect areaA(1, 1, 75, 54);
1472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    const QRect areaB(78, 3, 110, 50);
1482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    const QRect wholeView(0, 0, 310, 100);
1492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    const QRect areaBC(76, 1, 223, 54);
1502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QCOMPARE(wv->elementAreaAt(40, 30, 100, 100), areaA);
1522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QCOMPARE(wv->elementAreaAt(130, 30, 200, 100), areaB);
1532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QCOMPARE(wv->elementAreaAt(40, 30, 400, 400), wholeView);
1542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QCOMPARE(wv->elementAreaAt(130, 30, 280, 280), areaBC);
1552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QCOMPARE(wv->elementAreaAt(130, 30, 400, 400), wholeView);
1562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
1572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::historyNav()
1592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
1602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
1612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/basic.qml"));
1622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
1632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QWebSettings::enablePersistentStorage(tmpDir());
1642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = component.create();
1662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
1672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* reloadAction = wv->property("reload").value<QAction*>();
1692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(reloadAction);
1702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* backAction = wv->property("back").value<QAction*>();
1712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(backAction);
1722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* forwardAction = wv->property("forward").value<QAction*>();
1732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(forwardAction);
1742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* stopAction = wv->property("stop").value<QAction*>();
1752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(stopAction);
1762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    for (int i = 1; i <= 2; ++i) {
1782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
1792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("title").toString(), QLatin1String("Basic"));
1802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QTRY_COMPARE(qvariant_cast<QPixmap>(wv->property("icon")).width(), 48);
1812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QEXPECT_FAIL("", "'icon' property isn't working", Continue);
1822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(qvariant_cast<QPixmap>(wv->property("icon")), QPixmap("qrc:///data/basic.png"));
1832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("statusText").toString(), QLatin1String("status here"));
1842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(strippedHtml(fileContents(":/resources/basic.html")), strippedHtml(wv->property("html").toString()));
1852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QEXPECT_FAIL("", "TODO: get preferred width from QGraphicsWebView result", Continue);
1862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("preferredWidth").toDouble(), 0.0);
1872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("url").toUrl(), QUrl("qrc:///resources/basic.html"));
1882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("status").toInt(), int(QDeclarativeWebView::Ready));
1892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QVERIFY(reloadAction->isEnabled());
1902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QVERIFY(!backAction->isEnabled());
1912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QVERIFY(!forwardAction->isEnabled());
1922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QVERIFY(!stopAction->isEnabled());
1932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        reloadAction->trigger();
1942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
1952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("url", QUrl("qrc:///resources/forward.html"));
1972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
1982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("title").toString(), QLatin1String("Forward"));
1992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(qvariant_cast<QPixmap>(wv->property("icon")).width(), 32);
2002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QEXPECT_FAIL("", "'icon' property isn't working", Continue);
2012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(qvariant_cast<QPixmap>(wv->property("icon")), QPixmap("qrc:///resources/forward.png"));
2022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(strippedHtml(fileContents(":/resources/forward.html")), strippedHtml(wv->property("html").toString()));
2032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("url").toUrl(), QUrl("qrc:///resources/forward.html"));
2042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("status").toInt(), int(QDeclarativeWebView::Ready));
2052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("statusText").toString(), QString());
2062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(reloadAction->isEnabled());
2082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(backAction->isEnabled());
2092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!forwardAction->isEnabled());
2102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!stopAction->isEnabled());
2112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    backAction->trigger();
2132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
2152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("title").toString(), QLatin1String("Basic"));
2162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(strippedHtml(fileContents(":/resources/basic.html")), strippedHtml(wv->property("html").toString()));
2172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("url").toUrl(), QUrl("qrc:///resources/basic.html"));
2182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("status").toInt(), int(QDeclarativeWebView::Ready));
2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(reloadAction->isEnabled());
2212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!backAction->isEnabled());
2222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(forwardAction->isEnabled());
2232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!stopAction->isEnabled());
2242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic inline QVariant callEvaluateJavaScript(QObject *object, const QString& snippet)
2272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVariant result;
2292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QMetaObject::invokeMethod(object, "evaluateJavaScript", Q_RETURN_ARG(QVariant, result), Q_ARG(QString, snippet));
2302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return result;
2312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::javaScript()
2342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
2362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/javaScript.qml"));
2372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
2382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = component.create();
2392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
2402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
2412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(callEvaluateJavaScript(wv, "123").toInt(), 123);
2432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(callEvaluateJavaScript(wv, "window.status").toString(), QLatin1String("status here"));
2442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(callEvaluateJavaScript(wv, "window.myjsname.qmlprop").toString(), QLatin1String("qmlvalue"));
2452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::loadError()
2482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
2502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/loadError.qml"));
2512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
2522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QWebSettings::enablePersistentStorage(tmpDir());
2532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = component.create();
2552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
2562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QAction* reloadAction = wv->property("reload").value<QAction*>();
2572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(reloadAction);
2582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    for (int i = 1; i <= 2; ++i) {
2602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
2612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("title").toString(), QString());
2622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("statusText").toString(), QString()); // HTML 'status bar' text, not error message
2632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("url").toUrl(), QUrl("qrc:///resources/does-not-exist.html")); // Unlike QWebPage, which loses url
2642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QCOMPARE(wv->property("status").toInt(), int(QDeclarativeWebView::Error));
2652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        reloadAction->trigger();
2662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
2672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::multipleWindows()
2702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSKIP("Rework this test to not depend on QDeclarativeGrid", SkipAll);
2722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
2732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/newwindows.qml"));
2742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
2752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QDeclarativeGrid *grid = qobject_cast<QDeclarativeGrid*>(component.create());
2772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QVERIFY(grid != 0);
2782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QTRY_COMPARE(grid->children().count(), 2+4); // Component, Loader (with 1 WebView), 4 new-window WebViews
2792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QDeclarativeItem* popup = qobject_cast<QDeclarativeItem*>(grid->children().at(2)); // first popup after Component and Loader.
2802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QVERIFY(popup != 0);
2812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch//    QTRY_COMPARE(popup->x(), 150.0);
2822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::newWindowComponent()
2852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
2872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/propertychanges.qml"));
2882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
2892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(component.create());
2902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(rootItem);
2912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = rootItem->findChild<QObject*>("webView");
2922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
2932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
2942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent substituteComponent(&engine);
2962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    substituteComponent.setData("import QtQuick 1.0; WebView { objectName: 'newWebView'; url: 'basic.html'; }", QUrl::fromLocalFile(""));
2972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSignalSpy newWindowComponentSpy(wv, SIGNAL(newWindowComponentChanged()));
2982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("newWindowComponent", QVariant::fromValue(&substituteComponent));
3002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("newWindowComponent"), QVariant::fromValue(&substituteComponent));
3012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(newWindowComponentSpy.count(), 1);
3022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("newWindowComponent", QVariant::fromValue(&substituteComponent));
3042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(newWindowComponentSpy.count(), 1);
3052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("newWindowComponent", QVariant::fromValue((QDeclarativeComponent*)0));
3072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(newWindowComponentSpy.count(), 2);
3082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
3092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::newWindowParent()
3112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
3122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
3132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/propertychanges.qml"));
3142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
3152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(component.create());
3162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(rootItem);
3172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = rootItem->findChild<QObject*>("webView");
3182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
3192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
3202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeItem* oldWindowParent = rootItem->findChild<QDeclarativeItem*>("oldWindowParent");
3222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(qvariant_cast<QDeclarativeItem*>(wv->property("newWindowParent")), oldWindowParent);
3232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSignalSpy newWindowParentSpy(wv, SIGNAL(newWindowParentChanged()));
3242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeItem* newWindowParent = rootItem->findChild<QDeclarativeItem*>("newWindowParent");
3262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("newWindowParent", QVariant::fromValue(newWindowParent));
3272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(newWindowParent);
3282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(oldWindowParent);
3292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(oldWindowParent->childItems().count(), 0);
3302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("newWindowParent"), QVariant::fromValue(newWindowParent));
3312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(newWindowParentSpy.count(), 1);
3322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("newWindowParent", QVariant::fromValue(newWindowParent));
3342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(newWindowParentSpy.count(), 1);
3352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("newWindowParent", QVariant::fromValue((QDeclarativeItem*)0));
3372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(newWindowParentSpy.count(), 2);
3382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
3392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
34081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QDeclarativeWebView::preferredWidthTest()
34181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
34281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeEngine engine;
34381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/webviewtest.qml"));
34481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    checkNoErrors(component);
34581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QObject* wv = component.create();
34681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QVERIFY(wv);
34781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    wv->setProperty("testUrl", QUrl("qrc:///resources/sample.html"));
34881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QCOMPARE(wv->property("prefWidth").toInt(), 600);
34981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
35081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
35181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QDeclarativeWebView::preferredHeightTest()
35281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
35381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeEngine engine;
35481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/webviewtest.qml"));
35581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    checkNoErrors(component);
35681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QObject* wv = component.create();
35781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QVERIFY(wv);
35881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    wv->setProperty("testUrl", QUrl("qrc:///resources/sample.html"));
35981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QCOMPARE(wv->property("prefHeight").toInt(), 500);
36081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
36181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
36281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QDeclarativeWebView::preferredWidthDefaultTest()
36381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
36481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QGraphicsWebView view;
36581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    view.load(QUrl("qrc:///resources/sample.html"));
36681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
36781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeEngine engine;
36881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/webviewtestdefault.qml"));
36981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    checkNoErrors(component);
37081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QObject* wv = component.create();
37181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QVERIFY(wv);
37281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    wv->setProperty("testUrl", QUrl("qrc:///resources/sample.html"));
37381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QCOMPARE(wv->property("prefWidth").toDouble(), view.preferredWidth());
37481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
37581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
37681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QDeclarativeWebView::preferredHeightDefaultTest()
37781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
37881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QGraphicsWebView view;
37981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    view.load(QUrl("qrc:///resources/sample.html"));
38081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
38181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeEngine engine;
38281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/webviewtestdefault.qml"));
38381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    checkNoErrors(component);
38481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QObject* wv = component.create();
38581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QVERIFY(wv);
38681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    wv->setProperty("testUrl", QUrl("qrc:///resources/sample.html"));
38781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QCOMPARE(wv->property("prefHeight").toDouble(), view.preferredHeight());
38881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
38981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::pressGrabTime()
3912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
3922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
3932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/propertychanges.qml"));
3942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
3952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(component.create());
3962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(rootItem);
3972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = rootItem->findChild<QObject*>("webView");
3982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
3992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
4002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("pressGrabTime").toInt(), 200);
4012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSignalSpy pressGrabTimeSpy(wv, SIGNAL(pressGrabTimeChanged()));
4022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("pressGrabTime", 100);
4042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("pressGrabTime").toInt(), 100);
4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(pressGrabTimeSpy.count(), 1);
4062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("pressGrabTime", 100);
4082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(pressGrabTimeSpy.count(), 1);
4092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("pressGrabTime", 0);
4112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(pressGrabTimeSpy.count(), 2);
4122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::renderingEnabled()
4152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
4172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/propertychanges.qml"));
4182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
4192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(component.create());
4202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(rootItem);
4212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = rootItem->findChild<QObject*>("webView");
4222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
4232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
4242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv->property("renderingEnabled").toBool());
4262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSignalSpy renderingEnabledSpy(wv, SIGNAL(renderingEnabledChanged()));
4272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("renderingEnabled", false);
4292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(!wv->property("renderingEnabled").toBool());
4302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(renderingEnabledSpy.count(), 1);
4312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("renderingEnabled", false);
4332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(renderingEnabledSpy.count(), 1);
4342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("renderingEnabled", true);
4362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(renderingEnabledSpy.count(), 2);
4372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::setHtml()
4402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
4422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/sethtml.qml"));
4432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
4442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = component.create();
4452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
4462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(wv->property("html").toString(), QLatin1String("<html><head></head><body><p>This is a <b>string</b> set on the WebView</p></body></html>"));
4472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QSignalSpy spy(wv, SIGNAL(htmlChanged()));
4492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    wv->setProperty("html", QLatin1String("<html><head><title>Basic</title></head><body><p>text</p></body></html>"));
4502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(spy.count(), 1);
4512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid tst_QDeclarativeWebView::settings()
4542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeEngine engine;
4562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/basic.qml"));
4572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    checkNoErrors(component);
4582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* wv = component.create();
4592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(wv);
4602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QTRY_COMPARE(wv->property("progress").toDouble(), 1.0);
4612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QObject* s = QDeclarativeProperty(wv, "settings").object();
4632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QVERIFY(s);
4642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QStringList settingsList;
4662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    settingsList << QString::fromAscii("autoLoadImages")
4672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("developerExtrasEnabled")
4682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("javaEnabled")
4692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("javascriptCanAccessClipboard")
4702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("javascriptCanOpenWindows")
4712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("javascriptEnabled")
4722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("linksIncludedInFocusChain")
4732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("localContentCanAccessRemoteUrls")
4742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("localStorageDatabaseEnabled")
4752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("offlineStorageDatabaseEnabled")
4762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("offlineWebApplicationCacheEnabled")
4772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("pluginsEnabled")
4782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("printElementBackgrounds")
4792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("privateBrowsingEnabled")
4802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                 << QString::fromAscii("zoomTextOnly");
4812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Merely tests that setting gets stored (in QWebSettings), behavioural tests are in WebKit.
4832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    for (int b = 0; b <= 1; b++) {
4842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        bool value = !!b;
4852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        foreach (const QString& name, settingsList)
4862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            s->setProperty(name.toAscii().data(), value);
4872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        for (int i = 0; i < 2; i++) {
4882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            foreach (const QString& name, settingsList)
4892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                QCOMPARE(s->property(name.toAscii().data()).toBool(), value);
4902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        }
4912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
4922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4942bde8e466a4451c7319e3a072d118917957d6554Steve Block#if QT_VERSION >= 0x040703
4952bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid tst_QDeclarativeWebView::backgroundColor()
4962bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4972bde8e466a4451c7319e3a072d118917957d6554Steve Block    // We test here the rendering of the background.
4982bde8e466a4451c7319e3a072d118917957d6554Steve Block    QDeclarativeEngine engine;
4992bde8e466a4451c7319e3a072d118917957d6554Steve Block    QDeclarativeComponent component(&engine, QUrl("qrc:///resources/webviewbackgroundcolor.qml"));
5002bde8e466a4451c7319e3a072d118917957d6554Steve Block    checkNoErrors(component);
5012bde8e466a4451c7319e3a072d118917957d6554Steve Block    QObject* wv = component.create();
5022bde8e466a4451c7319e3a072d118917957d6554Steve Block    QVERIFY(wv);
5032bde8e466a4451c7319e3a072d118917957d6554Steve Block    QCOMPARE(wv->property("backgroundColor").value<QColor>(), QColor(Qt::red));
5042bde8e466a4451c7319e3a072d118917957d6554Steve Block    QDeclarativeView view;
5052bde8e466a4451c7319e3a072d118917957d6554Steve Block    view.setSource(QUrl("qrc:///resources/webviewbackgroundcolor.qml"));
5062bde8e466a4451c7319e3a072d118917957d6554Steve Block    view.show();
5072bde8e466a4451c7319e3a072d118917957d6554Steve Block    QTest::qWaitForWindowShown(&view);
5082bde8e466a4451c7319e3a072d118917957d6554Steve Block    QPixmap result(view.width(), view.height());
5092bde8e466a4451c7319e3a072d118917957d6554Steve Block    QPainter painter(&result);
5102bde8e466a4451c7319e3a072d118917957d6554Steve Block    view.render(&painter);
5112bde8e466a4451c7319e3a072d118917957d6554Steve Block    QPixmap reference(view.width(), view.height());
5122bde8e466a4451c7319e3a072d118917957d6554Steve Block    reference.fill(Qt::red);
5132bde8e466a4451c7319e3a072d118917957d6554Steve Block    QCOMPARE(reference, result);
5142bde8e466a4451c7319e3a072d118917957d6554Steve Block
5152bde8e466a4451c7319e3a072d118917957d6554Steve Block    // We test the emission of the backgroundColorChanged signal.
5162bde8e466a4451c7319e3a072d118917957d6554Steve Block    QSignalSpy spyColorChanged(wv, SIGNAL(backgroundColorChanged()));
5172bde8e466a4451c7319e3a072d118917957d6554Steve Block    wv->setProperty("backgroundColor", Qt::red);
5182bde8e466a4451c7319e3a072d118917957d6554Steve Block    QCOMPARE(spyColorChanged.count(), 0);
5192bde8e466a4451c7319e3a072d118917957d6554Steve Block    wv->setProperty("backgroundColor", Qt::green);
5202bde8e466a4451c7319e3a072d118917957d6554Steve Block    QCOMPARE(spyColorChanged.count(), 1);
5212bde8e466a4451c7319e3a072d118917957d6554Steve Block}
5222bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
5232bde8e466a4451c7319e3a072d118917957d6554Steve Block
52481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid tst_QDeclarativeWebView::checkNoErrors(const QDeclarativeComponent& component)
52581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
52681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Wait until the component is ready
52781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QTRY_VERIFY(component.isReady() || component.isError());
5282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (component.isError()) {
5292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        QList<QDeclarativeError> errors = component.errors();
5302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        for (int ii = 0; ii < errors.count(); ++ii) {
5312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            const QDeclarativeError &error = errors.at(ii);
5322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            QByteArray errorStr = QByteArray::number(error.line()) + ":" +
5332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                                  QByteArray::number(error.column()) + ":" +
5342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch                                  error.description().toUtf8();
5352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            qWarning() << errorStr;
5362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        }
5372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
53881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QVERIFY(!component.isError());
53981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
54081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
54181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochQTEST_MAIN(tst_QDeclarativeWebView)
54281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "tst_qdeclarativewebview.moc"
54381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
54481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochQT_END_NAMESPACE
545