From 72854081b2e3831ab6619a9c2e7f4ba0a6a1d316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Fri, 20 Feb 2015 14:54:34 +0100 Subject: Add tests for detach on setDevicePixelRatio() Change-Id: I414ff0b794e0202a7f8c931b59b973cb1e7dc148 Reviewed-by: Paul Olav Tvete --- tests/auto/gui/image/qimage/tst_qimage.cpp | 29 ++++++++++++++++++++++++++++ tests/auto/gui/image/qpixmap/tst_qpixmap.cpp | 28 +++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) (limited to 'tests/auto/gui') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index decd4ef931..0f9bdc7a1a 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -178,6 +178,8 @@ private slots: void cleanupFunctions(); + void devicePixelRatio(); + private: const QString m_prefix; }; @@ -2730,5 +2732,32 @@ void tst_QImage::cleanupFunctions() } +// test image devicePixelRatio setting and detaching +void tst_QImage::devicePixelRatio() +{ + // create image + QImage a(64, 64, QImage::Format_ARGB32); + a.fill(Qt::white); + QCOMPARE(a.devicePixelRatio(), qreal(1.0)); + QCOMPARE(a.isDetached(), true); + + // copy image + QImage b = a; + QCOMPARE(b.devicePixelRatio(), qreal(1.0)); + QCOMPARE(a.isDetached(), false); + QCOMPARE(b.isDetached(), false); + + // set devicePixelRatio to the current value: does not detach + a.setDevicePixelRatio(qreal(1.0)); + QCOMPARE(a.isDetached(), false); + QCOMPARE(b.isDetached(), false); + + // set devicePixelRatio to a new value: may detach (currently + // does, but we may want to avoid the data copy the future) + a.setDevicePixelRatio(qreal(2.0)); + QCOMPARE(a.devicePixelRatio(), qreal(2.0)); + QCOMPARE(b.devicePixelRatio(), qreal(1.0)); +} + QTEST_GUILESS_MAIN(tst_QImage) #include "tst_qimage.moc" diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp index 0fda8482ce..58cc5824bd 100644 --- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp @@ -164,6 +164,7 @@ private slots: void detachOnLoad_QTBUG29639(); void copyOnNonAlignedBoundary(); + void devicePixelRatio(); private: const QString m_prefix; @@ -1543,5 +1544,32 @@ void tst_QPixmap::copyOnNonAlignedBoundary() QPixmap pm2 = pm1.copy(QRect(5, 0, 3, 2)); // When copying second line: 2 bytes too many are read which might cause an access violation. } +// test pixmap devicePixelRatio setting and detaching +void tst_QPixmap::devicePixelRatio() +{ + // create pixmap + QPixmap a(64, 64); + a.fill(Qt::white); + QCOMPARE(a.devicePixelRatio(), qreal(1.0)); + QCOMPARE(a.isDetached(), true); + + // copy pixmap + QPixmap b = a; + QCOMPARE(b.devicePixelRatio(), qreal(1.0)); + QCOMPARE(a.isDetached(), false); + QCOMPARE(b.isDetached(), false); + + // set devicePixelRatio to the current value: does not detach + a.setDevicePixelRatio(qreal(1.0)); + QCOMPARE(a.isDetached(), false); + QCOMPARE(b.isDetached(), false); + + // set devicePixelRatio to a new value: may detach (currently + // does, but we may want to avoid the data copy the future) + a.setDevicePixelRatio(qreal(2.0)); + QCOMPARE(a.devicePixelRatio(), qreal(2.0)); + QCOMPARE(b.devicePixelRatio(), qreal(1.0)); +} + QTEST_MAIN(tst_QPixmap) #include "tst_qpixmap.moc" -- cgit v1.2.3 From 2e4a107e7e97a2dc36471cbd795ec94096f1a771 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 4 Dec 2014 11:00:30 +0100 Subject: Ensure that CSS rules are inherited from the parent tags When CSS is set in a head tag then it was not being inherited by the child tags when the CSS specification indicates that the properties are in fact inherited. This ensures that those properties are inherited and the non inheritable ones are unchanged. A test is added to cover the different situations with inheritance and a fix is done for the QTextDocumentFragment test which was passing despite having incorrect defaults. Task-number: QTBUG-28770 Task-number: QTBUG-34153 Change-Id: I55966240845a885852a04ecb82c61926dea9f800 Reviewed-by: Simon Hausmann --- tests/auto/gui/text/qtextdocument/test.css | 3 + .../gui/text/qtextdocument/tst_qtextdocument.cpp | 138 ++++++++++++++++++++- .../tst_qtextdocumentfragment.cpp | 6 +- 3 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 tests/auto/gui/text/qtextdocument/test.css (limited to 'tests/auto/gui') diff --git a/tests/auto/gui/text/qtextdocument/test.css b/tests/auto/gui/text/qtextdocument/test.css new file mode 100644 index 0000000000..16a2b90666 --- /dev/null +++ b/tests/auto/gui/text/qtextdocument/test.css @@ -0,0 +1,3 @@ +body { + font: normal 400 14px/1.2 Arial; +} diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp index c51d33487e..5e6b606d83 100644 --- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp @@ -187,7 +187,7 @@ private slots: void QTBUG28998_linkColor(); void textCursorUsageWithinContentsChange(); - + void cssInheritance(); private: void backgroundImage_checkExpectedHtml(const QTextDocument &doc); void buildRegExpData(); @@ -3006,6 +3006,37 @@ void tst_QTextDocument::QTBUG27354_spaceAndSoftSpace() QPainter p(&image); document.drawContents(&p, image.rect()); } + { + // If no p tag is specified it should not be inheriting it + QTextDocument td; + td.setHtml("Foo
  • First
"); + QTextBlock block = td.begin(); + while (block.isValid()) { + QTextBlockFormat fmt = block.blockFormat(); + QVERIFY(fmt.lineHeightType() == QTextBlockFormat::SingleHeight); + QVERIFY(fmt.lineHeight() == 0); + block = block.next(); + } + } + { + QTextDocument td; + td.setHtml("

Foo

  • First
"); + QList originalMargins; + QTextBlock block = td.begin(); + while (block.isValid()) { + originalMargins << block.blockFormat().topMargin(); + block = block.next(); + } + originalMargins[0] = 85; + td.setHtml("

Foo

  • First
"); + block = td.begin(); + int count = 0; + while (block.isValid()) { + QTextBlockFormat fmt = block.blockFormat(); + QCOMPARE(fmt.topMargin(), originalMargins.at(count++)); + block = block.next(); + } + } } class BaseDocument : public QTextDocument @@ -3124,5 +3155,110 @@ void tst_QTextDocument::textCursorUsageWithinContentsChange() QCOMPARE(handler.verticalMovementX, -1); } +void tst_QTextDocument::cssInheritance() +{ + { + QTextDocument td; + td.setHtml("" + "

Foo

Bar

Baz

"); + QTextBlock block = td.begin(); + while (block.isValid()) { + QTextBlockFormat fmt = block.blockFormat(); + QVERIFY(fmt.lineHeightType() == QTextBlockFormat::ProportionalHeight); + QVERIFY(fmt.lineHeight() == 200); + block = block.next(); + } + } + { + QTextDocument td; + td.setHtml("" + "

Foo

Bar

Baz

"); + QTextBlock block = td.begin(); + QTextBlockFormat fmt = block.blockFormat(); + QVERIFY(fmt.lineHeightType() == QTextBlockFormat::FixedHeight); + QVERIFY(fmt.lineHeight() == 40); + block = block.next(); + fmt = block.blockFormat(); + QVERIFY(fmt.lineHeightType() == QTextBlockFormat::ProportionalHeight); + QVERIFY(fmt.lineHeight() == 300); + } + { + QTextDocument td; + td.setHtml("" + "

Foo

Bar

Baz

"); + QTextBlock block = td.begin(); + while (block.isValid()) { + QVERIFY(block.blockFormat().background() == QBrush()); + QVERIFY(block.charFormat().font().bold()); + block = block.next(); + } + } + { + QTextDocument td; + td.setHtml("" + "
Foo
Bar
"); + QTextBlock block = td.begin(); + // First is the table + QTextCharFormat fmt = block.charFormat(); + QVERIFY(!fmt.font().bold()); + QVERIFY(fmt.font().italic()); + // Then the th + block = block.next(); + fmt = block.charFormat(); + QVERIFY(fmt.font().bold()); + QVERIFY(fmt.font().italic()); + // Then the td + block = block.next(); + fmt = block.charFormat(); + QVERIFY(!fmt.font().bold()); + QVERIFY(fmt.font().italic()); + } + { + QTextDocument td; + td.setHtml("" + "

This should be bold

"); + QTextBlock block = td.begin(); + // First is the p + QTextCharFormat fmt = block.charFormat(); + QVERIFY(!fmt.font().bold()); + QTextBlock::iterator it = block.begin(); + // The non bold text is first + QTextFragment currentFragment = it.fragment(); + QVERIFY(currentFragment.isValid()); + fmt = currentFragment.charFormat(); + QVERIFY(!fmt.font().bold()); + ++it; + QVERIFY(!it.atEnd()); + // Now check the "bold" text + currentFragment = it.fragment(); + QVERIFY(currentFragment.isValid()); + fmt = currentFragment.charFormat(); + QVERIFY(!fmt.font().bold()); + QVERIFY(fmt.font().italic()); + } + { + QTextDocument td; + td.setHtml("" + "

This should be bold

"); + QTextBlock block = td.begin(); + // First is the p + QTextCharFormat fmt = block.charFormat(); + QVERIFY(!fmt.font().bold()); + QTextBlock::iterator it = block.begin(); + // The non bold text is first + QTextFragment currentFragment = it.fragment(); + QVERIFY(currentFragment.isValid()); + fmt = currentFragment.charFormat(); + QVERIFY(!fmt.font().bold()); + ++it; + QVERIFY(!it.atEnd()); + // Now check the bold text + currentFragment = it.fragment(); + QVERIFY(currentFragment.isValid()); + fmt = currentFragment.charFormat(); + QVERIFY(fmt.font().bold()); + } +} + QTEST_MAIN(tst_QTextDocument) #include "tst_qtextdocument.moc" diff --git a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp index 0fb66c8cdc..8f0d306cba 100644 --- a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp +++ b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp @@ -841,13 +841,13 @@ void tst_QTextDocumentFragment::unorderedListEnumeration() setHtml(QString::fromLatin1(html)); cursor.movePosition(QTextCursor::End); QVERIFY(cursor.currentList()); - QVERIFY(cursor.currentList()->format().style() == QTextListFormat::ListCircle); + QVERIFY(cursor.currentList()->format().style() == QTextListFormat::ListDisc); - const char html2[] = "
      • Blah
    "; + const char html2[] = "
        • Blah
      "; setHtml(QString::fromLatin1(html2)); cursor.movePosition(QTextCursor::End); QVERIFY(cursor.currentList()); - QVERIFY(cursor.currentList()->format().style() == QTextListFormat::ListDisc); + QVERIFY(cursor.currentList()->format().style() == QTextListFormat::ListCircle); } -- cgit v1.2.3