# Copyright 2019 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_test_component.gni")
import("//build/dart/fidl_move.gni")
import("//build/flutter/flutter_app.gni")
import("//build/testing/flutter_driver.gni")
import("//src/sys/build/fuchsia_test_package.gni")

flutter_app("inspect_mod") {
  if (flutter_driver_enabled) {
    main_dart = "lib/main.dart"
  } else {
    main_dart = "lib/test_main.dart"
  }
  package_name = "inspect_mod"

  fuchsia_package_name = "inspect_mod"

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

  sources = [
    "main.dart",
    "src/inspect_example_app.dart",
    "vmo_reader.dart",
  ]

  deps = [
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/git/flutter/packages/flutter_driver",
    "//third_party/dart-pkg/pub/async",
    "//topaz/public/dart/fuchsia_modular",
    dart_package_label.fuchsia_inspect,
    dart_package_label.fuchsia_logger,
  ]
}

dart_test_component("test-component") {
  component_name = "inspect-mod-test"
  manifest = "meta/inspect_mod_test.cmx"
  sources = [ "inspect_mod_test.dart" ]

  deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/fidl/fuchsia.sys",
    "//third_party/dart-pkg/git/flutter/packages/flutter_driver",
    "//third_party/dart-pkg/git/flutter/packages/fuchsia_remote_debug_protocol",
    "//third_party/dart-pkg/pub/glob",
    "//third_party/dart-pkg/pub/test",
    dart_package_label.fuchsia_inspect,
    dart_package_label.fuchsia_services,
  ]
}

fuchsia_test_package("inspect-mod-test") {
  test_components = [ ":test-component" ]

  test_specs = {
    environments = []

    # Flutter driver is only available in debug builds, so don't try to run in
    # release CI/CQ.
    if (is_debug) {
      environments += [ nuc_env ]
    }
  }
}
