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

import("//build/components.gni")
import("//build/dart/dart_app.gni")
import("//build/dart/dart_test_component.gni")
import("//build/dart/fidl_move.gni")
import("//build/dart/test.gni")

dart_app("bin") {
  main_dart = "lib/main.dart"

  fuchsia_package_name = "inspect_dart_codelab_part_4"
  package_name = "inspect_dart_codelab_part_4_lib"

  sources = [
    "main.dart",
    "reverser.dart",
  ]

  meta = [
    {
      path = rebase_path("meta/inspect_dart_codelab_part_4.cmx")
      dest = "inspect_dart_codelab_part_4.cmx"
    },
  ]

  deps = [
    "//examples/diagnostics/inspect/codelab/fidl:fuchsia.examples.inspect",
    "//sdk/dart/fidl",
    "//sdk/dart/fuchsia_inspect",
    "//sdk/dart/fuchsia_logger",
    "//sdk/dart/fuchsia_services",
    "//sdk/fidl/fuchsia.sys",
    "//third_party/dart-pkg/pub/meta",
  ]
}

dart_test("inspect_dart_codelab_part_4_unittests") {
  sources = [ "reverser_test.dart" ]

  deps = [
    ":bin_dart_library",
    "//sdk/dart/fuchsia_inspect",
    "//sdk/dart/fuchsia_services",
    "//third_party/dart-pkg/pub/test",
  ]
}

dart_test_component("integration-tests-component") {
  component_name = "inspect-dart-codelab-part-4-integration-tests"
  manifest = "meta/inspect_dart_codelab_part_4_integration_tests.cmx"
  sources = [ "integration_test.dart" ]

  deps = [
    ":bin_dart_library",
    "//examples/diagnostics/inspect/codelab/dart/shared",
    "//examples/diagnostics/inspect/codelab/fidl:fuchsia.examples.inspect",
    "//third_party/dart-pkg/pub/test",
  ]
}

fuchsia_test_package("inspect-dart-codelab-part-4-integration-tests") {
  test_components = [ ":integration-tests-component" ]
}
