diff options
author | Topi Reinio <topi.reinio@qt.io> | 2020-08-10 14:21:14 +0200 |
---|---|---|
committer | Topi Reinio <topi.reinio@qt.io> | 2020-09-23 21:33:23 +0200 |
commit | 82384d23378ca8277d0a228c1f343d7d89912edb (patch) | |
tree | 82be668f09c1dadb4176459f2848913c4718ae37 /tests | |
parent | 668696ac8502c7fced5f0985188bff62a9040313 (diff) |
qdoc: Test the C++ property macros in QDoc's generatedoutput autotest
In order to test the Q_PROPERTY macros, we need to provide include
paths to QtCore for the test. Generate a list of include files when
running qmake or CMake, stored in a file, and load that file as
extra command line arguments when running QDoc.
Skip the test if that file is not available at the time of test
execution.
Fixes: QTBUG-85565
Change-Id: Ibe7ec4a454441c15320b3a7e1ff8ebefb44c2f5e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Diffstat (limited to 'tests')
10 files changed, 608 insertions, 0 deletions
diff --git a/tests/auto/qdoc/generatedoutput/CMakeLists.txt b/tests/auto/qdoc/generatedoutput/CMakeLists.txt index d64432b5f..7f0bda913 100644 --- a/tests/auto/qdoc/generatedoutput/CMakeLists.txt +++ b/tests/auto/qdoc/generatedoutput/CMakeLists.txt @@ -8,3 +8,22 @@ qt_add_test(tst_generatedOutput SOURCES tst_generatedoutput.cpp ) + +# Write relevant Qt include path to a file, to be read in by QDoc +set(framework_path "\n") +set(includepathsfile "${CMAKE_CURRENT_BINARY_DIR}/qdocincludepaths.inc") +find_package(Qt6 COMPONENTS Core REQUIRED) +if(Qt6Core_FOUND) + get_target_property(include_paths Qt6::Core INTERFACE_INCLUDE_DIRECTORIES) +endif() + +while(include_paths) + list(POP_BACK include_paths inc_path) + if(inc_path MATCHES "(.+)/QtCore\.framework$") + string(APPEND framework_path "-F${CMAKE_MATCH_1}") + break() + endif() +endwhile() + +set (include_paths "$<TARGET_PROPERTY:tst_generatedOutput,INCLUDE_DIRECTORIES>") +file(GENERATE OUTPUT ${includepathsfile} CONTENT "-I$<JOIN:${include_paths},\n-I>${framework_path}") diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml b/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml new file mode 100644 index 000000000..7acf1c95a --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/expected_output/properties-docbook/testqdoc-testderived.xml @@ -0,0 +1,185 @@ +<?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>TestDerived Class</db:title> +<db:subtitle>TestQDoc::TestDerived</db:subtitle> +<db:productname>TestCPP</db:productname> +<db:titleabbrev>TestCPP Reference Documentation</db:titleabbrev> +<db:abstract> +<db:para>A derived class in a namespace.</db:para> +</db:abstract> +</db:info> +<db:variablelist> +<db:varlistentry> +<db:term>Header</db:term> +<db:listitem> +<db:para>TestDerived</db:para> +</db:listitem> +</db:varlistentry> +<db:varlistentry> +<db:term>CMake</db:term> +<db:listitem> +<db:para>find_package(Qt6 COMPONENT QDocTest)</db:para> +<db:para>target_link_libraries(mytarget PUBLIC Qt::QDocTest)</db:para> +</db:listitem> +</db:varlistentry> +<db:varlistentry> +<db:term>qmake</db:term> +<db:listitem> +<db:para>QT += testcpp</db:para> +</db:listitem> +</db:varlistentry> +<db:varlistentry> +<db:term>Inherits</db:term> +<db:listitem> +<db:para><db:link xlink:href="testqdoc-test.xml" xlink:role="class">TestQDoc::Test</db:link></db:para> +</db:listitem> +</db:varlistentry> +</db:variablelist> +<db:section xml:id="details"> +<db:title>Detailed Description</db:title> +</db:section> +<db:section xml:id="member-type-documentation"> +<db:title>Member Type Documentation</db:title> +<db:section xml:id="DerivedType-alias"> +<db:title>[alias] TestDerived::DerivedType</db:title> +<db:typedefsynopsis> +<db:type>DerivedType</db:type><db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +</db:typedefsynopsis> +<db:para>This is a type alias for <db:link xlink:href="testqdoc-test.xml#SomeType-typedef">TestQDoc::Test::SomeType</db:link>.</db:para> +<db:para>An aliased typedef.</db:para> +</db:section> +<db:section xml:id="NotTypedef-alias"> +<db:title>[alias] TestDerived::NotTypedef</db:title> +<db:typedefsynopsis> +<db:type>NotTypedef</db:type><db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +</db:typedefsynopsis> +<db:para>This is a type alias for <db:code>int</db:code>.</db:para> +<db:para>I'm an alias, not a typedef.</db:para> +</db:section> +</db:section> +<db:section xml:id="property-documentation"> +<db:title>Property Documentation</db:title> +<db:section xml:id="bindableProp-prop"> +<db:title>[bindable] bindableProp : QString</db:title> +<db:fieldsynopsis> +<db:modifier>(Qt property)</db:modifier> +<db:type>QString</db:type> +<db:varname>bindableProp</db:varname> +<db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +<db:synopsisinfo db:role="getter">bindableProp</db:synopsisinfo> +<db:synopsisinfo db:role="setter">setBindableProp</db:synopsisinfo> +<db:synopsisinfo db:role="notifier">bindablePropChanged</db:synopsisinfo> +</db:fieldsynopsis> +<db:para>This property supports <db:link xlink:href="https://wiki.qt.io/QProperty">QProperty</db:link> bindings.</db:para> +<db:para>Some property.</db:para> +</db:section> +<db:section xml:id="boolProp-prop"> +<db:title>boolProp : bool</db:title> +<db:fieldsynopsis> +<db:modifier>(Qt property)</db:modifier> +<db:type>bool</db:type> +<db:varname>boolProp</db:varname> +<db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +<db:synopsisinfo db:role="getter">boolProp</db:synopsisinfo> +<db:synopsisinfo db:role="setter">setBoolProp</db:synopsisinfo> +<db:synopsisinfo db:role="resetter">resetBoolProp</db:synopsisinfo> +<db:synopsisinfo db:role="notifier">boolPropChanged</db:synopsisinfo> +</db:fieldsynopsis> +<db:para>A boolean property.</db:para> +<db:para> +<db:emphasis role="bold">Access functions: +</db:emphasis> +</db:para> +<db:itemizedlist> +<db:listitem> +<db:para><db:type>bool</db:type> <db:emphasis role="bold"><db:link xlink:href="">boolProp</db:link></db:emphasis>()</db:para> +</db:listitem> +<db:listitem> +<db:para><db:type>void</db:type> <db:emphasis role="bold"><db:link xlink:href="">setBoolProp</db:link></db:emphasis>(<db:type>bool</db:type> <db:emphasis>b</db:emphasis>)</db:para> +</db:listitem> +<db:listitem> +<db:para><db:type>void</db:type> <db:emphasis role="bold"><db:link xlink:href="">resetBoolProp</db:link></db:emphasis>()</db:para> +</db:listitem> +</db:itemizedlist> +<db:para> +<db:emphasis role="bold">Notifier signal: +</db:emphasis> +</db:para> +<db:itemizedlist> +<db:listitem> +<db:para><db:type>void</db:type> <db:emphasis role="bold"><db:link xlink:href="">boolPropChanged</db:link></db:emphasis>()</db:para> +</db:listitem> +</db:itemizedlist> +</db:section> +<db:section xml:id="intProp-prop"> +<db:title>[read-only] intProp : int* const</db:title> +<db:fieldsynopsis> +<db:modifier>(Qt property)</db:modifier> +<db:type>int*</db:type> +<db:varname>intProp</db:varname> +<db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +<db:synopsisinfo db:role="getter">getInt</db:synopsisinfo> +</db:fieldsynopsis> +<db:para>An integer property.</db:para> +<db:para> +<db:emphasis role="bold">Access functions: +</db:emphasis> +</db:para> +<db:itemizedlist> +<db:listitem> +<db:para><db:type>int</db:type> *<db:emphasis role="bold"><db:link xlink:href="">getInt</db:link></db:emphasis>()</db:para> +</db:listitem> +</db:itemizedlist> +</db:section> +<db:section xml:id="someProp-prop"> +<db:title>[bindable read-only] someProp : QString</db:title> +<db:fieldsynopsis> +<db:modifier>(Qt property)</db:modifier> +<db:type>QString</db:type> +<db:varname>someProp</db:varname> +<db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +<db:synopsisinfo db:role="getter">someProp</db:synopsisinfo> +</db:fieldsynopsis> +<db:para>This property supports <db:link xlink:href="https://wiki.qt.io/QProperty">QProperty</db:link> bindings.</db:para> +<db:para>Another property.</db:para> +</db:section> +</db:section> +<db:section xml:id="member-function-documentation"> +<db:title>Member Function Documentation</db:title> +<db:section xml:id="virtualFun"> +<db:title>[override virtual] TestDerived::void virtualFun()</db:title> +<db:methodsynopsis> +<db:modifier>virtual</db:modifier> +<db:void/> +<db:methodname>virtualFun</db:methodname> +<db:modifier>override</db:modifier> +<db:void/> +<db:synopsisinfo db:role="meta">plain</db:synopsisinfo> +<db:synopsisinfo db:role="signature">void virtualFun() override</db:synopsisinfo> +<db:synopsisinfo db:role="access">public</db:synopsisinfo> +<db:synopsisinfo db:role="status">active</db:synopsisinfo> +<db:synopsisinfo db:role="threadsafeness">unspecified</db:synopsisinfo> +<db:synopsisinfo db:role="module">TestCPP</db:synopsisinfo> +</db:methodsynopsis> +<db:para>Reimplements: <db:link xlink:href="testqdoc-test.xml#virtualFun" type="function">Test::virtualFun()</db:link>.</db:para> +</db:section> +</db:section></db:article> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index new file mode 100644 index 000000000..4c450e051 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testcpp.index @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE QDOCINDEX> +<INDEX url="" title="TestCPP Reference Documentation" version="" project="TestCPP"> + <namespace name="" status="active" access="public" module="testcpp"> + <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/> + <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)"> + <parameter type="" name="x" default=""/> + </function> + <page name="https://wiki.qt.io/QProperty" href="https://wiki.qt.io/QProperty" status="active" location="properties.qdoc" documented="true" subtype="externalpage" title="QProperty" fulltitle="QProperty" subtitle=""/> + <namespace name="TestQDoc" href="testqdoc.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A namespace"> + <contents name="usage" title="Usage" level="1"/> + <function name="QDOCTEST_MACRO" href="testqdoc.html#QDOCTEST_MACRO" status="active" access="public" documented="true" related="true" meta="macrowithoutparams" virtual="non" const="false" static="false" final="false" override="false" type="" signature="QDOCTEST_MACRO"/> + <class name="Test" fullname="TestQDoc::Test" href="testqdoc-test.html" status="active" access="public" location="testcpp.h" documented="true" module="TestCPP" brief="A class in a namespace"> + <function name="QDOCTEST_MACRO2" href="testqdoc-test.html#QDOCTEST_MACRO2" status="active" access="public" documented="true" related="true" since="Test 1.1" meta="macrowithparams" virtual="non" const="false" static="false" final="false" override="false" type="" brief="A macro with argument x" signature="QDOCTEST_MACRO2( x)"> + <parameter type="" name="x" default=""/> + </function> + <function name="anotherObsoleteMember" fullname="TestQDoc::Test::anotherObsoleteMember" href="testqdoc-test-obsolete.html#anotherObsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void anotherObsoleteMember()"/> + <function name="deprecatedMember" fullname="TestQDoc::Test::deprecatedMember" href="testqdoc-test-obsolete.html#deprecatedMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void deprecatedMember()"/> + <function name="func" fullname="TestQDoc::Test::func" href="testqdoc-test.html#func" status="internal" access="private" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void func(bool )"> + <parameter type="bool" name="" default=""/> + </function> + <function name="funcPtr" fullname="TestQDoc::Test::funcPtr" href="testqdoc-test.html#funcPtr" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void (*)(bool)" signature="void (*)(bool) funcPtr(bool b, const char *s)"> + <parameter type="bool" name="b" default=""/> + <parameter type="const char *" name="s" default=""/> + </function> + <function name="inlineFunction" fullname="TestQDoc::Test::inlineFunction" href="testqdoc-test.html#inlineFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" brief="An inline function, documented using the \fn QDoc command" signature="void inlineFunction()"/> + <function name="obsoleteMember" fullname="TestQDoc::Test::obsoleteMember" href="testqdoc-test-obsolete.html#obsoleteMember" status="obsolete" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void obsoleteMember()"/> + <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload" status="active" access="protected" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void overload()"/> + <function name="overload" fullname="TestQDoc::Test::overload" href="testqdoc-test.html#overload-1" status="active" access="protected" location="testcpp.h" documented="true" since="Test 1.2" meta="plain" virtual="non" const="false" static="false" final="false" override="false" overload="true" overload-number="1" type="void" signature="void overload(bool b)"> + <parameter type="bool" name="b" default=""/> + </function> + <function name="someFunction" fullname="TestQDoc::Test::someFunction" href="testqdoc-test.html#someFunction" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="int" signature="int someFunction(int v)"> + <parameter type="int" name="v" default="0"/> + </function> + <function name="someFunctionDefaultArg" fullname="TestQDoc::Test::someFunctionDefaultArg" href="testqdoc-test.html#someFunctionDefaultArg" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="void" signature="void someFunctionDefaultArg(int i, bool b)"> + <parameter type="int" name="i" default=""/> + <parameter type="bool" name="b" default="false"/> + </function> + <function name="virtualFun" fullname="TestQDoc::Test::virtualFun" href="testqdoc-test.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void" signature="void virtualFun()"/> + <typedef name="SomeType" fullname="TestQDoc::Test::SomeType" href="testqdoc-test.html#SomeType-typedef" status="active" access="public" location="testcpp.h" documented="true"/> + </class> + <class name="TestDerived" fullname="TestQDoc::TestDerived" href="testqdoc-testderived.html" status="active" access="public" location="testcpp.h" documented="true" bases="TestQDoc::Test" module="TestCPP" brief="A derived class in a namespace"> + <function name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" associated-property="bindableProp" type="QBindable<QString>" signature="QBindable<QString> bindableProp()"/> + <function name="bindablePropChanged" fullname="TestQDoc::TestDerived::bindablePropChanged" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="signal" virtual="non" const="false" static="false" final="false" override="false" associated-property="bindableProp" type="void" signature="void bindablePropChanged()"/> + <function name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" associated-property="boolProp" type="bool" signature="bool boolProp()"/> + <function name="boolPropChanged" fullname="TestQDoc::TestDerived::boolPropChanged" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="signal" virtual="non" const="false" static="false" final="false" override="false" associated-property="boolProp" type="void" signature="void boolPropChanged()"/> + <function name="getInt" fullname="TestQDoc::TestDerived::getInt" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" associated-property="intProp" type="int *" signature="int * getInt()"/> + <function name="metaObject" fullname="TestQDoc::TestDerived::metaObject" href="testqdoc-testderived.html#metaObject" status="internal" access="private" location="testcpp.h" meta="plain" virtual="virtual" const="true" static="false" final="false" override="false" type="const QMetaObject *" signature="const QMetaObject * metaObject() const"/> + <function name="qt_metacall" fullname="TestQDoc::TestDerived::qt_metacall" href="testqdoc-testderived.html#qt_metacall" status="internal" access="private" location="testcpp.h" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="int" signature="int qt_metacall(QMetaObject::Call , int , void **)"> + <parameter type="QMetaObject::Call" name="" default=""/> + <parameter type="int" name="" default=""/> + <parameter type="void **" name="" default=""/> + </function> + <function name="qt_metacast" fullname="TestQDoc::TestDerived::qt_metacast" href="testqdoc-testderived.html#qt_metacast" status="internal" access="private" location="testcpp.h" meta="plain" virtual="virtual" const="false" static="false" final="false" override="false" type="void *" signature="void * qt_metacast(const char *)"> + <parameter type="const char *" name="" default=""/> + </function> + <function name="qt_static_metacall" fullname="TestQDoc::TestDerived::qt_static_metacall" href="testqdoc-testderived.html#qt_static_metacall" status="internal" access="private" location="testcpp.h" meta="plain" virtual="non" const="false" static="true" final="false" override="false" type="void" signature="void qt_static_metacall(QObject *, QMetaObject::Call , int , void **)"> + <parameter type="QObject *" name="" default=""/> + <parameter type="QMetaObject::Call" name="" default=""/> + <parameter type="int" name="" default=""/> + <parameter type="void **" name="" default=""/> + </function> + <function name="resetBoolProp" fullname="TestQDoc::TestDerived::resetBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" virtual="non" const="false" static="false" final="false" override="false" associated-property="boolProp" type="void" signature="void resetBoolProp()"/> + <function name="setBindableProp" fullname="TestQDoc::TestDerived::setBindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" meta="slot" virtual="non" const="false" static="false" final="false" override="false" associated-property="bindableProp" type="void" signature="void setBindableProp(const QString &s)"> + <parameter type="const QString &" name="s" default=""/> + </function> + <function name="setBoolProp" fullname="TestQDoc::TestDerived::setBoolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" meta="slot" virtual="non" const="false" static="false" final="false" override="false" associated-property="boolProp" type="void" signature="void setBoolProp(bool b)"> + <parameter type="bool" name="b" default=""/> + </function> + <function name="someBindableProp" fullname="TestQDoc::TestDerived::someBindableProp" href="testqdoc-testderived.html#someBindableProp" status="internal" access="private" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" type="QBindable<QString>" signature="QBindable<QString> someBindableProp()"/> + <function name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" meta="plain" virtual="non" const="false" static="false" final="false" override="false" associated-property="someProp" type="const QString &" signature="const QString & someProp()"/> + <function name="virtualFun" fullname="TestQDoc::TestDerived::virtualFun" href="testqdoc-testderived.html#virtualFun" status="active" access="public" location="testcpp.h" documented="true" meta="plain" virtual="virtual" const="false" static="false" final="false" override="true" type="void" signature="void virtualFun() override"/> + <struct name="QPrivateSignal" fullname="TestQDoc::TestDerived::QPrivateSignal" href="testqdoc-testderived-qprivatesignal.html" status="internal" access="private" location="testcpp.h"/> + <alias name="DerivedType" fullname="TestQDoc::TestDerived::DerivedType" href="testqdoc-testderived.html#DerivedType-alias" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="Test::SomeType"/> + <alias name="NotTypedef" fullname="TestQDoc::TestDerived::NotTypedef" href="testqdoc-testderived.html#NotTypedef-alias" status="active" access="public" location="testcpp.h" documented="true" aliasedtype="int"/> + <property name="bindableProp" fullname="TestQDoc::TestDerived::bindableProp" href="testqdoc-testderived.html#bindableProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true"> + <getter name="bindableProp"/> + <setter name="setBindableProp"/> + <notifier name="bindablePropChanged"/> + </property> + <property name="boolProp" fullname="TestQDoc::TestDerived::boolProp" href="testqdoc-testderived.html#boolProp-prop" status="active" access="public" location="testcpp.h" documented="true"> + <getter name="boolProp"/> + <setter name="setBoolProp"/> + <resetter name="resetBoolProp"/> + <notifier name="boolPropChanged"/> + </property> + <property name="intProp" fullname="TestQDoc::TestDerived::intProp" href="testqdoc-testderived.html#intProp-prop" status="active" access="public" location="testcpp.h" documented="true"> + <getter name="getInt"/> + </property> + <property name="someProp" fullname="TestQDoc::TestDerived::someProp" href="testqdoc-testderived.html#someProp-prop" status="active" access="public" location="testcpp.h" documented="true" bindable="true"> + <getter name="someProp"/> + </property> + <variable name="staticMetaObject" fullname="TestQDoc::TestDerived::staticMetaObject" href="testqdoc-testderived.html#staticMetaObject-var" status="internal" access="private" location="testcpp.h" type="const QMetaObject" static="true"/> + </class> + </namespace> + <module name="TestCPP" href="testcpp-module.html" status="active" documented="true" seen="true" title="QDoc Test C++ Classes" module="TestCPP" members="TestQDoc,Test,TestDerived" brief="A test module page"/> + </namespace> +</INDEX> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html new file mode 100644 index 000000000..4c6d4bb14 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived-members.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> +<!-- testcpp.cpp --> + <title>List of All Members for TestDerived | TestCPP</title> +</head> +<body> +<li>TestDerived</li> +<div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div> +<h1 class="title">List of All Members for TestDerived</h1> +<p>This is the complete list of members for <a href="testqdoc-testderived.html">TestQDoc::TestDerived</a>, including inherited members.</p> +<div class="table"><table class="propsummary"> +<tr><td class="topAlign"><ul> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#DerivedType-alias">DerivedType</a></b></span></li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#NotTypedef-alias">NotTypedef</a></b></span></li> +<li class="fn">typedef <span class="name"><b><a href="testqdoc-test.html#SomeType-typedef">SomeType</a></b></span></li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#bindableProp-prop">bindablePropChanged</a></b></span>()</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop">boolPropChanged</a></b></span>()</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop">resetBoolProp</a></b></span>()</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#bindableProp-prop">setBindableProp</a></b></span>(const QString &)</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop">setBoolProp</a></b></span>(bool )</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#bindableProp-prop">bindableProp</a></b></span>() : QBindable<QString></li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#boolProp-prop">boolProp</a></b></span>() : bool</li> +</ul></td><td class="topAlign"><ul> +<li class="fn"><span class="name"><b><a href="testqdoc-test.html#funcPtr">funcPtr</a></b></span>(bool , const char *) : void (*)(bool)</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#intProp-prop">getInt</a></b></span>() : int *</li> +<li class="fn"><span class="name"><b><a href="testqdoc-test.html#inlineFunction">inlineFunction</a></b></span>()</li> +<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload">overload</a></b></span>()</li> +<li class="fn"><span class="name"><b><a href="testqdoc-test.html#overload-1">overload</a></b></span>(bool )</li> +<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunction">someFunction</a></b></span>(int ) : int</li> +<li class="fn"><span class="name"><b><a href="testqdoc-test.html#someFunctionDefaultArg">someFunctionDefaultArg</a></b></span>(int , bool )</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#someProp-prop">someProp</a></b></span>() : const QString &</li> +<li class="fn"><span class="name"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b></span>()</li> +</ul> +</td></tr> +</table></div> +</body> +</html> diff --git a/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html new file mode 100644 index 000000000..6546f5ba3 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/expected_output/properties/testqdoc-testderived.html @@ -0,0 +1,137 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> +<!-- testcpp.cpp --> + <title>TestDerived Class | TestCPP</title> +</head> +<body> +<li>TestDerived</li> +<div class="sidebar"> +<div class="toc"> +<h3><a name="toc">Contents</a></h3> +<ul> +<li class="level1"><a href="#public-types">Public Types</a></li> +<li class="level1"><a href="#properties">Properties</a></li> +<li class="level1"><a href="#public-functions">Public Functions</a></li> +<li class="level1"><a href="#reimplemented-public-functions">Reimplemented Public Functions</a></li> +<li class="level1"><a href="#public-slots">Public Slots</a></li> +<li class="level1"><a href="#signals">Signals</a></li> +<li class="level1"><a href="#details">Detailed Description</a></li> +</ul> +</div> +<div class="sidebar-content" id="sidebar-content"></div></div> +<h1 class="title">TestDerived Class</h1> +<span class="small-subtitle">class <a href="testqdoc.html">TestQDoc</a>::TestDerived</span> +<!-- $$$TestDerived-brief --> +<p>A derived class in a namespace. <a href="#details">More...</a></p> +<!-- @@@TestDerived --> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include <TestDerived></span> +</td></tr><tr><td class="memItemLeft rightAlign topAlign"> CMake:</td><td class="memItemRight bottomAlign"> find_package(Qt6 COMPONENT QDocTest) <br/> +target_link_libraries(mytarget PUBLIC Qt::QDocTest)</td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += testcpp</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="testqdoc-test.html">TestQDoc::Test</a></td></tr></table></div><ul> +<li><a href="testqdoc-testderived-members.html">List of all members, including inherited members</a></li> +</ul> +<a name="public-types"></a> +<h2 id="public-types">Public Types</h2> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft rightAlign topAlign"> (alias) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#DerivedType-alias">DerivedType</a></b></td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> (alias) </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#NotTypedef-alias">NotTypedef</a></b></td></tr> +</table></div> +<a name="properties"></a> +<h2 id="properties">Properties</h2> +<ul> +<li class="fn"><b><a href="testqdoc-testderived.html#bindableProp-prop">bindableProp</a></b> : QString</li> +<li class="fn"><b><a href="testqdoc-testderived.html#boolProp-prop">boolProp</a></b> : bool</li> +<li class="fn"><b><a href="testqdoc-testderived.html#intProp-prop">intProp</a></b> : int* const</li> +<li class="fn"><b><a href="testqdoc-testderived.html#someProp-prop">someProp</a></b> : QString</li> +</ul> +<a name="public-functions"></a> +<h2 id="public-functions">Public Functions</h2> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft rightAlign topAlign"> QBindable<QString> </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#bindableProp-prop">bindableProp</a></b>()</td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> bool </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop">boolProp</a></b>()</td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> int *</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#intProp-prop">getInt</a></b>()</td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> const QString &</td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#someProp-prop">someProp</a></b>()</td></tr> +</table></div> +<a name="reimplemented-public-functions"></a> +<h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#virtualFun">virtualFun</a></b>() override</td></tr> +</table></div> +<a name="public-slots"></a> +<h2 id="public-slots">Public Slots</h2> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop">resetBoolProp</a></b>()</td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#bindableProp-prop">setBindableProp</a></b>(const QString &<i>s</i>)</td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop">setBoolProp</a></b>(bool <i>b</i>)</td></tr> +</table></div> +<a name="signals"></a> +<h2 id="signals">Signals</h2> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#bindableProp-prop">bindablePropChanged</a></b>()</td></tr> +<tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="testqdoc-testderived.html#boolProp-prop">boolPropChanged</a></b>()</td></tr> +</table></div> +<a name="details"></a> +<!-- $$$TestDerived-description --> +<div class="descr"> +<h2 id="details">Detailed Description</h2> +</div> +<!-- @@@TestDerived --> +<div class="types"> +<h2>Member Type Documentation</h2> +<!-- $$$DerivedType --> +<h3 class="fn" id="DerivedType-alias"><a name="DerivedType-alias"></a><code>[alias] </code>TestDerived::<span class="name">DerivedType</span></h3> +<p>This is a type alias for <a href="testqdoc-test.html#SomeType-typedef">TestQDoc::Test::SomeType</a>.</p> +<p>An aliased typedef.</p> +<!-- @@@DerivedType --> +<!-- $$$NotTypedef --> +<h3 class="fn" id="NotTypedef-alias"><a name="NotTypedef-alias"></a><code>[alias] </code>TestDerived::<span class="name">NotTypedef</span></h3> +<p>This is a type alias for int.</p> +<p>I'm an alias, not a typedef.</p> +<!-- @@@NotTypedef --> +</div> +<div class="prop"> +<h2>Property Documentation</h2> +<!-- $$$bindableProp-prop$$$bindableProp$$$setBindablePropconstQString&$$$bindablePropChanged --> +<h3 class="fn" id="bindableProp-prop"><a name="bindableProp-prop"></a><code>[bindable] </code><span class="name">bindableProp</span> : <span class="type">QString</span></h3> +<p><b>Note: </b>This property supports <a href="https://wiki.qt.io/QProperty">QProperty</a> bindings.</p> +<p>Some property.</p> +<!-- @@@bindableProp --> +<!-- $$$boolProp-prop$$$boolProp$$$setBoolPropbool$$$resetBoolProp$$$boolPropChanged --> +<h3 class="fn" id="boolProp-prop"><a name="boolProp-prop"></a><span class="name">boolProp</span> : <span class="type">bool</span></h3> +<p>A boolean property.</p> +<p><b>Access functions:</b></p> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft topAlign rightAlign"> bool </td><td class="memItemRight bottomAlign"><span class="name"><b>boolProp</b></span>()</td></tr> +<tr><td class="memItemLeft topAlign rightAlign"> void </td><td class="memItemRight bottomAlign"><span class="name"><b>setBoolProp</b></span>(bool <i>b</i>)</td></tr> +<tr><td class="memItemLeft topAlign rightAlign"> void </td><td class="memItemRight bottomAlign"><span class="name"><b>resetBoolProp</b></span>()</td></tr> +</table></div> +<p><b>Notifier signal:</b></p> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft topAlign rightAlign"> void </td><td class="memItemRight bottomAlign"><span class="name"><b>boolPropChanged</b></span>()</td></tr> +</table></div> +<!-- @@@boolProp --> +<!-- $$$intProp-prop$$$getInt --> +<h3 class="fn" id="intProp-prop"><a name="intProp-prop"></a><code>[read-only] </code><span class="name">intProp</span> : <span class="type">int</span>* const</h3> +<p>An integer property.</p> +<p><b>Access functions:</b></p> +<div class="table"><table class="alignedsummary"> +<tr><td class="memItemLeft topAlign rightAlign"> int *</td><td class="memItemRight bottomAlign"><span class="name"><b>getInt</b></span>()</td></tr> +</table></div> +<!-- @@@intProp --> +<!-- $$$someProp-prop$$$someProp --> +<h3 class="fn" id="someProp-prop"><a name="someProp-prop"></a><code>[bindable read-only] </code><span class="name">someProp</span> : <span class="type">QString</span></h3> +<p><b>Note: </b>This property supports <a href="https://wiki.qt.io/QProperty">QProperty</a> bindings.</p> +<p>Another property.</p> +<!-- @@@someProp --> +</div> +<div class="func"> +<h2>Member Function Documentation</h2> +<!-- $$$virtualFun[overload1]$$$virtualFun --> +<h3 class="fn" id="virtualFun"><a name="virtualFun"></a><code>[override virtual] </code><span class="type">void</span> TestDerived::<span class="name">virtualFun</span>()</h3> +<p>Reimplements: <a href="testqdoc-test.html#virtualFun">Test::virtualFun</a>().</p> +<!-- @@@virtualFun --> +</div> +</body> +</html> diff --git a/tests/auto/qdoc/generatedoutput/generatedoutput.pro b/tests/auto/qdoc/generatedoutput/generatedoutput.pro index be9377bec..1f73429a2 100644 --- a/tests/auto/qdoc/generatedoutput/generatedoutput.pro +++ b/tests/auto/qdoc/generatedoutput/generatedoutput.pro @@ -5,3 +5,11 @@ TARGET = tst_generatedOutput SOURCES += \ tst_generatedoutput.cpp + +# Write relevant Qt include path to a file, to be read in by QDoc +INCLUDEPATH_CONTENT = \ + -I$$[QT_INSTALL_HEADERS] \ + -I$$[QT_INSTALL_HEADERS]/QtCore + +macos: INCLUDEPATH_CONTENT += -F$$shell_quote($$[QT_INSTALL_LIBS]) +write_file($$absolute_path($$OUT_PWD/qdocincludepaths.inc, $$OUT_PWD), INCLUDEPATH_CONTENT)|error() diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/properties.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/properties.qdocconf new file mode 100644 index 000000000..610b96948 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/testdata/configs/properties.qdocconf @@ -0,0 +1,10 @@ +include(testcpp.qdocconf) + +defines += test_properties + +sources += ../testcpp/properties.qdoc + +outputformats = HTML DocBook +{HTML.nosubdirs,DocBook.nosubdirs} = true +HTML.outputsubdir = properties +DocBook.outputsubdir = properties-docbook diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/properties.qdoc b/tests/auto/qdoc/generatedoutput/testdata/testcpp/properties.qdoc new file mode 100644 index 000000000..a7ebd3960 --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/properties.qdoc @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the tools applications of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \property TestQDoc::TestDerived::bindableProp + Some property. +*/ + +/*! + \property TestQDoc::TestDerived::someProp + Another property. +*/ + +/*! + \property TestQDoc::TestDerived::intProp + An integer property. +*/ + +/*! + \property TestQDoc::TestDerived::boolProp + A boolean property. +*/ + +/*! + //! avoid link warnings for auto-generated links to QProperty + \externalpage https://wiki.qt.io/QProperty + \title QProperty +*/ diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h index b950dfec9..684b5fff4 100644 --- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h +++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.h @@ -26,6 +26,13 @@ ** ****************************************************************************/ #pragma once + +#ifdef test_properties +#include <QtCore/qmetaobject.h> +#include <QtCore/qproperty.h> +#include <QtCore/qstring.h> +#endif + #define QDOCTEST_MACRO test #define QDOCTEST_MACRO2(x) (x) < 0 ? 0 : (x)) @@ -75,10 +82,35 @@ protected: }; class TestDerived : public Test { +#ifdef test_properties + Q_OBJECT + + Q_PROPERTY(QString bindableProp READ bindableProp WRITE setBindableProp NOTIFY bindablePropChanged BINDABLE bindableProp) + Q_PROPERTY(QString someProp READ someProp BINDABLE somBindableProp) + Q_PROPERTY(int *intProp READ getInt STORED false CONSTANT FINAL) + QDOC_PROPERTY(bool boolProp READ boolProp WRITE setBoolProp NOTIFY boolPropChanged RESET resetBoolProp REVISION 1) +#endif + public: using DerivedType = Test::SomeType; using NotTypedef = int; void virtualFun() override; +#ifdef test_properties + QBindable<QString> bindableProp(); + QBindable<QString> someBindableProp(); + const QString &someProp(); + int *getInt(); + bool boolProp(); + +Q_SIGNALS: + void bindablePropChanged(); + Q_REVISION(1) void boolPropChanged(); + +public Q_SLOTS: + void setBindableProp(const QString &s); + void setBoolProp(bool b); + void resetBoolProp(); +#endif }; } // namespace TestQDoc diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp index bf22e44ed..ae1e06eba 100644 --- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp +++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp @@ -75,11 +75,13 @@ private slots: void nestedMacro(); void headerFile(); void usingDirective(); + void properties(); private: QScopedPointer<QTemporaryDir> m_outputDir; QString m_qdoc; QDir m_expectedDir; + QString m_extraParams; bool m_regen = false; void runQDocProcess(const QStringList &arguments); @@ -96,6 +98,16 @@ void tst_generatedOutput::initTestCase() const auto extension = QSysInfo::productType() == "windows" ? ".exe" : ""; m_qdoc = binpath + QLatin1String("/qdoc") + extension; m_expectedDir.setPath(QFINDTESTDATA(".") + QLatin1String("/expected_output")); + + // Resolve the path to the file containing extra parameters + m_extraParams = QFileInfo(QTest::currentAppName()).dir().filePath("qdocincludepaths.inc"); + if (!QFileInfo::exists(m_extraParams)) { + const QString warningMessage = "Cannot locate " + m_extraParams; + QWARN(qPrintable(warningMessage)); + m_extraParams.clear(); + } else { + m_extraParams.insert(0, '@'); + } } void tst_generatedOutput::init() @@ -459,6 +471,21 @@ void tst_generatedOutput::usingDirective() testAndCompare("testdata/configs/usingdirective.qdocconf", "space.html"); } +void tst_generatedOutput::properties() +{ + if (m_extraParams.isEmpty() && !m_regen) { + QSKIP("Required include paths not available"); + return; + } + + testAndCompare("testdata/configs/properties.qdocconf", + "properties/testqdoc-testderived.html " + "properties/testqdoc-testderived-members.html " + "properties/testcpp.index " + "properties-docbook/testqdoc-testderived.xml", + m_extraParams.toLatin1().data()); +} + int main(int argc, char *argv[]) { tst_generatedOutput tc; |