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

dart_library("fuchsia_modular") {
  package_name = "fuchsia_modular"

  sdk_category = "partner"

  sources = [
    "agent.dart",
    "codecs.dart",
    "lifecycle.dart",
    "logger.dart",
    "module.dart",
    "service_connection.dart",
    "src/agent/agent.dart",
    "src/agent/internal/_agent_context.dart",
    "src/agent/internal/_agent_impl.dart",
    "src/internal/_component_context.dart",
    "src/lifecycle/internal/_lifecycle_impl.dart",
    "src/lifecycle/lifecycle.dart",
    "src/module/embedded_module.dart",
    "src/module/intent.dart",
    "src/module/intent_handler.dart",
    "src/module/internal/_fidl_transformers.dart",
    "src/module/internal/_intent_handler_impl.dart",
    "src/module/internal/_module_context.dart",
    "src/module/internal/_module_impl.dart",
    "src/module/internal/_streaming_intent_handler_impl.dart",
    "src/module/internal/_view_provider_impl.dart",
    "src/module/module.dart",
    "src/module/module_state_exception.dart",
    "src/module/noop_intent_handler.dart",
    "src/module/noop_view_provider.dart",
    "src/module/streaming_intent_handler.dart",
    "src/module/view_provider.dart",
    "src/service_connection/agent_service_connection.dart",
  ]

  deps = [
    "//sdk/fidl/fuchsia.auth",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.views",
    "//third_party/dart-pkg/pub/meta",
    "//topaz/public/dart/fidl",
    "//topaz/public/dart/fuchsia",
    "//topaz/public/dart/fuchsia_logger",
    "//topaz/public/dart/fuchsia_scenic",
    "//topaz/public/dart/fuchsia_services",
    "//topaz/public/dart/zircon",
  ]
}

# Runs these tests using:
#   fx run-host-tests fuchsia_modular_package_unittests
flutter_test("fuchsia_modular_package_unittests") {
  sources = [
    "agent/agent_test.dart",
    "agent/internal/agent_impl_test.dart",
    "lifecycle/lifecycle_test.dart",
    "matchers.dart",
    "module/intent_test.dart",
    "module/internal/_streaming_intent_handler_impl_test.dart",
    "module/internal/fidl_transformers_test.dart",
    "module/internal/intent_handler_impl_test.dart",
    "module/internal/module_impl_test.dart",
    "module/module_test.dart",
    "module/noop_intent_handler_test.dart",
    "service_connection/agent_service_connection_test.dart",
  ]

  deps = [
    ":fuchsia_modular",
    "//third_party/dart-pkg/pub/mockito",
    "//third_party/dart-pkg/pub/test",
  ]
}

# Run these tests using:
#  fx set x64 --packages topaz/packages/buildbot
# Start a qemu emulator (using a real device is also possible):
#  fx run -kN  (tip: to terminate the emulator press "ctrl+a x")
# Run integration tests:
#  fx shell runtests pkgfs/packages/fuchsia_modular_package_integration_tests/0/test
# Alternatively, run:
#  fx run-test fuchsia_modular_package_integration_tests
dart_fuchsia_test("fuchsia_modular_package_integration_tests") {
  meta = [
    {
      path = rebase_path("meta/fuchsia_modular_package_integration_tests.cmx")
      dest = "fuchsia_modular_package_integration_tests.cmx"
    },
  ]

  # TODO(ianloic): these seem wrong, actually...
  sources = [
    "internal/component_context_integ_test.dart",
    "lifecycle/internal/lifecycle_impl_test.dart",
    "module/internal/intent_handler_impl_integ_test.dart",
    "module/internal/module_impl_integ_test.dart",
    "service_connection/agent_service_connection_integ_test.dart",
  ]

  deps = [
    ":fuchsia_modular",
    "//sdk/fidl/fuchsia.modular.testing",
    "//third_party/dart-pkg/pub/mockito",  # Remove after DX-470 is fixed
    "//third_party/dart-pkg/pub/test",
    "//topaz/public/dart/fuchsia_modular_testing",
    "//topaz/public/dart/fuchsia_modular_testing:test_fidl",
  ]
  environments = basic_envs
}
