# 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/test.gni")
import("//build/testing/environments.gni")
import("//build/testing/host_test_data.gni")

group("tests") {
  testonly = true

  deps = [
    ":no_basemgr_test",
    ":test",
  ]
}

_ENVIRONMENTS = [
  # The astro environment has tags as it is still to be run on an FYI builder.
  {
    dimensions = {
      device_type = "Astro"
    }
    tags = [ "e2e-fyi" ]
  },

  # Runs on "main" builders (try and ci) in NUC environments.
  nuc_env,

  # Also runs on fyi builders in NUC environments, so it doesn't look empty
  # there, and we have a second data set of flakiness information if needed.
  {
    dimensions = {
      device_type = "Intel NUC Kit NUC7i5DNHE"
    }
    tags = [ "e2e-fyi" ]
  },
]

_DEPS = [
  "//sdk/testing/sl4f/client",
  "//third_party/dart-pkg/pub/image",
  "//third_party/dart-pkg/pub/logging",
  "//third_party/dart-pkg/pub/matcher",
  "//third_party/dart-pkg/pub/test",
  "//third_party/dart-pkg/pub/args",
]

_NON_DART_DEPS = [ ":runtime_deps($host_toolchain)" ]

dart_test("screen_is_not_black_test") {
  sources = [ "screen_is_not_black_test.dart" ]

  deps = _DEPS

  args = [ "--start_basemgr" ]

  non_dart_deps = _NON_DART_DEPS

  environments = _ENVIRONMENTS
}

# Same as above, except doesn't attempt to start basemgr. For use in
# environments where basemgr is not available nor required to take a
# screenshot. For example, workstation, which uses Session Framework.
dart_test("screen_is_not_black_no_basemgr_test") {
  sources = [ "screen_is_not_black_test.dart" ]

  deps = _DEPS

  args = [ "--no-start_basemgr" ]

  non_dart_deps = _NON_DART_DEPS

  environments = _ENVIRONMENTS
}

if (is_host) {
  host_test_data("runtime_deps") {
    sources = [ "$root_out_dir/catapult_converter" ]

    outputs = [ "$target_gen_dir/runtime_deps/{{source_file_part}}" ]

    deps = [ "//garnet/bin/catapult_converter:converter_bin" ]
  }
}

group("test") {
  testonly = true

  deps = [ ":screen_is_not_black_test($host_toolchain)" ]
}

group("no_basemgr_test") {
  testonly = true

  deps = [ ":screen_is_not_black_no_basemgr_test($host_toolchain)" ]
}

group("config") {
  testonly = true
  deps = [ "config" ]
}
