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

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

  fuchsia_package_name = "slider_mod"

  sources = [
    "main.dart",
    "src/blocs/bloc_provider.dart",
    "src/blocs/fibonacci_bloc.dart",
    "src/blocs/slider_bloc.dart",
    "src/widgets/app.dart",
    "src/widgets/slider_scaffold.dart",
    "src/widgets/value_slider.dart",
    "test_main.dart",
  ]

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

  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_test_component("test-component") {
  component_name = "slider-mod-tests"
  manifest = "meta/slider_mod_tests.cmx"
  sources = [ "slider_mod_widget_test.dart" ]

  deps = [
    "//sdk/dart/fuchsia_modular_testing",
    "//sdk/dart/zircon",
    "//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/pub/test",
  ]
}

fuchsia_test_package("slider-mod-tests") {
  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 ]
    }
  }
}
