blob: 148f38388939f47c427c11525554c5830c7b31fc [file] [log] [blame]
# Copyright 2024 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.
"""Generates tests for the directory rules from outside the repository."""
_ROOT_BUILD_FILE_CONTENTS = """
load("@bazel_skylib//rules/directory:directory.bzl", "directory")
directory(
name = "root",
srcs = ["BUILD"],
)
"""
def _external_directory_tests_impl(repo_ctx):
for f in repo_ctx.attr.files:
repo_ctx.symlink(repo_ctx.path(f), f.package + "/" + f.name)
repo_ctx.file("BUILD", _ROOT_BUILD_FILE_CONTENTS)
# Directory paths work differently while inside and outside the repository.
# To properly test this, we copy all our test code to an external
# repository.
external_directory_tests = repository_rule(
implementation = _external_directory_tests_impl,
attrs = {
"files": attr.label_list(default = [
"//tests/directory:BUILD",
"//tests/directory:directory_test.bzl",
"//tests/directory:glob_test.bzl",
"//tests/directory:subdirectory_test.bzl",
"//tests/directory:testdata/f1",
"//tests/directory:testdata/subdir/f2",
"//tests/directory:utils.bzl",
]),
},
)
def _external_directory_tests_ext_impl(_module_ctx):
external_directory_tests(name = "external_directory_tests")
# use_repo_rule would be preferred, but it isn't supported in bazel 6.
external_directory_tests_ext = module_extension(
implementation = _external_directory_tests_ext_impl,
)