diff options
Diffstat (limited to 'Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp')
-rw-r--r-- | Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp | 1080 |
1 files changed, 0 insertions, 1080 deletions
diff --git a/Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp b/Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp deleted file mode 100644 index 4ca5fe5f9..000000000 --- a/Source/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp +++ /dev/null @@ -1,1080 +0,0 @@ -/* - Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - - -#include <QtTest/QtTest> -#include <qwebpage.h> -#include <qwidget.h> -#include <qwebview.h> -#include <qwebframe.h> -#include <qwebelement.h> -#include <util.h> -//TESTED_CLASS= -//TESTED_FILES= - -class tst_QWebElement : public QObject -{ - Q_OBJECT - -public: - tst_QWebElement(); - virtual ~tst_QWebElement(); - -public Q_SLOTS: - void init(); - void cleanup(); - -private Q_SLOTS: - void textHtml(); - void simpleCollection(); - void attributes(); - void attributesNS(); - void listAttributes(); - void classes(); - void namespaceURI(); - void iteration(); - void nonConstIterator(); - void constIterator(); - void foreachManipulation(); - void emptyCollection(); - void appendCollection(); - void evaluateJavaScript(); - void documentElement(); - void frame(); - void style(); - void computedStyle(); - void appendAndPrepend(); - void insertBeforeAndAfter(); - void remove(); - void clear(); - void replaceWith(); - void encloseWith(); - void encloseContentsWith(); - void nullSelect(); - void firstChildNextSibling(); - void lastChildPreviousSibling(); - void hasSetFocus(); - void render(); - void addElementToHead(); - -private: - QWebView* m_view { nullptr }; - QWebPage* m_page { nullptr }; - QWebFrame* m_mainFrame { nullptr }; -}; - -tst_QWebElement::tst_QWebElement() -{ -} - -tst_QWebElement::~tst_QWebElement() -{ -} - -void tst_QWebElement::init() -{ - m_view = new QWebView(); - m_page = m_view->page(); - m_mainFrame = m_page->mainFrame(); -} - -void tst_QWebElement::cleanup() -{ - delete m_view; -} - -void tst_QWebElement::textHtml() -{ - QString html = "<head></head><body><p>test</p></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - QVERIFY(!body.isNull()); - - QCOMPARE(body.toPlainText(), QString("test")); - QCOMPARE(body.toPlainText(), m_mainFrame->toPlainText()); - - QCOMPARE(body.toInnerXml(), html); -} - -void tst_QWebElement::simpleCollection() -{ - QString html = "<body><p>first para</p><p>second para</p></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - - QWebElementCollection list = body.findAll("p"); - QCOMPARE(list.count(), 2); - QCOMPARE(list.at(0).toPlainText(), QString("first para")); - QCOMPARE(list.at(1).toPlainText(), QString("second para")); -} - -void tst_QWebElement::attributes() -{ - m_mainFrame->setHtml("<body><p>Test"); - QWebElement body = m_mainFrame->documentElement(); - - QVERIFY(!body.hasAttribute("title")); - QVERIFY(!body.hasAttributes()); - - body.setAttribute("title", "test title"); - - QVERIFY(body.hasAttributes()); - QVERIFY(body.hasAttribute("title")); - - QCOMPARE(body.attribute("title"), QString("test title")); - - body.removeAttribute("title"); - - QVERIFY(!body.hasAttribute("title")); - QVERIFY(!body.hasAttributes()); - - QCOMPARE(body.attribute("does-not-exist", "testvalue"), QString("testvalue")); -} - -void tst_QWebElement::attributesNS() -{ - QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" " - "xmlns:svg=\"http://www.w3.org/2000/svg\">" - "<body><svg:svg id=\"foobar\" width=\"400px\" height=\"300px\">" - "</svg:svg></body></html>"; - - m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml"); - - QWebElement svg = m_mainFrame->findFirstElement("svg"); - QVERIFY(!svg.isNull()); - - QVERIFY(!svg.hasAttributeNS("http://www.w3.org/2000/svg", "foobar")); - QCOMPARE(svg.attributeNS("http://www.w3.org/2000/svg", "foobar", "defaultblah"), QString("defaultblah")); - svg.setAttributeNS("http://www.w3.org/2000/svg", "svg:foobar", "true"); - QVERIFY(svg.hasAttributeNS("http://www.w3.org/2000/svg", "foobar")); - QCOMPARE(svg.attributeNS("http://www.w3.org/2000/svg", "foobar", "defaultblah"), QString("true")); -} - -void tst_QWebElement::listAttributes() -{ - QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" " - "xmlns:svg=\"http://www.w3.org/2000/svg\">" - "<body><svg:svg foo=\"\" svg:bar=\"\">" - "</svg:svg></body></html>"; - - m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml"); - - QWebElement svg = m_mainFrame->findFirstElement("svg"); - QVERIFY(!svg.isNull()); - - QVERIFY(svg.attributeNames().contains("foo")); - QVERIFY(svg.attributeNames("http://www.w3.org/2000/svg").contains("bar")); - - svg.setAttributeNS("http://www.w3.org/2000/svg", "svg:foobar", "true"); - QVERIFY(svg.attributeNames().contains("foo")); - QStringList attributes = svg.attributeNames("http://www.w3.org/2000/svg"); - QCOMPARE(attributes.size(), 2); - QVERIFY(attributes.contains("bar")); - QVERIFY(attributes.contains("foobar")); -} - -void tst_QWebElement::classes() -{ - m_mainFrame->setHtml("<body><p class=\"a b c d a c\">Test"); - - QWebElement body = m_mainFrame->documentElement(); - QCOMPARE(body.classes().count(), 0); - - QWebElement p = m_mainFrame->documentElement().findAll("p").at(0); - QStringList classes = p.classes(); - QCOMPARE(classes.count(), 4); - QCOMPARE(classes[0], QLatin1String("a")); - QCOMPARE(classes[1], QLatin1String("b")); - QCOMPARE(classes[2], QLatin1String("c")); - QCOMPARE(classes[3], QLatin1String("d")); - QVERIFY(p.hasClass("a")); - QVERIFY(p.hasClass("b")); - QVERIFY(p.hasClass("c")); - QVERIFY(p.hasClass("d")); - QVERIFY(!p.hasClass("e")); - - p.addClass("f"); - QVERIFY(p.hasClass("f")); - p.addClass("a"); - QCOMPARE(p.classes().count(), 5); - QVERIFY(p.hasClass("a")); - QVERIFY(p.hasClass("b")); - QVERIFY(p.hasClass("c")); - QVERIFY(p.hasClass("d")); - - p.toggleClass("a"); - QVERIFY(!p.hasClass("a")); - QVERIFY(p.hasClass("b")); - QVERIFY(p.hasClass("c")); - QVERIFY(p.hasClass("d")); - QVERIFY(p.hasClass("f")); - QCOMPARE(p.classes().count(), 4); - p.toggleClass("f"); - QVERIFY(!p.hasClass("f")); - QCOMPARE(p.classes().count(), 3); - p.toggleClass("a"); - p.toggleClass("f"); - QVERIFY(p.hasClass("a")); - QVERIFY(p.hasClass("f")); - QCOMPARE(p.classes().count(), 5); - - p.removeClass("f"); - QVERIFY(!p.hasClass("f")); - QCOMPARE(p.classes().count(), 4); - p.removeClass("d"); - QVERIFY(!p.hasClass("d")); - QCOMPARE(p.classes().count(), 3); - p.removeClass("not-exist"); - QCOMPARE(p.classes().count(), 3); - p.removeClass("c"); - QVERIFY(!p.hasClass("c")); - QCOMPARE(p.classes().count(), 2); - p.removeClass("b"); - QVERIFY(!p.hasClass("b")); - QCOMPARE(p.classes().count(), 1); - p.removeClass("a"); - QVERIFY(!p.hasClass("a")); - QCOMPARE(p.classes().count(), 0); - p.removeClass("foobar"); - QCOMPARE(p.classes().count(), 0); -} - -void tst_QWebElement::namespaceURI() -{ - QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" " - "xmlns:svg=\"http://www.w3.org/2000/svg\">" - "<body><svg:svg id=\"foobar\" width=\"400px\" height=\"300px\">" - "</svg:svg></body></html>"; - - m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml"); - QWebElement body = m_mainFrame->documentElement(); - QCOMPARE(body.namespaceUri(), QLatin1String("http://www.w3.org/1999/xhtml")); - - QWebElement svg = body.findAll("*#foobar").at(0); - QCOMPARE(svg.prefix(), QLatin1String("svg")); - QCOMPARE(svg.localName(), QLatin1String("svg")); - QCOMPARE(svg.tagName(), QLatin1String("svg:svg")); - QCOMPARE(svg.namespaceUri(), QLatin1String("http://www.w3.org/2000/svg")); - -} - -void tst_QWebElement::iteration() -{ - QString html = "<body><p>first para</p><p>second para</p></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - - QWebElementCollection paras = body.findAll("p"); - QList<QWebElement> referenceList = paras.toList(); - - QList<QWebElement> foreachList; - foreach(QWebElement p, paras) { - foreachList.append(p); - } - QVERIFY(foreachList.count() == 2); - QCOMPARE(foreachList.count(), referenceList.count()); - QCOMPARE(foreachList.at(0), referenceList.at(0)); - QCOMPARE(foreachList.at(1), referenceList.at(1)); - - QList<QWebElement> forLoopList; - for (int i = 0; i < paras.count(); ++i) { - forLoopList.append(paras.at(i)); - } - QVERIFY(foreachList.count() == 2); - QCOMPARE(foreachList.count(), referenceList.count()); - QCOMPARE(foreachList.at(0), referenceList.at(0)); - QCOMPARE(foreachList.at(1), referenceList.at(1)); - - for (int i = 0; i < paras.count(); ++i) { - QCOMPARE(paras.at(i), paras[i]); - } - - QCOMPARE(paras.at(0), paras.first()); - QCOMPARE(paras.at(1), paras.last()); -} - -void tst_QWebElement::nonConstIterator() -{ - QString html = "<body><p>first para</p><p>second para</p></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - QWebElementCollection paras = body.findAll("p"); - - QWebElementCollection::iterator it = paras.begin(); - QCOMPARE(*it, paras.at(0)); - ++it; - (*it).encloseWith("<div>"); - QCOMPARE(*it, paras.at(1)); - ++it; - QCOMPARE(it, paras.end()); -} - -void tst_QWebElement::constIterator() -{ - QString html = "<body><p>first para</p><p>second para</p></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - const QWebElementCollection paras = body.findAll("p"); - - QWebElementCollection::const_iterator it = paras.begin(); - QCOMPARE(*it, paras.at(0)); - ++it; - QCOMPARE(*it, paras.at(1)); - ++it; - QCOMPARE(it, paras.end()); -} - -void tst_QWebElement::foreachManipulation() -{ - QString html = "<body><p>first para</p><p>second para</p></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - - foreach(QWebElement p, body.findAll("p")) { - p.setInnerXml("<div>foo</div><div>bar</div>"); - } - - QCOMPARE(body.findAll("div").count(), 4); -} - -void tst_QWebElement::emptyCollection() -{ - QWebElementCollection emptyCollection; - QCOMPARE(emptyCollection.count(), 0); -} - -void tst_QWebElement::appendCollection() -{ - QString html = "<body><span class='a'>aaa</span><p>first para</p><div>foo</div>" - "<span class='b'>bbb</span><p>second para</p><div>bar</div></body>"; - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement(); - - QWebElementCollection collection = body.findAll("p"); - QCOMPARE(collection.count(), 2); - - collection.append(body.findAll("div")); - QCOMPARE(collection.count(), 4); - - collection += body.findAll("span.a"); - QCOMPARE(collection.count(), 5); - - QWebElementCollection all = collection + body.findAll("span.b"); - QCOMPARE(all.count(), 6); - QCOMPARE(collection.count(), 5); - - all += collection; - QCOMPARE(all.count(), 11); - - QCOMPARE(collection.count(), 5); - QWebElementCollection test; - test.append(collection); - QCOMPARE(test.count(), 5); - test.append(QWebElementCollection()); - QCOMPARE(test.count(), 5); -} - -void tst_QWebElement::evaluateJavaScript() -{ - QVariant result; - m_mainFrame->setHtml("<body><p>test"); - QWebElement para = m_mainFrame->findFirstElement("p"); - - result = para.evaluateJavaScript("this.tagName"); - QVERIFY(result.isValid()); - QVERIFY(result.type() == QVariant::String); - QCOMPARE(result.toString(), QLatin1String("P")); - - result = para.evaluateJavaScript("this.hasAttributes()"); - QVERIFY(result.isValid()); - QVERIFY(result.type() == QVariant::Bool); - QVERIFY(!result.toBool()); - - para.evaluateJavaScript("this.setAttribute('align', 'left');"); - QCOMPARE(para.attribute("align"), QLatin1String("left")); - - result = para.evaluateJavaScript("this.hasAttributes()"); - QVERIFY(result.isValid()); - QVERIFY(result.type() == QVariant::Bool); - QVERIFY(result.toBool()); -} - -void tst_QWebElement::documentElement() -{ - m_mainFrame->setHtml("<body><p>Test"); - - QWebElement para = m_mainFrame->documentElement().findAll("p").at(0); - QVERIFY(para.parent().parent() == m_mainFrame->documentElement()); - QVERIFY(para.document() == m_mainFrame->documentElement()); -} - -void tst_QWebElement::frame() -{ - m_mainFrame->setHtml("<body><p>test"); - - QWebElement doc = m_mainFrame->documentElement(); - QVERIFY(doc.webFrame() == m_mainFrame); - - m_mainFrame->load(QUrl("data:text/html,<frameset cols=\"25%,75%\"><frame src=\"data:text/html," - "<p>frame1\">" - "<frame src=\"data:text/html,<p>frame2\"></frameset>")); - - waitForSignal(m_page, SIGNAL(loadFinished(bool))); - - QCOMPARE(m_mainFrame->childFrames().count(), 2); - - QWebFrame* firstFrame = m_mainFrame->childFrames().at(0); - QWebFrame* secondFrame = m_mainFrame->childFrames().at(1); - - QCOMPARE(firstFrame->toPlainText(), QString("frame1")); - QCOMPARE(secondFrame->toPlainText(), QString("frame2")); - - QWebElement firstPara = firstFrame->documentElement().findAll("p").at(0); - QWebElement secondPara = secondFrame->documentElement().findAll("p").at(0); - - QVERIFY(firstPara.webFrame() == firstFrame); - QVERIFY(secondPara.webFrame() == secondFrame); -} - -void tst_QWebElement::style() -{ - QString html = "<head>" - "<style type='text/css'>" - "p { color: green !important }" - "#idP { color: red }" - ".classP { color : yellow ! important }" - "</style>" - "</head>" - "<body>" - "<p id='idP' class='classP' style='color: blue;'>some text</p>" - "</body>"; - - m_mainFrame->setHtml(html); - - QWebElement p = m_mainFrame->documentElement().findAll("p").at(0); - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue")); - QVERIFY(p.styleProperty("cursor", QWebElement::InlineStyle).isEmpty()); - - p.setStyleProperty("color", "red"); - p.setStyleProperty("cursor", "auto"); - - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("red")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("yellow")); - QCOMPARE(p.styleProperty("cursor", QWebElement::InlineStyle), QLatin1String("auto")); - - p.setStyleProperty("color", "green !important"); - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("green")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("green")); - - p.setStyleProperty("color", "blue"); - // A current important InlineStyle shouldn't be overwritten by a non-important one. - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("green")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("green")); - - p.setStyleProperty("color", "blue !important"); - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("blue")); - - QString html2 = "<head>" - "<style type='text/css'>" - "p { color: green }" - "#idP { color: red }" - ".classP { color: yellow }" - "</style>" - "</head>" - "<body>" - "<p id='idP' class='classP' style='color: blue;'>some text</p>" - "</body>"; - - m_mainFrame->setHtml(html2); - p = m_mainFrame->documentElement().findAll("p").at(0); - - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("blue")); - - QString html3 = "<head>" - "<style type='text/css'>" - "p { color: green !important }" - "#idP { color: red !important}" - ".classP { color: yellow !important}" - "</style>" - "</head>" - "<body>" - "<p id='idP' class='classP' style='color: blue !important;'>some text</p>" - "</body>"; - - m_mainFrame->setHtml(html3); - p = m_mainFrame->documentElement().findAll("p").at(0); - - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("blue")); - - QString html5 = "<head>" - "<style type='text/css'>" - "p { color: green }" - "#idP { color: red }" - ".classP { color: yellow }" - "</style>" - "</head>" - "<body>" - "<p id='idP' class='classP'>some text</p>" - "</body>"; - - m_mainFrame->setHtml(html5); - p = m_mainFrame->documentElement().findAll("p").at(0); - - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("red")); - - QString html6 = "<head>" - "<link rel='stylesheet' href='qrc:/style.css' type='text/css' />" - "<style type='text/css'>" - "p { color: green }" - "#idP { color: red }" - ".classP { color: yellow ! important}" - "</style>" - "</head>" - "<body>" - "<p id='idP' class='classP' style='color: blue;'>some text</p>" - "</body>"; - - // in few seconds, the CSS should be completey loaded - m_mainFrame->setHtml(html6); - waitForSignal(m_page, SIGNAL(loadFinished(bool)), 200); - - p = m_mainFrame->documentElement().findAll("p").at(0); - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("blue")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("black")); - - QString html7 = "<head>" - "<style type='text/css'>" - "@import url(qrc:/style2.css);" - "</style>" - "<link rel='stylesheet' href='qrc:/style.css' type='text/css' />" - "</head>" - "<body>" - "<p id='idP' style='color: blue;'>some text</p>" - "</body>"; - - // in few seconds, the style should be completey loaded - m_mainFrame->setHtml(html7); - waitForSignal(m_page, SIGNAL(loadFinished(bool)), 200); - - p = m_mainFrame->documentElement().findAll("p").at(0); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("black")); - - QString html8 = "<body><p>some text</p></body>"; - - m_mainFrame->setHtml(html8); - p = m_mainFrame->documentElement().findAll("p").at(0); - - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("")); - QCOMPARE(p.styleProperty("color", QWebElement::CascadedStyle), QLatin1String("")); -} - -void tst_QWebElement::computedStyle() -{ - QString html = "<body><p>some text</p></body>"; - m_mainFrame->setHtml(html); - - QWebElement p = m_mainFrame->documentElement().findAll("p").at(0); - QCOMPARE(p.styleProperty("cursor", QWebElement::ComputedStyle), QLatin1String("auto")); - QVERIFY(!p.styleProperty("cursor", QWebElement::ComputedStyle).isEmpty()); - QVERIFY(p.styleProperty("cursor", QWebElement::InlineStyle).isEmpty()); - - p.setStyleProperty("cursor", "text"); - p.setStyleProperty("color", "red"); - - QCOMPARE(p.styleProperty("cursor", QWebElement::ComputedStyle), QLatin1String("text")); - QCOMPARE(p.styleProperty("color", QWebElement::ComputedStyle), QLatin1String("rgb(255, 0, 0)")); - QCOMPARE(p.styleProperty("color", QWebElement::InlineStyle), QLatin1String("red")); -} - -void tst_QWebElement::appendAndPrepend() -{ - QString html = "<body>" - "<p>" - "foo" - "</p>" - "<p>" - "bar" - "</p>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - - QCOMPARE(body.findAll("p").count(), 2); - body.appendInside(body.findFirst("p")); - QCOMPARE(body.findAll("p").count(), 2); - QCOMPARE(body.findFirst("p").toPlainText(), QString("bar")); - QCOMPARE(body.findAll("p").last().toPlainText(), QString("foo")); - - body.appendInside(body.findFirst("p").clone()); - QCOMPARE(body.findAll("p").count(), 3); - QCOMPARE(body.findFirst("p").toPlainText(), QString("bar")); - QCOMPARE(body.findAll("p").last().toPlainText(), QString("bar")); - - body.prependInside(body.findAll("p").at(1).clone()); - QCOMPARE(body.findAll("p").count(), 4); - QCOMPARE(body.findFirst("p").toPlainText(), QString("foo")); - - body.findFirst("p").appendInside("<div>booyakasha</div>"); - QCOMPARE(body.findAll("p div").count(), 1); - QCOMPARE(body.findFirst("p div").toPlainText(), QString("booyakasha")); - - body.findFirst("div").prependInside("<code>yepp</code>"); - QCOMPARE(body.findAll("p div code").count(), 1); - QCOMPARE(body.findFirst("p div code").toPlainText(), QString("yepp")); - - // Inserting HTML into an img tag is not allowed, but appending/prepending outside is. - body.findFirst("div").appendInside("<img src=\"test.png\">"); - QCOMPARE(body.findAll("p div img").count(), 1); - - QWebElement img = body.findFirst("img"); - QVERIFY(!img.isNull()); - img.appendInside("<p id=\"fail1\"></p>"); - QCOMPARE(body.findAll("p#fail1").count(), 0); - - img.appendOutside("<p id=\"success1\"></p>"); - QCOMPARE(body.findAll("p#success1").count(), 1); - - img.prependInside("<p id=\"fail2\"></p>"); - QCOMPARE(body.findAll("p#fail2").count(), 0); - - img.prependOutside("<p id=\"success2\"></p>"); - QCOMPARE(body.findAll("p#success2").count(), 1); - - -} - -void tst_QWebElement::insertBeforeAndAfter() -{ - QString html = "<body>" - "<p>" - "foo" - "</p>" - "<div>" - "yeah" - "</div>" - "<p>" - "bar" - "</p>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - QWebElement div = body.findFirst("div"); - - QCOMPARE(body.findAll("p").count(), 2); - QCOMPARE(body.findAll("div").count(), 1); - - div.prependOutside(body.findAll("p").last().clone()); - QCOMPARE(body.findAll("p").count(), 3); - QCOMPARE(body.findAll("p").at(0).toPlainText(), QString("foo")); - QCOMPARE(body.findAll("p").at(1).toPlainText(), QString("bar")); - QCOMPARE(body.findAll("p").at(2).toPlainText(), QString("bar")); - - div.appendOutside(body.findFirst("p").clone()); - QCOMPARE(body.findAll("p").count(), 4); - QCOMPARE(body.findAll("p").at(0).toPlainText(), QString("foo")); - QCOMPARE(body.findAll("p").at(1).toPlainText(), QString("bar")); - QCOMPARE(body.findAll("p").at(2).toPlainText(), QString("foo")); - QCOMPARE(body.findAll("p").at(3).toPlainText(), QString("bar")); - - div.prependOutside("<span>hey</span>"); - QCOMPARE(body.findAll("span").count(), 1); - - div.appendOutside("<span>there</span>"); - QCOMPARE(body.findAll("span").count(), 2); - QCOMPARE(body.findAll("span").at(0).toPlainText(), QString("hey")); - QCOMPARE(body.findAll("span").at(1).toPlainText(), QString("there")); -} - -void tst_QWebElement::remove() -{ - QString html = "<body>" - "<p>" - "foo" - "</p>" - "<div>" - "<p>yeah</p>" - "</div>" - "<p>" - "bar" - "</p>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - - QCOMPARE(body.findAll("div").count(), 1); - QCOMPARE(body.findAll("p").count(), 3); - - QWebElement div = body.findFirst("div"); - div.takeFromDocument(); - - QCOMPARE(div.isNull(), false); - QCOMPARE(body.findAll("div").count(), 0); - QCOMPARE(body.findAll("p").count(), 2); - - body.appendInside(div); - - QCOMPARE(body.findAll("div").count(), 1); - QCOMPARE(body.findAll("p").count(), 3); -} - -void tst_QWebElement::clear() -{ - QString html = "<body>" - "<p>" - "foo" - "</p>" - "<div>" - "<p>yeah</p>" - "</div>" - "<p>" - "bar" - "</p>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - - QCOMPARE(body.findAll("div").count(), 1); - QCOMPARE(body.findAll("p").count(), 3); - body.findFirst("div").removeAllChildren(); - QCOMPARE(body.findAll("div").count(), 1); - QCOMPARE(body.findAll("p").count(), 2); -} - - -void tst_QWebElement::replaceWith() -{ - QString html = "<body>" - "<p>" - "foo" - "</p>" - "<div>" - "yeah" - "</div>" - "<p>" - "<span>haba</span>" - "</p>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - - QCOMPARE(body.findAll("div").count(), 1); - QCOMPARE(body.findAll("span").count(), 1); - body.findFirst("div").replace(body.findFirst("span").clone()); - QCOMPARE(body.findAll("div").count(), 0); - QCOMPARE(body.findAll("span").count(), 2); - QCOMPARE(body.findAll("p").count(), 2); - - body.findFirst("span").replace("<p><code>wow</code></p>"); - QCOMPARE(body.findAll("p").count(), 3); - QCOMPARE(body.findAll("p code").count(), 1); - QCOMPARE(body.findFirst("p code").toPlainText(), QString("wow")); -} - -void tst_QWebElement::encloseContentsWith() -{ - QString html = "<body>" - "<div>" - "<i>" - "yeah" - "</i>" - "<i>" - "hello" - "</i>" - "</div>" - "<p>" - "<span>foo</span>" - "<span>bar</span>" - "</p>" - "<u></u>" - "<b></b>" - "<em>hey</em>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - - body.findFirst("p").encloseContentsWith(body.findFirst("b")); - QCOMPARE(body.findAll("p b span").count(), 2); - QCOMPARE(body.findFirst("p b span").toPlainText(), QString("foo")); - - body.findFirst("u").encloseContentsWith("<i></i>"); - QCOMPARE(body.findAll("u i").count(), 1); - QCOMPARE(body.findFirst("u i").toPlainText(), QString()); - - body.findFirst("div").encloseContentsWith("<span></span>"); - QCOMPARE(body.findAll("div span i").count(), 2); - QCOMPARE(body.findFirst("div span i").toPlainText(), QString("yeah")); - - QString snippet = "" - "<table>" - "<tbody>" - "<tr>" - "<td></td>" - "<td></td>" - "</tr>" - "<tr>" - "<td></td>" - "<td></td>" - "<tr>" - "</tbody>" - "</table>"; - - body.findFirst("em").encloseContentsWith(snippet); - QCOMPARE(body.findFirst("em table tbody tr td").toPlainText(), QString("hey")); -} - -void tst_QWebElement::encloseWith() -{ - QString html = "<body>" - "<p>" - "foo" - "</p>" - "<div>" - "yeah" - "</div>" - "<p>" - "<span>bar</span>" - "</p>" - "<em>hey</em>" - "<h1>hello</h1>" - "</body>"; - - m_mainFrame->setHtml(html); - QWebElement body = m_mainFrame->documentElement().findFirst("body"); - - body.findFirst("p").encloseWith("<br>"); - QCOMPARE(body.findAll("br").count(), 0); - - QCOMPARE(body.findAll("div").count(), 1); - body.findFirst("div").encloseWith(body.findFirst("span").clone()); - QCOMPARE(body.findAll("div").count(), 1); - QCOMPARE(body.findAll("span").count(), 2); - QCOMPARE(body.findAll("p").count(), 2); - - body.findFirst("div").encloseWith("<code></code>"); - QCOMPARE(body.findAll("code").count(), 1); - QCOMPARE(body.findAll("code div").count(), 1); - QCOMPARE(body.findFirst("code div").toPlainText(), QString("yeah")); - - QString snippet = "" - "<table>" - "<tbody>" - "<tr>" - "<td></td>" - "<td></td>" - "</tr>" - "<tr>" - "<td></td>" - "<td></td>" - "<tr>" - "</tbody>" - "</table>"; - - body.findFirst("em").encloseWith(snippet); - QCOMPARE(body.findFirst("table tbody tr td em").toPlainText(), QString("hey")); - - // Enclosing the contents of an img tag is not allowed, but enclosing the img tag itself is. - body.findFirst("td").appendInside("<img src=\"test.png\">"); - QCOMPARE(body.findAll("img").count(), 1); - - QWebElement img = body.findFirst("img"); - QVERIFY(!img.isNull()); - img.encloseWith("<p id=\"success\"></p>"); - QCOMPARE(body.findAll("p#success").count(), 1); - - img.encloseContentsWith("<p id=\"fail\"></p>"); - QCOMPARE(body.findAll("p#fail").count(), 0); - -} - -void tst_QWebElement::nullSelect() -{ - m_mainFrame->setHtml("<body><p>Test"); - - QWebElementCollection collection = m_mainFrame->findAllElements("invalid{syn(tax;;%#$f223e>>"); - QVERIFY(collection.count() == 0); -} - -void tst_QWebElement::firstChildNextSibling() -{ - m_mainFrame->setHtml("<body><!--comment--><p>Test</p><!--another comment--><table>"); - - QWebElement body = m_mainFrame->findFirstElement("body"); - QVERIFY(!body.isNull()); - QWebElement p = body.firstChild(); - QVERIFY(!p.isNull()); - QCOMPARE(p.tagName(), QString("P")); - QWebElement table = p.nextSibling(); - QVERIFY(!table.isNull()); - QCOMPARE(table.tagName(), QString("TABLE")); - QVERIFY(table.nextSibling().isNull()); -} - -void tst_QWebElement::lastChildPreviousSibling() -{ - m_mainFrame->setHtml("<body><!--comment--><p>Test</p><!--another comment--><table>"); - - QWebElement body = m_mainFrame->findFirstElement("body"); - QVERIFY(!body.isNull()); - QWebElement table = body.lastChild(); - QVERIFY(!table.isNull()); - QCOMPARE(table.tagName(), QString("TABLE")); - QWebElement p = table.previousSibling(); - QVERIFY(!p.isNull()); - QCOMPARE(p.tagName(), QString("P")); - QVERIFY(p.previousSibling().isNull()); -} - -void tst_QWebElement::hasSetFocus() -{ - m_mainFrame->setHtml("<html><body>" \ - "<input type='text' id='input1'/>" \ - "<br>"\ - "<input type='text' id='input2'/>" \ - "</body></html>"); - - QWebElementCollection inputs = m_mainFrame->documentElement().findAll("input"); - QWebElement input1 = inputs.at(0); - input1.setFocus(); - QVERIFY(input1.hasFocus()); - - QWebElement input2 = inputs.at(1); - input2.setFocus(); - QVERIFY(!input1.hasFocus()); - QVERIFY(input2.hasFocus()); -} - -void tst_QWebElement::render() -{ - QString html( "<html>" - "<head><style>" - "body, iframe { margin: 0px; border: none; background: white; }" - "</style></head>" - "<body><table width='300px' height='300px' border='1'>" - "<tr>" - "<td>test" - "</td>" - "<td><img src='qrc:///image.png'>" - "</td>" - "</tr>" - "</table>" - "</body>" - "</html>" - ); - - QWebPage page; - QSignalSpy loadSpy(&page, SIGNAL(loadFinished(bool))); - page.mainFrame()->setHtml(html); - - waitForSignal(&page, SIGNAL(loadFinished(bool))); - QCOMPARE(loadSpy.count(), 1); - - QSize size = page.mainFrame()->contentsSize(); - page.setViewportSize(size); - - QWebElementCollection imgs = page.mainFrame()->findAllElements("img"); - QCOMPARE(imgs.count(), 1); - - QImage resource(":/image.png"); - QRect imageRect(0, 0, resource.width(), resource.height()); - - QImage testImage(resource.width(), resource.height(), QImage::Format_ARGB32); - QPainter painter0(&testImage); - painter0.fillRect(imageRect, Qt::white); - // render() uses pixmaps internally, and pixmaps might have bit depths - // other than 32, giving different pixel values due to rounding. - QPixmap pix = QPixmap::fromImage(resource); - painter0.drawPixmap(0, 0, pix); - painter0.end(); - - QImage image1(resource.width(), resource.height(), QImage::Format_ARGB32); - QPainter painter1(&image1); - painter1.fillRect(imageRect, Qt::white); - imgs[0].render(&painter1); - painter1.end(); - - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=65243", Continue); - QVERIFY(image1 == testImage); - - // render image 2nd time to make sure that cached rendering works fine - QImage image2(resource.width(), resource.height(), QImage::Format_ARGB32); - QPainter painter2(&image2); - painter2.fillRect(imageRect, Qt::white); - imgs[0].render(&painter2); - painter2.end(); - - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=65243", Continue); - QVERIFY(image2 == testImage); - - // compare table rendered through QWebElement::render to whole page table rendering - QRect tableRect(0, 0, 300, 300); - QWebElementCollection tables = page.mainFrame()->findAllElements("table"); - QCOMPARE(tables.count(), 1); - - QImage image3(300, 300, QImage::Format_ARGB32); - QPainter painter3(&image3); - painter3.fillRect(tableRect, Qt::white); - tables[0].render(&painter3); - painter3.end(); - - QImage image4(300, 300, QImage::Format_ARGB32); - QPainter painter4(&image4); - page.mainFrame()->render(&painter4, tableRect); - painter4.end(); - - QVERIFY(image3 == image4); - - // Chunked render test reuses page rendered in image4 in previous test - const int chunkHeight = tableRect.height(); - const int chunkWidth = tableRect.width() / 3; - QImage chunk(chunkWidth, chunkHeight, QImage::Format_ARGB32); - QRect chunkRect(0, 0, chunkWidth, chunkHeight); - for (int x = 0; x < tableRect.width(); x += chunkWidth) { - QPainter painter(&chunk); - painter.fillRect(chunkRect, Qt::white); - QRect chunkPaintRect(x, 0, chunkWidth, chunkHeight); - tables[0].render(&painter, chunkPaintRect); - painter.end(); - - QVERIFY(chunk == image4.copy(chunkPaintRect)); - } -} - -void tst_QWebElement::addElementToHead() -{ - m_mainFrame->setHtml("<html><head></head><body></body></html>"); - QWebElement head = m_mainFrame->findFirstElement("head"); - QVERIFY(!head.isNull()); - QString append = "<script type=\"text/javascript\">var t = 0;</script>"; - head.appendInside(append); - QEXPECT_FAIL("", "https://bugs.webkit.org/show_bug.cgi?id=102234", Continue); - QCOMPARE(head.toInnerXml(), append); -} - -QTEST_MAIN(tst_QWebElement) -#include "tst_qwebelement.moc" |