# 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_app.gni")
import("//build/dart/dart_library.gni")
import("//build/dart/dart_test_component.gni")
import("//build/dart/fidl_move.gni")
import("//build/flutter/test.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/fuchsia_test_package.gni")

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

  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.io",
    "//sdk/fidl/fuchsia.sys",
    "//third_party/dart-pkg/pub/meta",
    dart_package_label.zircon,
    dart_package_label.fuchsia,
    dart_package_label.fuchsia_vfs,
    dart_package_label.fidl,
  ]
}

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

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

# fx test fuchsia-pkg://fuchsia.com/fuchsia-services-integration-tests#meta/fuchsia-services-integration-tests.cmx
dart_test_component("integration-test-component") {
  component_name = "fuchsia-services-integration-tests"
  manifest = "meta/fuchsia-services-integration-tests.cmx"
  sources = [
    "incoming_test.dart",
    "launch_flow_test.dart",
    "outgoing_test.dart",
    "service_provider_impl_test.dart",
    "startup_context_test.dart",
  ]

  deps = [
    ":fuchsia_services",
    "test_support:test-foo-fidl",
    "//sdk/fidl/fuchsia.io",
    "//sdk/fidl/fuchsia.sys",
    "//third_party/dart-pkg/pub/test",
    dart_package_label.fidl,
    dart_package_label.fuchsia_vfs,
    dart_package_label.zircon,
  ]
}

fuchsia_test_package("fuchsia-services-integration-tests") {
  test_components = [ ":integration-test-component" ]
}

group("tests") {
  testonly = true
  deps = [
    ":integration_tests",
    ":unit_tests",
  ]
}

group("integration_tests") {
  testonly = true
  deps = [ ":fuchsia-services-integration-tests" ]
}

group("unit_tests") {
  testonly = true
  deps = [ ":fuchsia_services_package_unittests" ]
}
