Chinmay Garde cf0b9e869c A native Android unit-testing harness. (flutter/engine#51479)
Sets up rules to create an APK that is comprised of solely native code. Existing executable targets (like GTests) can then use this to run on Android devices while having access to activities, windows, etc.. This allows for broader test coverage. Basically, anything that needed an ANativeWindow could only be tested in an integration test.

Executables that need access to the native activity must provide an implementation of `NativeActivityMain` that returns a custom subclass of `flutter::NativeActivity`. The `native_activity_apk` reads like an `executable` or `shared_library` target. Just one that packages that executable in an APK.

The APK is built using the Android Tools and does not use Gradle. Creating a new APK after invalidating some code takes ~200ms on my machine. The edit, compile, run cycle for only a tiny bit worse than testing on the host.

Builds on top of this new infrastructure to create a `GTestActivity` that runs an existing test suites. This works really well except the GTest suite logs to `STDOUT` whereas the engine logs to `logcat`. To quickly work around this, a custom test status listener has been wired up. This only displays the test results to logcat today but a similar mechanism can be used to talk to the test runner in the host. I will wire this up in an upcoming patch as there is no hooks into this from CI right now.

Creates an APK variant of the `impeller_toolkit_android_unittests` harness.
2024-03-18 22:32:08 +00:00
..

Engine Testing

This directory contains the infrastructure for running tests on the engine, which are most often run by Flutter's continuous integration (CI) systems.

The tests themselves are located in other directories, closer to the source for each platform, language, and variant. For instance, macOS engine unit tests written in objective C are located in the same directory as the source files, but with a Test suffix added (e.g. "FlutterEngineTest.mm" holds the tests for "FlutterEngine.mm", and they are located in the same directory).

Testing the Engine locally

If you are working on the engine, you will want to be able to run tests locally.

In order to learn the details of how do that, please consult the Flutter Wiki page on the subject.