10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This library is free software; you can redistribute it and/or
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    modify it under the terms of the GNU Library General Public
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    License as published by the Free Software Foundation; either
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    version 2 of the License, or (at your option) any later version.
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    This library is distributed in the hope that it will be useful,
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    but WITHOUT ANY WARRANTY; without even the implied warranty of
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Library General Public License for more details.
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    You should have received a copy of the GNU Library General Public License
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    along with this library; see the file COPYING.LIB.  If not, write to
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Boston, MA 02110-1301, USA.
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <QtTest/QtTest>
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebpage.h>
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwidget.h>
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebview.h>
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebframe.h>
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <qwebelement.h>
278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block#include <util.h>
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch//TESTED_CLASS=
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch//TESTED_FILES=
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass tst_QWebElement : public QObject
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Q_OBJECT
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic:
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    tst_QWebElement();
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual ~tst_QWebElement();
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic slots:
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void init();
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void cleanup();
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate slots:
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void textHtml();
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void simpleCollection();
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void attributes();
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void attributesNS();
48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void listAttributes();
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void classes();
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void namespaceURI();
51cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void iteration();
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void nonConstIterator();
53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    void constIterator();
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void foreachManipulation();
55cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void emptyCollection();
56cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void appendCollection();
57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void evaluateJavaScript();
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void documentElement();
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void frame();
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void style();
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void computedStyle();
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void appendAndPrepend();
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void insertBeforeAndAfter();
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void remove();
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void clear();
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void replaceWith();
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void encloseWith();
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void encloseContentsWith();
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void nullSelect();
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void firstChildNextSibling();
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void lastChildPreviousSibling();
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void hasSetFocus();
73cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    void render();
744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    void addElementToHead();
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate:
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebView* m_view;
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebPage* m_page;
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFrame* m_mainFrame;
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtst_QWebElement::tst_QWebElement()
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtst_QWebElement::~tst_QWebElement()
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::init()
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_view = new QWebView();
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_page = m_view->page();
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame = m_page->mainFrame();
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::cleanup()
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    delete m_view;
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::textHtml()
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<head></head><body><p>test</p></body>";
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement();
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.isNull());
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.toPlainText(), QString("test"));
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.toPlainText(), m_mainFrame->toPlainText());
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.toInnerXml(), html);
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::simpleCollection()
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body><p>first para</p><p>second para</p></body>";
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement();
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
121cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection list = body.findAll("p");
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(list.count(), 2);
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(list.at(0).toPlainText(), QString("first para"));
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(list.at(1).toPlainText(), QString("second para"));
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::attributes()
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml("<body><p>Test");
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement();
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.hasAttribute("title"));
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.hasAttributes());
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.setAttribute("title", "test title");
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(body.hasAttributes());
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(body.hasAttribute("title"));
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.attribute("title"), QString("test title"));
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.removeAttribute("title");
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.hasAttribute("title"));
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.hasAttributes());
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.attribute("does-not-exist", "testvalue"), QString("testvalue"));
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::attributesNS()
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" "
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                      "xmlns:svg=\"http://www.w3.org/2000/svg\">"
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                      "<body><svg:svg id=\"foobar\" width=\"400px\" height=\"300px\">"
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                      "</svg:svg></body></html>";
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml");
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement svg = m_mainFrame->findFirstElement("svg");
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!svg.isNull());
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!svg.hasAttributeNS("http://www.w3.org/2000/svg", "foobar"));
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(svg.attributeNS("http://www.w3.org/2000/svg", "foobar", "defaultblah"), QString("defaultblah"));
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    svg.setAttributeNS("http://www.w3.org/2000/svg", "svg:foobar", "true");
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(svg.hasAttributeNS("http://www.w3.org/2000/svg", "foobar"));
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(svg.attributeNS("http://www.w3.org/2000/svg", "foobar", "defaultblah"), QString("true"));
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid tst_QWebElement::listAttributes()
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" "
172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      "xmlns:svg=\"http://www.w3.org/2000/svg\">"
173643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      "<body><svg:svg foo=\"\" svg:bar=\"\">"
174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block                      "</svg:svg></body></html>";
175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml");
177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QWebElement svg = m_mainFrame->findFirstElement("svg");
179643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVERIFY(!svg.isNull());
180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVERIFY(svg.attributeNames().contains("foo"));
182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVERIFY(svg.attributeNames("http://www.w3.org/2000/svg").contains("bar"));
183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    svg.setAttributeNS("http://www.w3.org/2000/svg", "svg:foobar", "true");
185643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVERIFY(svg.attributeNames().contains("foo"));
186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QStringList attributes = svg.attributeNames("http://www.w3.org/2000/svg");
187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(attributes.size(), 2);
188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVERIFY(attributes.contains("bar"));
189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QVERIFY(attributes.contains("foobar"));
190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
191643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::classes()
1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml("<body><p class=\"a b c d a c\">Test");
1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement();
1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.classes().count(), 0);
1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement p = m_mainFrame->documentElement().findAll("p").at(0);
2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QStringList classes = p.classes();
2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(classes.count(), 4);
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(classes[0], QLatin1String("a"));
2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(classes[1], QLatin1String("b"));
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(classes[2], QLatin1String("c"));
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(classes[3], QLatin1String("d"));
2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("a"));
2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("b"));
2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("c"));
2090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("d"));
2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("e"));
2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.addClass("f");
2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("f"));
2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.addClass("a");
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 5);
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("a"));
2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("b"));
2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("c"));
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("d"));
2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.toggleClass("a");
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("a"));
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("b"));
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("c"));
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("d"));
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("f"));
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 4);
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.toggleClass("f");
2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("f"));
2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 3);
2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.toggleClass("a");
2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.toggleClass("f");
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("a"));
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.hasClass("f"));
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 5);
2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("f");
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("f"));
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 4);
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("d");
2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("d"));
2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 3);
2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("not-exist");
2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 3);
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("c");
2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("c"));
2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 2);
2480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("b");
2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("b"));
2500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 1);
2510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("a");
2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.hasClass("a"));
2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 0);
2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.removeClass("foobar");
2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.classes().count(), 0);
2560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::namespaceURI()
2590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" "
2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                      "xmlns:svg=\"http://www.w3.org/2000/svg\">"
2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                      "<body><svg:svg id=\"foobar\" width=\"400px\" height=\"300px\">"
2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                      "</svg:svg></body></html>";
2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml");
2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement();
2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.namespaceUri(), QLatin1String("http://www.w3.org/1999/xhtml"));
2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement svg = body.findAll("*#foobar").at(0);
2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(svg.prefix(), QLatin1String("svg"));
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(svg.localName(), QLatin1String("svg"));
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(svg.tagName(), QLatin1String("svg:svg"));
2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(svg.namespaceUri(), QLatin1String("http://www.w3.org/2000/svg"));
2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
277cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QWebElement::iteration()
278cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
279cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QString html = "<body><p>first para</p><p>second para</p></body>";
280cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    m_mainFrame->setHtml(html);
281cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElement body = m_mainFrame->documentElement();
282cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
283cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block   QWebElementCollection paras = body.findAll("p");
284cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QList<QWebElement> referenceList = paras.toList();
285cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
286cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QList<QWebElement> foreachList;
287cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    foreach(QWebElement p, paras) {
288cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block       foreachList.append(p);
289cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    }
290cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QVERIFY(foreachList.count() == 2);
291cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(foreachList.count(), referenceList.count());
292cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(foreachList.at(0), referenceList.at(0));
293cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(foreachList.at(1), referenceList.at(1));
294cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
295cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QList<QWebElement> forLoopList;
296cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    for (int i = 0; i < paras.count(); ++i) {
297cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        forLoopList.append(paras.at(i));
298cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    }
299cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QVERIFY(foreachList.count() == 2);
300cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(foreachList.count(), referenceList.count());
301cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(foreachList.at(0), referenceList.at(0));
302cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(foreachList.at(1), referenceList.at(1));
303cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
304cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    for (int i = 0; i < paras.count(); ++i) {
305cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        QCOMPARE(paras.at(i), paras[i]);
306cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    }
307cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
308cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(paras.at(0), paras.first());
309cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(paras.at(1), paras.last());
310cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
311cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
312643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid tst_QWebElement::nonConstIterator()
313643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
314643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QString html = "<body><p>first para</p><p>second para</p></body>";
315643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_mainFrame->setHtml(html);
316643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QWebElement body = m_mainFrame->documentElement();
317643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QWebElementCollection paras = body.findAll("p");
318643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
319643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QWebElementCollection::iterator it = paras.begin();
320643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(*it, paras.at(0));
321643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ++it;
322643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    (*it).encloseWith("<div>");
323643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(*it, paras.at(1));
324643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ++it;
325643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(it,  paras.end());
326643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
327643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
328643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid tst_QWebElement::constIterator()
329643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
330643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QString html = "<body><p>first para</p><p>second para</p></body>";
331643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_mainFrame->setHtml(html);
332643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QWebElement body = m_mainFrame->documentElement();
333643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    const QWebElementCollection paras = body.findAll("p");
334643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
335643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QWebElementCollection::const_iterator it = paras.begin();
336643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(*it, paras.at(0));
337643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ++it;
338643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(*it, paras.at(1));
339643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    ++it;
340643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QCOMPARE(it,  paras.end());
341643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::foreachManipulation()
3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body><p>first para</p><p>second para</p></body>";
3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement();
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    foreach(QWebElement p, body.findAll("p")) {
3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        p.setInnerXml("<div>foo</div><div>bar</div>");
3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 4);
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
356cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QWebElement::emptyCollection()
357cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
358cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection emptyCollection;
359cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(emptyCollection.count(), 0);
360cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
361cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
362cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QWebElement::appendCollection()
363cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
364cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QString html = "<body><span class='a'>aaa</span><p>first para</p><div>foo</div>"
365cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        "<span class='b'>bbb</span><p>second para</p><div>bar</div></body>";
366cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    m_mainFrame->setHtml(html);
367cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElement body = m_mainFrame->documentElement();
368cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
369cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection collection = body.findAll("p");
370cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(collection.count(), 2);
371cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
372cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    collection.append(body.findAll("div"));
373cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(collection.count(), 4);
374cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
375cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    collection += body.findAll("span.a");
376cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(collection.count(), 5);
377cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
378cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection all = collection + body.findAll("span.b");
379cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(all.count(), 6);
380cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(collection.count(), 5);
381cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
382cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block     all += collection;
383cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(all.count(), 11);
384cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
385cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(collection.count(), 5);
386cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection test;
387cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    test.append(collection);
388cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(test.count(), 5);
389cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    test.append(QWebElementCollection());
390cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(test.count(), 5);
391cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
392cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
393231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid tst_QWebElement::evaluateJavaScript()
3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVariant result;
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml("<body><p>test");
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement para = m_mainFrame->findFirstElement("p");
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
399231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    result = para.evaluateJavaScript("this.tagName");
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.isValid());
4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.type() == QVariant::String);
4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(result.toString(), QLatin1String("P"));
4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
404231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    result = para.evaluateJavaScript("this.hasAttributes()");
4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.isValid());
4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.type() == QVariant::Bool);
4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!result.toBool());
4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
409231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    para.evaluateJavaScript("this.setAttribute('align', 'left');");
4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(para.attribute("align"), QLatin1String("left"));
4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
412231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    result = para.evaluateJavaScript("this.hasAttributes()");
4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.isValid());
4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.type() == QVariant::Bool);
4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(result.toBool());
4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::documentElement()
4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml("<body><p>Test");
4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement para = m_mainFrame->documentElement().findAll("p").at(0);
4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(para.parent().parent() == m_mainFrame->documentElement());
4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(para.document() == m_mainFrame->documentElement());
4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::frame()
4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml("<body><p>test");
4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement doc = m_mainFrame->documentElement();
4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(doc.webFrame() == m_mainFrame);
4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
434e14391e94c850b8bd03680c23b38978db68687a8John Reck    m_mainFrame->load(QUrl("data:text/html,<frameset cols=\"25%,75%\"><frame src=\"data:text/html,"
435e14391e94c850b8bd03680c23b38978db68687a8John Reck                           "<p>frame1\">"
436e14391e94c850b8bd03680c23b38978db68687a8John Reck                           "<frame src=\"data:text/html,<p>frame2\"></frameset>"));
4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    waitForSignal(m_page, SIGNAL(loadFinished(bool)));
4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(m_mainFrame->childFrames().count(), 2);
4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFrame* firstFrame = m_mainFrame->childFrames().at(0);
4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebFrame* secondFrame = m_mainFrame->childFrames().at(1);
4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(firstFrame->toPlainText(), QString("frame1"));
4460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(secondFrame->toPlainText(), QString("frame2"));
4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement firstPara = firstFrame->documentElement().findAll("p").at(0);
4490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement secondPara = secondFrame->documentElement().findAll("p").at(0);
4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(firstPara.webFrame() == firstFrame);
4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(secondPara.webFrame() == secondFrame);
4530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
4540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::style()
4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
4570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<head>"
4580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<style type='text/css'>"
4590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "p { color: green !important }"
4600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "#idP { color: red }"
4610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ".classP { color : yellow ! important }"
4620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</style>"
4630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</head>"
4640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "<body>"
4650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p id='idP' class='classP' style='color: blue;'>some text</p>"
4660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement p = m_mainFrame->documentElement().findAll("p").at(0);
471231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue"));
472231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QVERIFY(p.styleProperty("cursor", QWebElement::InlineStyle).isEmpty());
4730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.setStyleProperty("color", "red");
4750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.setStyleProperty("cursor", "auto");
4760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
477231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("red"));
478231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("yellow"));
479231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("cursor", QWebElement::InlineStyle), QLatin1String("auto"));
4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.setStyleProperty("color", "green !important");
482231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("green"));
483231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("green"));
4840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.setStyleProperty("color", "blue");
4862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue"));
487231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("green"));
4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
489231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    p.setStyleProperty("color", "blue !important");
490231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue"));
491231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("blue"));
4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html2 = "<head>"
4940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<style type='text/css'>"
4950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "p { color: green }"
4960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "#idP { color: red }"
4970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ".classP { color: yellow }"
4980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</style>"
4990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</head>"
5000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "<body>"
5010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p id='idP' class='classP' style='color: blue;'>some text</p>"
5020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
5030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html2);
5050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p = m_mainFrame->documentElement().findAll("p").at(0);
5060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
507231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue"));
508231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("blue"));
5090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html3 = "<head>"
5110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<style type='text/css'>"
5120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "p { color: green !important }"
5130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "#idP { color: red !important}"
5140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ".classP { color: yellow !important}"
5150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</style>"
5160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</head>"
5170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "<body>"
5180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p id='idP' class='classP' style='color: blue !important;'>some text</p>"
5190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
5200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html3);
5220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p = m_mainFrame->documentElement().findAll("p").at(0);
5230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
524231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue"));
525231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("blue"));
5260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html5 = "<head>"
5280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<style type='text/css'>"
5290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "p { color: green }"
5300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "#idP { color: red }"
5310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ".classP { color: yellow }"
5320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</style>"
5330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</head>"
5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "<body>"
5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p id='idP' class='classP'>some text</p>"
5360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
5370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html5);
5390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p = m_mainFrame->documentElement().findAll("p").at(0);
5400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
541231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String(""));
542231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("red"));
5430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html6 = "<head>"
5450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<link rel='stylesheet' href='qrc:/style.css' type='text/css' />"
5460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<style type='text/css'>"
5470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "p { color: green }"
5480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "#idP { color: red }"
5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ".classP { color: yellow ! important}"
5500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</style>"
5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</head>"
5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "<body>"
5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p id='idP' class='classP' style='color: blue;'>some text</p>"
5540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // in few seconds, the CSS should be completey loaded
5570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html6);
558d0825bca7fe65beaee391d30da42e937db621564Steve Block    waitForSignal(m_page, SIGNAL(loadFinished(bool)), 200);
5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p = m_mainFrame->documentElement().findAll("p").at(0);
561231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue"));
562231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("black"));
5630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html7 = "<head>"
5650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<style type='text/css'>"
5660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "@import url(qrc:/style2.css);"
5670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</style>"
5680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<link rel='stylesheet' href='qrc:/style.css' type='text/css' />"
5690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</head>"
5700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "<body>"
5710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p id='idP' style='color: blue;'>some text</p>"
5720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
5730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // in few seconds, the style should be completey loaded
5750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html7);
576d0825bca7fe65beaee391d30da42e937db621564Steve Block    waitForSignal(m_page, SIGNAL(loadFinished(bool)), 200);
5770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p = m_mainFrame->documentElement().findAll("p").at(0);
579231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("black"));
5800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html8 = "<body><p>some text</p></body>";
5820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html8);
5840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p = m_mainFrame->documentElement().findAll("p").at(0);
5850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
586231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String(""));
587231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String(""));
5880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::computedStyle()
5910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
5920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body><p>some text</p></body>";
5930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
5940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement p = m_mainFrame->documentElement().findAll("p").at(0);
596231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("cursor", QWebElement::ComputedStyle), QLatin1String("auto"));
597231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QVERIFY(!p.styleProperty("cursor", QWebElement::ComputedStyle).isEmpty());
598231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QVERIFY(p.styleProperty("cursor", QWebElement::InlineStyle).isEmpty());
5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.setStyleProperty("cursor", "text");
6010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    p.setStyleProperty("color", "red");
6020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
603231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("cursor", QWebElement::ComputedStyle), QLatin1String("text"));
604231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::ComputedStyle), QLatin1String("rgb(255, 0, 0)"));
605231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("red"));
6060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::appendAndPrepend()
6090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
6110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
6120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "foo"
6130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "bar"
6160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
6210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.appendInside(body.findFirst("p"));
6240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
6250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p").toPlainText(), QString("bar"));
6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").last().toPlainText(), QString("foo"));
6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.appendInside(body.findFirst("p").clone());
6290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 3);
6300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p").toPlainText(), QString("bar"));
6310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").last().toPlainText(), QString("bar"));
6320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.prependInside(body.findAll("p").at(1).clone());
6340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 4);
6350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p").toPlainText(), QString("foo"));
6360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("p").appendInside("<div>booyakasha</div>");
6380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p div").count(), 1);
6390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p div").toPlainText(), QString("booyakasha"));
6400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("div").prependInside("<code>yepp</code>");
6420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p div code").count(), 1);
6430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p div code").toPlainText(), QString("yepp"));
6440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::insertBeforeAndAfter()
6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
6490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
6500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "foo"
6510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
6520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<div>"
6530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "yeah"
6540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</div>"
6550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
6560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "bar"
6570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
6580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
6590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
6610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement div = body.findFirst("div");
6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
6650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
6660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    div.prependOutside(body.findAll("p").last().clone());
6680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 3);
6690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(0).toPlainText(), QString("foo"));
6700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(1).toPlainText(), QString("bar"));
6710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(2).toPlainText(), QString("bar"));
6720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    div.appendOutside(body.findFirst("p").clone());
6740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 4);
6750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(0).toPlainText(), QString("foo"));
6760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(1).toPlainText(), QString("bar"));
6770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(2).toPlainText(), QString("foo"));
6780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").at(3).toPlainText(), QString("bar"));
6790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    div.prependOutside("<span>hey</span>");
6810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").count(), 1);
6820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    div.appendOutside("<span>there</span>");
6840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").count(), 2);
6850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").at(0).toPlainText(), QString("hey"));
6860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").at(1).toPlainText(), QString("there"));
6870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
6880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::remove()
6900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
6910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
6920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
6930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "foo"
6940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
6950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<div>"
6960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<p>yeah</p>"
6970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</div>"
6980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
6990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "bar"
7000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
7010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
7020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
7040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
7050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
7070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 3);
7080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement div = body.findFirst("div");
7100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    div.takeFromDocument();
7110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(div.isNull(), false);
7130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 0);
7140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
7150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.appendInside(div);
7170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
7190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 3);
7200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
7210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::clear()
7230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
7240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
7250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
7260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "foo"
7270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
7280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<div>"
7290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<p>yeah</p>"
7300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</div>"
7310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
7320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "bar"
7330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
7340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
7350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
7370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
7380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
7400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 3);
741cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    body.findFirst("div").removeAllChildren();
7420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
7430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
7440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
7450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::replaceWith()
7480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
7490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
7500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
7510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "foo"
7520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
7530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<div>"
7540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "yeah"
7550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</div>"
7560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
7570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<span>haba</span>"
7580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
7590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
7600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
7620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
7630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
7650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").count(), 1);
7660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("div").replace(body.findFirst("span").clone());
7670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 0);
7680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").count(), 2);
7690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
7700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("span").replace("<p><code>wow</code></p>");
7720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 3);
7730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p code").count(), 1);
7740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p code").toPlainText(), QString("wow"));
7750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
7760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::encloseContentsWith()
7780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
7790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
7800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<div>"
7810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<i>"
7820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "yeah"
7830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "</i>"
7840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<i>"
7850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "hello"
7860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "</i>"
7870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</div>"
7880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
7890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<span>foo</span>"
7900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<span>bar</span>"
7910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
7920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<u></u>"
7930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<b></b>"
7940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<em>hey</em>"
7950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
7960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
7980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("p").encloseContentsWith(body.findFirst("b"));
8010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p b span").count(), 2);
8020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("p b span").toPlainText(), QString("foo"));
8030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("u").encloseContentsWith("<i></i>");
8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("u i").count(), 1);
8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("u i").toPlainText(), QString());
8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("div").encloseContentsWith("<span></span>");
8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div span i").count(), 2);
8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("div span i").toPlainText(), QString("yeah"));
8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString snippet = ""
8130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<table>"
8140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<tbody>"
8150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "<tr>"
8160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "</tr>"
8190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "<tr>"
8200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "<tr>"
8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "</tbody>"
8240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</table>";
8250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("em").encloseContentsWith(snippet);
8270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("em table tbody tr td").toPlainText(), QString("hey"));
8280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
8290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::encloseWith()
8310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
8320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString html = "<body>"
8330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
8340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "foo"
8350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
8360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<div>"
8370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "yeah"
8380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</div>"
8390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<p>"
8400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<span>bar</span>"
8410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</p>"
8420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<em>hey</em>"
8430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<h1>hello</h1>"
8440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    "</body>";
8450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml(html);
8470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->documentElement().findFirst("body");
8480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("p").encloseWith("<br>");
8500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("br").count(), 0);
8510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
8530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("div").encloseWith(body.findFirst("span").clone());
8540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("div").count(), 1);
8550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("span").count(), 2);
8560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("p").count(), 2);
8570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("div").encloseWith("<code></code>");
8590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("code").count(), 1);
8600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findAll("code div").count(), 1);
8610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("code div").toPlainText(), QString("yeah"));
8620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QString snippet = ""
8640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "<table>"
8650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "<tbody>"
8660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "<tr>"
8670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "</tr>"
8700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "<tr>"
8710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    "<td></td>"
8730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                "<tr>"
8740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            "</tbody>"
8750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        "</table>";
8760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    body.findFirst("em").encloseWith(snippet);
8780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(body.findFirst("table tbody tr td em").toPlainText(), QString("hey"));
8790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
8800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::nullSelect()
8820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
8830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_mainFrame->setHtml("<body><p>Test");
8840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
885cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection collection = m_mainFrame->findAllElements("invalid{syn(tax;;%#$f223e>>");
8860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(collection.count() == 0);
8870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
8880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::firstChildNextSibling()
8900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
891967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    m_mainFrame->setHtml("<body><!--comment--><p>Test</p><!--another comment--><table>");
8920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->findFirstElement("body");
8940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.isNull());
8950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement p = body.firstChild();
8960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.isNull());
8970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.tagName(), QString("P"));
8980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement table = p.nextSibling();
8990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!table.isNull());
9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(table.tagName(), QString("TABLE"));
9010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(table.nextSibling().isNull());
9020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
9030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid tst_QWebElement::lastChildPreviousSibling()
9050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
906967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    m_mainFrame->setHtml("<body><!--comment--><p>Test</p><!--another comment--><table>");
9070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement body = m_mainFrame->findFirstElement("body");
9090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!body.isNull());
9100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement table = body.lastChild();
9110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!table.isNull());
9120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(table.tagName(), QString("TABLE"));
9130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QWebElement p = table.previousSibling();
9140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(!p.isNull());
9150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QCOMPARE(p.tagName(), QString("P"));
9160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    QVERIFY(p.previousSibling().isNull());
9170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
9180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
919231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid tst_QWebElement::hasSetFocus()
920231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
921231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_mainFrame->setHtml("<html><body>" \
922231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                            "<input type='text' id='input1'/>" \
923231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                            "<br>"\
924231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                            "<input type='text' id='input2'/>" \
925231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                            "</body></html>");
926231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
927cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection inputs = m_mainFrame->documentElement().findAll("input");
928231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QWebElement input1 = inputs.at(0);
929231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    input1.setFocus();
930231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QVERIFY(input1.hasFocus());
931231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
932231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QWebElement input2 = inputs.at(1);
933231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    input2.setFocus();
934231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QVERIFY(!input1.hasFocus());
935231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    QVERIFY(input2.hasFocus());
936231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
937231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
938cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid tst_QWebElement::render()
939cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{
940cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QString html( "<html>"
941cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                    "<head><style>"
94281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                       "body, iframe { margin: 0px; border: none; background: white; }"
943cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                    "</style></head>"
944cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                    "<body><table width='300px' height='300px' border='1'>"
945cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                           "<tr>"
946cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                               "<td>test"
947cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                               "</td>"
948cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                               "<td><img src='qrc:///image.png'>"
949cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                               "</td>"
950cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                           "</tr>"
951cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                          "</table>"
952cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                    "</body>"
953cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                 "</html>"
954cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                );
955cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
956cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebPage page;
957cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool)));
958cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    page.mainFrame()->setHtml(html);
959cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
960cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    waitForSignal(&page, SIGNAL(loadFinished(bool)));
961cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(loadSpy.count(), 1);
962cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
963cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QSize size = page.mainFrame()->contentsSize();
964cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    page.setViewportSize(size);
965cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
966cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection imgs = page.mainFrame()->findAllElements("img");
967cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(imgs.count(), 1);
968cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
969cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QImage resource(":/image.png");
970cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QRect imageRect(0, 0, resource.width(), resource.height());
971cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
972cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QImage testImage(resource.width(), resource.height(), QImage::Format_ARGB32);
973cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QPainter painter0(&testImage);
974cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter0.fillRect(imageRect, Qt::white);
975643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // render() uses pixmaps internally, and pixmaps might have bit depths
976643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    // other than 32, giving different pixel values due to rounding.
977643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    QPixmap pix = QPixmap::fromImage(resource);
978643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    painter0.drawPixmap(0, 0, pix);
979cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter0.end();
980cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
981cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QImage image1(resource.width(), resource.height(), QImage::Format_ARGB32);
982cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QPainter painter1(&image1);
983cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter1.fillRect(imageRect, Qt::white);
984cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    imgs[0].render(&painter1);
985cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter1.end();
986cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
987cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QVERIFY(image1 == testImage);
988cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
989cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // render image 2nd time to make sure that cached rendering works fine
990cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QImage image2(resource.width(), resource.height(), QImage::Format_ARGB32);
991cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QPainter painter2(&image2);
992cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter2.fillRect(imageRect, Qt::white);
993cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    imgs[0].render(&painter2);
994cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter2.end();
995cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
996cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QVERIFY(image2 == testImage);
997cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
998cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    // compare table rendered through QWebElement::render to whole page table rendering
999cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QRect tableRect(0, 0, 300, 300);
1000cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QWebElementCollection tables = page.mainFrame()->findAllElements("table");
1001cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QCOMPARE(tables.count(), 1);
1002cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1003cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QImage image3(300, 300, QImage::Format_ARGB32);
1004cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QPainter painter3(&image3);
1005cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter3.fillRect(tableRect, Qt::white);
1006cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    tables[0].render(&painter3);
1007cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter3.end();
1008cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1009cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QImage image4(300, 300, QImage::Format_ARGB32);
1010cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QPainter painter4(&image4);
1011cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    page.mainFrame()->render(&painter4, tableRect);
1012cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    painter4.end();
1013cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
1014cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    QVERIFY(image3 == image4);
101581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
101681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Chunked render test reuses page rendered in image4 in previous test
101781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const int chunkHeight = tableRect.height();
101881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    const int chunkWidth = tableRect.width() / 3;
101981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QImage chunk(chunkWidth, chunkHeight, QImage::Format_ARGB32);
102081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QRect chunkRect(0, 0, chunkWidth, chunkHeight);
102181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    for (int x = 0; x < tableRect.width(); x += chunkWidth) {
102281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        QPainter painter(&chunk);
102381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        painter.fillRect(chunkRect, Qt::white);
102481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        QRect chunkPaintRect(x, 0, chunkWidth, chunkHeight);
102581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        tables[0].render(&painter, chunkPaintRect);
102681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        painter.end();
102781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
102881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        QVERIFY(chunk == image4.copy(chunkPaintRect));
102981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
1030cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block}
1031cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
10324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid tst_QWebElement::addElementToHead()
10334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
10344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    m_mainFrame->setHtml("<html><head></head><body></body></html>");
10354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    QWebElement head = m_mainFrame->findFirstElement("head");
10364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    QVERIFY(!head.isNull());
10374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    QString append = "<script type=\"text/javascript\">var t = 0;</script>";
10384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    head.appendInside(append);
10394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    QCOMPARE(head.toInnerXml(), append);
10404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
10414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
10420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochQTEST_MAIN(tst_QWebElement)
10430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "tst_qwebelement.moc"
1044