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

18 lines
459 B
TOML

[package]
name = "test_fullapi_rust"
version = "1.0.0"
edition = "2021"
# Standalone crate — the empty table keeps cargo from adopting any workspace it
# finds in a parent directory.
[workspace]
[lib]
crate-type = ["staticlib"]
[dependencies]
serde_json = "1"
# The builder stages its own logos-rust-sdk source next to the crate at build
# time (so a Rust module's flake stays identical to a C++ one).
logos-rust-sdk = { path = "../logos-rust-sdk-src" }