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

flutter_app("inspect_flutter_integration_tester") {
  main_dart = "lib/main.dart"
  package_name = "inspect_flutter_integration_tester"

  fuchsia_package_name = "inspect_flutter_integration_tester"

  flutter_driver_extendable = true

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

  sources = []

  deps = [
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//topaz/public/dart/fuchsia_inspect",
    "//topaz/public/dart/fuchsia_modular",
  ]
}

dart_fuchsia_test("inspect_dart_integration_test_driver") {
  sources = [ "integration_driver_test.dart" ]

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

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

  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 ]
  }
}
