blob: 4b0399b0da29e5f070fc528c7f94b5b778e8d4e3 [file] [log] [blame]
# Copyright 2021 The Bazel 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.
load("@rules_python//python:defs.bzl", "py_test")
load(":defs.bzl", "inspect_directory_test")
load("//pkg:mappings.bzl", "filter_directory")
load("//tests/util:defs.bzl", "directory")
# TODO: the below tests only check for rule success and confirmation that
# directory structure matches expectations. A more thorough test implementation
# would also ensure that the contents also match expectations.
############################################################################
# Base case
############################################################################
package(default_applicable_licenses = ["//:license"])
inspect_directory_test(
name = "base",
directory = ":test_directory",
expected_structure = [
"a",
"b",
"subdir/c",
"subdir/d",
],
)
############################################################################
# Renames
############################################################################
inspect_directory_test(
name = "renames",
directory = ":renames_in",
expected_structure = [
"b",
"c",
"subdir/a",
"subdir/d",
],
)
filter_directory(
name = "renames_in",
src = ":test_directory",
renames = {
"subdir/a": "a",
"c": "subdir/c",
},
)
inspect_directory_test(
name = "renames_loop",
directory = ":renames_loop_in",
expected_structure = [
"a",
"b",
"subdir/c",
"subdir/d",
],
)
filter_directory(
name = "renames_loop_in",
src = ":test_directory",
renames = {
"subdir/c": "a",
"a": "subdir/c",
},
)
############################################################################
# Prefix stripping
############################################################################
inspect_directory_test(
name = "strip_prefix",
directory = ":strip_prefix_in",
expected_structure = [
"a",
"b",
"subdir/c",
"subdir/d",
],
)
filter_directory(
name = "strip_prefix_in",
src = ":test_directory_same_root",
strip_prefix = "root/",
)
############################################################################
# Prefixing
############################################################################
inspect_directory_test(
name = "prefix",
directory = ":prefix_in",
expected_structure = [
"extra/a",
"extra/b",
"extra/subdir/c",
"extra/subdir/d",
],
)
filter_directory(
name = "prefix_in",
src = ":test_directory",
prefix = "extra/",
)
############################################################################
# Exclusions
############################################################################
inspect_directory_test(
name = "exclusions",
directory = ":exclusions_in",
expected_structure = [
"a",
"subdir/c",
],
)
filter_directory(
name = "exclusions_in",
src = ":test_directory",
excludes = [
"b",
"subdir/d",
],
)
############################################################################
# Combinations
############################################################################
inspect_directory_test(
name = "combo_all",
directory = ":combo_all_in",
expected_structure = [
"foo/root/not_a",
"foo/subdir/c",
],
)
filter_directory(
name = "combo_all_in",
src = ":test_directory_same_root",
excludes = [
"root/b",
"root/subdir/d",
],
prefix = "foo",
renames = {"root/not_a": "root/a"},
strip_prefix = "root/",
)
inspect_directory_test(
name = "combo_rename_to_exclude",
directory = ":combo_rename_to_exclude_in",
expected_structure = [
"a",
"subdir/c",
"subdir/d",
],
)
filter_directory(
name = "combo_rename_to_exclude_in",
src = ":test_directory",
excludes = ["a"],
renames = {"a": "b"},
)
############################################################################
# Inputs
############################################################################
directory(
name = "test_directory_same_root",
filenames = [
"root/a",
"root/b",
"root/subdir/c",
"root/subdir/d",
],
)
directory(
name = "test_directory",
filenames = [
"a",
"b",
"subdir/c",
"subdir/d",
],
)
############################################################################
# Negative tests
############################################################################
# The filter_directory script has numerous failing edge cases that must be
# tested. We cannot test whether a build action failed without introducing
# test-related hacks into the `filter_directory` rule that captures the test
# outputs.
# Given that the interface to filter_directory.py is close to the
# filter_directory rule, doing the tests in Python should suffice. It will also
# allow us to test some cases that might not be reachable from Bazel.
py_test(
name = "negative_tests",
srcs = ["test_filter_directory.py"],
data = ["//pkg:filter_directory"],
main = "test_filter_directory.py",
deps = ["@rules_python//python/runfiles"],
)