summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@digia.com>2014-12-04 11:00:30 +0100
committerAndy Shaw <andy.shaw@digia.com>2015-03-25 11:55:47 +0000
commit2e4a107e7e97a2dc36471cbd795ec94096f1a771 (patch)
tree369fc5b3fc324ff4c8f5dde382078a40286dfc50 /tests
parent738c07542a0bbf867661520559fed9feda985935 (diff)
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 <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/text/qtextdocument/test.css3
-rw-r--r--tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp138
-rw-r--r--tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp6
3 files changed, 143 insertions, 4 deletions
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("<html><head><style type=\"text/css\">p { line-height: 200% }</style></head><body>Foo<ul><li>First</li></ul></body></html>");
+ 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("<html><head></head><body><p>Foo</p><ul><li>First</li></ul></body></html>");
+ QList<double> originalMargins;
+ QTextBlock block = td.begin();
+ while (block.isValid()) {
+ originalMargins << block.blockFormat().topMargin();
+ block = block.next();
+ }
+ originalMargins[0] = 85;
+ td.setHtml("<html><head><style type=\"text/css\">body { margin-top: 85px; }</style></head><body><p>Foo</p><ul><li>First</li></ul></body></html>");
+ 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("<html><head><style type=\"text/css\">body { line-height: 200% }</style></head><body>"
+ "<p>Foo</p><p>Bar</p><p>Baz</p></body></html>");
+ 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("<html><head><style type=\"text/css\">body { line-height: 200% } p { line-height: 300% }</style></head><body>"
+ "<p style=\"line-height: 40px\">Foo</p><p>Bar</p><p>Baz</p></body></html>");
+ 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("<html><head><style type=\"text/css\">body { font-weight: bold; background-color: #ff0000 }</style></head><body>"
+ "<p>Foo</p><p>Bar</p><p>Baz</p></body></html>");
+ QTextBlock block = td.begin();
+ while (block.isValid()) {
+ QVERIFY(block.blockFormat().background() == QBrush());
+ QVERIFY(block.charFormat().font().bold());
+ block = block.next();
+ }
+ }
+ {
+ QTextDocument td;
+ td.setHtml("<html><head><style type=\"text/css\">body { font-style: italic; font-weight: normal; }</style></head><body>"
+ "<table><tr><th>Foo</th></tr><tr><td>Bar</td></tr></table></body></html>");
+ 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("<html><head><style type=\"text/css\">b { font-style: italic; font-weight: normal; }</style></head><body>"
+ "<p>This should be <b>bold</b></p></body></html>");
+ 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("<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"test.css\"></head><body>"
+ "<p>This should be <b>bold</b></p></body></html>");
+ 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[] = "<ul><ul><ul type=disc><li>Blah</li></ul></ul>";
+ const char html2[] = "<ul><ul><ul type=circle><li>Blah</li></ul></ul>";
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);
}