167 lines
4.4 KiB
Python
167 lines
4.4 KiB
Python
# This package aids testing the 'write_file' rule.
|
|
#
|
|
# The package contains 4 write_file rules:
|
|
# - 'write_empty_text' and 'write_empty_bin' write an empty text and an empty
|
|
# executable file respectively
|
|
# - 'write_nonempty_text' and 'write_nonempty_bin' write a non-empty text and
|
|
# a non-empty executable file (a shell script) respectively
|
|
#
|
|
# The 'bin_empty' and 'bin_nonempty' rules are sh_binary rules. They use
|
|
# the 'write_empty_bin' and 'write_nonempty_bin' rules respectively. The
|
|
# sh_binary rule requires its source to be executable, so building these two
|
|
# rules successfully means that 'write_file' managed to make its output
|
|
# executable.
|
|
#
|
|
# The 'run_executables' genrule runs the 'bin_empty' and 'bin_nonempty'
|
|
# binaries, partly to ensure they can be run, and partly so we can observe their
|
|
# output and assert the contents in the 'write_file_tests' test.
|
|
#
|
|
# The 'file_deps' filegroup depends on 'write_empty_text'. The filegroup rule
|
|
# uses the DefaultInfo.files field from its dependencies. When we data-depend on
|
|
# the filegroup from 'write_file_tests', we transitively data-depend on the
|
|
# DefaultInfo.files of the 'write_empty_text' rule.
|
|
#
|
|
# The 'write_file_tests' test is the actual integration test. It data-depends
|
|
# on:
|
|
# - the 'run_executables' rule, to get the outputs of 'bin_empty' and
|
|
# 'bin_nonempty'
|
|
# - the 'file_deps' rule, and by nature of using a filegroup, we get the files
|
|
# from the DefaultInfo.files of the 'write_file' rule, and thereby assert that
|
|
# that field contains the output file of the rule
|
|
# - the 'write_nonempty_text' rule, and thereby on the DefaultInfo.runfiles
|
|
# field of it, so we assert that that field contains the output file of the
|
|
# rule
|
|
|
|
load("//rules:diff_test.bzl", "diff_test")
|
|
load("//rules:write_file.bzl", "write_file")
|
|
|
|
licenses(["notice"])
|
|
|
|
package(default_testonly = 1)
|
|
|
|
sh_test(
|
|
name = "write_file_tests",
|
|
srcs = ["write_file_tests.sh"],
|
|
data = [
|
|
":run_executables",
|
|
# Use DefaultInfo.files from 'write_empty_text' (via 'file_deps').
|
|
":file_deps",
|
|
# Use DefaultInfo.runfiles from 'write_nonempty_text'.
|
|
":write_nonempty_text",
|
|
"//tests:unittest.bash",
|
|
],
|
|
deps = ["@bazel_tools//tools/bash/runfiles"],
|
|
)
|
|
|
|
filegroup(
|
|
name = "file_deps",
|
|
# Use DefaultInfo.files from 'write_empty_text'.
|
|
srcs = [":write_empty_text"],
|
|
)
|
|
|
|
# If 'run_executables' is built, then 'bin_nonempty' and 'bin_empty' are
|
|
# executable, asserting that write_file makes the output executable.
|
|
genrule(
|
|
name = "run_executables",
|
|
outs = [
|
|
"empty-bin-out.txt",
|
|
"nonempty-bin-out.txt",
|
|
],
|
|
cmd = ("$(location :bin_empty) > $(location empty-bin-out.txt) && " +
|
|
"$(location :bin_nonempty) > $(location nonempty-bin-out.txt)"),
|
|
output_to_bindir = 1,
|
|
tools = [
|
|
":bin_empty",
|
|
":bin_nonempty",
|
|
],
|
|
)
|
|
|
|
# If 'bin_empty' is built, then 'write_empty_bin' made its output executable.
|
|
sh_binary(
|
|
name = "bin_empty",
|
|
srcs = [":write_empty_bin"],
|
|
)
|
|
|
|
# If 'bin_nonempty' is built, then 'write_nonempty_bin' made its output
|
|
# executable.
|
|
sh_binary(
|
|
name = "bin_nonempty",
|
|
srcs = [":write_nonempty_bin"],
|
|
)
|
|
|
|
write_file(
|
|
name = "write_empty_text",
|
|
out = "out/empty.txt",
|
|
)
|
|
|
|
write_file(
|
|
name = "write_nonempty_text",
|
|
out = "out/nonempty.txt",
|
|
content = [
|
|
"aaa",
|
|
"bbb",
|
|
],
|
|
)
|
|
|
|
write_file(
|
|
name = "write_empty_bin",
|
|
out = "out/empty.sh",
|
|
is_executable = True,
|
|
)
|
|
|
|
write_file(
|
|
name = "write_nonempty_bin",
|
|
out = "out/nonempty.sh",
|
|
content = [
|
|
"#!/usr/bin/env bash",
|
|
"echo potato",
|
|
],
|
|
is_executable = True,
|
|
)
|
|
|
|
write_file(
|
|
name = "newline_unix_actual",
|
|
out = "out/newline_unix_actual.txt",
|
|
content = [
|
|
"ab",
|
|
"cd",
|
|
"ef",
|
|
],
|
|
newline = "unix",
|
|
)
|
|
|
|
write_file(
|
|
name = "newline_unix_exp",
|
|
out = "out/newline_unix_exp.txt",
|
|
content = ["ab\ncd\nef"],
|
|
)
|
|
|
|
diff_test(
|
|
name = "unix_line_ending_test",
|
|
file1 = ":newline_unix_actual",
|
|
file2 = ":newline_unix_exp",
|
|
)
|
|
|
|
write_file(
|
|
name = "newline_win_actual",
|
|
out = "out/newline_win_actual.txt",
|
|
content = [
|
|
"ab",
|
|
"cd",
|
|
"ef",
|
|
],
|
|
newline = "windows",
|
|
)
|
|
|
|
write_file(
|
|
name = "newline_win_exp",
|
|
out = "out/newline_win_exp.txt",
|
|
content = ["ab\r\ncd\r\nef"],
|
|
)
|
|
|
|
diff_test(
|
|
name = "win_line_ending_test",
|
|
file1 = ":newline_win_actual",
|
|
file2 = ":newline_win_exp",
|
|
)
|