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

source_set("web_context") {
  testonly = true

  sources = [
    "web_context.cc",
    "web_context.h",
  ]

  deps = [
    "//src/lib/fxl",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/fdio",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.web",
    "//sdk/lib/sys/cpp",
  ]
}

source_set("test_server") {
  testonly = true

  sources = [
    "test_server.cc",
    "test_server.h",
  ]

  deps = [
    "//src/lib/fxl",
    "//zircon/public/lib/fit",
  ]
}

executable("web_runner_integration_tests") {
  testonly = true

  sources = [
    "web_runner_integration_tests.cc",
  ]

  deps = [
    ":test_server",
    ":web_context",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl",
    "//third_party/googletest:gtest_main",
    "//zircon/public/lib/fit",
  ]
}

executable("web_runner_pixel_tests") {
  testonly = true

  sources = [
    "web_runner_pixel_tests.cc",
  ]

  deps = [
    ":test_server",
    ":web_context",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//third_party/googletest:gtest_main",
    "//zircon/public/lib/fit",
  ]
}

package("web_runner_tests") {
  testonly = true

  deps = [
    ":web_runner_integration_tests",
    ":web_runner_pixel_tests",
  ]

  tests = [
    {
      name = "web_runner_integration_tests"

      # FLK-148
      # environments = basic_envs
      # This does not seem to flake on NUCs.
      environments = [
        {
          dimensions = {
            device_type = "Intel NUC Kit NUC7i5DNHE"
          }
        },
      ]
    },
    {
      name = "web_runner_pixel_tests"
      environments = [
        {
          dimensions = {
            device_type = "Intel NUC Kit NUC7i5DNHE"
          }
        },
      ]
    },
  ]

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

  resources = [
    {
      path = rebase_path("data/dynamic.html")
      dest = "dynamic.html"
    },
    {
      path = rebase_path("data/static.html")
      dest = "static.html"
    },
  ]
}
