This tutorial builds on the Compiling FIDL tutorial. For the full set of FIDL tutorials, refer to the overview
This tutorial covers how to include the HLCPP FIDL bindings into code you write by creating a unit test that will serve as a “playground” for exploring the the HLCPP bindings.
This document covers how to complete the following tasks:
If you'd like to follow along and write the code yourself, feel free to delete the example code:
rm -r examples/fidl/hlcpp/unittests/*
Add a gtest stub to examples/fidl/hlcpp/unittests/main.cc
:
#include <gtest/gtest.h> namespace { } // namespace
Next, create a target that will make it possible to run the test on host, by defining a test
for it, then depending on it through the $host_toolchain
.
This is done by adding the following to examples/fidl/hlcpp/unittests/BUILD.gn
.
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/BUILD.gn" region_tag="first" %} test("example-cpp-host-test") { sources = [ "main.cc" ] deps = [ "//third_party/googletest:gtest_main" ] }
You can now run the empty test suite:
fx set core.x64 --with //examples/fidl/hlcpp/unittests fx test -vo example-cpp-host-test
You should see test output indicating that zero tests have run, since no tests have been added yet.
Add a dependency on the HLCPP bindings by referencing the FIDL target directly. The new test
target should look like:
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/BUILD.gn" region_tag="test" %}
(Optional) To view the newly generated bindings:
fx build
.out/default/fidling/gen/examples/fidl/fuchsia.examples/fuchsia/examples
. You may need to change out/default
if you have set a different build output directory. You can check your build output directory by running cat .fx-build-dir
.For more information on how to find generated bindings code, see Viewing Generated Bindings Code.
Include the bindings, by adding the following include statement to the top of examples/fidl/hlcpp/unittests/main.cc
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/main.cc" region_tag="include" %}
Now, feel free to write some tests and play around with the bindings by referring to the generated code or the HLCPP Bindings Reference.
Here's some example code to get started. You can add this inside the anonymous namespace in main.cc
:
{%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/main.cc" region_tag="bits" %} {%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/main.cc" region_tag="enums" %} {%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/main.cc" region_tag="structs" %} {%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/main.cc" region_tag="unions" %} {%includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/hlcpp/unittests/main.cc" region_tag="tables" %}
Rebuild and rerun the tests by running:
fx test -vo example-cpp-host-test