diff options
author | Topi Reinio <topi.reinio@qt.io> | 2022-11-04 18:06:33 +0100 |
---|---|---|
committer | Topi Reinio <topi.reinio@qt.io> | 2022-11-10 12:26:52 +0100 |
commit | 8be8426091604aec0dc978700634fb0311099259 (patch) | |
tree | 0b54c8c5f3e97c6d50707522caa87be7cedd5ff1 /tests | |
parent | 24d5fe025e43003d24598f2fa9889acf742f11f1 (diff) | |
download | qttools-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')
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 &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&& 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() |