From bde68a54cbe9e8566e0f3687f6651526bb336e01 Mon Sep 17 00:00:00 2001 From: Mike Bland Date: Thu, 31 Jul 2025 19:57:25 -0400 Subject: [PATCH] Simplify test_dependency_versions.sh Removes almost all of the copied `deps/test` sources and targets in favor of invoking `@rules_scala` and `@multi_frameworks_toolchain` tests directly. Moves targets depending on `@rules_python` and `@rules_shell` to new packages so test packages don't break when `@rules_scala` isn't the main module. Introduces `RULES_SCALA_TARGETS`, `MULTI_FRAMEWORKS_TOOLCHAIN_TARGETS`, and `ALL_TARGETS` arrays to easily specify compatibility test targets instead of copying them. Only keeps a single `ScalafmtTest` target within `deps/test/BUILD.bazel.test`, which is a special case (described below) and executes successfully on Windows. Though these are new packages, they're comprised of existing files and targets from their parent packages: - //test/jmh/runtime - //test/sh_tests - //test/src/main/scala/scalarules/test/twitter_scrooge/strings Also: - Marks every `bazel_dep` for `@latest_dependencies` with `dev_dependency = True`. - Replaces `$(location ...)` instances in moved targets with `$(rootpath ...)` (and in one case, with `$(execpath ...)`) per bazelbuild/bazel#25198. --- While drafting a blog post describing `test_dependency_versions.sh`, I revisited the decision to copy targets and files in #1729 and #1738. Executing test targets from `@rules_scala` directly from the test module actually works, making the test far less complex, and making for better testing advice. This required moving targets that referenced dev dependencies to their own packages, fixing `@rules_scala` test package breakages. Making the `@latest_dependencies` module a dev dependency eliminated module version warnings from `@multi_frameworks_toolchain`, since the test sets older dependency versions. Then making `@latest_dependencies` a dev dependency everywhere, instead of only in `@multi_frameworks_toolchain`, seemed more consistent. The test retains the `//:ScalafmtTest` target because `rules_scala` doesn't actually provide Scalafmt rules, but only provides `ext_scalafmt` to create custom rules, per: - docs/phase_scalafmt.md - docs/customizable_phase.md I discovered this after going down a rabbit hole regarding the implicitly defined (and ostensibly deprecated) `.format` and `.format-test` predeclared outputs for Scalafmt rules. Long story short, implicitly defined predeclared outputs have been "deprecated" since 2018-03-05, predating Bazel 0.28.0: - https://bazel.build/versions/8.3.0/extending/rules#requesting_output_files - https://bazel.build/versions/8.3.0/extending/rules#deprecated_predeclared_outputs - https://bazel.build/versions/8.3.0/rules/lib/globals/bzl#rule.outputs - 2018-03-05: Output Map Madness https://docs.google.com/document/d/1ic9lJPn-0VqgKcqSbclVWwYDW2eiV-9k6ZUK_xE6H5E/edit - 2019-04-08: bazelbuild/bazel#7977: incompatible_no_rule_outputs_param: disable outputs param of rule function https://github.com/bazelbuild/bazel/issues/7977 - 2019-06-07: Rollforward "Disable outputs param of rule function" with fix (introduced --incompatible_no_rule_outputs_param in Bazel 0.28.0) https://github.com/bazelbuild/bazel/commit/36c70a68b75e2fe06fc78ddc493a802d09fcadb1 - 2019-09-04: Document the replacements for the `outputs` parameter to the `rule()` function. (Bazel 1.0.0) https://github.com/bazelbuild/bazel/commit/e29dddaa2f2c95fd8e43b4dbfe335dbae8554095 However, I learned that the `.format` and `.format-test` targets are Bash scripts run _after_ the original rule executes Scalafmt. The generated scripts don't depend on the `//scala/scalafmt:scalafmt` binary at all. Plus, they only work when invoked within the main module, since they reference relative paths within `BUILD_WORKSPACE_DIRECTORY`. And finally, `bazel test @rules_scala//test/scalafmt:formatted-test` fails because it tries to declare output files in a nonexistent directory. ```txt ERROR: .../external/rules_scala~/test/scalafmt/BUILD:43:20: in scalafmt_scala_test rule @@rules_scala~//test/scalafmt:formatted-test: Traceback (most recent call last): File ".../external/rules_scala~/scala/private/rules/scala_test.bzl", line 38, column 22, in _scala_test_impl return run_phases( File ".../external/rules_scala~/scala/private/phases/api.bzl", line 45, column 23, in run_phases return _run_phases(ctx, builtin_customizable_phases, target = None) File ".../external/rules_scala~/scala/private/phases/api.bzl", line 77, column 32, in _run_phases new_provider = function(ctx, current_provider) File ".../external/rules_scala~/scala/private/phases/phase_scalafmt.bzl", line 10, column 46, in phase_scalafmt manifest, files, srcs = _build_format(ctx) File ".../external/rules_scala~/scala/private/phases/phase_scalafmt.bzl", line 30, column 44, in _build_format file = ctx.actions.declare_file("{}.fmt.output".format(src.short_path)) Error in declare_file: the output artifact 'external/rules_scala~/test/rules_scala~/test/scalafmt/formatted/formatted-test.scala.fmt.output' is not under package directory 'external/rules_scala~/test/scalafmt' for target '@@rules_scala~//test/scalafmt:formatted-test' ERROR: .../external/rules_scala~/test/scalafmt/BUILD:43:20: Analysis of target '@@rules_scala~//test/scalafmt:formatted-test' failed ``` So invoking `bazel test //:ScalafmtTest` (via `/...` from `ALL_TARGETS`) is sufficient, since we're only validating that the toolchains execute properly. (`test_scalafmt.sh` tests the behavior of the `.format` and `.format-test` scripts, _including_ on Windows via `--run_under=bash`.) This also means we can invoke this target on Windows, instead of having special case logic to avoid invoking the previous `bazel run` command. --- deps/test/BUILD.bazel.test | 153 +----------------- deps/test/HelloLib.scala | 22 --- deps/test/MODULE.bazel.template | 11 +- deps/test/ScalaBinary.scala | 21 --- deps/test/defs.bzl | 44 +---- dt_patches/test_dt_patches/MODULE.bazel | 2 +- .../test_dt_patches_user_srcjar/MODULE.bazel | 2 +- examples/crossbuild/MODULE.bazel | 2 +- examples/overridden_artifacts/MODULE.bazel | 2 +- examples/scala3/MODULE.bazel | 2 +- examples/semanticdb/MODULE.bazel | 2 +- .../multi_frameworks_toolchain/MODULE.bazel | 2 +- .../scalatest_repositories/MODULE.bazel | 2 +- .../specs2_junit_repositories/MODULE.bazel | 2 +- examples/twitter_scrooge/MODULE.bazel | 2 +- test/BUILD | 131 ++------------- test/jmh/BUILD | 27 ---- test/jmh/runtime/BUILD | 28 ++++ .../{ => runtime}/TestJmhRuntimeJdk11.scala | 0 .../{ => runtime}/TestJmhRuntimeJdk8.scala | 0 test/jmh/{ => runtime}/test_binary.sh | 0 test/sh_tests/BUILD | 117 ++++++++++++++ ...calaTestResourcesFromLocalTargetTest.scala | 4 +- test/{ => sh_tests}/jar_lister.py | 0 test/{ => sh_tests}/no_sigs.sh | 0 test/{ => sh_tests}/py_resource.py | 0 test/{ => sh_tests}/rootpaths_binary.sh | 0 test/{ => sh_tests}/test_binary.sh | 0 .../test_binary_run_with_large_classpath.sh | 0 ...a_library_outputs_mixed_java_scala_jars.sh | 0 .../scalarules/test/twitter_scrooge/BUILD | 58 ------- .../test/twitter_scrooge/strings/BUILD | 64 ++++++++ .../{ => strings}/string_in_file.sh | 0 .../string_in_filename_in_jar.sh | 0 test_cross_build/MODULE.bazel | 2 +- test_dependency_versions.sh | 52 +++--- test_rules_scala.sh | 2 +- test_version/MODULE.bazel.template | 2 +- third_party/test/proto/MODULE.bazel | 2 +- 39 files changed, 281 insertions(+), 479 deletions(-) delete mode 100644 deps/test/HelloLib.scala delete mode 100644 deps/test/ScalaBinary.scala create mode 100644 test/jmh/runtime/BUILD rename test/jmh/{ => runtime}/TestJmhRuntimeJdk11.scala (100%) rename test/jmh/{ => runtime}/TestJmhRuntimeJdk8.scala (100%) rename test/jmh/{ => runtime}/test_binary.sh (100%) create mode 100644 test/sh_tests/BUILD rename test/{ => sh_tests}/ScalaTestResourcesFromLocalTargetTest.scala (77%) rename test/{ => sh_tests}/jar_lister.py (100%) rename test/{ => sh_tests}/no_sigs.sh (100%) rename test/{ => sh_tests}/py_resource.py (100%) rename test/{ => sh_tests}/rootpaths_binary.sh (100%) rename test/{ => sh_tests}/test_binary.sh (100%) rename test/{ => sh_tests}/test_binary_run_with_large_classpath.sh (100%) rename test/{ => sh_tests}/test_scala_library_outputs_mixed_java_scala_jars.sh (100%) create mode 100644 test/src/main/scala/scalarules/test/twitter_scrooge/strings/BUILD rename test/src/main/scala/scalarules/test/twitter_scrooge/{ => strings}/string_in_file.sh (100%) rename test/src/main/scala/scalarules/test/twitter_scrooge/{ => strings}/string_in_filename_in_jar.sh (100%) diff --git a/deps/test/BUILD.bazel.test b/deps/test/BUILD.bazel.test index 68e6338ba..6fa66b66e 100644 --- a/deps/test/BUILD.bazel.test +++ b/deps/test/BUILD.bazel.test @@ -1,156 +1,11 @@ -"""Test targets to ensure dependency version compatibility. +"""Test targets to ensure dependency version compatibility.""" -Copied and adapted targets from the main repo as noted. -""" -load( - ":defs.bzl", - "default_outputs_test", - "scalafmt_scala_test", - "scrooge_transitive_outputs_test", -) -load("@rules_java//java:defs.bzl", "java_library") -load("@rules_proto//proto:defs.bzl", "proto_library") -load("@rules_scala//jmh:jmh.bzl", "scala_benchmark_jmh") -load("@rules_scala//scala/scalafmt:phase_scalafmt_ext.bzl", "ext_scalafmt") -load("@rules_scala//scala:advanced_usage/scala.bzl", "make_scala_test") -load( - "@rules_scala//scala:scala.bzl", - "scala_binary", - "scala_doc", - "scala_junit_test", - "scala_library", - "scala_specs2_junit_test", - "scala_test", -) -load("@rules_scala//scala_proto:scala_proto.bzl", "scala_proto_library") -load("@rules_scala//thrift:thrift.bzl", "thrift_library") -load( - "@rules_scala//twitter_scrooge:twitter_scrooge.bzl", - "scrooge_java_library", - "scrooge_scala_library", -) - -# From: `test/BUILD` -scala_binary( - name = "ScalaBinary", - srcs = ["ScalaBinary.scala"], - main_class = "scalarules.test.ScalaBinary", - deps = [ - ":HelloLib", - ], -) - -scala_library( - name = "HelloLib", - srcs = ["HelloLib.scala"], -) - -scala_doc( - name = "ScalaDoc", - deps = [":HelloLib"], -) - -# From: `examples/testing/multi_frameworks_toolchain/example/BUILD` -scala_test( - name = "scalatest_example", - srcs = ["ScalaTestExampleTest.scala"], -) +load(":defs.bzl", "scalafmt_scala_test") -scala_specs2_junit_test( - name = "specs2_example", - srcs = ["Specs2ExampleTest.scala"], - suffixes = ["Test"], -) - -# Manufactured based on `docs/phase_scalafmt.md` and `test/scalafmt/BUILD`. +# Based on `docs/phase_scalafmt.md`, `test/scalafmt/BUILD`, and a copy of: +# examples/testing/multi_frameworks_toolchain/example/ScalaTestExampleTest.scala scalafmt_scala_test( name = "ScalafmtTest", srcs = ["ScalaTestExampleTest.scala"], format = True, ) - -# From: `test/proto/BUILD` -proto_library( - name = "standalone_proto", - srcs = ["standalone.proto"], -) - -scala_proto_library( - name = "standalone_scala_proto", - deps = [":standalone_proto"], -) - -default_outputs_test( - name = "standalone_scala_proto_outs_test", - expected_outs = [ - "standalone_proto_scalapb-src.jar", - "standalone_proto_scalapb.jar", - ], - target_under_test = ":standalone_scala_proto", -) - -# From: `test/jmh/BUILD` -java_library( - name = "java_type", - srcs = ["JavaType.java"], - visibility = ["//visibility:public"], -) - -scala_library( - name = "scala_type", - srcs = ["ScalaType.scala"], - visibility = ["//visibility:public"], -) - -scala_library( - name = "add_numbers", - srcs = ["AddNumbers.scala"], - visibility = ["//visibility:public"], - exports = [ - ":java_type", - ":scala_type", - ], - deps = [ - ":java_type", - ":scala_type", - ], -) - -scala_benchmark_jmh( - name = "test_benchmark", - srcs = ["TestBenchmark.scala"], - data = ["data.txt"], - deps = [":add_numbers"], -) - -# From: `test/src/main/scala/scalarules/test/twitter_scrooge/BUILD` - -thrift_library( - name = "thrift3", - srcs = ["Thrift3.thrift"], - visibility = ["//visibility:public"], -) - -scrooge_scala_library( - name = "scrooge3", - visibility = ["//visibility:public"], - deps = [":thrift3"], -) - -scrooge_java_library( - name = "scrooge3_java", - visibility = ["//visibility:public"], - deps = [":thrift3"], -) - -scrooge_transitive_outputs_test( - name = "scrooge_test_scala", - dep = ":scrooge3", - expected_jars = ["thrift3_scrooge_scala.jar"], -) - -scrooge_transitive_outputs_test( - name = "scrooge_test_java", - dep = ":scrooge3_java", - expected_jars = ["thrift3_scrooge_java.jar"], -) diff --git a/deps/test/HelloLib.scala b/deps/test/HelloLib.scala deleted file mode 100644 index 612c9e851..000000000 --- a/deps/test/HelloLib.scala +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2016 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package scalarules.test - -object HelloLib { - def printMessage(arg: String) { - println(arg) - } -} - diff --git a/deps/test/MODULE.bazel.template b/deps/test/MODULE.bazel.template index 2b5f8a466..4aceeaa5e 100644 --- a/deps/test/MODULE.bazel.template +++ b/deps/test/MODULE.bazel.template @@ -1,9 +1,6 @@ """Bazel module template for test/shell/test_deps_versions.sh tests.""" -module( - name = "rules_scala_deps_versions_test", - bazel_compatibility = [">=${bazelversion}"], -) +module(name = "rules_scala_deps_versions_test") bazel_dep(name = "rules_scala") local_path_override( @@ -11,6 +8,12 @@ local_path_override( path = "../..", ) +bazel_dep(name = "multi_frameworks_toolchain") +local_path_override( + module_name = "multi_frameworks_toolchain", + path = "../../examples/testing/multi_frameworks_toolchain", +) + bazel_dep(name = "bazel_skylib") single_version_override( module_name = "bazel_skylib", diff --git a/deps/test/ScalaBinary.scala b/deps/test/ScalaBinary.scala deleted file mode 100644 index 1cf084ee9..000000000 --- a/deps/test/ScalaBinary.scala +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2016 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package scalarules.test - -object ScalaBinary { - def main(args: Array[String]) { - HelloLib.printMessage("Hello"); - } -} diff --git a/deps/test/defs.bzl b/deps/test/defs.bzl index 5fe0187c9..cdc1aa8ee 100644 --- a/deps/test/defs.bzl +++ b/deps/test/defs.bzl @@ -1,47 +1,7 @@ -load("@bazel_skylib//lib:collections.bzl", "collections") -load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts", "unittest") -load("@rules_java//java/common:java_info.bzl", "JavaInfo") +"""Utilities required for dependency compatibility tests.""" + load("@rules_scala//scala:advanced_usage/scala.bzl", "make_scala_test") load("@rules_scala//scala/scalafmt:phase_scalafmt_ext.bzl", "ext_scalafmt") # From //test/scalafmt:phase_scalafmt_test.bzl scalafmt_scala_test = make_scala_test(ext_scalafmt) - -# From //test/proto:default_outputs_test.bzl -def _default_outputs_test(ctx): - env = analysistest.begin(ctx) - - target_under_test = analysistest.target_under_test(env) - actual_outs = [f.basename for f in target_under_test[DefaultInfo].files.to_list()] - - asserts.equals(env, sorted(ctx.attr.expected_outs), sorted(actual_outs)) - - return analysistest.end(env) - -default_outputs_test = analysistest.make( - _default_outputs_test, - attrs = { - "expected_outs": attr.string_list(), - }, -) - -# From -# //test/src/main/scala/scalarules/test/twitter_scrooge:twitter_scrooge_test.bzl -def _scrooge_transitive_outputs(ctx): - env = unittest.begin(ctx) - - asserts.equals( - env, - sorted(ctx.attr.expected_jars), - sorted(collections.uniq([out.class_jar.basename for out in ctx.attr.dep[JavaInfo].outputs.jars])), - ) - - return unittest.end(env) - -scrooge_transitive_outputs_test = unittest.make( - _scrooge_transitive_outputs, - attrs = { - "dep": attr.label(), - "expected_jars": attr.string_list(), - }, -) diff --git a/dt_patches/test_dt_patches/MODULE.bazel b/dt_patches/test_dt_patches/MODULE.bazel index b1a0d8adc..65688d179 100644 --- a/dt_patches/test_dt_patches/MODULE.bazel +++ b/dt_patches/test_dt_patches/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/dt_patches/test_dt_patches_user_srcjar/MODULE.bazel b/dt_patches/test_dt_patches_user_srcjar/MODULE.bazel index 42ce269ca..3e65f9330 100644 --- a/dt_patches/test_dt_patches_user_srcjar/MODULE.bazel +++ b/dt_patches/test_dt_patches_user_srcjar/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/examples/crossbuild/MODULE.bazel b/examples/crossbuild/MODULE.bazel index 4c9be3de3..832505b03 100644 --- a/examples/crossbuild/MODULE.bazel +++ b/examples/crossbuild/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/examples/overridden_artifacts/MODULE.bazel b/examples/overridden_artifacts/MODULE.bazel index 00e144144..b0c471633 100644 --- a/examples/overridden_artifacts/MODULE.bazel +++ b/examples/overridden_artifacts/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/examples/scala3/MODULE.bazel b/examples/scala3/MODULE.bazel index 57c5c9d01..fd11c30fc 100644 --- a/examples/scala3/MODULE.bazel +++ b/examples/scala3/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/examples/semanticdb/MODULE.bazel b/examples/semanticdb/MODULE.bazel index c325c300b..2327bd811 100644 --- a/examples/semanticdb/MODULE.bazel +++ b/examples/semanticdb/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/examples/testing/multi_frameworks_toolchain/MODULE.bazel b/examples/testing/multi_frameworks_toolchain/MODULE.bazel index 49526cefa..3a02671c6 100644 --- a/examples/testing/multi_frameworks_toolchain/MODULE.bazel +++ b/examples/testing/multi_frameworks_toolchain/MODULE.bazel @@ -12,7 +12,7 @@ local_path_override( path = "../../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../../deps/latest", diff --git a/examples/testing/scalatest_repositories/MODULE.bazel b/examples/testing/scalatest_repositories/MODULE.bazel index f6edd30fc..0cc31b5af 100644 --- a/examples/testing/scalatest_repositories/MODULE.bazel +++ b/examples/testing/scalatest_repositories/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../../deps/latest", diff --git a/examples/testing/specs2_junit_repositories/MODULE.bazel b/examples/testing/specs2_junit_repositories/MODULE.bazel index be4e490e2..6657ca2b4 100644 --- a/examples/testing/specs2_junit_repositories/MODULE.bazel +++ b/examples/testing/specs2_junit_repositories/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../../deps/latest", diff --git a/examples/twitter_scrooge/MODULE.bazel b/examples/twitter_scrooge/MODULE.bazel index 523aa795f..5dc0d9af7 100644 --- a/examples/twitter_scrooge/MODULE.bazel +++ b/examples/twitter_scrooge/MODULE.bazel @@ -7,7 +7,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/test/BUILD b/test/BUILD index 08220d003..ffa7a9cc3 100644 --- a/test/BUILD +++ b/test/BUILD @@ -1,7 +1,5 @@ load("@rules_java//java:defs.bzl", "java_binary", "java_library") -load("@rules_python//python:defs.bzl", "py_binary") load("@rules_scala_config//:config.bzl", "SCALA_VERSION") -load("@rules_shell//shell:sh_test.bzl", "sh_test") load( "//scala:scala.bzl", "scala_binary", @@ -18,7 +16,10 @@ load( load("//scala:scala_cross_version.bzl", "repositories") load(":check_statsfile.bzl", "check_statsfile") -package(default_testonly = 1) +package( + default_testonly = 1, + default_visibility = ["//test/sh_tests:__pkg__"], +) _JUNIT_DEPS = repositories( SCALA_VERSION, @@ -122,7 +123,7 @@ scala_test_suite( size = "small", # Not a macro, can pass test-specific attributes. srcs = ["ScalaTestData.scala"], data = ["//test/data:foo.txt"], - jvm_flags = ["-Dtext=$(location //test/data:foo.txt)"], + jvm_flags = ["-Dtext=$(rootpath //test/data:foo.txt)"], scalac_jvm_flags = [ "-Xms1G", "-Xmx4G", @@ -155,6 +156,14 @@ scala_doc( ], ) +scala_doc( + name = "ScalaDocTestLibsOnly", + deps = [ + ":HelloLib", + ":OtherLib", + ], +) + scala_library( name = "UnusedLib", srcs = ["UnusedLib.scala"], @@ -297,20 +306,6 @@ scala_library( ]), ) -genrule( - name = "MixJavaScalaLibTestOutputs", - outs = ["mix_java_scala_lib_test_rule_outputs.txt"], - cmd = "echo $(locations MixJavaScalaLib) > $@", - tools = [":MixJavaScalaLib"], -) - -sh_test( - name = "MixJavaScalaLibTest", - srcs = ["test_scala_library_outputs_mixed_java_scala_jars.sh"], - args = ["$(location MixJavaScalaLibTestOutputs) MixJavaScalaLib"], - data = ["MixJavaScalaLibTestOutputs"], -) - scala_binary( name = "MixJavaScalaBinary", srcs = ["src/main/scala/scalarules/test/MixJavaScalaLibBinary.scala"] + glob([ @@ -458,32 +453,6 @@ scala_specs2_junit_test( ], ) -# Make sure scala_binary works in test environment -[sh_test( - name = "Run" + "".join([binary[idx] if binary[idx].isalnum() else "_" for idx in range(len(binary))]), - srcs = ["test_binary.sh"], - args = ["$(location %s)" % binary], - data = [binary if (":" in binary) else (":%s" % binary)], -) for binary in [ - "JavaBinary", - "JavaBinary2", - "JavaOnlySources", - "MixJavaScalaLibBinary", - "MixJavaScalaSrcjarLibBinary", - "ScalaBinary", - "ScalaLibBinary", - "ResourcesStripScalaBinary", - "ScalaBinary_dependent_on_binary_with_java", - "//test/src/main/scala/scalarules/test/classpath_resources:classpath_resource", - "//test/src/main/scala/scalarules/test/twitter_scrooge:justscrooges", - "//test/src/main/scala/scalarules/test/twitter_scrooge:barethrifts", - "//test/src/main/scala/scalarules/test/twitter_scrooge:twodeep_binary", - "//test/src/main/scala/scalarules/test/twitter_scrooge:justscrooge2b_binary", - "//test/src/main/scala/scalarules/test/large_classpath:largeClasspath", - "//test:test_scala_proto_server", - "//test:scala_binary_jdk_11", -]] - # Make sure scala_binary respects runtime_jdk on bazel run scala_binary( name = "scala_binary_jdk_11", @@ -503,54 +472,12 @@ scala_junit_test( ], ) -# Generate a file containing the rootpaths of a Scala binary. -genrule( - name = "rootpath-script", - srcs = [":ScalaBinary"], - outs = ["rootpath-script.out"], - cmd = """ - rootpaths=($(rootpaths {})) - (IFS='\n'; echo "$${{rootpaths[*]}}") | sort > $@ - """.format(":ScalaBinary"), -) - -# Validate that the rootpaths point to both the binary -# and the JAR. -sh_test( - name = "ScalaBinaryRootpaths", - srcs = ["rootpaths_binary.sh"], - args = ["$(location :rootpath-script.out)"], - data = [":rootpath-script.out"], -) - -sh_test( - name = "test_binary_run_with_large_classpath", - srcs = ["test_binary_run_with_large_classpath.sh"], - args = ["$(location //test/src/main/scala/scalarules/test/large_classpath:largeClasspath)"], - data = ["//test/src/main/scala/scalarules/test/large_classpath:largeClasspath"], -) - -# Make sure scala_binary works in genrule environment -genrule( - name = "ScalaBinaryInGenrule", - outs = ["scala_binary_out.txt"], - cmd = "$(location :ScalaBinary) > $@", - tools = [":ScalaBinary"], -) - -sh_test( - name = "TestScalaBinaryInGenrule", - srcs = ["test_binary.sh"], - args = ["cat $(location :ScalaBinaryInGenrule)"], - data = [":ScalaBinaryInGenrule"], -) - scala_specs2_junit_test( name = "data_location_expansion", size = "small", srcs = ["src/main/scala/scalarules/test/location_expansion/LocationExpansionTest.scala"], data = ["@bazel_tools//src/main/protobuf:worker_protocol_java_proto"], - jvm_flags = ["-Dlocation.expanded='$(locations @bazel_tools//src/main/protobuf:worker_protocol_java_proto)'"], + jvm_flags = ["-Dlocation.expanded='$(rootpaths @bazel_tools//src/main/protobuf:worker_protocol_java_proto)'"], suffixes = ["Test"], ) @@ -646,24 +573,6 @@ scala_binary( ], ) -py_binary( - name = "jar_lister", - srcs = ["jar_lister.py"], -) - -sh_test( - name = "no_sig", - srcs = ["no_sigs.sh"], - args = [ - "$(location //test:jar_lister)", - "$(location //test:ScalaBinary_with_fake_deploy.jar)", - ], - data = [ - ":ScalaBinary_with_fake_deploy.jar", - ":jar_lister", - ], -) - scala_binary( name = "ScalaBinary_with_service_manifest_srcs", srcs = ["A.scala"], @@ -820,15 +729,3 @@ scala_junit_test( }, suffixes = ["Test"], ) - -py_binary( - name = "py_resource_binary", - srcs = ["py_resource.py"], - main = "py_resource.py", -) - -scala_test( - name = "ScalaTestResourcesFromLocalTargetTest", - srcs = ["ScalaTestResourcesFromLocalTargetTest.scala"], - resources = [":py_resource_binary"], -) diff --git a/test/jmh/BUILD b/test/jmh/BUILD index fca445c5c..2243cbb7f 100644 --- a/test/jmh/BUILD +++ b/test/jmh/BUILD @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_library") -load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//jmh:jmh.bzl", "scala_benchmark_jmh") load("//scala:scala.bzl", "scala_library", "scala_test") @@ -51,32 +50,6 @@ scala_benchmark_jmh( deps = [":add_numbers"], ) -scala_benchmark_jmh( - name = "test_jmh_jdk8", - srcs = ["TestJmhRuntimeJdk8.scala"], - runtime_jdk = select({ - "@bazel_tools//src/conditions:darwin": "@remote_jdk8_macos//:jdk", - "@bazel_tools//src/conditions:windows": "@remote_jdk8_windows//:jdk", - "//conditions:default": "@remote_jdk8_linux//:jdk", - }), -) - -scala_benchmark_jmh( - name = "test_jmh_jdk11", - srcs = ["TestJmhRuntimeJdk11.scala"], - runtime_jdk = "@rules_java//toolchains:remote_jdk11", -) - -[sh_test( - name = "Run" + "".join([binary[idx] if binary[idx].isalnum() else "_" for idx in range(len(binary))]), - srcs = ["test_binary.sh"], - args = ["$(location %s)" % binary], - data = [binary if (":" in binary) else (":%s" % binary)], -) for binary in [ - "//test/jmh:test_jmh_jdk8", - "//test/jmh:test_jmh_jdk11", -]] - scala_benchmark_jmh( name = "test_benchmark_testonly", testonly = True, diff --git a/test/jmh/runtime/BUILD b/test/jmh/runtime/BUILD new file mode 100644 index 000000000..8bd00b9d6 --- /dev/null +++ b/test/jmh/runtime/BUILD @@ -0,0 +1,28 @@ +load("@rules_shell//shell:sh_test.bzl", "sh_test") +load("//jmh:jmh.bzl", "scala_benchmark_jmh") + +scala_benchmark_jmh( + name = "test_jmh_jdk8", + srcs = ["TestJmhRuntimeJdk8.scala"], + runtime_jdk = select({ + "@bazel_tools//src/conditions:darwin": "@remote_jdk8_macos//:jdk", + "@bazel_tools//src/conditions:windows": "@remote_jdk8_windows//:jdk", + "//conditions:default": "@remote_jdk8_linux//:jdk", + }), +) + +scala_benchmark_jmh( + name = "test_jmh_jdk11", + srcs = ["TestJmhRuntimeJdk11.scala"], + runtime_jdk = "@rules_java//toolchains:remote_jdk11", +) + +[sh_test( + name = "Run" + "".join([binary[idx] if binary[idx].isalnum() else "_" for idx in range(len(binary))]), + srcs = ["test_binary.sh"], + args = ["$(rootpath %s)" % binary], + data = [binary if (":" in binary) else (":%s" % binary)], +) for binary in [ + ":test_jmh_jdk8", + ":test_jmh_jdk11", +]] diff --git a/test/jmh/TestJmhRuntimeJdk11.scala b/test/jmh/runtime/TestJmhRuntimeJdk11.scala similarity index 100% rename from test/jmh/TestJmhRuntimeJdk11.scala rename to test/jmh/runtime/TestJmhRuntimeJdk11.scala diff --git a/test/jmh/TestJmhRuntimeJdk8.scala b/test/jmh/runtime/TestJmhRuntimeJdk8.scala similarity index 100% rename from test/jmh/TestJmhRuntimeJdk8.scala rename to test/jmh/runtime/TestJmhRuntimeJdk8.scala diff --git a/test/jmh/test_binary.sh b/test/jmh/runtime/test_binary.sh similarity index 100% rename from test/jmh/test_binary.sh rename to test/jmh/runtime/test_binary.sh diff --git a/test/sh_tests/BUILD b/test/sh_tests/BUILD new file mode 100644 index 000000000..741ead320 --- /dev/null +++ b/test/sh_tests/BUILD @@ -0,0 +1,117 @@ +load("@rules_python//python:defs.bzl", "py_binary") +load("@rules_shell//shell:sh_test.bzl", "sh_test") +load("//scala:scala.bzl", "scala_test") + +package(default_testonly = 1) + +genrule( + name = "MixJavaScalaLibTestOutputs", + outs = ["mix_java_scala_lib_test_rule_outputs.txt"], + cmd = "echo $(rootpaths //test:MixJavaScalaLib) > $@", + tools = ["//test:MixJavaScalaLib"], +) + +sh_test( + name = "MixJavaScalaLibTest", + srcs = ["test_scala_library_outputs_mixed_java_scala_jars.sh"], + args = ["$(rootpath MixJavaScalaLibTestOutputs) MixJavaScalaLib"], + data = ["MixJavaScalaLibTestOutputs"], +) + +# Make sure scala_binary works in test environment +[sh_test( + name = "Run" + "".join([binary[idx] if binary[idx].isalnum() else "_" for idx in range(len(binary))]), + srcs = ["test_binary.sh"], + args = ["$(rootpath %s)" % binary], + data = [binary if (":" in binary) else (":%s" % binary)], +) for binary in [ + "//test:JavaBinary", + "//test:JavaBinary2", + "//test:JavaOnlySources", + "//test:MixJavaScalaLibBinary", + "//test:MixJavaScalaSrcjarLibBinary", + "//test:ScalaBinary", + "//test:ScalaLibBinary", + "//test:ResourcesStripScalaBinary", + "//test:ScalaBinary_dependent_on_binary_with_java", + "//test/src/main/scala/scalarules/test/classpath_resources:classpath_resource", + "//test/src/main/scala/scalarules/test/twitter_scrooge:justscrooges", + "//test/src/main/scala/scalarules/test/twitter_scrooge:barethrifts", + "//test/src/main/scala/scalarules/test/twitter_scrooge:twodeep_binary", + "//test/src/main/scala/scalarules/test/twitter_scrooge:justscrooge2b_binary", + "//test/src/main/scala/scalarules/test/large_classpath:largeClasspath", + "//test:test_scala_proto_server", + "//test:scala_binary_jdk_11", +]] + +# Generate a file containing the rootpaths of a Scala binary. +genrule( + name = "rootpath-script", + srcs = ["//test:ScalaBinary"], + outs = ["rootpath-script.out"], + cmd = """ + rootpaths=($(rootpaths {})) + (IFS='\n'; echo "$${{rootpaths[*]}}") | sort > $@ + """.format("//test:ScalaBinary"), +) + +# Validate that the rootpaths point to both the binary +# and the JAR. +sh_test( + name = "ScalaBinaryRootpaths", + srcs = ["rootpaths_binary.sh"], + args = ["$(rootpath :rootpath-script.out)"], + data = [":rootpath-script.out"], +) + +sh_test( + name = "test_binary_run_with_large_classpath", + srcs = ["test_binary_run_with_large_classpath.sh"], + args = ["$(rootpath //test/src/main/scala/scalarules/test/large_classpath:largeClasspath)"], + data = ["//test/src/main/scala/scalarules/test/large_classpath:largeClasspath"], +) + +# Make sure scala_binary works in genrule environment +genrule( + name = "ScalaBinaryInGenrule", + outs = ["scala_binary_out.txt"], + cmd = "$(execpath //test:ScalaBinary) > $@", + tools = ["//test:ScalaBinary"], +) + +sh_test( + name = "TestScalaBinaryInGenrule", + srcs = ["test_binary.sh"], + args = ["cat $(rootpath :ScalaBinaryInGenrule)"], + data = [":ScalaBinaryInGenrule"], +) + +py_binary( + name = "jar_lister", + srcs = ["jar_lister.py"], +) + +sh_test( + name = "no_sig", + srcs = ["no_sigs.sh"], + args = [ + "$(rootpath :jar_lister)", + "$(rootpath //test:ScalaBinary_with_fake_deploy.jar)", + ], + data = [ + ":jar_lister", + "//test:ScalaBinary_with_fake_deploy.jar", + ], +) + +py_binary( + name = "py_resource_binary", + srcs = ["py_resource.py"], + main = "py_resource.py", +) + +scala_test( + name = "ScalaTestResourcesFromLocalTargetTest", + srcs = ["ScalaTestResourcesFromLocalTargetTest.scala"], + resources = [":py_resource_binary"], +) diff --git a/test/ScalaTestResourcesFromLocalTargetTest.scala b/test/sh_tests/ScalaTestResourcesFromLocalTargetTest.scala similarity index 77% rename from test/ScalaTestResourcesFromLocalTargetTest.scala rename to test/sh_tests/ScalaTestResourcesFromLocalTargetTest.scala index f4b369ac4..075739c64 100644 --- a/test/ScalaTestResourcesFromLocalTargetTest.scala +++ b/test/sh_tests/ScalaTestResourcesFromLocalTargetTest.scala @@ -7,8 +7,8 @@ class ScalaTestResourcesFromLocalTargetTest extends AnyFlatSpec { "assert that local target is not placed in bazel-out, but rather next to the packaged code" in { val fileExt = if (isWindows) ".exe" else "" - assert(getClass.getResource("/bazel-out/darwin-fastbuild/bin/test/py_resource_binary" + fileExt) == null) - assert(getClass.getResource("/test/py_resource_binary"+ fileExt) != null) + assert(getClass.getResource("/bazel-out/darwin-fastbuild/bin/test/sh_tests/py_resource_binary" + fileExt) == null) + assert(getClass.getResource("/test/sh_tests/py_resource_binary"+ fileExt) != null) } def isWindows = System.getProperty("os.name").toLowerCase.contains("windows") diff --git a/test/jar_lister.py b/test/sh_tests/jar_lister.py similarity index 100% rename from test/jar_lister.py rename to test/sh_tests/jar_lister.py diff --git a/test/no_sigs.sh b/test/sh_tests/no_sigs.sh similarity index 100% rename from test/no_sigs.sh rename to test/sh_tests/no_sigs.sh diff --git a/test/py_resource.py b/test/sh_tests/py_resource.py similarity index 100% rename from test/py_resource.py rename to test/sh_tests/py_resource.py diff --git a/test/rootpaths_binary.sh b/test/sh_tests/rootpaths_binary.sh similarity index 100% rename from test/rootpaths_binary.sh rename to test/sh_tests/rootpaths_binary.sh diff --git a/test/test_binary.sh b/test/sh_tests/test_binary.sh similarity index 100% rename from test/test_binary.sh rename to test/sh_tests/test_binary.sh diff --git a/test/test_binary_run_with_large_classpath.sh b/test/sh_tests/test_binary_run_with_large_classpath.sh similarity index 100% rename from test/test_binary_run_with_large_classpath.sh rename to test/sh_tests/test_binary_run_with_large_classpath.sh diff --git a/test/test_scala_library_outputs_mixed_java_scala_jars.sh b/test/sh_tests/test_scala_library_outputs_mixed_java_scala_jars.sh similarity index 100% rename from test/test_scala_library_outputs_mixed_java_scala_jars.sh rename to test/sh_tests/test_scala_library_outputs_mixed_java_scala_jars.sh diff --git a/test/src/main/scala/scalarules/test/twitter_scrooge/BUILD b/test/src/main/scala/scalarules/test/twitter_scrooge/BUILD index 746741530..e6001ebd2 100644 --- a/test/src/main/scala/scalarules/test/twitter_scrooge/BUILD +++ b/test/src/main/scala/scalarules/test/twitter_scrooge/BUILD @@ -1,5 +1,4 @@ load("@rules_java//java:defs.bzl", "java_binary") -load("@rules_shell//shell:sh_test.bzl", "sh_test") load("//scala:scala.bzl", "scala_binary", "scala_library") load("//test/src/main/scala/scalarules/test/twitter_scrooge:twitter_scrooge_test.bzl", "twitter_scrooge_test_suite") load("//twitter_scrooge:twitter_scrooge.bzl", "scrooge_java_library", "scrooge_scala_library") @@ -319,61 +318,4 @@ scala_binary( deps = [":barethriftslib"], ) -sh_test( - name = "libthrift2_a_not_on_classpath", - srcs = ["string_in_file.sh"], - args = [ - "false", - "libthrift2_a", - "$(location :justscrooges)", - ], - data = [":justscrooges"], -) - -sh_test( - name = "java_jar_not_on_classpath", - srcs = ["string_in_file.sh"], - args = [ - "false", - "_java.jar", - "$(location :justscrooges)", - ], - data = [":justscrooges"], -) - -sh_test( - name = "java_jar_on_classpath_in_scrooges", - srcs = ["string_in_file.sh"], - args = [ - "true", - "_java.jar", - "$(location :justscrooges_java)", - ], - data = [":justscrooges_java"], -) - -sh_test( - name = "thrift999_in_namespace_in_java_jar", - srcs = ["string_in_filename_in_jar.sh"], - args = [ - "true", - "thrift/thrift_with_compiler_args/thrift5_scrooge_java.jar", - "thrift999", - "$(locations :justscrooges_java)", - ], - data = [":justscrooges_java"], -) - -sh_test( - name = "thrift5_not_in_namespace_in_java_jar", - srcs = ["string_in_filename_in_jar.sh"], - args = [ - "false", - "thrift/thrift_with_compiler_args/thrift5_scrooge_java.jar", - "thrift5", - "$(locations :justscrooges_java)", - ], - data = [":justscrooges_java"], -) - twitter_scrooge_test_suite() diff --git a/test/src/main/scala/scalarules/test/twitter_scrooge/strings/BUILD b/test/src/main/scala/scalarules/test/twitter_scrooge/strings/BUILD new file mode 100644 index 000000000..d616558e8 --- /dev/null +++ b/test/src/main/scala/scalarules/test/twitter_scrooge/strings/BUILD @@ -0,0 +1,64 @@ +load("@rules_shell//shell:sh_test.bzl", "sh_test") + +_PARENT = "//test/src/main/scala/scalarules/test/twitter_scrooge" + +_JUSTSCROOGES = _PARENT + ":justscrooges" + +_JUSTSCROOGES_JAVA = _PARENT + ":justscrooges_java" + +sh_test( + name = "libthrift2_a_not_on_classpath", + srcs = ["string_in_file.sh"], + args = [ + "false", + "libthrift2_a", + "$(rootpath %s)" % _JUSTSCROOGES, + ], + data = [_JUSTSCROOGES], +) + +sh_test( + name = "java_jar_not_on_classpath", + srcs = ["string_in_file.sh"], + args = [ + "false", + "_java.jar", + "$(rootpath %s)" % _JUSTSCROOGES, + ], + data = [_JUSTSCROOGES], +) + +sh_test( + name = "java_jar_on_classpath_in_scrooges", + srcs = ["string_in_file.sh"], + args = [ + "true", + "_java.jar", + "$(rootpath %s)" % _JUSTSCROOGES_JAVA, + ], + data = [_JUSTSCROOGES_JAVA], +) + +sh_test( + name = "thrift999_in_namespace_in_java_jar", + srcs = ["string_in_filename_in_jar.sh"], + args = [ + "true", + "thrift/thrift_with_compiler_args/thrift5_scrooge_java.jar", + "thrift999", + "$(rootpaths %s)" % _JUSTSCROOGES_JAVA, + ], + data = [_JUSTSCROOGES_JAVA], +) + +sh_test( + name = "thrift5_not_in_namespace_in_java_jar", + srcs = ["string_in_filename_in_jar.sh"], + args = [ + "false", + "thrift/thrift_with_compiler_args/thrift5_scrooge_java.jar", + "thrift5", + "$(rootpaths %s)" % _JUSTSCROOGES_JAVA, + ], + data = [_JUSTSCROOGES_JAVA], +) diff --git a/test/src/main/scala/scalarules/test/twitter_scrooge/string_in_file.sh b/test/src/main/scala/scalarules/test/twitter_scrooge/strings/string_in_file.sh similarity index 100% rename from test/src/main/scala/scalarules/test/twitter_scrooge/string_in_file.sh rename to test/src/main/scala/scalarules/test/twitter_scrooge/strings/string_in_file.sh diff --git a/test/src/main/scala/scalarules/test/twitter_scrooge/string_in_filename_in_jar.sh b/test/src/main/scala/scalarules/test/twitter_scrooge/strings/string_in_filename_in_jar.sh similarity index 100% rename from test/src/main/scala/scalarules/test/twitter_scrooge/string_in_filename_in_jar.sh rename to test/src/main/scala/scalarules/test/twitter_scrooge/strings/string_in_filename_in_jar.sh diff --git a/test_cross_build/MODULE.bazel b/test_cross_build/MODULE.bazel index e2c463a53..e3f8a74d7 100644 --- a/test_cross_build/MODULE.bazel +++ b/test_cross_build/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../deps/latest", diff --git a/test_dependency_versions.sh b/test_dependency_versions.sh index 072f8ddd8..76c20012d 100755 --- a/test_dependency_versions.sh +++ b/test_dependency_versions.sh @@ -41,10 +41,30 @@ teardown_suite() { # Explicitly disable this, since this test sets the Bazel version. export USE_BAZEL_VERSION="" +RULES_SCALA_TARGETS=( + "//test:HelloLibTest" + "//test:ScalaBinary" + "//test:ScalaDocTestLibsOnly" + "//test/jmh:jmh_command_line_parsing_test" + "//test/proto:standalone_scala_proto_outs_test" + "//test/src/main/scala/scalarules/test/twitter_scrooge:twitter_scrooge_tests" +) + +MULTI_FRAMEWORKS_TOOLCHAIN_TARGETS=( + "//example:scalatest_example" + "//example:specs2_example" +) + +ALL_TARGETS=( + "//..." + "${RULES_SCALA_TARGETS[@]/#/@rules_scala}" + "${MULTI_FRAMEWORKS_TOOLCHAIN_TARGETS[@]/#/@multi_frameworks_toolchain}" +) + do_build_and_test() { # These are the minimum versions as described in `README.md` and as set in the # top level `MODULE.bazel` file. Update both if/when the first test test - # fails. If another test fails, update the `README.md` informaton. + # fails. If another test fails, update the `README.md` information. local bazelversion="7.1.0" local skylib_version="1.6.0" local platforms_version="0.0.9" @@ -92,7 +112,6 @@ do_build_and_test() { done echo "$bazelversion" >.bazelversion - cp "${dir}/deps/test/BUILD.bazel.test" BUILD # Set up .bazelrc printf '%s\n' \ @@ -129,15 +148,14 @@ do_build_and_test() { fi # Set up the `protobuf` precompiled protocol compiler toolchain patch. - if [[ "${protobuf_version:0:3}" =~ ^(29|30)\. ]]; then + if [[ "${protobuf_version:0:3}" =~ ^(29|[3-9][0-9]+)\. ]]; then cp "${dir}/protoc/0001-protobuf-19679-rm-protoc-dep.patch" ./protobuf.patch else touch ./protobuf.patch fi - # Render the MODULE.bazel file - sed -e "s%\${bazelversion}%${bazelversion}%" \ - -e "s%\${skylib_version}%${skylib_version}%" \ + # Render the MODULE.bazel file and create an empty top level package. + sed -e "s%\${skylib_version}%${skylib_version}%" \ -e "s%\${platforms_version}%${platforms_version}%" \ -e "s%\${protobuf_version}%${protobuf_version}%" \ -e "s%\${rules_java_version}%${rules_java_version}%" \ @@ -145,26 +163,14 @@ do_build_and_test() { "${dir}/deps/test/MODULE.bazel.template" >MODULE.bazel # Copy files needed by the test targets - cp \ - "${dir}"/deps/test/*.{scala,bzl} \ - "${dir}"/examples/testing/multi_frameworks_toolchain/example/*.scala \ - "${dir}"/test/jmh/{AddNumbers.scala,JavaType.java,ScalaType.scala,TestBenchmark.scala,data.txt} \ - "${dir}"/test/proto/standalone.proto \ - "${dir}"/test/src/main/scala/scalarules/test/twitter_scrooge/thrift/thrift2/thrift3/Thrift3.thrift \ + cp "${dir}/deps/test/BUILD.bazel.test" BUILD + cp "${dir}"/deps/test/*.{scala,bzl} \ + "${dir}/examples/testing/multi_frameworks_toolchain/example/ScalaTestExampleTest.scala" \ . set -e - bazel build //... - bazel test //... - - # Windows fails with: - # FATAL: ExecuteProgram(C:\...\ScalafmtTest.format-test) failed: - # ERROR: src/main/native/windows/process.cc(202): - # CreateProcessW("C:\...\ScalafmtTest.format-test"): - # %1 is not a valid Win32 application. - if ! is_windows; then - bazel run //:ScalafmtTest.format-test - fi + bazel build "${ALL_TARGETS[@]}" + bazel test "${ALL_TARGETS[@]}" } test_minimum_supported_versions() { diff --git a/test_rules_scala.sh b/test_rules_scala.sh index 0b1ced9a4..7e856841e 100755 --- a/test_rules_scala.sh +++ b/test_rules_scala.sh @@ -26,7 +26,7 @@ $runner bazel test "${test_output_flag}" --extra_toolchains=//scala:minimal_dire $runner bazel build test_expect_failure/missing_direct_deps/internal_deps/... --strict_java_deps=warn --extra_toolchains=//test/toolchains:high_level_transitive_deps_strict_deps_warn $runner bazel build //test_expect_failure/proto_source_root/... --strict_proto_deps=off $runner bazel test "$test_output_flag" //test/... --extra_toolchains="//test_expect_failure/plus_one_deps:plus_one_deps" -$runner bazel build test:ScalaBinaryInGenrule --nolegacy_external_runfiles +$runner bazel build //test/sh_tests:ScalaBinaryInGenrule --nolegacy_external_runfiles $runner bazel build //test_statsfile:Simple_statsfile $runner bazel build //test_statsfile:SimpleNoStatsFile_statsfile --extra_toolchains="//test/toolchains:enable_stats_file_disabled_toolchain" . "${test_dir}"/test_compiler_sources_integrity.sh diff --git a/test_version/MODULE.bazel.template b/test_version/MODULE.bazel.template index 93ec00abf..d35c1e63f 100644 --- a/test_version/MODULE.bazel.template +++ b/test_version/MODULE.bazel.template @@ -8,7 +8,7 @@ local_path_override( path = "../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../deps/latest", diff --git a/third_party/test/proto/MODULE.bazel b/third_party/test/proto/MODULE.bazel index 59637ee4b..3c3332310 100644 --- a/third_party/test/proto/MODULE.bazel +++ b/third_party/test/proto/MODULE.bazel @@ -8,7 +8,7 @@ local_path_override( path = "../../..", ) -bazel_dep(name = "latest_dependencies") +bazel_dep(name = "latest_dependencies", dev_dependency = True) local_path_override( module_name = "latest_dependencies", path = "../../../deps/latest",