blob: 40a79776cddeab174245651e3ee5a672675ab586 [file]
"""Supporting code for tests."""
load(
"//sphinxdocs:sphinx_docs_library_info.bzl",
"SphinxDocsFileset",
"SphinxDocsLibraryInfo",
"create_sphinx_docs_library_info",
)
def _custom_docs_library_impl(ctx):
files = []
if ctx.attr.page_name:
out = ctx.actions.declare_file(ctx.attr.page_name + ".md")
ctx.actions.write(out, "# {}\n".format(ctx.attr.page_name))
files.append(out)
transitives = []
for d in ctx.attr.transitive_deps:
if SphinxDocsLibraryInfo in d:
transitives.append(d[SphinxDocsLibraryInfo].transitive)
info = create_sphinx_docs_library_info(
files = files,
prefix = ctx.attr.prefix,
strip_prefix = ctx.label.package + "/",
deps = ctx.attr.deps,
transitives = transitives[0] if len(transitives) == 1 else transitives,
)
if type(info.files) != "list":
fail("Expected SphinxDocsLibraryInfo.files to be a list, got: {}".format(
type(info.files),
))
# Also test passing a list of SphinxDocsFileset objects to transitives:
test_fileset_info = create_sphinx_docs_library_info(
transitives = [
SphinxDocsFileset(
files = tuple(files),
prefix = "fileset/",
strip_prefix = "",
),
],
)
if type(test_fileset_info.files) != "list":
fail("Expected SphinxDocsLibraryInfo.files to be a list, got: {}".format(
type(test_fileset_info.files),
))
if test_fileset_info.transitive.to_list():
first_fileset = test_fileset_info.transitive.to_list()[0]
if type(first_fileset.files) != "tuple":
fail("Expected SphinxDocsFileset.files to be a tuple, got: {}".format(
type(first_fileset.files),
))
return [
info,
DefaultInfo(files = depset(files)),
]
# Verifies a rule that isn't sphinx_docs_library can supply doc files to
# sphinx_docs using only the public SphinxDocsLibraryInfo entry point.
custom_docs_library = rule(
implementation = _custom_docs_library_impl,
attrs = {
"deps": attr.label_list(),
# When unset, the rule produces no direct files, which exercises the
# empty-files path of create_sphinx_docs_library_info.
"page_name": attr.string(),
"prefix": attr.string(),
"transitive_deps": attr.label_list(),
},
)
def _gen_directory_impl(ctx):
out = ctx.actions.declare_directory(ctx.label.name)
ctx.actions.run_shell(
outputs = [out],
command = """
printf '# Hello\\n' > {outdir}/index.md
printf '# Dir Page 1\\n\\n[Dir Page 2](dir_page2.md)\\n' > {outdir}/dir_page1.md
printf '# Dir Page 2\\n' > {outdir}/dir_page2.md
""".format(
outdir = out.path,
),
)
return [DefaultInfo(files = depset([out]))]
gen_directory = rule(
implementation = _gen_directory_impl,
)