diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-08-27 13:14:12 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-08-30 10:46:31 +0200 |
commit | 3422b5066e4cda7aaeedb3aff5232aa86e1f1d98 (patch) | |
tree | 266d262b7be625c339ccfeb85e12e0a5c4635a63 | |
parent | 2c41d10a6a1f6fb7b496fc8c4c59e377b819f634 (diff) |
shiboken6/ConditionalStreamReader: Fix conditions that consists of exclusions only
<?if !nonexisting?> returned false since no matching keywords were
found.
Amends 77669e48fd8ac0f4ca199173672c4bf0c9dc654b.
Task-number: PYSIDE-802
Task-number: PYSIDE-1568
Change-Id: I586916a5aec68e515b708020028e824e23a58a57
Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r-- | sources/shiboken6/ApiExtractor/conditionalstreamreader.cpp | 6 | ||||
-rw-r--r-- | sources/shiboken6/ApiExtractor/tests/testdroptypeentries.cpp | 10 |
2 files changed, 12 insertions, 4 deletions
diff --git a/sources/shiboken6/ApiExtractor/conditionalstreamreader.cpp b/sources/shiboken6/ApiExtractor/conditionalstreamreader.cpp index 2380ee892..c3c312eeb 100644 --- a/sources/shiboken6/ApiExtractor/conditionalstreamreader.cpp +++ b/sources/shiboken6/ApiExtractor/conditionalstreamreader.cpp @@ -57,17 +57,21 @@ QXmlStreamReader::TokenType ConditionalStreamReader::readNext() bool ConditionalStreamReader::conditionMatches() const { const auto keywords = m_reader.processingInstructionData().split(u' ', Qt::SkipEmptyParts); + if (keywords.isEmpty()) + return false; bool matches = false; + bool exclusionOnly = true; for (const auto &keyword : keywords) { if (keyword.startsWith(u'!')) { // exclusion '!windows' takes preference if (m_conditions.contains(keyword.mid(1))) return false; } else { + exclusionOnly = false; matches |= m_conditions.contains(keyword); } } - return matches; + return exclusionOnly || matches; } void ConditionalStreamReader::setConditions(const QStringList &newConditions) diff --git a/sources/shiboken6/ApiExtractor/tests/testdroptypeentries.cpp b/sources/shiboken6/ApiExtractor/tests/testdroptypeentries.cpp index 1b03f9353..d59c365dd 100644 --- a/sources/shiboken6/ApiExtractor/tests/testdroptypeentries.cpp +++ b/sources/shiboken6/ApiExtractor/tests/testdroptypeentries.cpp @@ -162,6 +162,9 @@ void TestDropTypeEntries::testConditionalParsing_data() <?endif?> <?endif?> <tag5>text</tag5> + <?if !keyword99?> <!-- Exclusion only --> + <tag6>text</tag6> + <?endif?> </root>)"); const QString root = QStringLiteral("root"); @@ -170,6 +173,7 @@ void TestDropTypeEntries::testConditionalParsing_data() const QString tag3 = QStringLiteral("tag3"); const QString tag4 = QStringLiteral("tag4"); const QString tag5 = QStringLiteral("tag5"); + const QString tag6 = QStringLiteral("tag6"); const QString keyword1 = QStringLiteral("keyword1"); const QString keyword2 = QStringLiteral("keyword2"); @@ -178,15 +182,15 @@ void TestDropTypeEntries::testConditionalParsing_data() QTest::addColumn<QStringList>("expectedTags"); QTest::newRow("no-keywords") - << xml << QStringList{} << QStringList{root, tag1, tag5}; + << xml << QStringList{} << QStringList{root, tag1, tag5, tag6}; QTest::newRow("skip-nested-condition") << xml << QStringList{keyword1} - << QStringList{root, tag1, tag2, tag4, tag5}; + << QStringList{root, tag1, tag2, tag4, tag5, tag6}; QTest::newRow("both/check-not") << xml << QStringList{keyword1, keyword2} - << QStringList{root, tag1, tag2, tag3, tag5}; + << QStringList{root, tag1, tag2, tag3, tag5, tag6}; } // Parse XML and return a list of tags encountered |