# Copyright 2017 Google Inc. 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.

# TODO: uncomment when //cobalt/browser:cobalt is converted over. Then this
# group will become the default target built when ninja is run, paralleling GYP
# behavior.
# group("default") {
#   deps = [
#     "//cobalt/browser:cobalt"
#   ]
# }

# TODO: consider splitting test and non-test
group("all") {
  testonly = true
  deps = [
    # TODO: convert all of the targets below from GYP to GN
    # Uncomment as each target is converted.
    # See cobalt/build/all.gyp for the GYP names.
    # In particular, each :all target (corresponding to GYP's foo/bar.gyp:*)
    # mentioned here will have to be manually defined in the appropriate
    # BUILD.gn file. Ditto for :all_test.
    # "//base:unittests",
    # "//cobalt/accessibility:all_test",
    # "//cobalt/audio:all",
    # "//cobalt/base:all",
    # "//cobalt/bindings/testing:all",
    # "//cobalt/browser:all",
    # "//cobalt/browser:all_cobalt",
    # "//cobalt/csp:all",
    # "//cobalt/css_parser:all",
    # "//cobalt/cssom:all",
    # "//cobalt/cssom:all_test",
    # "//cobalt/debug:all",
    # "//cobalt/dom:all",
    # "//cobalt/dom/dom_test.gyp:all",
    # "//cobalt/dom_parser:all",
    # "//cobalt/h5vcc:all",
    # "//cobalt/input:all",
    # "//cobalt/layout:all",
    # "//cobalt/layout_tests:all",
    # "//cobalt/loader/image/sandbox:all",
    # "//cobalt/loader:all",
    # "//cobalt/math:all",
    # "//cobalt/media/sandbox:all",
    # "//cobalt/media_session:all",
    # "//cobalt/media_session:all_test",
    # "//cobalt/network:all",
    # "//cobalt/render_tree:all",
    # "//cobalt/renderer:all",
    # "//cobalt/renderer/sandbox:all",
    # "//cobalt/samples/simple_example:all",
    # "//cobalt/script:all",
    # "//cobalt/script/engine:all",
    # "//cobalt/speech/sandbox:all",
    # "//cobalt/speech:all",
    # "//cobalt/storage:all",
    # "//cobalt/trace_event:all",
    # "//cobalt/web_animations:all",
    # "//cobalt/webdriver:all",
    # "//cobalt/webdriver:all_test",
    # "//cobalt/websocket:all",
    # "//cobalt/xhr:all",
    # "//crypto:crypto_unittests",
    # "//sql:sql_unittests",
    # "//nb/nb:test",
    # "//nb:reuse_allocator_benchmark",
    "//starboard:all",
  ]
}
