Un-blacklist markdown tests: QSKIP when fonts are scrambled

On QNX in CI we see
system fonts: fixed: monospace 9; general: Sans Serif 9
and "monospace" isn't really a fixed pitch font.
On B2Qt arm7 in CI we see
system fonts: fixed: monospace 9; general Sans Serif 9
and Sans Serif is actually fixed pitch.

So these tests can go wrong both ways; we need to skip them whenever
the fonts would lead QTextMarkdownWriter astray.

Pick-to: 6.3 6.2
Task-number: QTBUG-89819
Task-number: QTBUG-99676
Task-number: QTBUG-100515
Task-number: QTBUG-103484
Change-Id: I7b9adca967eaf9b8d33d1e03ef2627f70f375196
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
This commit is contained in:
Shawn Rutledge 2022-05-16 12:01:36 +02:00
parent 3e78f501b7
commit 1ad456c908
4 changed files with 92 additions and 31 deletions

View File

@ -1,3 +0,0 @@
# QTBUG-89819
[lists]
ci b2qt 32bit

View File

@ -42,6 +42,9 @@ private slots:
void pathological_data(); void pathological_data();
void pathological(); void pathological();
private:
bool isMainFontFixed();
public: public:
enum CharFormat { enum CharFormat {
Normal = 0x0, Normal = 0x0,
@ -59,6 +62,18 @@ public:
Q_DECLARE_METATYPE(tst_QTextMarkdownImporter::CharFormats) Q_DECLARE_METATYPE(tst_QTextMarkdownImporter::CharFormats)
Q_DECLARE_OPERATORS_FOR_FLAGS(tst_QTextMarkdownImporter::CharFormats) Q_DECLARE_OPERATORS_FOR_FLAGS(tst_QTextMarkdownImporter::CharFormats)
bool tst_QTextMarkdownImporter::isMainFontFixed()
{
bool ret = QFontInfo(QGuiApplication::font()).fixedPitch();
if (ret) {
qCWarning(lcTests) << "QFontDatabase::GeneralFont is monospaced: markdown writing is likely to use too many backticks";
qCWarning(lcTests) << "system fonts: fixed" << QFontDatabase::systemFont(QFontDatabase::FixedFont)
<< "fixed?" << QFontInfo(QFontDatabase::systemFont(QFontDatabase::FixedFont)).fixedPitch()
<< "general" << QFontDatabase::systemFont(QFontDatabase::GeneralFont);
}
return ret;
}
void tst_QTextMarkdownImporter::headingBulletsContinuations() void tst_QTextMarkdownImporter::headingBulletsContinuations()
{ {
const QStringList expectedBlocks = QStringList() << const QStringList expectedBlocks = QStringList() <<
@ -249,6 +264,8 @@ void tst_QTextMarkdownImporter::lists()
} }
QCOMPARE(itemCount, expectedItemCount); QCOMPARE(itemCount, expectedItemCount);
QCOMPARE(emptyItems, expectedEmptyItems); QCOMPARE(emptyItems, expectedEmptyItems);
if (doc.toMarkdown() != rewrite && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(doc.toMarkdown(), rewrite); QCOMPARE(doc.toMarkdown(), rewrite);
} }

View File

@ -1,4 +0,0 @@
# QTBUG-89819
ci b2qt 32bit
[fromHtml:preformats with embedded backticks]
qnx ci

View File

@ -9,9 +9,13 @@
#include <QTextTable> #include <QTextTable>
#include <QBuffer> #include <QBuffer>
#include <QDebug> #include <QDebug>
#include <QFontInfo>
#include <QLoggingCategory>
#include <private/qtextmarkdownwriter_p.h> #include <private/qtextmarkdownwriter_p.h>
Q_LOGGING_CATEGORY(lcTests, "qt.text.tests")
// #define DEBUG_WRITE_OUTPUT // #define DEBUG_WRITE_OUTPUT
class tst_QTextMarkdownWriter : public QObject class tst_QTextMarkdownWriter : public QObject
@ -37,6 +41,8 @@ private slots:
void fromHtml(); void fromHtml();
private: private:
bool isMainFontFixed();
bool isFixedFontProportional();
QString documentToUnixMarkdown(); QString documentToUnixMarkdown();
private: private:
@ -53,10 +59,39 @@ void tst_QTextMarkdownWriter::cleanup()
delete document; delete document;
} }
bool tst_QTextMarkdownWriter::isMainFontFixed()
{
bool ret = QFontInfo(QGuiApplication::font()).fixedPitch();
if (ret) {
qCWarning(lcTests) << "QFontDatabase::GeneralFont is monospaced: markdown writing is likely to use too many backticks"
<< QFontDatabase::systemFont(QFontDatabase::GeneralFont);
}
return ret;
}
bool tst_QTextMarkdownWriter::isFixedFontProportional()
{
bool ret = !QFontInfo(QFontDatabase::systemFont(QFontDatabase::FixedFont)).fixedPitch();
if (ret) {
qCWarning(lcTests) << "QFontDatabase::FixedFont is NOT monospaced: markdown writing is likely to use too few backticks"
<< QFontDatabase::systemFont(QFontDatabase::FixedFont);
}
return ret;
}
QString tst_QTextMarkdownWriter::documentToUnixMarkdown()
{
QString ret;
QTextStream ts(&ret, QIODevice::WriteOnly);
QTextMarkdownWriter writer(ts, QTextDocument::MarkdownDialectGitHub);
writer.writeAll(document);
return ret;
}
void tst_QTextMarkdownWriter::testWriteParagraph_data() void tst_QTextMarkdownWriter::testWriteParagraph_data()
{ {
QTest::addColumn<QString>("input"); QTest::addColumn<QString>("input");
QTest::addColumn<QString>("output"); QTest::addColumn<QString>("expectedOutput");
QTest::newRow("empty") << "" << QTest::newRow("empty") << "" <<
""; "";
@ -79,12 +114,15 @@ void tst_QTextMarkdownWriter::testWriteParagraph_data()
void tst_QTextMarkdownWriter::testWriteParagraph() void tst_QTextMarkdownWriter::testWriteParagraph()
{ {
QFETCH(QString, input); QFETCH(QString, input);
QFETCH(QString, output); QFETCH(QString, expectedOutput);
QTextCursor cursor(document); QTextCursor cursor(document);
cursor.insertText(input); cursor.insertText(input);
QCOMPARE(documentToUnixMarkdown(), output); const QString output = documentToUnixMarkdown();
if (output != expectedOutput && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(output, expectedOutput);
} }
void tst_QTextMarkdownWriter::testWriteList() void tst_QTextMarkdownWriter::testWriteList()
@ -97,8 +135,11 @@ void tst_QTextMarkdownWriter::testWriteList()
cursor.insertText("ListItem 2"); cursor.insertText("ListItem 2");
list->add(cursor.block()); list->add(cursor.block());
QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1( const QString output = documentToUnixMarkdown();
"- ListItem 1\n- ListItem 2\n")); const QString expected = QString::fromLatin1("- ListItem 1\n- ListItem 2\n");
if (output != expected && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(output, expected);
} }
void tst_QTextMarkdownWriter::testWriteEmptyList() void tst_QTextMarkdownWriter::testWriteEmptyList()
@ -133,8 +174,12 @@ void tst_QTextMarkdownWriter::testWriteCheckboxListItemEndingWithCode()
QCOMPARE(cursor.selectedText(), QString::fromLatin1("Image.originalSize")); QCOMPARE(cursor.selectedText(), QString::fromLatin1("Image.originalSize"));
cursor.setCharFormat(fmt); cursor.setCharFormat(fmt);
QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1( const QString output = documentToUnixMarkdown();
"- [ ] `Image.originalSize` property (not necessary; `PdfDocument.pagePointSize()`\n substitutes)\n")); const QString expected = QString::fromLatin1(
"- [ ] `Image.originalSize` property (not necessary; `PdfDocument.pagePointSize()`\n substitutes)\n");
if (output != expected && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(output, expected);
} }
void tst_QTextMarkdownWriter::testWriteNestedBulletLists_data() void tst_QTextMarkdownWriter::testWriteNestedBulletLists_data()
@ -216,7 +261,7 @@ void tst_QTextMarkdownWriter::testWriteNestedBulletLists()
cursor.insertText("continuation"); cursor.insertText("continuation");
} }
QString output = documentToUnixMarkdown(); const QString output = documentToUnixMarkdown();
#ifdef DEBUG_WRITE_OUTPUT #ifdef DEBUG_WRITE_OUTPUT
{ {
QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".md"); QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".md");
@ -225,7 +270,9 @@ void tst_QTextMarkdownWriter::testWriteNestedBulletLists()
out.close(); out.close();
} }
#endif #endif
QCOMPARE(documentToUnixMarkdown(), expectedOutput); if (output != expectedOutput && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(output, expectedOutput);
} }
void tst_QTextMarkdownWriter::testWriteNestedNumericLists() void tst_QTextMarkdownWriter::testWriteNestedNumericLists()
@ -257,9 +304,13 @@ void tst_QTextMarkdownWriter::testWriteNestedNumericLists()
cursor.insertText("ListItem 5"); cursor.insertText("ListItem 5");
list2->add(cursor.block()); list2->add(cursor.block());
const QString output = documentToUnixMarkdown();
// There's no QTextList API to set the starting number so we hard-coded all lists to start at 1 (QTBUG-65384) // There's no QTextList API to set the starting number so we hard-coded all lists to start at 1 (QTBUG-65384)
QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1( const QString expected = QString::fromLatin1(
"1. ListItem 1\n 1) ListItem 2\n 1. ListItem 3\n2. ListItem 4\n 2) ListItem 5\n")); "1. ListItem 1\n 1) ListItem 2\n 1. ListItem 3\n2. ListItem 4\n 2) ListItem 5\n");
if (output != expected && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(output, expected);
} }
void tst_QTextMarkdownWriter::testWriteTable() void tst_QTextMarkdownWriter::testWriteTable()
@ -312,6 +363,8 @@ void tst_QTextMarkdownWriter::testWriteTable()
QString expected = QString::fromLatin1( QString expected = QString::fromLatin1(
"\n|one |two |three|\n|------|----|-----|\n|alice |bob |carl |\n|dennis|eric|fiona|\n|gina | | |\n\n"); "\n|one |two |three|\n|------|----|-----|\n|alice |bob |carl |\n|dennis|eric|fiona|\n|gina | | |\n\n");
if (md != expected && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(md, expected); QCOMPARE(md, expected);
// create table with merged cells // create table with merged cells
@ -361,7 +414,10 @@ void tst_QTextMarkdownWriter::testWriteTable()
} }
#endif #endif
QCOMPARE(md, QString::fromLatin1("\n|a ||b|\n|-|-|-|\n|c|d ||\n|e|f| |\n\n")); expected = QString::fromLatin1("\n|a ||b|\n|-|-|-|\n|c|d ||\n|e|f| |\n\n");
if (md != expected && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(md, expected);
} }
void tst_QTextMarkdownWriter::rewriteDocument_data() void tst_QTextMarkdownWriter::rewriteDocument_data()
@ -394,12 +450,14 @@ void tst_QTextMarkdownWriter::rewriteDocument()
out.close(); out.close();
#endif #endif
if (md != orig && isMainFontFixed())
QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(md, orig); QCOMPARE(md, orig);
} }
void tst_QTextMarkdownWriter::fromHtml_data() void tst_QTextMarkdownWriter::fromHtml_data()
{ {
QTest::addColumn<QString>("expectedInput"); QTest::addColumn<QString>("input");
QTest::addColumn<QString>("expectedOutput"); QTest::addColumn<QString>("expectedOutput");
QTest::newRow("long URL") << QTest::newRow("long URL") <<
@ -448,10 +506,10 @@ void tst_QTextMarkdownWriter::fromHtml_data()
void tst_QTextMarkdownWriter::fromHtml() void tst_QTextMarkdownWriter::fromHtml()
{ {
QFETCH(QString, expectedInput); QFETCH(QString, input);
QFETCH(QString, expectedOutput); QFETCH(QString, expectedOutput);
document->setHtml(expectedInput); document->setHtml(input);
QString output = documentToUnixMarkdown(); QString output = documentToUnixMarkdown();
#ifdef DEBUG_WRITE_OUTPUT #ifdef DEBUG_WRITE_OUTPUT
@ -463,17 +521,10 @@ void tst_QTextMarkdownWriter::fromHtml()
} }
#endif #endif
if (output != expectedOutput && (isMainFontFixed() || isFixedFontProportional()))
QEXPECT_FAIL("", "fixed main font or proportional fixed font (QTBUG-103484)", Continue);
QCOMPARE(output, expectedOutput); QCOMPARE(output, expectedOutput);
} }
QString tst_QTextMarkdownWriter::documentToUnixMarkdown()
{
QString ret;
QTextStream ts(&ret, QIODevice::WriteOnly);
QTextMarkdownWriter writer(ts, QTextDocument::MarkdownDialectGitHub);
writer.writeAll(document);
return ret;
}
QTEST_MAIN(tst_QTextMarkdownWriter) QTEST_MAIN(tst_QTextMarkdownWriter)
#include "tst_qtextmarkdownwriter.moc" #include "tst_qtextmarkdownwriter.moc"