Files
Dario LipicarandClaude Opus 4.8 a8675f2e57 feat: full_api test chain (providers, proxies, UI) + fullapi-tests check (#24)
* feat: full_api test chain — providers, proxies, and a UI plugin

Adds a hermetic test chain that exercises the entire supported type surface
(every method param/return + event param type) end to end, replacing the
network-dependent cross-version checks:

- test_fullapi_cpp        universal C++ provider (reference impl of full_api)
- test_fullapi_rust       Rust cdylib provider, same contract (cross-language parity)
- test_fullapi_proxy      universal C++ consumer/proxy via interface dependency
                          (forwards every method, re-emits every event)
- test_fullapi_proxy_rust Rust mirror of the proxy
- test_fullapi_ui         universal ui_qml plugin consuming full_api via an
                          interface dependency; drives every method type + all
                          events, surfaced to QML for a headless UI doctest

All five build; the core chain (both providers + both proxies, incl. cross-
language method calls and event round-trips) is proven at runtime under
logoscore, and the UI plugin is proven in Basecamp (method calls + typed event
delivery). Requires the cpp-sdk/rust-sdk codegen fixes (bstr/composite type
handling) re-pinned through module-builder.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(fullapi-ui): verify echoAny too; document the typed-scalar-array gap

The UI backend now also verifies echoAny (any round-trips) in the ALL_OK token,
and documents that typed-scalar arrays ([int]/[uint]/[float64]/[bool], and [any]
carrying numbers) still round-trip empty over the ui-host QtRO transport — a
Qt-path marshaling gap partially addressed by logos-protocol's container int-
preservation fix but not fully resolved. They are exercised but kept out of the
token so the basecamp UI doctest stays green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(fullapi): add fullapi-tests check proving every array type round-trips

Adds a proxy probeArrays() method that round-trips one array of EVERY array type
([int]/[uint]/[float64]/[bool]/[tstr]/[any]) through the bound provider over the
lp path, plus a 'fullapi' group in run_tests.sh and a checks.fullapi-tests
derivation. This is CLI-observable (logoscore can't pass a list arg directly)
and proves both the C++ and Rust providers decode every array type identically.

Result: 5/5 green — probeArrays returns intList=3 uintList=2 doubleList=2
boolList=2 stringList=2 anyList=3 against both providers, plus scalar forwarding
and an event round-trip through the proxy. This isolates the earlier UI
[int]-empties symptom to the Qt-path host-side qvariantToNlohmann conversion
(fixed in logos-protocol), NOT the provider decode.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(fullapi): package + exercise the Rust proxy in fullapi-tests

Copilot review: the fullapi-tests modulesDir aggregated only the C++
provider/proxy installs, so test_fullapi_proxy_rust wasn't built/packaged by the
check. Add it to modulesDir and load + exercise it in the fullapi group (echoInt
forwarding + intEvent round-trip). 7/7 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: re-lock module-builder (brings the full_api SDK fixes)

Bumps logos-module-builder to 206c364 (#150), which re-pins cpp-sdk/qt-sdk/
rust-sdk/protocol to the merged full_api fixes. The five full_api modules now
build with no SDK overrides; checks.fullapi-tests is 7/7 green against master.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 17:31:25 -03:00

17 lines
679 B
CMake

cmake_minimum_required(VERSION 3.14)
project(TestFullapiRustPlugin LANGUAGES CXX)
if(DEFINED ENV{LOGOS_MODULE_BUILDER_ROOT})
include($ENV{LOGOS_MODULE_BUILDER_ROOT}/cmake/LogosModule.cmake)
else()
message(FATAL_ERROR "LOGOS_MODULE_BUILDER_ROOT is not set.")
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/metadata.json
${CMAKE_CURRENT_BINARY_DIR}/metadata.json COPYONLY)
# Rust cdylib module: the `codegen.rust` block in metadata.json makes the builder
# generate rust-lib/generated/provider_gen.rs from the .lidl and compile the
# crate to a static archive, which LogosModule.cmake links into the plugin shell.
logos_module(NAME test_fullapi_rust)