summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2022-11-04 18:06:33 +0100
committerTopi Reinio <topi.reinio@qt.io>2022-11-10 12:26:52 +0100
commit8be8426091604aec0dc978700634fb0311099259 (patch)
tree0b54c8c5f3e97c6d50707522caa87be7cedd5ff1 /tests
parent24d5fe025e43003d24598f2fa9889acf742f11f1 (diff)
downloadqttools-8be8426091604aec0dc978700634fb0311099259.tar.gz
qdoc: Attempt to read macro arguments only once
QDoc supports multiple versions of macros, one for each supported output format: macro.hello.HTML = "<p>Hi, \1</p>" macro.hello.DocBook = "<db:para>Hi, \1</db:para>" Macros can also take arguments. However, with multiple format-specific versions defined, QDoc attempted to also read the arguments multiple times. This fails on the second attempt as the internal position has been already advanced beyond the arguments. Implement a new helper function, DocParser::getMacroArguments(), and use it to read the arguments only once. Fixes: QTBUG-108219 Pick-to: 6.2 6.4 Change-Id: Icad7e51b93c00a2632746ea2fe05d36459b9acda Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/docbook-nestedmacro/testcpp-module.xml85
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html1
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf12
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp3
-rw-r--r--tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp3
5 files changed, 98 insertions, 6 deletions
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/docbook-nestedmacro/testcpp-module.xml b/tests/auto/qdoc/generatedoutput/expected_output/docbook-nestedmacro/testcpp-module.xml
new file mode 100644
index 000000000..f9d172f3f
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/expected_output/docbook-nestedmacro/testcpp-module.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<db:article xmlns:db="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.2" xml:lang="en">
+<db:info>
+<db:title>QDoc Test C++ Classes</db:title>
+<db:productname>TestCPP</db:productname>
+<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev>
+<db:abstract>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+</db:abstract>
+</db:info>
+<db:para>A test module page.</db:para>
+<db:para>This module was introduced in Qt 2.0.</db:para>
+<db:section xml:id="namespaces">
+<db:title>Namespaces</db:title>
+<db:variablelist role="namespaces">
+<db:varlistentry>
+<db:term><db:link xlink:href="crossmoduleref.xml" xlink:role="namespace">CrossModuleRef</db:link></db:term>
+<db:listitem>
+<db:para>Namespace that has documented functions in multiple modules.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc.xml" xlink:role="namespace">TestQDoc</db:link></db:term>
+<db:listitem>
+<db:para>A namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="classes">
+<db:title>Classes</db:title>
+<db:variablelist role="classes">
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:term>
+<db:listitem>
+<db:para>A class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+<db:varlistentry>
+<db:term><db:link xlink:href="testqdoc-testderived.xml" xlink:role="class">TestQDoc::TestDerived</db:link></db:term>
+<db:listitem>
+<db:para>A derived class in a namespace.</db:para>
+</db:listitem>
+</db:varlistentry>
+</db:variablelist>
+</db:section>
+<db:section xml:id="details">
+<db:title>Detailed Description</db:title>
+<db:note>
+<db:para>This is just a test. /* Look, Ma! {I'm made of arguments!} */</db:para>
+</db:note>
+<db:para>This module was introduced in version 5.15.</db:para>
+<db:para>1.0</db:para>
+<db:section xml:id="linking-to-function-like-things">
+<db:title>Linking to function-like things</db:title>
+<db:itemizedlist>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#someFunctionDefaultArg">someFunctionDefaultArg</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>()</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#QDOCTEST_MACRO2">QDOCTEST_MACRO2</db:link>(int &amp;x)</db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testcpp-module.xml#section">section()</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testcpp-module.xml#section">section() is a section title</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="testqdoc-test.xml#Test">open( parenthesis</db:link></db:para>
+</db:listitem>
+<db:listitem>
+<db:para><db:link xlink:href="https://en.cppreference.com/w/cpp/utility/move">C++11 added std::move(T&amp;&amp; t)</db:link></db:para>
+</db:listitem>
+</db:itemizedlist>
+<db:section xml:id="section">
+<db:title>section()</db:title>
+</db:section>
+</db:section>
+</db:section>
+</db:article>
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
index 8f728c7be..d08023a3d 100644
--- a/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
+++ b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
@@ -40,6 +40,7 @@
<p><b>Note: </b>This is just a test. /* Look, Ma! {I'm made of arguments!} */</p>
</div>
<p><b>This module was introduced in version 5.15.</b></p>
+<p>1.0</p>
<h3 id="linking-to-function-like-things">Linking to function-like things</h3>
<ul>
<li><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a>()</li>
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
index 056b30452..1c6675475 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
+++ b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
@@ -2,9 +2,13 @@ include(config.qdocconf)
include(testcpp.qdocconf)
defines += test_nestedmacro
-macro.ver = "5.15.0"
+macro.ver = "\1"
macro.ver.match = "^(\\d+\\.\\d+)"
-macro.versionnote.HTML = "<p><b>This \1 was introduced in version \2.</b></p>\n"
+macro.versionnote.HTML = "<p><b>This \1 was introduced in version \2.</b></p>\n"
+macro.versionnote.DocBook = "<db:para>This \1 was introduced in version \2.</db:para>\n"
-HTML.nosubdirs = true
-HTML.outputsubdir = nestedmacro
+outputformats = HTML DocBook
+
+{HTML.nosubdirs,DocBook.nosubdirs} = true
+HTML.outputsubdir = nestedmacro
+DocBook.outputsubdir = docbook-nestedmacro
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
index 5de31e64e..8123abc14 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
+++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
@@ -28,7 +28,8 @@ namespace TestQDoc {
\include testcpp.cpp {args} {/} {*} {Look, Ma! {I'm made of arguments!}}
\if defined(test_nestedmacro)
- \versionnote {module} {\ver}
+ \versionnote {module} {\ver 5.15.0}
+ \ver 1.0.0
\endif
\section1 Linking to function-like things
diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
index 971498345..d45750476 100644
--- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
+++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
@@ -482,7 +482,8 @@ void tst_generatedOutput::noAutoList()
void tst_generatedOutput::nestedMacro()
{
testAndCompare("testdata/configs/nestedmacro.qdocconf",
- "nestedmacro/testcpp-module.html");
+ "nestedmacro/testcpp-module.html "
+ "docbook-nestedmacro/testcpp-module.xml");
}
void tst_generatedOutput::headerFile()