# 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/mash.ash_unittests.filter",
  ]
}

source_set("browser_tests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/mash.browser_tests.filter",
    "//testing/buildbot/filters/mojo.fyi.network_browser_tests.filter",
    "//testing/buildbot/filters/browser_tests_cros_asan.filter",
    "//testing/buildbot/filters/viz.browser_tests.filter",
  ]
}

source_set("content_browsertests_filters") {
  testonly = true

  data = [
    "//testing/buildbot/filters/cast-linux.content_browsertests.filter",
    "//testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter",
    "//testing/buildbot/filters/site-per-process.content_browsertests.filter",
    "//testing/buildbot/filters/viz.content_browsertests.filter",
  ]
}

source_set("content_unittests_filters") {
  testonly = true

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

source_set("unit_tests_filters") {
  testonly = true

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

source_set("fuchsia_filters") {
  data = [
    "//testing/buildbot/filters/fuchsia.base_unittests.filter",
    "//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.service_manager_unittests.filter",
    "//testing/buildbot/filters/fuchsia.ui_base_unittests.filter",
  ]
}
