diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-12-05 11:01:15 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-05 02:44:07 +0100 |
commit | 50772544c6aa62b43a2c2826186f4110dbfd5c3f (patch) | |
tree | d151dbddb403e512c2d2394700db1c8ec92f8d19 /tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp | |
parent | 94628677aea5de5c28dd6b23fc559d2b49841529 (diff) |
Fix test failures due to invalid font metrics.
Don't use QFontMetrics to determine expected text dimensions or
cursor positions in TextInput and TextEdit tests. Instead Layout the
text with the same options as used by the item so the only error should
be due to error.
Task-number: QTBUG-21689
Change-Id: I7ba008d92f1ebb14c37ae7df06fdb11465c3225d
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp')
-rw-r--r-- | tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp | 84 |
1 files changed, 36 insertions, 48 deletions
diff --git a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp index 97d7531321..fe9791aebe 100644 --- a/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/qtquick2/qquicktextedit/tst_qquicktextedit.cpp @@ -365,42 +365,34 @@ void tst_qquicktextedit::width() for (int i = 0; i < standard.size(); i++) { - QFont f; - qreal metricWidth = 0.0; - - if (requiresUnhintedMetrics) { - QString s = standard.at(i); - s.replace(QLatin1Char('\n'), QChar::LineSeparator); - - QTextLayout layout(s); - layout.setFlags(Qt::TextExpandTabs | Qt::TextShowMnemonic); - { - QTextOption option; - option.setUseDesignMetrics(true); - layout.setTextOption(option); - } - - layout.beginLayout(); - forever { - QTextLine line = layout.createLine(); - if (!line.isValid()) - break; - } - - layout.endLayout(); - - metricWidth = ceil(layout.boundingRect().width()); - } else { - QFontMetricsF fm(f); - metricWidth = fm.size(Qt::TextExpandTabs | Qt::TextShowMnemonic, standard.at(i)).width(); - metricWidth = ceil(metricWidth); - } - QString componentStr = "import QtQuick 2.0\nTextEdit { text: \"" + standard.at(i) + "\" }"; QDeclarativeComponent texteditComponent(&engine); texteditComponent.setData(componentStr.toLatin1(), QUrl()); QQuickTextEdit *textEditObject = qobject_cast<QQuickTextEdit*>(texteditComponent.create()); + QString s = standard.at(i); + s.replace(QLatin1Char('\n'), QChar::LineSeparator); + + QTextLayout layout(s); + layout.setFont(textEditObject->font()); + layout.setFlags(Qt::TextExpandTabs | Qt::TextShowMnemonic); + if (requiresUnhintedMetrics) { + QTextOption option; + option.setUseDesignMetrics(true); + layout.setTextOption(option); + } + + layout.beginLayout(); + forever { + QTextLine line = layout.createLine(); + if (!line.isValid()) + break; + } + + layout.endLayout(); + + qreal metricWidth = ceil(layout.boundingRect().width()); + QVERIFY(textEditObject != 0); QCOMPARE(textEditObject->width(), qreal(metricWidth)); } @@ -1604,30 +1596,26 @@ void tst_qquicktextedit::positionAt() QQuickTextEdit *texteditObject = qobject_cast<QQuickTextEdit *>(canvas.rootObject()); QVERIFY(texteditObject != 0); - QFontMetrics fm(texteditObject->font()); - const int y0 = fm.height() / 2; - const int y1 = fm.height() * 3 / 2; + QTextLayout layout(texteditObject->text()); + layout.setFont(texteditObject->font()); - int pos = texteditObject->positionAt(texteditObject->width()/2, y0); - int widthBegin = 0; - int widthEnd = 0; if (!qmlDisableDistanceField()) { - QTextLayout layout(texteditObject->text()); - QTextOption option; option.setUseDesignMetrics(true); layout.setTextOption(option); + } - layout.beginLayout(); - QTextLine line = layout.createLine(); - layout.endLayout(); + layout.beginLayout(); + QTextLine line = layout.createLine(); + layout.endLayout(); - widthBegin = floor(line.cursorToX(pos - 1)); - widthEnd = ceil(line.cursorToX(pos + 1)); - } else { - widthBegin = fm.width(texteditObject->text().left(pos - 1)); - widthEnd = fm.width(texteditObject->text().left(pos + 1)); - } + const int y0 = line.height() / 2; + const int y1 = line.height() * 3 / 2; + + int pos = texteditObject->positionAt(texteditObject->width()/2, y0); + + int widthBegin = floor(line.cursorToX(pos - 1)); + int widthEnd = ceil(line.cursorToX(pos + 1)); QVERIFY(widthBegin <= texteditObject->width() / 2); QVERIFY(widthEnd >= texteditObject->width() / 2); |