"tests for copy_to_directory" load("//lib:diff_test.bzl", "diff_test") load("//lib:copy_directory.bzl", "copy_directory") load("//lib:copy_to_directory.bzl", "copy_to_directory") load("//lib:directory_path.bzl", "make_directory_paths") [ copy_directory( name = "%s" % d, src = "dir_%s" % d, out = "%s" % d, ) for d in [ "a", "b", "expected_1", "expected_2", "expected_3", "expected_4", "expected_5", "expected_7", "expected_8", "expected_9", "expected_10", "expected_13_14", "expected_15", "expected_16", "expected_17", "expected_18", "expected_19", "expected_20", ] ] case_srcs = [ ":a", ":b", ":c", ":d", ":e/e1", ":e/e2", "//lib/tests/copy_to_directory/f/f2:f1", "//lib/tests/copy_to_directory/f/f2:f2", "@external_test_repo//:test_a", "@external_test_repo//:test_b", "@external_test_repo//:test_c", "@external_test_repo//:test_d", ] # Case 1: default settings (with external repo) copy_to_directory( name = "case_1", srcs = case_srcs, include_external_repositories = ["externa?_*_rep*"], ) diff_test( name = "case_1_test", file1 = "case_1", file2 = ":expected_1", ) # Case 2: replace_prefixes (with external repo) copy_to_directory( name = "case_2", srcs = case_srcs, include_external_repositories = ["external_test_repo"], replace_prefixes = { # merge a, b, c, d into a new/abcd dest folder "a": "new/abcd", "b": "//new///abcd////", "c": "new/abcd/c", "d": "////new/////abcd////d", # put e into new/e except for e/e2 which goes into new/e2 "e": "new/e", "e/e2": "new/e2/e2", # f/f2/f1 => new/ff1 and f/f2/f2 => new/f2/f2 "f/f2/": "////new/////f", "f/f2/f2": "////new/////f2///f2", # flatten test_a & test_b to the root "test_a": "", "test_b": "", # some paths that won't match "a/": "wont_match_a_is_terminal_path", "a/a2": "wont_match_since_a2_is_in_a_tree_artifact", }, ) diff_test( name = "case_2_test", file1 = "case_2", file2 = ":expected_2", ) # Case 3: no root_paths (with external repo) copy_to_directory( name = "case_3", srcs = case_srcs, include_external_repositories = ["external_test_repo"], root_paths = [], ) diff_test( name = "case_3_test", file1 = "case_3", file2 = ":expected_3", ) # Case 4: no root_paths + replace_prefixes (with external repo) copy_to_directory( name = "case_4", srcs = case_srcs, include_external_repositories = ["external_test_repo"], replace_prefixes = { # strip lib/tests from paths "lib/tests/": "", # except for a few which should match due to longest match wins "lib/tests/copy_to_directory/a": "lib/other/copy_to_directory", "lib/tests/copy_to_directory/c": "lib/other/copy_to_directory/c", }, root_paths = [], ) diff_test( name = "case_4_test", file1 = "case_4", file2 = ":expected_4", ) # Case 5: custom root packages (with external repo) copy_to_directory( name = "case_5", srcs = case_srcs, include_external_repositories = ["external_test_repo"], root_paths = [ package_name(), "%s/e" % package_name(), "%s/f" % package_name(), ], ) diff_test( name = "case_5_test", file1 = "case_5", file2 = ":expected_5", ) # Case 6: directory used in a test's runfiles copy_to_directory( name = "case_6", srcs = case_srcs, include_external_repositories = ["external_test_repo"], ) sh_test( name = "case_6_test", timeout = "short", srcs = ["case6.sh"], data = ["case_6"], ) # Case 7: default settings copy_to_directory( name = "case_7", srcs = case_srcs, ) diff_test( name = "case_7_test", file1 = "case_7", file2 = ":expected_7", ) # Case 8: exclude_srcs_patterns copy_to_directory( name = "case_8", srcs = case_srcs, exclude_srcs_patterns = [ "a", "b", "e/e*", ], ) # Case 9: directory_path srcs & replace_prefixes (with external repo) copy_to_directory( name = "case_9", srcs = [ ":c", ":d", ":e/e1", ":e/e2", "//lib/tests/copy_to_directory/f/f2:f1", "//lib/tests/copy_to_directory/f/f2:f2", "@external_test_repo//:test_c", "@external_test_repo//:test_d", ] + make_directory_paths( "case_9_srcs", { ":a": "a", ":b": [ "b", "b2", ], "@external_test_repo//:test_a": "test_a", "@external_test_repo//:test_b": "test_b", }, ), include_external_repositories = ["external_test_repo"], replace_prefixes = { # merge a, b, c, d into a new/abcd dest folder "a/a": "new/abcd/a", "b": "//new///abcd////", "c": "new/abcd/c", "d": "////new/////abcd////d", # put e into new/e except for e/e2 which goes into new/e2 "e": "new/e", "e/e2": "new/e2/e2", # f/f2/f1 => new/ff1 and f/f2/f2 => new/f2/f2 "f/f2/": "////new/////f", "f/f2/f2": "////new/////f2///f2", # flatten test_a & test_b to the root "test_a": "", "test_b": "", # some paths that won't match "a/a2": "wont_match_since_a2_is_not_included_in_the_directory_path_in_srcs", }, ) diff_test( name = "case_9_test", file1 = "case_9", file2 = ":expected_9", ) diff_test( name = "case_8_test", file1 = "case_8", file2 = ":expected_8", ) # Case 10: copy folder containing hidden file copy_to_directory( name = "case_10", srcs = [ ":dir_g", ], replace_prefixes = { "dir_g": "", }, ) diff_test( name = "case_10_test", file1 = "case_10", file2 = ":expected_10", ) copy_directory( name = "g1_out", src = "g1", out = "g1_out", ) copy_directory( name = "g1'_out", src = "g1'", out = "g1'_out", ) copy_directory( name = "g2_out", src = "g2", out = "g2_out", ) # Case 11: two inputs with same subfolders # regression test for https://github.com/aspect-build/bazel-lib/issues/133 copy_to_directory( name = "case_11", srcs = [ "g1_out", "g2_out", ], root_paths = [ "{}/g1_out".format(package_name()), "{}/g2_out".format(package_name()), ], ) # Case 12: srcs with overwrites copy_to_directory( name = "case_12", srcs = [ "g1", "g1'", "g1'_out", "g1_out", ], allow_overwrites = True, root_paths = [ "{}/g1".format(package_name()), "{}/g1'".format(package_name()), "{}/g1_out".format(package_name()), "{}/g1'_out".format(package_name()), ], ) # Case 13: include_srcs_patterns copy_to_directory( name = "case_13", srcs = case_srcs, include_srcs_patterns = [ "a", "b", "?/e*", "f/f2/f2", ], ) diff_test( name = "case_13_test", file1 = "case_13", file2 = ":expected_13_14", ) # Case 14: include_srcs_patterns & exclude_srcs_patterns copy_to_directory( name = "case_14", srcs = case_srcs, exclude_srcs_patterns = [ "f/f2/f1", ], include_srcs_patterns = [ "a", "b", "?/e*", "f/f?/**", ], ) diff_test( name = "case_14_test", file1 = "case_14", file2 = ":expected_13_14", ) # Case 15: include_srcs_packages copy_to_directory( name = "case_15", srcs = case_srcs, include_external_repositories = ["externa?_*_rep*"], include_srcs_packages = ["."], ) diff_test( name = "case_15_test", file1 = "case_15", file2 = ":expected_15", ) # Case 16: include_srcs_packages multiple with root package copy_to_directory( name = "case_16", srcs = case_srcs, include_external_repositories = ["externa?_*_rep*"], include_srcs_packages = [ ".", "", ], ) diff_test( name = "case_16_test", file1 = "case_16", file2 = ":expected_16", ) # Case 17: exclude_srcs_packages copy_to_directory( name = "case_17", srcs = case_srcs, exclude_srcs_packages = ["."], ) diff_test( name = "case_17_test", file1 = "case_17", file2 = ":expected_17", ) # Case 18: exclude_srcs_packages to exclude all subpackages copy_to_directory( name = "case_18", srcs = case_srcs, exclude_srcs_packages = ["./**"], include_external_repositories = ["e?ter*_test_repo"], ) diff_test( name = "case_18_test", file1 = "case_18", file2 = ":expected_18", ) # Case 19: include_srcs_packages with "./**" expansion copy_to_directory( name = "case_19", srcs = case_srcs, include_external_repositories = ["externa?_*_rep*"], include_srcs_packages = ["./**"], ) diff_test( name = "case_19_test", file1 = "case_19", file2 = ":expected_19", ) # Case 20: handling of root_paths in the presence of globs in dependencies. copy_to_directory( name = "case_20_a", srcs = glob(["dir_a/*"]), ) copy_to_directory( name = "case_20", srcs = [ ":case_20_a", ], root_paths = [ "%s/case_20_a" % package_name(), ], ) diff_test( name = "case_20_test", file1 = "case_20", file2 = ":expected_20", )