# 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("dart") {
  testonly = true
  public_deps = [
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_aot",
    "//topaz/runtime/dart_runner/examples/goodbye_dart:goodbye_dart_jit",
    "//topaz/runtime/dart_runner/examples/hello_app_dart:hello_app_dart_aot",
    "//topaz/runtime/dart_runner/examples/hello_app_dart:hello_app_dart_jit",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_aot",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_aot_product",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_debug",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_jit",
    "//topaz/runtime/dart_runner/examples/hello_dart:hello_dart_jit_product",
  ]
}

group("all") {
  testonly = true
  public_deps = [
    "//topaz/packages/examples:dart",
    "//topaz/packages/examples:dart_sdk",
    "//topaz/packages/examples:fidl",
    "//topaz/packages/examples:flutter_gallery",
    "//topaz/packages/examples:inspect",
    "//topaz/packages/examples:misc",
    "//topaz/packages/examples:modular",
    "//topaz/packages/examples:mondrian",
    "//topaz/packages/examples:noodles",
    "//topaz/packages/examples:simple_flutter",
    "//topaz/packages/examples:spinning_cube",
    "//topaz/packages/examples:tests",
    "//topaz/packages/examples:ui",
    "//topaz/packages/examples:webview",
  ]
}

group("dart_sdk") {
  testonly = true
  public_deps = [
    "//topaz/public/dart/fuchsia_services/examples/mind_reader/bin:mind_reader_dart",
  ]
}

group("fidl") {
  testonly = true
  public_deps = [
    "//topaz/examples/fidl/compiler",
    "//topaz/examples/fidl/echo_client_async_dart",
    "//topaz/examples/fidl/echo_server_async_dart",
  ]
}

group("tests") {
  testonly = true
  public_deps = [
    "//peridot/packages:peridot",

    # modular_test_harness is a dep for any test that uses test_harness_fixture
    # (all of the tests below). Add it here so that an fx set --with
    # //topaz/packages/examples:tests includes it.
    "//peridot/packages/tests:modular_test_harness",
    "//topaz/examples/test/driver_example_mod",
    "//topaz/examples/test/driver_example_mod:driver_example_mod_tests",
    "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod",
    "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod:inspect_mod_test",
    "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15",
    "//topaz/public/dart/fuchsia_inspect_flutter/examples/torus15:torus15_dart_test",
    "//topaz/public/dart/fuchsia_inspect/test/inspect_flutter_integration_tester",
    "//topaz/public/dart/fuchsia_inspect/test/inspect_flutter_integration_tester:inspect_dart_integration_test_driver",
    "//topaz/public/dart/fuchsia_modular/examples/slider_mod",
    "//topaz/public/dart/fuchsia_modular/examples/slider_mod:slider_mod_tests",
  ]
}

group("misc") {
  testonly = true
  public_deps = [
    "//garnet/packages/prod:drivers",
    "//topaz/examples/ledger/todo_list",
    "//topaz/examples/ledger/todo_list_sledge",
    "//topaz/examples/mediaplayer/mediaplayer_flutter",
    "//topaz/examples/mine_digger",
  ]
}

group("ui") {
  testonly = true
  public_deps = [
    "//topaz/examples/ui/button_flutter",
    "//topaz/examples/ui/intl_client_demo",
    "//topaz/examples/ui/jank:package",
    "//topaz/examples/ui/localized_mod",
    "//topaz/examples/ui/paint:package",
    "//topaz/packages/examples:noodles",
  ]
}

group("noodles") {
  testonly = true
  public_deps = [
    "//topaz/examples/ui/noodles",
  ]
}

group("spinning_cube") {
  testonly = true
  public_deps = [
    "//topaz/app/spinning_cube",
  ]
}

group("mondrian") {
  testonly = true
  public_deps = [
    "//topaz/lib/story_shell/examples/example_manual_relationships",
    "//topaz/lib/story_shell/examples/mondrian_test",
  ]
}

group("simple_flutter") {
  testonly = true
  public_deps = [
    "//topaz/examples/ui/simple_flutter:simple_flutter",
  ]
}

group("modular") {
  testonly = true
  public_deps = [
    "//topaz/public/dart/fuchsia_modular/examples/fibonacci_agent",
    "//topaz/public/dart/fuchsia_modular/examples/multilevel_mod",
    "//topaz/public/dart/fuchsia_modular/examples/shapes_mod",
    "//topaz/public/dart/fuchsia_modular/examples/slider_mod",
  ]
}

group("inspect") {
  testonly = true
  public_deps = [
    "//topaz/public/dart/fuchsia_inspect/examples/inspect_mod",
  ]
}

group("flutter_gallery") {
  testonly = true
  public_deps = [
    "//third_party/dart-pkg/git/flutter/examples/flutter_gallery",
  ]
}

group("webview") {
  testonly = true
  public_deps = [
    "//topaz/public/dart/fuchsia_webview_flutter/examples/webview_mod",
  ]
}
