@@ -2531,4 +2531,48 @@ EOF
25312531 expect_log " foo.txt"
25322532}
25332533
2534+ function test_unused_deps_enforcement_and_tags() {
2535+ mkdir -p java/unused_a java/unused_b
2536+ cat << 'EOF ' > java/unused_a/BUILD
2537+ load("@rules_java//java:java_library.bzl", "java_library")
2538+ package(default_visibility=['//visibility:public'])
2539+ java_library(name = "unused_a", srcs = ["A.java"])
2540+ EOF
2541+ cat << 'EOF ' > java/unused_a/A.java
2542+ package unused_a;
2543+ public class A {}
2544+ EOF
2545+
2546+ cat << 'EOF ' > java/unused_b/BUILD
2547+ load("@rules_java//java:java_library.bzl", "java_library")
2548+ java_library(name = "unused_b", srcs = ["B.java"], deps = ["//java/unused_a"])
2549+ EOF
2550+ cat << 'EOF ' > java/unused_b/B.java
2551+ package unused_b;
2552+ public class B {}
2553+ EOF
2554+
2555+ # 1. Default behaviour: unused_deps is off by default -> build succeeds
2556+ bazel build //java/unused_b:unused_b >& $TEST_log || fail " build should succeed by default"
2557+
2558+ # 2. Strict behaviour: --experimental_unused_deps=error -> build fails
2559+ bazel build //java/unused_b:unused_b --experimental_unused_deps=error >& $TEST_log && fail " build should fail with unused_deps=error"
2560+ expect_log " buildozer 'remove deps //java/unused_a' //java/unused_b"
2561+
2562+ # 3. Opt-out per target via tag: unused-deps:off -> build succeeds
2563+ cat << 'EOF ' > java/unused_b/BUILD
2564+ load("@rules_java//java:java_library.bzl", "java_library")
2565+ java_library(name = "unused_b", srcs = ["B.java"], deps = ["//java/unused_a"], tags = ["unused-deps:off"])
2566+ EOF
2567+ bazel build //java/unused_b:unused_b --experimental_unused_deps=error >& $TEST_log || fail " build should succeed with unused-deps:off tag"
2568+
2569+ # 4. Opt-in per target via tag: unused-deps:error -> build fails
2570+ cat << 'EOF ' > java/unused_b/BUILD
2571+ load("@rules_java//java:java_library.bzl", "java_library")
2572+ java_library(name = "unused_b", srcs = ["B.java"], deps = ["//java/unused_a"], tags = ["unused-deps:error"])
2573+ EOF
2574+ bazel build //java/unused_b:unused_b --experimental_unused_deps=off >& $TEST_log && fail " build should fail with unused-deps:error tag when global flag is off"
2575+ expect_log " buildozer 'remove deps //java/unused_a' //java/unused_b"
2576+ }
2577+
25342578run_suite " Java integration tests"
0 commit comments