| Index: chromecast/build/tests/cast_test.gni
|
| diff --git a/chromecast/build/tests/cast_test.gni b/chromecast/build/tests/cast_test.gni
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ee79bd044b542b9496c318143277574702b4bcd6
|
| --- /dev/null
|
| +++ b/chromecast/build/tests/cast_test.gni
|
| @@ -0,0 +1,294 @@
|
| +# Copyright 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +# This file contains templates which are meant to simplify building and
|
| +# running test binaries with the Chromecast build infrastructure. See
|
| +# documentation above each template for specific use.
|
| +#
|
| +# Example Usage
|
| +#
|
| +# # This is a standard test() template from //testing/test.gni. This generates
|
| +# # a binary called foo_unittests.
|
| +# test("foo_unittests") {
|
| +# sources = [ "foo_unittest.cc" ]
|
| +#
|
| +# deps = [
|
| +# ":foo",
|
| +# "//testing/gtest",
|
| +# "//testing/gmock",
|
| +# ]
|
| +# }
|
| +#
|
| +# # And another standard test() target, which generates bar_unittests
|
| +# test("bar_unittests") {
|
| +# sources = [ "bar_unittest.cc" ]
|
| +#
|
| +# deps = [ ... ]
|
| +# }
|
| +#
|
| +# # This is an organizational target. This cannot be built directly.
|
| +# cast_test_group("cast_tests") {
|
| +# tests = [
|
| +# ":bar_unittests",
|
| +# "//path/to:foo_unittests",
|
| +# ]
|
| +# }
|
| +#
|
| +# # Here is another cast_test_group target which builds a bunch of other
|
| +# # test binaries, and wants to apply some filters.
|
| +# cast_test_group("external_tests") {
|
| +# tests = [
|
| +# "//path/to/widget:widget_unittests",
|
| +# "//even/more/foo:foo_unittests",
|
| +# ]
|
| +#
|
| +# filters = [
|
| +# "widget_unittests --gtest_filter=-WidgetTest.TestToBeFiltered",
|
| +# ]
|
| +# }
|
| +#
|
| +# # Build this to create build and run lists for bar and foo tests.
|
| +# cast_test_group_list("cast_test_lists") {
|
| +# test_groups = [
|
| +# ":cast_tests",
|
| +# ":external_tests",
|
| +# ]
|
| +#
|
| +# build_list_paths = "$root_out_dir/path/to/test/build_list.txt"
|
| +#
|
| +# run_list_path = "$root_out_dir/path/to/list/run_list.txt"
|
| +# }
|
| +
|
| +import("//testing/test.gni")
|
| +
|
| +# This directory must be the same for every cast_test_group instance.
|
| +_shared_dir = "$root_gen_dir/chromecast/tests"
|
| +
|
| +# A group of test executables. Including test targets in this group makes it
|
| +# possible for Chromecast build infrastructure to build and run them with
|
| +# filters. To accomplish this, it defines two actions, one which generates a
|
| +# build list of all |tests|, and one which generates a run list of all |tests|.
|
| +# It also creates a group with dependencies on each test, to ensure that they
|
| +# are valid targets. Do not build these targets. Build cast_test_group_list
|
| +# instead.
|
| +#
|
| +# Parameters
|
| +# tests (required)
|
| +# A list of test targets included in the assembly. Do not include any
|
| +# other type of target. Each target's name must match the name of the
|
| +# executable it builds.
|
| +#
|
| +# filters (optional)
|
| +# A list of strings of format: "<test_name> --gtest_filter=<filter_logic>"
|
| +# The <test_name> used must correspond to a test in |tests|. Please see
|
| +# //chromecast/tools/build/generate_test_lists.py for more information.
|
| +# If this is not defined, no filters are applied.
|
| +#
|
| +# priority (optional)
|
| +# A string which takes any single-digit integer bewtween "1" and "9",
|
| +# inclusive. Assign this to prioritize filters applied by other
|
| +# cast_test_groups, where a higher number trumps a lower number.
|
| +# If not assigned, priority defaults to "1", the lowest priority.
|
| +#
|
| +template("cast_test_group") {
|
| + assert(defined(invoker.tests),
|
| + "$target_name needs 'tests' listing the test() targets")
|
| +
|
| + # If a set of filters has not been defined, use the empty list.
|
| + _filters = []
|
| + if (defined(invoker.filters)) {
|
| + _filters = invoker.filters
|
| + }
|
| +
|
| + # If priority has not been set, set the priority to "1", the lowest priority.
|
| + _priority = "1"
|
| + if (defined(invoker.priority)) {
|
| + _priority = invoker.priority
|
| + }
|
| +
|
| + # Assert that |_priority| is an integer between "1" and "9", inclusive.
|
| + assert(_priority == "1" || _priority == "2" || _priority == "3" ||
|
| + _priority == "4" || _priority == "5" || _priority == "6" ||
|
| + _priority == "7" || _priority == "8" || _priority == "9")
|
| +
|
| + # This will be the prefix of each output file.
|
| + _output_prefix = "$_shared_dir/$_priority-$target_name"
|
| +
|
| + # Create a list of all the target names. These must correspond to the name of
|
| + # the test binary.
|
| + _test_names = []
|
| + foreach(_test, invoker.tests) {
|
| + _test_names += [ get_label_info(_test, "name") ]
|
| + }
|
| +
|
| + # This action generates a list of target names to build and run. It will be
|
| + # depended upon by the "pack_build" action of the cast_test_group_list
|
| + # instance which depends on this cast_test_group.
|
| + action(target_name + "_create_list") {
|
| + script = "//chromecast/tools/build/generate_test_lists.py"
|
| +
|
| + outputs = [
|
| + "$_output_prefix.tests",
|
| + ]
|
| +
|
| + args = [
|
| + "-o",
|
| + rebase_path("$_output_prefix.tests"),
|
| + "create_list",
|
| + ]
|
| +
|
| + args += _test_names
|
| + }
|
| +
|
| + # This action generates a list of test filters, which will have a priority
|
| + # [1-9]. This will be depended upon by the "pack_run" action of the
|
| + # cast_test_group_list which depends on this group.
|
| + action(target_name + "_filters") {
|
| + script = "//chromecast/tools/build/generate_test_lists.py"
|
| +
|
| + outputs = [
|
| + "$_output_prefix.filters",
|
| + ]
|
| +
|
| + args = [
|
| + "-o",
|
| + rebase_path("$_output_prefix.filters"),
|
| + "create_list",
|
| + ]
|
| +
|
| + args += _filters
|
| + }
|
| +
|
| + # This target allows us to reference each test as a fully-qualified GN path,
|
| + # to ensure that each path is correct. If a test does not exist, gives a
|
| + # helpful error message at the line it is included. Do not build this target
|
| + # directly.
|
| + group(target_name + "_build_tests") {
|
| + testonly = true
|
| + deps = invoker.tests
|
| + }
|
| +}
|
| +
|
| +# This template runs a script which generates lists of test to be built and run.
|
| +#
|
| +# Parameters
|
| +# test_groups (required)
|
| +# The cast_test_group() targets for which this binary is to be created.
|
| +# The targets referenced here must be cast_test_group targets, or buiding
|
| +# this target will fail.
|
| +#
|
| +# build_list_path (required)
|
| +# The absolute filepath of the output file which will hold the list of
|
| +# tests to be built.
|
| +#
|
| +# run_list_path (required)
|
| +# The absolute filepath of the output file which will hold the list of
|
| +# tests to be run, each with filters assigned by cast_groups.
|
| +#
|
| +# additional_options (optional)
|
| +# Options which are passed to the python script, and applied to every test
|
| +#
|
| +# build_tests (optional)
|
| +# Set this to true to build all of the tests included in |test_groups|.
|
| +# Defaults to false. Note that if this is set to true, the test targets
|
| +# will be built after all the lists are generated.
|
| +#
|
| +template("cast_test_group_list") {
|
| + assert(defined(invoker.test_groups), "$target_name needs 'test_groups'")
|
| + assert(defined(invoker.run_list_path), "$target_name needs 'run_list_path'")
|
| + assert(defined(invoker.build_list_path),
|
| + "$target_name needs 'build_list_path'")
|
| +
|
| + _pack_build_action = target_name + "_pack_build"
|
| +
|
| + # Generate a list of the "create_list" actions for each group. These will be
|
| + # depended upon to ensure they're run before the "pack_build" step.
|
| + _build_actions = []
|
| + foreach(_test_group, invoker.test_groups) {
|
| + _build_actions += [ _test_group + "_create_list" ]
|
| + }
|
| +
|
| + # Generate a list of the "filter" actions for each group. These will be
|
| + # depended upon to ensure they're run before the "pack_run" step.
|
| + _filter_actions = []
|
| + foreach(_test_group, invoker.test_groups) {
|
| + _filter_actions += [ _test_group + "_filters" ]
|
| + }
|
| +
|
| + # Generate a list of the groups of targets, so that they can be depended upon
|
| + # by the "pack_run" step and built when this target is invoked.
|
| + if (defined(invoker.build_tests) && invoker.build_tests) {
|
| + _build_tests = []
|
| + foreach(_test_group, invoker.test_groups) {
|
| + _build_tests += [ _test_group + "_build_tests" ]
|
| + }
|
| + }
|
| +
|
| + # The "pack_build" step. This step looks in the common folder for files with
|
| + # the ".tests" extenstion, collecting these and packing them into an output
|
| + # file. The steps which create these files are depeneded upon, to ensure
|
| + # they're run before this step. Do not invoke this target directly.
|
| + action(_pack_build_action) {
|
| + script = "//chromecast/tools/build/generate_test_lists.py"
|
| +
|
| + outputs = [
|
| + invoker.build_list_path,
|
| + ]
|
| +
|
| + args = [
|
| + "-o",
|
| + rebase_path(invoker.build_list_path),
|
| + "-t",
|
| + rebase_path(_shared_dir),
|
| + "pack_build",
|
| + ]
|
| +
|
| + deps = _build_actions
|
| + }
|
| +
|
| + # The "pack_run" step. This step looks in the common folder for files with
|
| + # the ".tests" and ".filters" extensions, creating a script of tests to run,
|
| + # with filters and priorities. See
|
| + # //chromecast/tools/build/generate_test_lists.py for more information.
|
| + # Note that this target takes the name of the invoker, such that invoking the
|
| + # target runs this step.
|
| + action(target_name) {
|
| + testonly = true
|
| +
|
| + script = "//chromecast/tools/build/generate_test_lists.py"
|
| +
|
| + outputs = [
|
| + invoker.run_list_path,
|
| + ]
|
| +
|
| + args = [
|
| + "-o",
|
| + rebase_path(invoker.run_list_path),
|
| + "-t",
|
| + rebase_path(_shared_dir),
|
| + "pack_run",
|
| + ]
|
| +
|
| + # Add addtional options if they have been set.
|
| + if (defined(invoker.additional_options)) {
|
| + args += [ "-a" ]
|
| + args += invoker.additional_options
|
| + }
|
| +
|
| + # Depend first on the "pack_build" step, so that the build lists are created.
|
| + deps = [
|
| + ":$_pack_build_action",
|
| + ]
|
| +
|
| + # Next, depend on the filter steps, such that they are created before this
|
| + # script executes.
|
| + deps += _filter_actions
|
| +
|
| + # If |build_tests| has been set to true, depend on the testing targets so
|
| + # that the tests are built.
|
| + if (defined(_build_tests)) {
|
| + deps += _build_tests
|
| + }
|
| + }
|
| +}
|
|
|