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

# This BUILD.gn file groups together filter files for particular test suites -
# for example filters applicable to content_browsertests are exposed as
# the //testing/buildbot/filters:content_browsertests target.

# Note that all filter files (for a given test suite) are unconditionally listed
# together, even if some filter files are applicable only to some platforms.
# This should help avoid unpleasant surprises when a bot config is switched in
# testing/buildbot/chromium.fyi.json without corresponding dependency changes
# here - see https://crbug.com/661447.

# To refresh, a command similar to the one below might be run in bash:
# $ for i in $(ls -1 testing/buildbot/filters/*.browser_tests.*filter ); \
#   do echo "    \"//$i\","; done | sort

source_set("ash_unittests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/chromeos.single_process_mash.ash_unittests.filter",
  ]
}

source_set("browser_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/chromeos.mash.browser_tests.filter",
    "//testing/buildbot/filters/chromeos.mash.fyi.browser_tests.filter",
    "//testing/buildbot/filters/chromeos.single_process_mash.browser_tests.filter",
    "//testing/buildbot/filters/mojo.fyi.chromeos.network_browser_tests.filter",
    "//testing/buildbot/filters/mojo.fyi.network_browser_tests.filter",
    "//testing/buildbot/filters/webui_polymer2_browser_tests.filter",
    "//testing/buildbot/filters/webrtc_functional.browser_tests.filter",
  ]
}

source_set("chromeos_filters") {
  data = [
    "//testing/buildbot/filters/chromeos.chromeos_unittests.filter",
    "//testing/buildbot/filters/chromeos.media_unittests.filter",
    "//testing/buildbot/filters/chromeos.services_unittests.filter",
  ]
}

source_set("chrome_public_test_apk_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/mojo.fyi.network_chrome_public_test_apk.filter",
  ]
}

source_set("content_unittests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/webrtc.content_unittests.filter",
  ]
}

source_set("content_browsertests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/cast-linux.content_browsertests.filter",
    "//testing/buildbot/filters/chromeos.single_process_mash.content_browsertests.filter",
    "//testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter",
  ]
}

source_set("exo_unittests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/chromeos.single_process_mash.exo_unittests.filter",
  ]
}

source_set("fuchsia_filters") {
  data = [
    "//testing/buildbot/filters/fuchsia.content_unittests.filter",
    "//testing/buildbot/filters/fuchsia.ipc_tests.filter",
    "//testing/buildbot/filters/fuchsia.mojo_unittests.filter",
    "//testing/buildbot/filters/fuchsia.net_unittests.filter",
    "//testing/buildbot/filters/fuchsia.ui_base_unittests.filter",
  ]
}

source_set("interactive_ui_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/chromeos.mash.fyi.interactive_ui_tests.filter",
    "//testing/buildbot/filters/chromeos.single_process_mash.interactive_ui_tests.filter",
    "//testing/buildbot/filters/mojo.fyi.chromeos.network_interactive_ui_tests.filter",
    "//testing/buildbot/filters/webui_polymer2_interactive_ui_tests.filter",
  ]
}

source_set("unit_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/chromeos.single_process_mash.fyi.unit_tests.filter",
  ]
}

source_set("webview_instrumentation_test_apk_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/mojo.fyi.network_webview_instrumentation_test_apk.filter",
  ]
}
