# Copyright 2018 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/dart/dart_library.gni")
import("//build/fidl/fidl.gni")
import("//build/testing/environments.gni")
import("//topaz/runtime/dart/dart_fuchsia_test.gni")
import("//topaz/runtime/dart/flutter_test.gni")

dart_library("fuchsia_services") {
  package_name = "fuchsia_services"

  sdk_category = "partner"

  sources = [
    "services.dart",
    "src/incoming.dart",
    "src/internal/_startup_context_impl.dart",
    "src/outgoing.dart",
    "src/service_provider_impl.dart",
    "src/startup_context.dart",
  ]

  deps = [
    "//sdk/fidl/fuchsia.sys",
    "//third_party/dart-pkg/pub/meta",
    "//topaz/public/dart/fidl",
    "//topaz/public/dart/fuchsia",
    "//topaz/public/dart/fuchsia_vfs",
    "//topaz/public/dart/zircon",
    "//zircon/public/fidl/fuchsia-io",
  ]
}

flutter_test("fuchsia_services_package_unittests") {
  sources = [
    "service_provider_impl_test.dart",
    "startup_context_test.dart",
  ]

  deps = [
    ":fuchsia_services",
    "//third_party/dart-pkg/pub/test",
    "//zircon/public/fidl/fuchsia-io",
  ]
}

fidl("test_foo_fidl") {
  name = "test.fuchsia.service.foo"

  sources = [
    "test/fidl/foo.fidl",
  ]
}

# fx run-test fuchsia_services_package_integration_tests
dart_fuchsia_test("fuchsia_services_package_integration_tests") {
  meta = [
    {
      path = rebase_path("meta/fuchsia_services_package_integration_tests.cmx")
      dest = "fuchsia_services_package_integration_tests.cmx"
    },
  ]

  # Note: existing tests were moved into another package during a refactor which
  # is why this is empty. We are leaving this here so that it is easy to add
  # integration tests when we get a chance. This comment can be removed when
  # sources is no longer empty.
  sources = [
    "incoming_test.dart",
    "outgoing_test.dart",
  ]

  deps = [
    ":fuchsia_services",
    ":test_foo_fidl",
    "//third_party/dart-pkg/pub/test",
    "//zircon/public/fidl/fuchsia-io",
  ]
  environments = basic_envs
}
