Information about testability:
You can specify packages in these ways:
Everything:
--with //bundles:tests
Individually, if you want to build less packages:
--with //src/ui:tests --with //src/ui/lib/escher:escher_tests
Tests are automatically run before submission by trybots for every change in Fuchsia. See the fuchsia-x64-release
and fuchsia-x64-asan
bots on https://ci.chromium.org/p/fuchsia/builders.
Most of the Scenic and Escher tests are written in Googletest. If you need to add test suites or test cases, you need to create test source files and add them as a source of the test executables in corresponding BUILD.gn
files.
To add a test package to CQ, you need to:
To add a new test package to CQ, you need to create a test component including source files, metadata and BUILD.gn file. See Test component. You can include multiple test executables in one single test package, and all of them will be executed if you run fx test <test_package>
on host.
Examples of test packages:
To ensure the test is run on CQ, it requires an unbroken chain of dependencies that roll up to your fx set
command's available packages (expandable using the --with
flag), typically going through the all target of //bundles/packages/tests:all
.
You need to make sure that there is a dependency chain from //bundles/packages/tests:all
to your test package. For more information, see Testing FAQ documentation.
To ensure that the test is run on CQ, you also need to specify a test environment for each test executable in the package inside the test's BUILD.gn
file.
Generally the environment is set to environments = basic_envs
. This specifies the test should be run on both QEMU (for arm64), FEMU and NUC (for x64), and using both debug and release builds. For running on other environments, refer to Test environments.
Reference the test package transitively. For example, the packages above are referenced by //bundles/packages/tests:all
through //bundles/packages/tests:scenic
.
To run tests locally during development:
Some of these tests require the test Scenic to connect to the real display controller.
Run fx shell killall scenic.cmx
to kill an active instance of Scenic.
Run all Scenic tests:
From host workstation, ensure fx serve
is running, then:
fx test \ escher_tests \ allocation_unittests \ display_unittests \ flatland_unittests \ flatland_buffers_unittests \ flatland_display_compositor_pixeltests \ flatland_display_compositor_pixeltests_with_fake_display \ flatland_engine_unittests \ flatland_renderer_unittests \ gfx_apptests \ gfx_pixeltests \ gfx_swapchain_tests \ gfx_unittests \ gfx_util_unittests \ gfx_viewstate_apptests \ input_unittests \ scenic_unittests \ scheduling_unittests
Or from Fuchsia target device:
runtests --names gfx_apptests,gfx_unittests,escher_unittests,input_unittests,a11y_manager_apptests
Run a specific test binary:
From host workstation, ensure fx serve
is running, then use the following command to run the gfx_unittests
test component:
fx test gfx_unittests
Or from Fuchsia target device:
runtests --names gfx_unittests
Run a single test within a component:
From host workstation, ensure fx serve
is running, then:
fx test gfx_unittests -- --gtest_filter=HostImageTest.FindResource
Or from Fuchsia target device:
runtests --names gfx_unittests -- --gtest_filter=HostImageTest.FindResource
See more documentation about the glob pattern for the filter arg.
Run a specific component
From your host workstation:
fx test fuchsia-pkg://fuchsia.com/gfx_unittests#meta/gfx_unittests.cmx
Note: gfx_unittests.cmx
can be swapped for any test component . There is also fuzzy matching!
Pixel tests
If you get an error connecting to a display controller, first kill all UI services.
From your host workstation, run:
fx shell "killall basemgr.cmx; killall root_presenter.cmx; killall scenic.cmx; killall tiles.cmx; killall present_view"
Then run the pixel tests:
fx test fuchsia-pkg://fuchsia.com/gfx_pixeltests#meta/gfx_pixeltests.cmx
Alternatively, run:
fx test gfx_pixeltests
fx test --host
runs all host tests, but you probably only want to run Escher tests.escher_unittests
locally on Linux: follow instructions in Escher documentation.After making big Scenic changes, you may want to do manual UI testing by running some example applications to see if there is any regression.
There are some examples available:
ViewProvider
and creating a UI using Flatland commands.//src/ui/examples/flatland-view-provider
//src/ui/examples/flatland-view-provider
fuchsia-pkg://fuchsia.com/flatland-examples#meta/flatland-view-provider.cm
simplest_app
BaseView
. It tracks input callbacks from Scenic and draws elements using scenic::Material
.//src/ui/examples/simplest_app
//src/ui/examples/simplest_app
fuchsia-pkg://fuchsia.com/simplest_app#meta/simplest_app.cmx
yuv_to_image_pipe
//src/ui/examples/yuv_to_image_pipe
//src/ui/examples/yuv_to_image_pipe
fuchsia-pkg://fuchsia.com/yuv_to_image_pipe#meta/yuv_to_image_pipe.cmx
To run these applications, you need to include the following dependency in your fx set
configuration:
fx set workstation.x64 --with "//src/ui/examples"
You can launch the stories (modules) in any shell you are in:
In Ermine shell, you can run modules by typing in the package name (e.g. flatland-view-provider
) in the [ASK] bar to run modules.
Or, use command ffx session add <component_name>
command to launch a component in the shell.
From your host workstation, run:
fx session add "fuchsia-pkg://fuchsia.com/flatland_examples#meta/flatland-view-provider.cm"
to present the View
provided in flatland-view-provider
component.