Bartek Pacia 79126777a4 Add support for exposing accessibility identifier as resource-id on Android (flutter/engine#47961)
Accompanying framework PR: https://github.com/flutter/flutter/pull/138331

This PR implements support for exposing `SemanticsProperties.identifier` on Android as `resource-id`. Mainly targeted at https://github.com/flutter/flutter/issues/17988. Would also fix https://github.com/flutter/flutter/issues/issues/137735 but it was marked as duplicate. Anyway, there's a lot of context in that issue.

This PR requires changing the `SemanticsUpdateBuilder` interface (defined in engine) that framework depends on, so it requires introducing a temporary API ([see question I asked on Discord](https://discord.com/channels/608014603317936148/608018585025118217/1174845658033819729) to learn more about this approach).

Steps:
**part 1: [engine] add `SemanticsUpdateBuilderNew`** <-- we are here
part 2: [flutter] use `SemanticsUpdateBuilderNew`
part 3: [engine] update `SemanticsUpdateBuilder` to be the same as `SemanticsUpdateBuilderNew`*
part 4: [flutter] use (now updated) `SemanticsUpdateBuilder` again.
part 5: [engine] remove `SemanticsBuilderNew`

I'd like to do these changes first, and only then continue with [the proper framework PR](https://github.com/flutter/flutter/pull/138331).

*More specifically: update `SemanticsUpdateBuilder.updateNode()` to be the same as `SemanticsUpdateBuilderNew.updateNode()`. Number of arguments that function takes is the only change.

[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
2023-12-04 19:27:18 +00:00
..

Unit testing Java code

All Java code in the engine should now be able to be tested with Robolectric 4.10.3 and JUnit 4. The test suite has been added after the bulk of the Java code was first written, so most of these classes do not have existing tests. Ideally code after this point should be tested, either with unit tests here or with integration tests in other repos.

Adding a new test

  1. Create a file under test/ matching the path and name of the class under test. For example, shell/platform/android/io/flutter/util/Preconditions.java -> shell/platform/android/**test**/io/flutter/util/Preconditions**Test**.java.
  2. Add your file to the sources of the robolectric_tests build target in /shell/platform/android/BUILD.gn. This compiles the test class into the test jar.
  3. Import your test class and add it to the @SuiteClasses annotation in FlutterTestSuite.java. This makes sure the test is actually executed at run time.
  4. Write your test.
  5. Build and run with testing/run_tests.py [--type=java] [--java-filter=<test_class_name>].

Note that testing/run_tests.py does not build the engine binaries; instead they should be built prior to running this command and also when the source files change. See Compiling the engine for details on how to do so.

Q&A

My new test won't run. There's a "ClassNotFoundException".

See Updating Embedding Dependencies.

My new test won't compile. It can't find one of my imports.

See Updating Embedding Dependencies.