# Copyright 2017 The Chromium 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/config/ui.gni")

source_set("run_all_unittests") {
  # This target is in a separate directory because we want to expand DEPS so
  # that it not all of //services can access //ui.
  visibility = [ "//services:*" ]

  testonly = true

  sources = [ "run_all_unittests.cc" ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//mojo/core/embedder",
    "//ui/base",
  ]

  if (is_ios) {
    deps += [ ":tests_bundle_data" ]
  } else {
    data = [ "data/" ]
  }

  data_deps = [
    "//device/bluetooth/strings:bluetooth_test_strings",
    "//ui/resources:ui_test_pak_data",
  ]

  if (is_android) {
    deps += [ "//mojo/public/java/system:native_support" ]
  }
}

bundle_data("tests_bundle_data") {
  visibility = [ ":run_all_unittests" ]
  testonly = true
  sources = [
    "//services/test/data/content-sniffer-test0.html",
    "//services/test/data/content-sniffer-test0.html.mock-http-headers",
    "//services/test/data/content-sniffer-test1.html",
    "//services/test/data/content-sniffer-test1.html.mock-http-headers",
    "//services/test/data/content-sniffer-test2.html",
    "//services/test/data/content-sniffer-test2.html.mock-http-headers",
    "//services/test/data/content-sniffer-test4.html",
    "//services/test/data/content-sniffer-test4.html.mock-http-headers",
    "//services/test/data/empty.html",
    "//services/test/data/has_favicon.html",
    "//services/test/data/hello.html",
    "//services/test/data/hello.html.mock-http-headers",
    "//services/test/data/nocache.html",
    "//services/test/data/nocache.html.mock-http-headers",
    "//services/test/data/nosniff-test.html",
    "//services/test/data/nosniff-test.html.mock-http-headers",
    "//services/test/data/redirect307-to-echo",
    "//services/test/data/redirect307-to-echo.mock-http-headers",
    "//services/test/data/simple_page.html",
    "//services/test/data/title1.html",
  ]
  outputs = [ "{{bundle_resources_dir}}/" +
              "{{source_root_relative_dir}}/{{source_file_part}}" ]
}
