# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# We follow these conventions for the organization of the sources, build rules,
# and packages here:
#
# 1. All the binaries used in tests are run through a basemgr invocation
#    configured in modular_tests.json. It usually does not ever make sense to
#    run a test component binary directly, especially not as a test. Therefore,
#    all binaries are deployed in their own packages, so that they are not run
#    automatically by roller scripts. Instead, only the run_modular_tests.sh
#    script is present in /system/test/, which then invokes the test runner,
#    which in turn invokes all the test component binaries in the right
#    configuration.
#
# 2. The component binary as well as its package is named with a prefix that
#    tells the test it belongs to, followed by "_test", optionally followed by a
#    name component indicating its function if there are multiple components of
#    the same type in a single test, followed a suffix indicating the component
#    type. This way, all components belonging to the same test are
#    lexicographically sorted together.
#
# 3. Common components shared between tests are named after their function
#    followed by a suffix indicating the component type.
#
# 4. The suffix that indicates the component type (i.e. the primary service
#    provided by the component) is:
#
#    - _module -- Module
#    - _agent -- Agent
#    - _base_shell -- BaseShell
#    - _story_shell -- StoryShell
#    - _service -- FIDL interfaces
#
# 5. The main sources of the components are named like the binaries they create.
#
#
# HOW TO ADD A NEW INTEGRATION TEST
#
# 1. Add a new subdirectory with rules for the test components (session shells,
#    modules, agents). Define all test components as executable_package()s.
#
# 2. Add the newly defined packages for all test components to
#    //peridot/packages/tests/modular.
#
# 3. Add an entry for the test to modular_tests.json.

import("//build/package.gni")
import("//build/testing/environments.gni")

group("tests") {
  testonly = true
  deps = [
    "agent_services_tests",
    "benchmarks",
    "clipboard",
    "component_context",
    "modular_config",
    "modular_login_tests",
    "sessionctl",
    "trigger",
  ]
}

package("modular_tests") {
  testonly = true

  tests = [
    {
      name = rebase_path("run_modular_tests.sh")
      dest = "run_modular_tests.sh"
      environments = basic_envs
    },
  ]

  resources = [
    {
      path = rebase_path("modular_tests.json")
      dest = "modular_tests.json"
    },
  ]
}
