# 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("android_browsertests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/bfcache.android_browsertests.filter",
  ]
}

source_set("blink_web_tests_filter") {
  testonly = true

  data = [
    "//testing/buildbot/filters/gpu.skiarenderer_vulkan_blink_web_tests.filter",
  ]
}

source_set("breakpad_unittests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/android.asan.breakpad_unittests.filter",
  ]
}

source_set("browser_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/bfcache.browser_tests.filter",
    "//testing/buildbot/filters/code_coverage.browser_tests.filter",
    "//testing/buildbot/filters/pixel_browser_tests.filter",
    "//testing/buildbot/filters/webrtc_functional.browser_tests.filter",
  ]
}

source_set("chrome_junit_tests_filters") {
  testonly = true

  data = []
}

source_set("chrome_public_test_apk_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/bfcache.chrome_public_test_apk.filter",
  ]
}

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

source_set("content_browsertests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/android.asan.content_browsertests.filter",
    "//testing/buildbot/filters/bfcache.content_browsertests.filter",
    "//testing/buildbot/filters/cast-linux.content_browsertests.filter",
    "//testing/buildbot/filters/gpu.skiarenderer_vulkan_content_browsertests.filter",
    "//testing/buildbot/filters/site_isolation_android.content_browsertests.filter",
    "//testing/buildbot/filters/skia_renderer.content_browsertests.filter",
    "//testing/buildbot/filters/vulkan.content_browsertests.filter",
  ]
}

source_set("content_junit_tests_filters") {
  testonly = true

  data = []
}

source_set("content_shell_test_apk_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/bfcache.content_shell_test_apk.filter",
  ]
}

source_set("content_unittests_filters") {
  testonly = true

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

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

source_set("linux_trusty_rel_browser_tests_filters") {
  data = [
    "//testing/buildbot/filters/linux_trusty_rel.browser_tests.filter",
  ]
}

source_set("ozone_unittests_filters") {
  data = [
    "//testing/buildbot/filters/chromeos.ozone_unittests.filter",
  ]
}

source_set("services_unittests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/android.asan.services_unittests.filter",
  ]
}

source_set("unit_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/android.asan.unit_tests.filter",
    "//testing/buildbot/filters/bfcache.unit_tests.filter",
  ]
}

source_set("webview_cts_tests_filters") {
  testonly = true

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

source_set("webview_instrumentation_test_apk_filters") {
  testonly = true

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

source_set("linux_ozone_views_unittests_filters") {
  data = [
    "//testing/buildbot/filters/ozone-linux.x11_views_unittests.filter",
  ]
}

source_set("e2e_sync_integration_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/e2e.sync_integration_tests.filter",
  ]
}
