This tutorial builds on the Compiling FIDL tutorial. For more information on other FIDL tutorials, see the Overview.
This tutorial details how to include the HLCPP FIDL bindings into your code by creating a unit test that you can use as a “playground” for exploring the HLCPP bindings.
This document covers how to complete the following tasks:
The example code is located in your Fuchsia checkout in //examples/fidl/hlcpp/unittests/
. If you want to write all the code as you follow this tutorial, you can remove 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
Define a test
and then create a dependency on the test through the $host_toolchain
. To do this, add 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" ] }
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
, where the generated files are located. You may need to change out/default
if you have set a different build output directory. You can check your build output directory with cat .fx-build-dir
.For more information on how to find generated bindings code, see Viewing generated bindings code.
To include the bindings, add 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" %}
You can now write some tests by referring to the generated code. For more information on the bindings, see HLCPP Bindings Reference.
To get started, you can also use some example code. 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" %}
To rebuild and rerun the tests, run:
fx test -vo example-cpp-host-test