office-gobmx/testtools
Stephan Bergmann b512ce255f Make upcasting css::uno::Reference ctor require complete types
The main reason for the "home-grown" UpCast introduced with
904b3d1fce "Up-cast conversion constructor for
css::uno::Reference" in 2013 was probably that we could not yet rely on C++11
std::is_base_of back then.  A (welcome) side effect was that the derived class
could be incomplete.

However, specializations of UpCast relying on whether or not T2 is incomplete
are obviously an ODR violation if the type is incomplete in some TUs and
complete (and derived from T1) in others.  And even if UpCast had internal
linkage, it would still be brittle that its behavior depends on the completeness
of T2 at the point of the template's instantiation, and not necessarily at the
point of use.

That means we should better base that ctor on std::is_base_of (which we can do
now since 39a1edd6fe "Make css::uno::Reference
upcast ctor LIBO_INTERNAL_ONLY"), which causes a compilation error at least on
Clang and GCC if the completeness requirements are not met.  This change fixes
all the cases where types need to be complete now, plus any resulting
loplugin:referencecasting warnings ("the source reference is already a subtype
of the destination reference").

Change-Id: Ieb9e3552e90adbf2c5a5af933dcb872e20661a2f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92950
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-04-27 07:19:30 +02:00
..
com/sun/star/comp/bridge
qa
source Make upcasting css::uno::Reference ctor require complete types 2020-04-27 07:19:30 +02:00
CustomTarget_bridgetest.mk
CustomTarget_bridgetest_climaker.mk
CustomTarget_bridgetest_javamaker.mk
CustomTarget_uno_test.mk
InternalUnoApi_bridgetest.mk
InternalUnoApi_performance.mk
Jar_testComponent.mk
Library_bridgetest-common.mk
Library_bridgetest.mk
Library_constructors.mk
Library_cppobj.mk
Makefile
Module_testtools.mk
Rdb_uno_services.mk
README

Testing tools

== How to check compatibility between compilers ==

Since the interfaces used in the cpp bridgetest are not changed often
one can just build the cppobj.uno.dll and the constructors.uno.dll
(testtools/source/bridgetest) in an
old environment and then use them in the new environment. That is the files
are copied into the testtools/wntmsciXX.pro folder which corresponds to the
new environment.

On Windows this test will typically fail because the tests use the
cppu::getCaughtException function, which only works when all libs are build
using the same runtime.

This part of the test can switched off. To do this go into the
testtools/source/bridgetest folder and call
dmake compcheck=1

This will add a new compiler define (-DCOMPCHECK) and will be used in the
bridgetest.cxx to switch off the code which uses the getCaughtException function.
However, there is still a test which causes the test component to throw
and IllegalArgumentException. This still works.


== Using source/bridgetest for stress testing ==

Start a modified bridgetest_server (with the final "--singleaccept" argument
removed from the uno executable call) or a modified bridgetest_javaserver (with
the final "singleaccept" argument replaced with "multi" in the java executable
call), then start a modified bridgetest_client (with a final "stress" argument
added to the uno executable call).  The client will continuously establish
connections to the server which are immediately destroyed again.  The test will
run forever, unless an error occurs.