Skip to content

Commit 56d4deb

Browse files
Add conditional end-to-end integration test for unused deps
1 parent 8491005 commit 56d4deb

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

src/test/shell/bazel/bazel_java_test.sh

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2531,4 +2531,81 @@ EOF
25312531
expect_log "foo.txt"
25322532
}
25332533

2534+
function test_unused_deps() {
2535+
if [[ -n "${RULES_JAVA_OVERRIDE_PATH:-}" ]]; then
2536+
cat >> MODULE.bazel <<EOF
2537+
local_path_override(
2538+
module_name = "rules_java",
2539+
path = "${RULES_JAVA_OVERRIDE_PATH}",
2540+
)
2541+
EOF
2542+
fi
2543+
2544+
# Check if rules_java has the toolchain-driven unused_deps support
2545+
# We check this by querying the attributes of java_package_configuration
2546+
# or attempting to build a package configuration target with 'unused_deps'.
2547+
# If rules_java does not have it, we skip the test.
2548+
2549+
mkdir -p pkg
2550+
cat > pkg/BUILD <<EOF
2551+
load("@rules_java//java:defs.bzl", "java_package_configuration")
2552+
java_package_configuration(
2553+
name = "test_config_query",
2554+
package_specs = [":spec_query"],
2555+
unused_deps = "error",
2556+
)
2557+
package_group(
2558+
name = "spec_query",
2559+
packages = ["//pkg/..."],
2560+
)
2561+
EOF
2562+
2563+
if ! bazel query //pkg:test_config_query >/dev/null 2>&1; then
2564+
echo "Skipping test_unused_deps: rules_java does not support unused_deps configuration yet"
2565+
return 0
2566+
fi
2567+
2568+
# Write the actual integration test targets
2569+
cat << 'EOF' > pkg/BUILD
2570+
load("@rules_java//java:java_library.bzl", "java_library")
2571+
load("@rules_java//toolchains:default_java_toolchain.bzl", "default_java_toolchain")
2572+
load("@rules_java//java:defs.bzl", "java_package_configuration")
2573+
2574+
package_group(
2575+
name = "my_package_spec",
2576+
packages = ["//pkg/..."],
2577+
)
2578+
2579+
java_package_configuration(
2580+
name = "unused_deps_error_config",
2581+
package_specs = [":my_package_spec"],
2582+
unused_deps = "error",
2583+
)
2584+
2585+
default_java_toolchain(
2586+
name = "java_toolchain",
2587+
package_configuration = [":unused_deps_error_config"],
2588+
)
2589+
2590+
java_library(name = "a", srcs = ["A.java"], deps = [":b"])
2591+
java_library(name = "b", srcs = ["B.java"])
2592+
EOF
2593+
2594+
cat << 'EOF' > pkg/A.java
2595+
public class A {
2596+
// Does not reference B
2597+
}
2598+
EOF
2599+
2600+
cat << 'EOF' > pkg/B.java
2601+
public class B {}
2602+
EOF
2603+
2604+
bazel build //pkg:a \
2605+
--extra_toolchains=//pkg:java_toolchain_definition \
2606+
>& $TEST_log && fail "build succeeded, but expected it to fail due to unused dependency"
2607+
2608+
expect_log "Target '//pkg:b' is declared as a direct dependency of '//pkg:a' but is unused"
2609+
}
2610+
25342611
run_suite "Java integration tests"

0 commit comments

Comments
 (0)