Skip to content

[TrimmableTypeMap] Add trimmable typemap runtime coverage tests - #11337

Merged
jonathanpeppers merged 1 commit into
mainfrom
dev/simonrozsival/broaden-trimmable-typemap-runtime-coverage
May 13, 2026
Merged

[TrimmableTypeMap] Add trimmable typemap runtime coverage tests#11337
jonathanpeppers merged 1 commit into
mainfrom
dev/simonrozsival/broaden-trimmable-typemap-runtime-coverage

Conversation

@simonrozsival

@simonrozsival simonrozsival commented May 13, 2026

Copy link
Copy Markdown
Member

Summary

Adds focused Mono.Android.NET-Tests coverage for trimmable typemap runtime behavior beyond constructor activation.

Test coverage

JavaToManagedTextWatcherCallback_MarshalsStringAndPrimitiveParameters

Java calls managed ITextWatcher.OnTextChanged(ICharSequence, int, int, int) through the generated interface invoker. This covers callback marshalling with a Java string-like object plus primitive parameters. It is a common Android callback shape and verifies trimmable typemap metadata keeps the managed implementation discoverable.

JavaToManagedClickCallback_MarshalsObjectParameter

Java calls managed View.IOnClickListener.OnClick(View). This covers callback marshalling where the parameter is a framework object that must be materialized as the correct managed peer, protecting a very common listener/event path.

JavaToManagedInvocationHandlerCallback_MarshalsObjectArrayParameter

Java calls managed IInvocationHandler.Invoke(Object, Method, Object[]). This covers object-array marshalling across the Java-to-managed boundary. Arrays are a distinct typemap/marshalling shape from scalar objects and primitives, so this closes a separate runtime gap.

JavaActivatedPeer_DisposeCanAccessThisAndInvokeVirtualMember

A registered managed peer is created through the Java activation path, then disposed while accessing this and invoking a virtual member. This extends coverage beyond constructor activation into lifetime behavior and verifies the trimmable typemap path still supports peer identity, handle use, and virtual dispatch during disposal.

ClosedGenericJavaList_CanWrapJavaCreatedArrayListHandle

A Java-created java.util.ArrayList handle is wrapped as JavaList<string> and used from managed code. This covers closed generic Java collection wrappers under trimmable typemap lookup and protects generic wrapper activation and typed collection operations, which differ from simple non-generic peer activation.

Validation

MSBUILDDISABLENODEREUSE=1 ./dotnet-local.sh build tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj \
    -t:RunTestApp -c Release \
    -p:_AndroidTypeMapImplementation=trimmable \
    -p:UseMonoRuntime=false \
    -p:IncludeCategories=TrimmableTypeMapRuntimeCoverage \
    -nr:false

Result: 5 total, 5 passed.

Full trimmable lane also runs these new tests successfully, but the overall lane remains red due to existing Java.InteropTests.JniPeerMembersTests remap failures unrelated to this fixture.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 13, 2026 12:25
@simonrozsival simonrozsival changed the title Add trimmable typemap runtime coverage tests [TrimmableTypeMap] Add trimmable typemap runtime coverage tests May 13, 2026
@simonrozsival simonrozsival added copilot `copilot-cli` or other AIs were used to author this trimmable-type-map labels May 13, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds new runtime/device tests to the Mono.Android.NET-Tests suite to validate key Java→managed marshalling and activation behaviors when the trimmable typemap runtime path is enabled, extending coverage beyond constructor activation.

Changes:

  • Add a new focused NUnit fixture (TrimmableTypeMapRuntimeCoverageTests) gated by RuntimeFeature.TrimmableTypeMap.
  • Cover common callback shapes (string-like + primitives, framework object parameter, Object[] parameter) plus Java-activated peer disposal behavior and closed-generic JavaList<string> wrapping from a Java-created ArrayList.
  • Wire the new test file into Mono.Android.NET-Tests compilation inputs.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
tests/Mono.Android-Tests/Mono.Android-Tests/Mono.Android.NET-Tests.csproj Includes the new runtime coverage test source file in the test project build.
tests/Mono.Android-Tests/Mono.Android-Tests/Java.Interop/TrimmableTypeMapRuntimeCoverageTests.cs Adds new trimmable-typemap runtime coverage tests for Java→managed callbacks, activation/disposal, and generic collection wrapping.

@jonathanpeppers
jonathanpeppers merged commit aaf497b into main May 13, 2026
6 of 7 checks passed
@jonathanpeppers
jonathanpeppers deleted the dev/simonrozsival/broaden-trimmable-typemap-runtime-coverage branch May 13, 2026 20:12
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

copilot `copilot-cli` or other AIs were used to author this trimmable-type-map

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants