Skip to content

Commit 50f3057

Browse files
authored
scala_proto_library test stamping test (#1237)
* Extract strict deps tests into separate shell script * Add test to showcase existing (incorrect) proto stamping behaviour * lint
1 parent a38236a commit 50f3057

File tree

7 files changed

+123
-50
lines changed

7 files changed

+123
-50
lines changed

test/shell/test_deps.sh

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,6 @@ dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
44
. "${dir}"/test_helper.sh
55
runner=$(get_test_runner "${1:-local}")
66

7-
test_scala_import_library_passes_labels_of_direct_deps() {
8-
dependency_target='//test_expect_failure/scala_import:root_for_scala_import_passes_labels_of_direct_deps'
9-
test_target='test_expect_failure/scala_import:leaf_for_scala_import_passes_labels_of_direct_deps'
10-
11-
test_scala_library_expect_failure_on_missing_direct_deps $dependency_target $test_target
12-
}
13-
14-
test_plus_one_deps_only_works_for_java_info_targets() {
15-
#for example doesn't break scala proto which depends on proto_library
16-
bazel build --extra_toolchains="//test_expect_failure/plus_one_deps:plus_one_deps" //test/proto:test_proto
17-
}
18-
197
scala_pb_library_targets_do_not_have_host_deps() {
208
set -e
219
bazel build test/proto:test_binary_to_ensure_no_host_deps
@@ -46,43 +34,5 @@ scrooge_library_targets_do_not_have_host_deps() {
4634
fi
4735
}
4836

49-
test_scala_import_expect_failure_on_missing_direct_deps_warn_mode() {
50-
dependency_target1='//test_expect_failure/scala_import:cats'
51-
dependency_target2='//test_expect_failure/scala_import:guava'
52-
test_target='test_expect_failure/scala_import:scala_import_propagates_compile_deps'
53-
54-
local expected_message1="buildozer 'add deps $dependency_target1' //$test_target"
55-
local expected_message2="buildozer 'add deps $dependency_target2' //$test_target"
56-
57-
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message1}" ${test_target} "--extra_toolchains=//test/toolchains:high_level_transitive_deps_strict_deps_warn" "ne" "${expected_message2}"
58-
}
59-
60-
test_plus_one_ast_analyzer_strict_deps() {
61-
dependenecy_target='//test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency'
62-
test_target='test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency_user'
63-
64-
expected_message_warn="warning: Target '$dependenecy_target' is used but isn't explicitly declared, please add it to the deps"
65-
expected_message_error="error: Target '$dependenecy_target' is used but isn't explicitly declared, please add it to the deps"
66-
67-
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message_error}" ${test_target} "--extra_toolchains=//test/toolchains:ast_plus_one_deps_strict_deps_error" "eq"
68-
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message_error}" ${test_target} "--extra_toolchains=//scala:minimal_direct_source_deps" "eq"
69-
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message_warn}" ${test_target} "--extra_toolchains=//test/toolchains:ast_plus_one_deps_strict_deps_warn" "ne"
70-
}
71-
72-
test_stamped_target_label_loading() {
73-
local test_target="//test_expect_failure/missing_direct_deps/external_deps:java_lib_with_a_transitive_external_dep"
74-
local expected_message="buildozer 'add deps @io_bazel_rules_scala_guava//:io_bazel_rules_scala_guava' ${test_target}"
75-
76-
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message \
77-
"${expected_message}" ${test_target} \
78-
"--extra_toolchains=//test/toolchains:ast_plus_one_deps_unused_deps_error" \
79-
"eq"
80-
}
81-
82-
$runner test_scala_import_library_passes_labels_of_direct_deps
83-
$runner test_plus_one_deps_only_works_for_java_info_targets
8437
$runner scala_pb_library_targets_do_not_have_host_deps
8538
$runner scrooge_library_targets_do_not_have_host_deps
86-
$runner test_scala_import_expect_failure_on_missing_direct_deps_warn_mode
87-
$runner test_plus_one_ast_analyzer_strict_deps
88-
$runner test_stamped_target_label_loading

test/shell/test_strict_deps.sh

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# shellcheck source=./test_runner.sh
2+
dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
3+
. "${dir}"/test_runner.sh
4+
. "${dir}"/test_helper.sh
5+
runner=$(get_test_runner "${1:-local}")
6+
7+
test_scala_import_library_passes_labels_of_direct_deps() {
8+
dependency_target='//test_expect_failure/scala_import:root_for_scala_import_passes_labels_of_direct_deps'
9+
test_target='test_expect_failure/scala_import:leaf_for_scala_import_passes_labels_of_direct_deps'
10+
11+
test_scala_library_expect_failure_on_missing_direct_deps $dependency_target $test_target
12+
}
13+
14+
test_plus_one_deps_only_works_for_java_info_targets() {
15+
#for example doesn't break scala proto which depends on proto_library
16+
bazel build --extra_toolchains="//test_expect_failure/plus_one_deps:plus_one_deps" //test/proto:test_proto
17+
}
18+
19+
test_scala_import_expect_failure_on_missing_direct_deps_warn_mode() {
20+
dependency_target1='//test_expect_failure/scala_import:cats'
21+
dependency_target2='//test_expect_failure/scala_import:guava'
22+
test_target='test_expect_failure/scala_import:scala_import_propagates_compile_deps'
23+
24+
local expected_message1="buildozer 'add deps $dependency_target1' //$test_target"
25+
local expected_message2="buildozer 'add deps $dependency_target2' //$test_target"
26+
27+
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message1}" ${test_target} "--extra_toolchains=//test/toolchains:high_level_transitive_deps_strict_deps_warn" "ne" "${expected_message2}"
28+
}
29+
30+
test_plus_one_ast_analyzer_strict_deps() {
31+
dependenecy_target='//test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency'
32+
test_target='test_expect_failure/missing_direct_deps/internal_deps:transitive_dependency_user'
33+
34+
expected_message_warn="warning: Target '$dependenecy_target' is used but isn't explicitly declared, please add it to the deps"
35+
expected_message_error="error: Target '$dependenecy_target' is used but isn't explicitly declared, please add it to the deps"
36+
37+
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message_error}" ${test_target} "--extra_toolchains=//test/toolchains:ast_plus_one_deps_strict_deps_error" "eq"
38+
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message_error}" ${test_target} "--extra_toolchains=//scala:minimal_direct_source_deps" "eq"
39+
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message_warn}" ${test_target} "--extra_toolchains=//test/toolchains:ast_plus_one_deps_strict_deps_warn" "ne"
40+
}
41+
42+
test_stamped_target_label_loading() {
43+
local test_target="//test_expect_failure/missing_direct_deps/external_deps:java_lib_with_a_transitive_external_dep"
44+
local expected_message="buildozer 'add deps @io_bazel_rules_scala_guava//:io_bazel_rules_scala_guava' ${test_target}"
45+
46+
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message \
47+
"${expected_message}" ${test_target} \
48+
"--extra_toolchains=//test/toolchains:ast_plus_one_deps_unused_deps_error" \
49+
"eq"
50+
}
51+
52+
test_demonstrate_INCORRECT_scala_proto_library_stamp() {
53+
local test_target="//test_expect_failure/missing_direct_deps/scala_proto_deps:uses_transitive_scala_proto"
54+
local incorrectly_stamped_expected_message="buildozer 'add deps //test_expect_failure/missing_direct_deps/scala_proto_deps:proto' ${test_target}"
55+
56+
# When stamping is fixed, expected stamp is:
57+
# local correctly_stamped_expected_message="buildozer 'add deps //test_expect_failure/missing_direct_deps/scala_proto_deps:scala_proto' ${test_target}"
58+
59+
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message \
60+
"${incorrectly_stamped_expected_message}" ${test_target} \
61+
"--extra_toolchains=//test/toolchains:ast_plus_one_deps_strict_deps_error" \
62+
"eq"
63+
}
64+
65+
66+
$runner test_scala_import_library_passes_labels_of_direct_deps
67+
$runner test_plus_one_deps_only_works_for_java_info_targets
68+
$runner test_scala_import_expect_failure_on_missing_direct_deps_warn_mode
69+
$runner test_plus_one_ast_analyzer_strict_deps
70+
$runner test_stamped_target_label_loading
71+
$runner test_demonstrate_INCORRECT_scala_proto_library_stamp
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
load("@rules_proto//proto:defs.bzl", "proto_library")
2+
load("@rules_java//java:defs.bzl", "java_library")
3+
load("//scala:scala.bzl", "scala_library")
4+
load("//scala_proto:scala_proto.bzl", "scala_proto_library")
5+
6+
proto_library(
7+
name = "proto",
8+
srcs = ["some.proto"],
9+
)
10+
11+
scala_proto_library(
12+
name = "scala_proto",
13+
deps = [":proto"],
14+
)
15+
16+
scala_library(
17+
name = "uses_transitive_scala_proto",
18+
srcs = ["UseScalaProtoIndirectly.scala"],
19+
deps = [":transitive"],
20+
)
21+
22+
# java library is used to prevent label collection and force looking into jar stamp
23+
java_library(
24+
name = "transitive",
25+
srcs = ["UseTestMessage.java"],
26+
deps = [":scala_proto"],
27+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package scala_proto_deps
2+
3+
import some.TestMessage
4+
5+
class UseScalaProtoIndirectly {
6+
val foo: TestMessage = new UseTestMessage().getM
7+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package scala_proto_deps;
2+
3+
import some.TestMessage;
4+
5+
public class UseTestMessage {
6+
7+
private final TestMessage m = new TestMessage("");
8+
9+
public TestMessage getM() {
10+
return m;
11+
}
12+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
syntax = "proto3";
2+
3+
message TestMessage {
4+
string message = 1;
5+
}

test_rules_scala.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ $runner bazel test //test/... --extra_toolchains="//test_expect_failure/plus_one
4545
. "${test_dir}"/test_scala_library.sh
4646
. "${test_dir}"/test_scala_specs2.sh
4747
. "${test_dir}"/test_toolchain.sh
48+
. "${test_dir}"/test_strict_dependency.sh
4849
. "${test_dir}"/test_unused_dependency.sh
4950
. "${test_dir}"/test_twitter_scrooge.sh

0 commit comments

Comments
 (0)