# 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.
#
# WARNING: This file was machine-generated from previous json files and
# will eventually be deleted.

group("re2") {
  testonly = true
  public_deps = [
    "//third_party/re2:re2_tests",
  ]
}

group("ledger") {
  testonly = true
  public_deps = [
    "//peridot/packages/prod:cloud_provider_firestore",
    "//peridot/packages/prod:ledger",
    "//src/ledger:ledger_tests",
    "//src/ledger/bin:ledger_fuzzers",
    "//src/ledger/bin/testing/ledger_test_instance_provider:ledger_test_instance_provider",
    "//src/ledger/cloud_provider_in_memory/bin",
    "//src/ledger/cloud_provider_memory_diff",
    "//src/ledger/cloud_provider_memory_diff:cloud_provider_memory_diff_tests",
  ]
}

group("voila") {
  testonly = true
  public_deps = [
    "//peridot/bin/voila:voila_tests",
  ]
}

group("all") {
  testonly = true
  public_deps = [
    "//garnet/packages/testing:run_test_component",
    "//peridot/packages/tests:bup",
    "//peridot/packages/tests:ledger",
    "//peridot/packages/tests:leveldb",
    "//peridot/packages/tests:maxwell_integration_tests",
    "//peridot/packages/tests:maxwell_unittests",
    "//peridot/packages/tests:modular_integration_tests",
    "//peridot/packages/tests:modular_unittests",
    "//peridot/packages/tests:peridot_tests",
    "//peridot/packages/tests:re2",
    "//peridot/packages/tests:voila",
  ]
}

group("maxwell_unittests") {
  testonly = true
  public_deps = [
    "//peridot/bin/context_engine:context_engine_unittests",
    "//peridot/bin/discovermgr:discovermgr_tests",
    "//peridot/bin/module_resolver:module_resolver_unittests",
    "//peridot/bin/suggestion_engine:suggestion_engine_unittests",
  ]
}

group("modular_test_harness") {
  testonly = true
  public_deps = [
    "//garnet/packages/testing:environment_delegating_runner",
    "//peridot/bin/modular_test_harness",
    "//peridot/public/lib/modular_test_harness/cpp:test_harness_fixture_test",
  ]
}

group("modular_integration_tests") {
  testonly = true
  public_deps = [
    ":modular_test_harness",
    "//garnet/packages/prod:test_runner",
    "//peridot/bin/basemgr:auto_login_base_shell_test",
    "//peridot/packages/prod:integration_testing",
    "//peridot/tests:modular_tests",
    "//peridot/tests/agent_services_tests:agent_services_tests",
    "//peridot/tests/clipboard:clipboard_test_module",
    "//peridot/tests/common:common_active_module",
    "//peridot/tests/common:common_null_module",
    "//peridot/tests/component_context:component_context_test_module",
    "//peridot/tests/component_context:component_context_test_one_agent",
    "//peridot/tests/component_context:component_context_test_two_agent",
    "//peridot/tests/component_context:component_context_test_unstoppable_agent",
    "//peridot/tests/embed_shell:embed_shell_test_child_module",
    "//peridot/tests/embed_shell:embed_shell_test_parent_module",
    "//peridot/tests/embed_shell:embed_shell_test_session_shell",
    "//peridot/tests/embed_shell:embed_shell_test_story_shell",
    "//peridot/tests/intents:intent_test_child_module",
    "//peridot/tests/intents:intent_test_parent_module",
    "//peridot/tests/modular_config:test_config",
    "//peridot/tests/modular_login_tests:modular_login_tests",
    "//peridot/tests/module_context:module_context_test_entity_module",
    "//peridot/tests/module_context:module_context_test_module",
    "//peridot/tests/module_context:module_context_test_session_shell",
    "//peridot/tests/parent_child:parent_child_test_child_module1",
    "//peridot/tests/parent_child:parent_child_test_child_module2",
    "//peridot/tests/parent_child:parent_child_test_parent_module",
    "//peridot/tests/queue_persistence:queue_persistence_test_agent",
    "//peridot/tests/queue_persistence:queue_persistence_test_module",
    "//peridot/tests/session_shell:session_shell_test_session_shell",
    "//peridot/tests/sessionctl:sessionctl_integration_tests",
    "//peridot/tests/story_shell:story_shell_test_session_shell",
    "//peridot/tests/story_shell:story_shell_test_story_shell",
    "//peridot/tests/story_shell_factory:story_shell_factory_test_session_shell",
    "//peridot/tests/suggestion:suggestion_test_module",
    "//peridot/tests/suggestion:suggestion_test_session_shell",
    "//peridot/tests/trigger:trigger_test_agent",
    "//peridot/tests/trigger:trigger_test_module",
    "//peridot/tests/trigger:trigger_test_session_shell",
  ]
}

group("leveldb") {
  testonly = true
  public_deps = [
    "//third_party/leveldb:leveldb_benchmarks",
    "//third_party/leveldb:leveldb_tests",
  ]
}

group("bup") {
  testonly = true
  public_deps = [
    "//src/ledger/third_party/bup:bup_tests",
  ]
}

group("modular_unittests") {
  testonly = true
  public_deps = [
    "//peridot/bin/agents/clipboard:clipboard_unittests",
    "//peridot/bin/basemgr:basemgr_unittests",
    "//peridot/bin/module_resolver_rs:module_resolver_rs_tests",
    "//peridot/bin/sessionctl:sessionctl_unittests",
    "//peridot/bin/sessionmgr/agent_runner:agent_runner_unittests",
    "//peridot/bin/sessionmgr/entity_provider_runner:entity_provider_runner_unittests",
    "//peridot/bin/sessionmgr/puppet_master:puppet_master_unittests",
    "//peridot/bin/sessionmgr/storage:storage_unittests",
    "//peridot/bin/sessionmgr/story/model:story_model_unittests",
    "//peridot/bin/sessionmgr/story/systems:story_systems_unittests",
    "//peridot/bin/sessionmgr/story_runner:story_runner_unittests",
    "//peridot/lib/sequential_futures:sequential_futures_tests",
    "//peridot/packages/prod:ledger",
  ]
}

group("maxwell_integration_tests") {
  testonly = true
  public_deps = [
    "//peridot/tests/maxwell_integration:maxwell_integration_tests",
  ]
}

group("peridot_tests") {
  testonly = true
  public_deps = [
    "//peridot:peridot_tests",
  ]
}
