tree: ec36415359b50b028ba48cd59abc91d90604054e
  1. inc/
  2. prj/
  3. qa/
  4. source/
  5. test/
  6. unotypes/
  7. util/
  8. BUILD.bazel
  9. GoogleTest_cppuhelper_ifcontainer.mk
  10. GoogleTest_cppuhelper_unourl.mk
  11. Library_cppuhelper.mk
  12. Makefile
  13. Module_cppuhelper.mk
  14. Package_findsofficepath.mk
  15. Package_inc.mk
  16. Package_unorc.mk
  17. readme.md
main/cppuhelper/readme.md

Notes for cppuhelper (done)

  • cppuhelper3MSC.dll; private type XExceptionThrower.idl via idl_library (cppuhelper_unotypes_idl, rooted at unotypes/ so the generated header path is cppuhelper/detail/XExceptionThrower.hpp)
  • Standalone qa suites: cppuhelper_qa_ifcontainer (5), cppuhelper_qa_unourl, cppuhelper_qa_weak, gathered in :cppuhelper_tests

qa/propertysetmixin — //main/cppuhelper:cppuhelper_qa_propertysetmixin

cppu::PropertySetMixin turns IDL [attribute]s into a com.sun.star.beans.XPropertySet. The only way to exercise it is through a real UNO component that uses the mixin, so the suite ships one — which is why this is the most involved qa/ wiring in the tree so far. Four artifacts, not one:

TargetWhat it is
:cppuhelper_qa_psm_idlqa/propertysetmixin/types.idl.rdb + C++ headers
:cppuhelper_qa_psm_typesmerge_rdb re-emitting just the registry as psm_types.rdb
:qa_propertysetmixin.unothe component DLL (comp_propertysetmixin.cxx)
:cppuhelper_qa_psm_servicesservices_rdb registering that DLL → psm_services.rdb

merge_rdb is there only because idl_library returns its .rdb and a header directory; the merge re-emits the registry alone, under the name the test stages it as.

This is fixture (a) — an in-process bootstrap, no soffice — despite the makefile sitting behind OOO_SUBSEQUENT_TESTS. An earlier note in BUILD.bazel claimed it needed OfficeConnection; it does not. Unlike configmgr/qa/unit it uses the modern .component mechanism, so it does not hit that suite's component_writeInfo wall (see main/configmgr/readme.md).

Environment

The dmake recipe sets UNO_TYPES, UNO_SERVICES, URE_INTERNAL_LIB_DIR and OOO_INBUILD_SHAREDLIB_DIR by hand. The middle two come free from uno_install‘s URE_BOOTSTRAP, but the registries must still be set explicitly, because the test’s own have to be appended to the install's — and rtl::Bootstrap has no append. It resolves the environment before the ini, so these values replace fundamental.ini's and therefore have to repeat them:

UNO_TYPES     = <program>/types.rdb <program>/oovbaapi.rdb <rundir>/psm_types.rdb
UNO_SERVICES  = <program>/services.rdb <rundir>/psm_services.rdb

Drift watch: the leading entries mirror main/staging/fundamental.ini. If that file gains a registry, add it here too. The symptom of forgetting is a service the office normally provides going missing.

OOO_INBUILD_SHAREDLIB_DIR is dmake's COMPONENTPREFIX_INBUILD_NATIVE (solenv/inc/settings.mk) — “the component lives wherever this build put it”. The vnd.sun.star.expand: URI in psm_services.rdb resolves through it to the staged test directory.

Co-locating the component DLL is safe here: the “co-located UNO DLL breaks the bootstrap” landmine applies to cppuhelper3MSC and friends, whose directory cppuhelper resolves from its own module handle. This one is reached only through the services.rdb URI.

3 of 6 red (confirmed 2026-08-05)

testJavaEmpty1 / testJavaEmpty2 / testJavaFull ask for test.cppuhelper.propertysetmixin.JavaSupplier, which lives in the suite's other component — a Java one (JavaSupplier.java + qa_propertysetmixin.java.component + a .uno.jar built by javamaker). That belongs to the Java bucket and is not wired, so those three cannot instantiate their service. UNO exceptions do not derive from std::exception, so gtest reports them as a bare “Unknown C++ exception” — that is the expected shape of the miss, not a crash.

The three C++ cases are the ones that actually exercise PropertySetMixin. Wiring the suite now means the mixin is covered, and the Java half turns green for free once the Java bucket lands — with no change here.

Why the split is itself the evidence. The three test bodies are shared functions (testEmpty1, testEmpty2, testFull), each called once with getCppSupplier() and once with getJavaSupplier(). The identical body passing for C++ and failing for Java isolates the fault to service instantiation rather than to anything in the mixin — and confirms the rest of this wiring works: the UNO_TYPES/UNO_SERVICES override, the private IDL types resolving, and the component DLL loading through the vnd.sun.star.expand: URI.

//main/cppuhelper:cppuhelper_tests is therefore mixed, not a green gate. The suite includes this target deliberately: a red left out of its module's suite is a test that gets forgotten (same convention as //main/sal:sal_tests).

DEF file

qa/propertysetmixin/qa_propertysetmixin.uno.def is the Windows equivalent of solenv/src/component.map (SHL2VERSIONMAP). Two exports, not the usual three: comp_propertysetmixin.cxx defines no component_canUnload, so listing it would be an unresolved-symbol link error.