aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-08-27 13:14:12 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-08-30 10:46:31 +0200
commit3422b5066e4cda7aaeedb3aff5232aa86e1f1d98 (patch)
tree266d262b7be625c339ccfeb85e12e0a5c4635a63
parent2c41d10a6a1f6fb7b496fc8c4c59e377b819f634 (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.cpp6
-rw-r--r--sources/shiboken6/ApiExtractor/tests/testdroptypeentries.cpp10
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