# Copyright 2016 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("//mojo/public/tools/bindings/mojom.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")

mojom("mojo_bindings") {
  sources = [
    "mojo_test.mojom",
  ]
}

repack("packed_resources") {
  testonly = true
  sources = [
    "$root_gen_dir/ios/web/ios_web_resources.pak",
    "$root_gen_dir/ios/web/test/test_resources.pak",
  ]
  deps = [
    ":resources",
    "//ios/web:resources",
  ]
  output = "$target_gen_dir/resources.pak"
  copy_data_to_bundle = true
}

grit("resources") {
  source = "test_resources.grd"

  # The .grd contains references to generated files.
  source_is_generated = true

  inputs = [
    "${root_gen_dir}/ios/web/test/mojo_test.mojom.js",
  ]
  deps = [
    ":mojo_bindings_js",
  ]
  outputs = [
    "grit/test_resources.h",
    "test_resources.pak",
  ]
  grit_flags = [
    "-E",
    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
  ]
}

source_set("test_support") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true

  deps = [
    ":test_constants",
    "//base",
    "//base/test:test_support",
    "//ios/web:web",
    "//ios/web/public/test/fakes",
    "//ios/web/public/test/http_server",
    "//ios/web/test/fakes",
    "//net",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base",
  ]

  sources = [
    "crw_fake_web_controller_observer.h",
    "crw_fake_web_controller_observer.mm",
    "test_web_thread.cc",
    "test_web_thread_bundle.cc",
    "url_test_util.mm",
    "web_int_test.h",
    "web_int_test.mm",
    "web_test_suite.mm",
    "web_test_with_web_controller.h",
    "web_test_with_web_controller.mm",
    "wk_web_view_crash_utils.h",
    "wk_web_view_crash_utils.mm",
  ]
}

source_set("test_constants") {
  testonly = true
  sources = [
    "test_url_constants.cc",
    "test_url_constants.h",
  ]
}
