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

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

  fuchsia_package_name = "slider_mod"

  # 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

  sources = [
    "src/blocs/app_bloc.dart",
    "src/blocs/bloc_provider.dart",
    "src/blocs/fibonacci_bloc.dart",
    "src/blocs/slider_bloc.dart",
    "src/handlers/root_intent_handler.dart",
    "src/widgets/launch_bar.dart",
    "src/widgets/slider_scaffold.dart",
    "src/widgets/value_slider.dart",
  ]

  deps = [
    "//sdk/fidl/fuchsia.testing.runner",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//topaz/public/dart/fuchsia_logger",
    "//topaz/public/dart/fuchsia_modular",
    "//topaz/public/dart/fuchsia_modular/examples/fidl:fibonacci_service",
    "//topaz/public/dart/fuchsia_modular/examples/models",
    "//topaz/public/dart/fuchsia_services",
  ]

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

# This can be run on the Fuchsia device using fx run-test. The slider mod must
# be available on the machine.
dart_fuchsia_test("slider_mod_tests") {
  sources = [
    "slider_mod_widget_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_services",
  ]

  meta = [
    {
      path = rebase_path("meta/slider_mod_tests.cmx")
      dest = "slider_mod_tests.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,
      vim2_env,
    ]
  }
}
