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

# The main app.
flutter_app("driver_example_mod") {
  deprecated_bare_package_url = "//build"

  package_name = "driver_example_mod"

  main_dart = "lib/main.dart"

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

  # This creates a flutter_driver enabled binary that will enable extensions for
  # testing when run in an environment along with TestRunner.
  flutter_driver_extendable = true

  deps = [
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//topaz/public/dart/fuchsia_modular",
    "//topaz/public/dart/fuchsia_services",
    "//topaz/public/lib/app/dart",
    "//topaz/public/lib/app_driver/dart",
    "//topaz/public/lib/widgets/dart",
  ]
}

# Example of a target test. This can be run on the Fuchsia device using the
# dart_runner command packaged in //garnet/packages/products/devtools
#
# The target application must be runnning on the machine.
dart_fuchsia_test("driver_example_mod_target_tests") {
  package_only = true

  sources = []
  deps = [
    ":driver_example_mod_dart_library",
    "//third_party/dart-pkg/git/flutter/packages/flutter_driver",
    "//third_party/dart-pkg/pub/test",
  ]

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