# 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.

group("gn_all") {
  testonly = true
  deps = [
    ":default",
    "//cobalt/bindings/testing:bindings_test",
    "//cobalt/browser:browser_test",
    "//cobalt/browser/metrics:metrics_test",
    "//cobalt/cssom:cssom_test",
    "//cobalt/demos/simple_sandbox",
    "//cobalt/dom:dom_test",
    "//cobalt/dom_parser:dom_parser_test",
    "//cobalt/encoding:text_encoding_test",
    "//cobalt/layout:layout_test",
    "//cobalt/layout_tests",
    "//cobalt/layout_tests:web_platform_tests",
    "//cobalt/loader:loader_test",
    "//cobalt/loader/image/sandbox:image_decoder_sandbox",
    "//cobalt/media:media_test",
    "//cobalt/media/sandbox:media_sandbox",
    "//cobalt/media/sandbox:web_media_player_sandbox",
    "//cobalt/media_capture:media_capture_test",
    "//cobalt/media_session:media_session_test",
    "//cobalt/media_stream:media_stream_test",
    "//cobalt/renderer:renderer_test",
    "//cobalt/renderer/sandbox:renderer_sandbox",
    "//cobalt/renderer/sandbox:scaling_text_sandbox",
    "//cobalt/speech/sandbox:speech_sandbox",
    "//cobalt/ui_navigation/scroll_engine:scroll_engine_tests",
    "//cobalt/web:web_test",
    "//cobalt/web_animations:web_animations_test",
    "//cobalt/webdriver:webdriver_test",
    "//cobalt/websocket:websocket_test",
    "//cobalt/worker:worker_test",
    "//cobalt/xhr:xhr_test",
  ]

  if (sb_is_evergreen) {
    deps += [
      "//cobalt/updater:updater_test",
      "//components/update_client:cobalt_slot_management_test",
      "//components/update_client:update_client_test",
    ]
  }
}

group("default") {
  deps = [
    "//cobalt/browser:cobalt",
    "//cobalt/browser:cobalt_install",
    "//cobalt/renderer:default_options",
    "//cobalt/script:engine_shell",
    "//third_party/brotli:dec_no_dictionary_data",
  ]

  if (sb_is_evergreen) {
    deps += [
      "//base/util/values:values_util",
      "//cobalt/updater",
      "//cobalt/updater:crash_sandbox",
      "//cobalt/updater:noop_sandbox",
      "//cobalt/updater:one_app_only_sandbox",
      "//components/client_update_protocol",
      "//components/crx_file",
      "//components/prefs",
      "//components/update_client",
      "//third_party/llvm-project/compiler-rt:compiler_rt",
      "//third_party/llvm-project/libcxx:cxx",
      "//third_party/llvm-project/libcxxabi:cxxabi",
      "//third_party/musl:c",
    ]
    if (!build_with_separate_cobalt_toolchain) {
      deps += [ "//third_party/llvm-project/libunwind:unwind_evergreen" ]
    }
  }
}
