# Copyright 2019 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.

group("src") {
  testonly = true
  deps = [
    ":tests",
    "camera",
    "cast",
    "chromium",
    "cobalt",
    "connectivity",
    "dart",
    "developer",
    "devices",
    "diagnostics",
    "experiences",
    "factory",
    "flutter",
    "fonts",
    "graphics",
    "identity",
    "intl",
    "ledger",
    "lib",
    "media",
    "modular",
    "power",
    "recovery",
    "security",
    "session",
    "speech",
    "storage",
    "sys",
    "testing",
    "ui",
    "virtualization",
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":zircon_host_tests",
    "bringup:tests",
    "camera:tests",
    "chromium:tests",
    "cobalt:tests",
    "connectivity:tests",
    "developer:tests",
    "devices:tests",
    "diagnostics:tests",
    "experiences:tests",
    "factory:tests",
    "fonts:tests",
    "graphics:tests",
    "hwinfo:tests",
    "identity:tests",
    "intl:tests",
    "ledger:tests",
    "lib:tests",
    "media:tests",
    "modular:tests",
    "power:tests",
    "recovery:tests",
    "security:tests",
    "session:tests",
    "speech:tests",
    "storage:tests",
    "sys:tests",
    "testing:tests",
    "tests",
    "ui:tests",
    "virtualization:tests",
  ]
}

group("zircon_host_tests") {
  testonly = true
  deps = [
    "//build/unification/tests:host",
    "//zircon/kernel/lib/heap/cmpctmalloc/tests($host_toolchain)",
  ]
}

group("host_tests") {
  testonly = true
  public_deps = [ "//src/ledger:host_tests" ]
}
