# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

config("webdriver_all_dependent_config") {
  defines = [ "ENABLE_WEBDRIVER" ]
}

static_library("webdriver") {
  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  deps = [
    "//base",
    "//base:i18n",
    "//cobalt/base",
    "//cobalt/cssom",
    "//cobalt/dom",
    "//cobalt/loader",
    "//cobalt/math",
    "//cobalt/script",
    "//net",
    "//net:http_server",
    "//third_party/icu:icuuc",
    "//url",
  ]
  if (is_gold) {
    sources = [ "stub_web_driver_module.cc" ]
  } else {
    sources = [
      "algorithms.cc",
      "algorithms.h",
      "dispatcher.cc",
      "dispatcher.h",
      "element_driver.cc",
      "element_driver.h",
      "keyboard.cc",
      "keyboard.h",
      "protocol/button.cc",
      "protocol/button.h",
      "protocol/capabilities.cc",
      "protocol/capabilities.h",
      "protocol/cookie.cc",
      "protocol/cookie.h",
      "protocol/element_id.cc",
      "protocol/element_id.h",
      "protocol/frame_id.cc",
      "protocol/frame_id.h",
      "protocol/keys.cc",
      "protocol/keys.h",
      "protocol/location.cc",
      "protocol/location.h",
      "protocol/log_entry.cc",
      "protocol/log_entry.h",
      "protocol/log_type.cc",
      "protocol/log_type.h",
      "protocol/moveto.cc",
      "protocol/moveto.h",
      "protocol/proxy.cc",
      "protocol/proxy.h",
      "protocol/rect.cc",
      "protocol/rect.h",
      "protocol/response.cc",
      "protocol/response.h",
      "protocol/script.cc",
      "protocol/script.h",
      "protocol/search_strategy.cc",
      "protocol/search_strategy.h",
      "protocol/server_status.cc",
      "protocol/server_status.h",
      "protocol/session_id.h",
      "protocol/size.cc",
      "protocol/size.h",
      "protocol/window_id.cc",
      "protocol/window_id.h",
      "screencast/screencast_module.cc",
      "screencast/screencast_module.h",
      "screenshot.cc",
      "screenshot.h",
      "script_executor.cc",
      "script_executor.h",
      "script_executor_params.cc",
      "script_executor_params.h",
      "script_executor_result.h",
      "search.cc",
      "search.h",
      "server.cc",
      "server.h",
      "session_driver.cc",
      "session_driver.h",
      "web_driver_module.cc",
      "web_driver_module.h",
      "window_driver.cc",
      "window_driver.h",
    ]
    deps += [ ":copy_webdriver_data" ]
    all_dependent_configs = [ ":webdriver_all_dependent_config" ]
  }
}

copy("copy_webdriver_data") {
  install_content = true
  sources = [ "content/webdriver-init.js" ]
  outputs =
      [ "$sb_static_contents_output_data_dir/webdriver/webdriver-init.js" ]
}

copy("webdriver_copy_test_data") {
  install_content = true
  sources = [
    "testdata/displayed_test.html",
    "testdata/map.png",
    "testdata/simple_test.py",
  ]

  outputs = [ "$sb_static_contents_output_data_dir/test/cobalt/webdriver_test/{{source_file_part}}" ]
}

target(gtest_target_type, "webdriver_test") {
  testonly = true

  sources = [
    "execute_test.cc",
    "get_element_text_test.cc",
    "is_displayed_test.cc",
    "keyboard_test.cc",
  ]

  deps = [
    ":webdriver",
    "//cobalt/base",
    "//cobalt/browser",
    "//cobalt/css_parser:css_parser",
    "//cobalt/cssom:cssom",
    "//cobalt/dom/testing:dom_testing",
    "//cobalt/script",
    "//cobalt/test:run_all_unittests",
    "//cobalt/web/testing:web_testing",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/devtools:devtools_all_files",
  ]

  data_deps = [
    ":copy_webdriver_data",
    ":webdriver_copy_test_data",
  ]
}
