# 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/environment_service_connection.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 = [
    "environment_service_connection_test.dart",
    "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
}
