# 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("chromium_context") {
  testonly = true

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

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

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//topaz/runtime/chromium:chromium.web",
  ]
}

source_set("test_server") {
  testonly = true

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

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

executable("web_runner_integration_tests") {
  testonly = true

  sources = [
    "web_runner_integration_tests.cc",
  ]

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

executable("web_runner_pixel_tests") {
  testonly = true

  sources = [
    "web_runner_pixel_tests.cc",
  ]

  deps = [
    ":chromium_context",
    ":test_server",
    "//garnet/public/lib/component/cpp",
    "//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/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"
      environments = basic_envs
    },
    {
      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"
    },
  ]
}
