summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2020-03-04 17:31:17 +0100
committerTopi Reinio <topi.reinio@qt.io>2020-03-05 15:55:19 +0100
commitdc8598ab1e441d9b49a3aac1e3812bf93f8a3211 (patch)
treef87b882fcd3d3e4e8214a24e356c34fbd25dae84
parent60be58eb314349862e09d3fc106bfa23feda170f (diff)
qdoc: Fix issues in HelpProjectWriter
The code that generates Qt Help Project (.qhp) xml files was suffering from multiple issues - mostly related to changes in Node inheritance that were not reflected in HelpProjectWriter implementation. - We no longer have subtypes for page nodes. Therefore, selectors like 'doc:example' were broken. Simplify the selector code but continue supporting the old notation. - Examples and basic QML/JS types were incorrectly dropped from the TOC. - Node::Union and Node::Struct were called 'Class' in the .qhp. Use the Generator::typeString() to fetch the correct type name for all types. - Require .qhp subprojects to have at least a title to avoid empty subsections in the TOC. Add a test that covers the entire .qhp generation with different types of subprojects defined. Fixes: QTBUG-82671 Fixes: QTBUG-82674 Change-Id: I8fe4a8ad5fc6d58f86e0e9128e98c0b8c4ba4a6a Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
-rw-r--r--src/qdoc/generator.cpp2
-rw-r--r--src/qdoc/generator.h2
-rw-r--r--src/qdoc/helpprojectwriter.cpp127
-rw-r--r--src/qdoc/helpprojectwriter.h4
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/test.qhp137
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf17
-rw-r--r--tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp8
7 files changed, 209 insertions, 88 deletions
diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp
index 7bb32f471..3e689c4b5 100644
--- a/src/qdoc/generator.cpp
+++ b/src/qdoc/generator.cpp
@@ -2133,8 +2133,8 @@ QString Generator::typeString(const Node *node)
case Node::Union:
return "union";
case Node::QmlType:
- return "type";
case Node::QmlBasicType:
+ case Node::JsBasicType:
return "type";
case Node::Page:
return "documentation";
diff --git a/src/qdoc/generator.h b/src/qdoc/generator.h
index fd5fbbcef..f28432bd2 100644
--- a/src/qdoc/generator.h
+++ b/src/qdoc/generator.h
@@ -63,6 +63,7 @@ public:
virtual void initializeGenerator();
virtual void initializeFormat();
virtual void terminateGenerator();
+ virtual QString typeString(const Node *node);
QString fullDocumentLocation(const Node *node, bool useSubdir = false);
QString linkForExampleFile(const QString &path, const Node *parent,
@@ -118,7 +119,6 @@ protected:
virtual bool generateText(const Text &text, const Node *relative, CodeMarker *marker);
virtual QString imageFileName(const Node *relative, const QString &fileBase);
virtual int skipAtoms(const Atom *atom, Atom::AtomType type) const;
- virtual QString typeString(const Node *node);
static bool matchAhead(const Atom *atom, Atom::AtomType expectedAtomType);
static QString outputPrefix(const Node *node);
diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp
index 019604ce7..a372ea762 100644
--- a/src/qdoc/helpprojectwriter.cpp
+++ b/src/qdoc/helpprojectwriter.cpp
@@ -92,7 +92,6 @@ void HelpProjectWriter::reset(const QString &defaultFileName, Generator *g)
+ Config::dot + "filterAttributes");
project.customFilters[name] = QSet<QString>(filters.cbegin(), filters.cend());
}
- // customFilters = config.defs.
const auto excludedPrefixes = config.getStringSet(prefix + "excluded");
for (auto name : excludedPrefixes)
@@ -103,6 +102,8 @@ void HelpProjectWriter::reset(const QString &defaultFileName, Generator *g)
SubProject subproject;
QString subprefix = prefix + "subprojects" + Config::dot + name + Config::dot;
subproject.title = config.getString(subprefix + "title");
+ if (subproject.title.isEmpty())
+ continue;
subproject.indexTitle = config.getString(subprefix + "indexTitle");
subproject.sortPages = config.getBool(subprefix + "sortPages");
subproject.type = config.getString(subprefix + "type");
@@ -129,8 +130,8 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList
typeHash["union"] = Node::Union;
typeHash["header"] = Node::HeaderFile;
typeHash["headerfile"] = Node::HeaderFile;
- typeHash["doc"] = Node::Page; // to be removed from qdocconf files
- typeHash["fake"] = Node::Page; // to be removed from qdocconf files
+ typeHash["doc"] = Node::Page; // Unused (supported but ignored as a prefix)
+ typeHash["fake"] = Node::Page; // Unused (supported but ignored as a prefix)
typeHash["page"] = Node::Page;
typeHash["enum"] = Node::Enum;
typeHash["example"] = Node::Example;
@@ -149,41 +150,26 @@ void HelpProjectWriter::readSelectors(SubProject &subproject, const QStringList
typeHash["qmltype"] = Node::QmlType;
typeHash["qmlbasictype"] = Node::QmlBasicType;
- QHash<QString, Node::NodeType> pageTypeHash;
- pageTypeHash["example"] = Node::Example;
- pageTypeHash["headerfile"] = Node::HeaderFile;
- pageTypeHash["header"] = Node::HeaderFile;
- pageTypeHash["page"] = Node::Page;
- pageTypeHash["externalpage"] = Node::ExternalPage;
-
- NodeTypeSet fullSubset;
- for (auto it = pageTypeHash.constBegin(); it != pageTypeHash.constEnd(); ++it)
- fullSubset.insert(it.value());
-
for (const QString &selector : selectors) {
QStringList pieces = selector.split(QLatin1Char(':'));
- if (pieces.size() == 1) {
- QString lower = selector.toLower();
- if (typeHash.contains(lower))
- subproject.selectors[typeHash[lower]] = fullSubset;
- } else if (pieces.size() >= 2) {
- QString pageTypeStr = pieces[0].toLower();
- pieces = pieces[1].split(QLatin1Char(','));
- if (typeHash.contains(pageTypeStr)) {
- NodeTypeSet nodeTypeSet;
- for (int i = 0; i < pieces.size(); ++i) {
- QString piece = pieces[i].toLower();
- if (typeHash[pageTypeStr] == Node::Group
- || typeHash[pageTypeStr] == Node::Module
- || typeHash[pageTypeStr] == Node::QmlModule
- || typeHash[pageTypeStr] == Node::JsModule) {
- subproject.groups << piece;
- continue;
- }
- if (pageTypeHash.contains(piece))
- nodeTypeSet.insert(pageTypeHash[piece]);
+ // Remove doc: or fake: prefix
+ if (pieces.size() > 1 && typeHash.value(pieces[0].toLower()) == Node::Page)
+ pieces.takeFirst();
+
+ QString typeName = pieces.takeFirst().toLower();
+ if (!typeHash.contains(typeName))
+ continue;
+
+ subproject.selectors << typeHash.value(typeName);
+ if (!pieces.isEmpty()) {
+ pieces = pieces[0].split(QLatin1Char(','));
+ for (const auto &piece : qAsConst(pieces)) {
+ if (typeHash[typeName] == Node::Group
+ || typeHash[typeName] == Node::Module
+ || typeHash[typeName] == Node::QmlModule
+ || typeHash[typeName] == Node::JsModule) {
+ subproject.groups << piece.toLower();
}
- subproject.selectors[typeHash[pageTypeStr]] = nodeTypeSet;
}
}
}
@@ -268,7 +254,7 @@ bool HelpProjectWriter::generateSection(HelpProject &project, QXmlStreamWriter &
project.subprojects[i].nodes[objName] = node;
} else if (subproject.selectors.contains(node->nodeType())) {
// Add all group members for '[group|module|qmlmodule]:name' selector
- if (node->isGroup() || node->isModule() || node->isQmlModule()) {
+ if (node->isCollectionNode()) {
if (project.subprojects[i].groups.contains(node->name().toLower())) {
const CollectionNode *cn = static_cast<const CollectionNode *>(node);
const auto members = cn->members();
@@ -277,20 +263,15 @@ bool HelpProjectWriter::generateSection(HelpProject &project, QXmlStreamWriter &
m->isTextPageNode() ? m->fullTitle() : m->fullDocumentName();
project.subprojects[i].nodes[memberName] = m;
}
+ continue;
+ } else if (!project.subprojects[i].groups.isEmpty()) {
+ continue; // Node does not represent specified group(s)
}
+ } else if (node->isTextPageNode()) {
+ if (node->isExternalPage() || node->fullTitle().isEmpty())
+ continue;
}
- // Accept only the node types in the selectors hash.
- else if (!node->isTextPageNode())
- project.subprojects[i].nodes[objName] = node;
- else {
- // Accept only doc nodes with subtypes contained in the selector's
- // mask.
- if (subproject.selectors[node->nodeType()].contains(node->nodeType())
- && !node->isExternalPage() && !node->fullTitle().isEmpty()) {
-
- project.subprojects[i].nodes[objName] = node;
- }
- }
+ project.subprojects[i].nodes[objName] = node;
}
}
@@ -537,6 +518,9 @@ void HelpProjectWriter::writeSection(QXmlStreamWriter &writer, const QString &pa
*/
void HelpProjectWriter::addMembers(HelpProject &project, QXmlStreamWriter &writer, const Node *node)
{
+ if (node->isQmlBasicType() || node->isJsBasicType())
+ return;
+
QString href = gen_->fullDocumentLocation(node, false);
href = href.left(href.size() - 5);
if (href.isEmpty())
@@ -570,58 +554,41 @@ void HelpProjectWriter::writeNode(HelpProject &project, QXmlStreamWriter &writer
case Node::Class:
case Node::Struct:
case Node::Union:
+ case Node::QmlType:
+ case Node::JsType:
+ case Node::QmlBasicType:
+ case Node::JsBasicType: {
+ QString typeStr = gen_->typeString(node);
+ if (!typeStr.isEmpty())
+ typeStr[0] = typeStr[0].toTitleCase();
writer.writeStartElement("section");
writer.writeAttribute("ref", href);
if (node->parent() && !node->parent()->name().isEmpty())
writer.writeAttribute(
- "title", tr("%1::%2 Class Reference").arg(node->parent()->name()).arg(objName));
+ "title", tr("%1::%2 %3 Reference").arg(node->parent()->name()).arg(objName).arg(typeStr));
else
- writer.writeAttribute("title", tr("%1 Class Reference").arg(objName));
+ writer.writeAttribute("title", tr("%1 %2 Reference").arg(objName).arg(typeStr));
addMembers(project, writer, node);
writer.writeEndElement(); // section
- break;
+ } break;
case Node::Namespace:
writeSection(writer, href, objName);
break;
+ case Node::Example:
case Node::HeaderFile:
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- writer.writeAttribute("title", node->fullTitle());
- addMembers(project, writer, node);
- writer.writeEndElement(); // section
- break;
-
- case Node::JsType:
- case Node::QmlType:
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- writer.writeAttribute("title", tr("%1 Type Reference").arg(node->fullTitle()));
- addMembers(project, writer, node);
- writer.writeEndElement(); // section
- break;
-
- case Node::Page: {
- // Page nodes (such as manual pages) contain subtypes, titles and other
- // attributes.
- const PageNode *pn = static_cast<const PageNode *>(node);
-
- writer.writeStartElement("section");
- writer.writeAttribute("ref", href);
- writer.writeAttribute("title", pn->fullTitle());
-
- writer.writeEndElement(); // section
- } break;
+ case Node::Page:
case Node::Group:
case Node::Module:
case Node::JsModule:
case Node::QmlModule: {
- const CollectionNode *cn = static_cast<const CollectionNode *>(node);
writer.writeStartElement("section");
writer.writeAttribute("ref", href);
- writer.writeAttribute("title", cn->fullTitle());
+ writer.writeAttribute("title", node->fullTitle());
+ if (node->nodeType() == Node::HeaderFile)
+ addMembers(project, writer, node);
writer.writeEndElement(); // section
} break;
default:;
diff --git a/src/qdoc/helpprojectwriter.h b/src/qdoc/helpprojectwriter.h
index eedfa3909..31b8f009d 100644
--- a/src/qdoc/helpprojectwriter.h
+++ b/src/qdoc/helpprojectwriter.h
@@ -44,11 +44,9 @@ using NodeTypeSet = QSet<unsigned char>;
struct SubProject
{
- using NodeTypeToSet = QHash<unsigned char, NodeTypeSet>;
-
QString title;
QString indexTitle;
- NodeTypeToSet selectors;
+ NodeTypeSet selectors;
bool sortPages;
QString type;
QHash<QString, const Node *> nodes;
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/test.qhp b/tests/auto/qdoc/generatedoutput/expected_output/test.qhp
new file mode 100644
index 000000000..4816ef1d5
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/expected_output/test.qhp
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<QtHelpProject version="1.0">
+ <namespace>org.qt-project.test.001</namespace>
+ <virtualFolder>test</virtualFolder>
+ <metaData name="version" value="0.0.1"/>
+ <filterSection>
+ <toc>
+ <section ref="uicomponents-qmlmodule.html" title="UI Components">
+ <section ref="uicomponents-qmlmodule.html" title="Test">
+ <section ref="qdoc-test-qmlmodule.html" title=""/>
+ <section ref="testcpp-module.html" title="QDoc Test C++ Classes"/>
+ <section ref="test-componentset-example.html" title="QML Documentation Example"/>
+ <section ref="uicomponents-qmlmodule.html" title="UI Components"/>
+ </section>
+ <section ref="testcpp-module.html" title="Classes">
+ <section ref="testqdoc.html" title="TestQDoc"/>
+ <section ref="testqdoc-test.html" title="TestQDoc::Test Class Reference">
+ <section ref="testqdoc-test-members.html" title="List of all members"/>
+ <section ref="testqdoc-test-obsolete.html" title="Obsolete members"/>
+ </section>
+ <section ref="testqdoc-testderived.html" title="TestQDoc::TestDerived Class Reference">
+ <section ref="testqdoc-testderived-members.html" title="List of all members"/>
+ </section>
+ </section>
+ <section ref="uicomponents-qmlmodule.html" title="QML Types">
+ <section ref="qml-qdoc-test-abstractparent.html" title="AbstractParent Type Reference">
+ <section ref="qml-qdoc-test-abstractparent-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-child.html" title="Child Type Reference">
+ <section ref="qml-qdoc-test-child-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-doctest.html" title="DocTest Type Reference">
+ <section ref="qml-qdoc-test-doctest-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-qdoc-test-type.html" title="Type Type Reference">
+ <section ref="qml-qdoc-test-type-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-uicomponents-progressbar.html" title="ProgressBar Type Reference">
+ <section ref="qml-uicomponents-progressbar-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-uicomponents-switch.html" title="Switch Type Reference">
+ <section ref="qml-uicomponents-switch-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-uicomponents-tabwidget.html" title="TabWidget Type Reference">
+ <section ref="qml-uicomponents-tabwidget-members.html" title="List of all members"/>
+ </section>
+ <section ref="qml-int.html" title="int Type Reference"/>
+ </section>
+ </section>
+ </toc>
+ <keywords>
+ <keyword name="AbstractParent" id="QML.AbstractParent" ref="qml-qdoc-test-abstractparent.html"/>
+ <keyword name="Child" id="QML.Child" ref="qml-qdoc-test-child.html"/>
+ <keyword name="DocTest" id="QML.DocTest" ref="qml-qdoc-test-doctest.html"/>
+ <keyword name="ProgressBar" id="QML.ProgressBar" ref="qml-uicomponents-progressbar.html"/>
+ <keyword name="QDOCTEST_MACRO" id="QDOCTEST_MACRO" ref="testqdoc.html#QDOCTEST_MACRO"/>
+ <keyword name="QDOCTEST_MACRO2" id="QDOCTEST_MACRO2" ref="testqdoc-test.html#QDOCTEST_MACRO2"/>
+ <keyword name="QDoc Test C++ Classes" id="QDoc Test C++ Classes" ref="testcpp-module.html"/>
+ <keyword name="Switch" id="QML.Switch" ref="qml-uicomponents-switch.html"/>
+ <keyword name="TabWidget" id="QML.TabWidget" ref="qml-uicomponents-tabwidget.html"/>
+ <keyword name="Test" id="TestQDoc::Test" ref="testqdoc-test.html"/>
+ <keyword name="TestDerived" id="TestQDoc::TestDerived" ref="testqdoc-testderived.html"/>
+ <keyword name="TestQDoc" id="TestQDoc" ref="testqdoc.html"/>
+ <keyword name="Type" id="QML.Type" ref="qml-qdoc-test-type.html"/>
+ <keyword name="UI Components" id="UI Components" ref="uicomponents-qmlmodule.html"/>
+ <keyword name="abs" id="int::abs" ref="qml-int.html#abs-method"/>
+ <keyword name="active" id="DocTest::active" ref="qml-qdoc-test-doctest.html#active-prop"/>
+ <keyword name="anotherObsoleteMember" id="Test::anotherObsoleteMember" ref="testqdoc-test-obsolete.html#anotherObsoleteMember"/>
+ <keyword name="children" id="AbstractParent::children" ref="qml-qdoc-test-abstractparent.html#children-prop"/>
+ <keyword name="color" id="ProgressBar::color" ref="qml-uicomponents-progressbar.html#color-prop"/>
+ <keyword name="completed" id="Type::completed" ref="qml-qdoc-test-type.html#completed-signal"/>
+ <keyword name="configured" id="Type::configured" ref="qml-qdoc-test-type.html#configured-signal"/>
+ <keyword name="copy" id="Type::copy" ref="qml-qdoc-test-type.html#copy-method"/>
+ <keyword name="current" id="TabWidget::current" ref="qml-uicomponents-tabwidget.html#current-prop"/>
+ <keyword name="deprecatedMember" id="Test::deprecatedMember" ref="testqdoc-test-obsolete.html#deprecatedMember"/>
+ <keyword name="disable" id="Type::disable" ref="qml-qdoc-test-type.html#disable-method"/>
+ <keyword name="enable" id="Type::enable" ref="qml-qdoc-test-type.html#enable-method"/>
+ <keyword name="fail" id="DocTest::fail" ref="qml-qdoc-test-doctest.html#fail-method"/>
+ <keyword name="fifth" id="Type::fifth" ref="qml-qdoc-test-type.html#fifth-prop"/>
+ <keyword name="fourth" id="Type::fourth" ref="qml-qdoc-test-type.html#fourth-prop"/>
+ <keyword name="group.first" id="Type::group.first" ref="qml-qdoc-test-type.html#group.first-prop"/>
+ <keyword name="group.second" id="Type::group.second" ref="qml-qdoc-test-type.html#group.second-prop"/>
+ <keyword name="group.third" id="Type::group.third" ref="qml-qdoc-test-type.html#group.third-prop"/>
+ <keyword name="id" id="Type::id" ref="qml-qdoc-test-type.html#id-prop"/>
+ <keyword name="inlineFunction" id="Test::inlineFunction" ref="testqdoc-test.html#inlineFunction"/>
+ <keyword name="int" id="QML.int" ref="qml-int.html"/>
+ <keyword name="maximum" id="ProgressBar::maximum" ref="qml-uicomponents-progressbar.html#maximum-prop"/>
+ <keyword name="minimum" id="ProgressBar::minimum" ref="qml-uicomponents-progressbar.html#minimum-prop"/>
+ <keyword name="name" id="DocTest::name" ref="qml-qdoc-test-doctest.html#name-prop"/>
+ <keyword name="name" id="Type::name" ref="qml-qdoc-test-type.html#name-prop"/>
+ <keyword name="obsoleteMember" id="Test::obsoleteMember" ref="testqdoc-test-obsolete.html#obsoleteMember"/>
+ <keyword name="on" id="Switch::on" ref="qml-uicomponents-switch.html#on-prop"/>
+ <keyword name="overload" id="Test::overload" ref="testqdoc-test.html#overload"/>
+ <keyword name="rear" id="AbstractParent::rear" ref="qml-qdoc-test-abstractparent.html#rear-method"/>
+ <keyword name="sampleReadOnlyProperty" id="TabWidget::sampleReadOnlyProperty" ref="qml-uicomponents-tabwidget.html#sampleReadOnlyProperty-prop"/>
+ <keyword name="secondColor" id="ProgressBar::secondColor" ref="qml-uicomponents-progressbar.html#secondColor-prop"/>
+ <keyword name="someFunction" id="Test::someFunction" ref="testqdoc-test.html#someFunction"/>
+ <keyword name="someFunctionDefaultArg" id="Test::someFunctionDefaultArg" ref="testqdoc-test.html#someFunctionDefaultArg"/>
+ <keyword name="toggle" id="Switch::toggle" ref="qml-uicomponents-switch.html#toggle-method"/>
+ <keyword name="type" id="Type::type" ref="qml-qdoc-test-type.html#type-attached-prop"/>
+ <keyword name="value" id="ProgressBar::value" ref="qml-uicomponents-progressbar.html#value-prop"/>
+ <keyword name="virtualFun" id="Test::virtualFun" ref="testqdoc-test.html#virtualFun"/>
+ <keyword name="virtualFun" id="TestDerived::virtualFun" ref="testqdoc-testderived.html#virtualFun"/>
+ </keywords>
+ <files>
+ <file>qdoc-test-qmlmodule.html</file>
+ <file>qml-int.html</file>
+ <file>qml-qdoc-test-abstractparent-members.html</file>
+ <file>qml-qdoc-test-abstractparent.html</file>
+ <file>qml-qdoc-test-child-members.html</file>
+ <file>qml-qdoc-test-child.html</file>
+ <file>qml-qdoc-test-doctest-members.html</file>
+ <file>qml-qdoc-test-doctest.html</file>
+ <file>qml-qdoc-test-type-members.html</file>
+ <file>qml-qdoc-test-type.html</file>
+ <file>qml-uicomponents-progressbar-members.html</file>
+ <file>qml-uicomponents-progressbar.html</file>
+ <file>qml-uicomponents-switch-members.html</file>
+ <file>qml-uicomponents-switch.html</file>
+ <file>qml-uicomponents-tabwidget-members.html</file>
+ <file>qml-uicomponents-tabwidget.html</file>
+ <file>test-componentset-componentset-pro.html</file>
+ <file>test-componentset-example.html</file>
+ <file>test-componentset-progressbar-qml.html</file>
+ <file>test-componentset-switch-qml.html</file>
+ <file>test-componentset-tabwidget-qml.html</file>
+ <file>testcpp-module.html</file>
+ <file>testqdoc-test-members.html</file>
+ <file>testqdoc-test-obsolete.html</file>
+ <file>testqdoc-test.html</file>
+ <file>testqdoc-testderived-members.html</file>
+ <file>testqdoc-testderived.html</file>
+ <file>testqdoc.html</file>
+ <file>uicomponents-qmlmodule.html</file>
+ </files>
+ </filterSection>
+</QtHelpProject>
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf
index b4598476e..a1ed619a3 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf
+++ b/tests/auto/qdoc/generatedoutput/testdata/configs/examples-qhp.qdocconf
@@ -1,5 +1,6 @@
# QML test includes a documented example
include(testqml.qdocconf)
+version = 0.0.1
examplesinstallpath = test
@@ -12,6 +13,22 @@ qhp.Test.virtualFolder = test
qhp.Test.indexTitle = UI Components
qhp.Test.indexRoot =
+qhp.Test.subprojects = test classes qmltypes undefined
+qhp.Test.subprojects.test.title = Test
+qhp.Test.subprojects.test.indexTitle = UI Components
+qhp.Test.subprojects.test.selectors = doc:page fake:example module qmlmodule
+qhp.Test.subprojects.test.sortPages = true
+
+qhp.Test.subprojects.classes.title = Classes
+qhp.Test.subprojects.classes.indexTitle = QDoc Test C++ Classes
+qhp.Test.subprojects.classes.selectors = class namespace doc:headerfile boop:whatever
+qhp.Test.subprojects.classes.sortPages = true
+
+qhp.Test.subprojects.qmltypes.title = QML Types
+qhp.Test.subprojects.qmltypes.indexTitle = UI Components
+qhp.Test.subprojects.qmltypes.selectors = qmlmodule:UIComponents,QDoc.Test
+qhp.Test.subprojects.qmltypes.sortPages = true
+
# Add some meta-data to the example
manifestmeta.filters = test
diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
index b3509dfff..20becc713 100644
--- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
+++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
@@ -56,7 +56,7 @@ private slots:
void docBookFromQml();
// Output format independent tests
- void examplesManifestXml();
+ void examplesManifestXmlAndQhp();
void ignoresinceVariable();
void templateParameters();
void scopedEnum();
@@ -286,9 +286,11 @@ void tst_generatedOutput::docBookFromQml()
"docbook/qml-int.xml");
}
-void tst_generatedOutput::examplesManifestXml()
+void tst_generatedOutput::examplesManifestXmlAndQhp()
{
- testAndCompare("testdata/configs/examples-qhp.qdocconf", "examples-manifest.xml");
+ testAndCompare("testdata/configs/examples-qhp.qdocconf",
+ "examples-manifest.xml "
+ "test.qhp");
}
void tst_generatedOutput::ignoresinceVariable()