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