aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google
diff options
context:
space:
mode:
authorGravatar kmb <kmb@google.com>2018-07-12 16:46:31 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-12 16:47:43 -0700
commit365424cd732367c94f9aaaeccbb902e87973990b (patch)
tree365697ac3076f8e068c1ce8ef2229995c7682787 /src/test/java/com/google
parentd8a2d52495d457e9cff81b77bbac5c9ccdd7c548 (diff)
make tests for singlejar's --check_desugar_deps flag run in Bazel's CI
RELNOTES: None. PiperOrigin-RevId: 204388732
Diffstat (limited to 'src/test/java/com/google')
-rw-r--r--src/test/java/com/google/devtools/build/android/desugar/BUILD157
-rwxr-xr-xsrc/test/java/com/google/devtools/build/android/desugar/desugar_deps_consistency_test.sh10
2 files changed, 165 insertions, 2 deletions
diff --git a/src/test/java/com/google/devtools/build/android/desugar/BUILD b/src/test/java/com/google/devtools/build/android/desugar/BUILD
index fb86fe924b..8d6b50ddd4 100644
--- a/src/test/java/com/google/devtools/build/android/desugar/BUILD
+++ b/src/test/java/com/google/devtools/build/android/desugar/BUILD
@@ -1870,6 +1870,163 @@ grep lambda $(location subclass_disassembled.txt) > $(location subclass_lambda_s
],
)
+sh_test(
+ name = "desugar_deps_consistent_test",
+ srcs = ["desugar_deps_consistency_test.sh"],
+ args = [
+ "$(location //src/tools/singlejar:singlejar_local)",
+ "$(location @bazel_tools//tools/jdk:jar)",
+ "$(location :testdata_desugared_default_methods.jar)",
+ "$(location :separate_java8_desugared_default_methods.jar)",
+ "$(location :guava_at_head_desugared.jar)",
+ ],
+ data = [
+ ":guava_at_head_desugared.jar",
+ ":separate_java8_desugared_default_methods.jar",
+ ":testdata_desugared_default_methods.jar",
+ "//src/tools/singlejar:singlejar_local",
+ "@bazel_tools//tools/jdk:jar",
+ ],
+ tags = ["no_windows"],
+)
+
+# Tests that deps checking fails due to missing default method: libseparate_java8.jar defines
+# default methods which testdata_desugared_default_methods.jar assumes have been moved to companion.
+sh_test(
+ name = "desugar_deps_missing_fail_test",
+ srcs = ["desugar_deps_consistency_test.sh"],
+ args = [
+ "$(location //src/tools/singlejar:singlejar_local)",
+ "$(location @bazel_tools//tools/jdk:jar)",
+ "$(location :testdata_desugared_default_methods.jar)",
+ "$(location :libseparate_java8.jar)",
+ "$(location :guava_at_head_desugared.jar)",
+ ],
+ data = [
+ ":guava_at_head_desugared.jar",
+ ":libseparate_java8.jar",
+ ":testdata_desugared_default_methods.jar",
+ "//src/tools/singlejar:singlejar_local",
+ "@bazel_tools//tools/jdk:jar",
+ ],
+ tags = ["no_windows"],
+)
+
+# Regression test for b/68049457 with deps checking failing due to missing static method:
+# b68049457_caller_desugared.jar assumes presence of companion class that's missing (in fact,
+# the whole Jar is missing, similar to neverlink situations).
+sh_test(
+ name = "desugar_deps_b68049457_fail_test",
+ srcs = ["desugar_deps_consistency_test.sh"],
+ args = [
+ "$(location //src/tools/singlejar:singlejar_local)",
+ "$(location @bazel_tools//tools/jdk:jar)",
+ "$(location :b68049457_caller_desugared.jar)",
+ ],
+ data = [
+ ":b68049457_caller_desugared.jar",
+ "//src/tools/singlejar:singlejar_local",
+ "@bazel_tools//tools/jdk:jar",
+ ],
+ tags = ["no_windows"],
+)
+
+sh_test(
+ name = "desugar_deps_missed_default_method_fail_test",
+ srcs = ["desugar_deps_consistency_test.sh"],
+ args = [
+ "$(location //src/tools/singlejar:singlejar_local)",
+ "$(location @bazel_tools//tools/jdk:jar)",
+ "$(location :testdata_desugared_with_missing_dep.jar)",
+ "$(location :separate_java8_desugared_default_methods.jar)",
+ "$(location :guava_at_head_desugared.jar)",
+ ],
+ data = [
+ ":guava_at_head_desugared.jar",
+ ":separate_java8_desugared_default_methods.jar",
+ ":testdata_desugared_with_missing_dep.jar",
+ "//src/tools/singlejar:singlejar_local",
+ "@bazel_tools//tools/jdk:jar",
+ ],
+ tags = ["no_windows"],
+)
+
+# Tests that any Jar entry starting with j$/ causes singlejar to fail when run
+# with --check_desugar_deps. This is a backstop against such entries being
+# included in deploy.jars.
+sh_test(
+ name = "bad_entry_jar_fail_test",
+ srcs = ["desugar_deps_consistency_test.sh"],
+ args = [
+ "$(location //src/tools/singlejar:singlejar_local)",
+ "$(location @bazel_tools//tools/jdk:jar)",
+ "$(location :mock_bad_entry_jar)",
+ ],
+ data = [
+ ":mock_bad_entry_jar",
+ "//src/tools/singlejar:singlejar_local",
+ "@bazel_tools//tools/jdk:jar",
+ ],
+ tags = ["no_windows"],
+)
+
+genrule(
+ name = "desugar_testdata_with_missing_dep",
+ srcs = [
+ ":separate",
+ ":testdata_java8",
+ "//third_party:guava-jars",
+ "//third_party/java/jacoco:blaze-agent",
+ "@bazel_tools//tools/android:android_jar",
+ ],
+ outs = ["testdata_desugared_with_missing_dep.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "-i $(location :testdata_java8) -o $@ " +
+ "--emit_dependency_metadata_as_needed " +
+ "--classpath_entry $(location :separate) " +
+ "--classpath_entry $(location //third_party:guava-jars) " +
+ "--classpath_entry $(location //third_party/java/jacoco:blaze-agent) " +
+ "--bootclasspath_entry $(location @bazel_tools//tools/android:android_jar)",
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+genrule(
+ name = "desugar_b68049457_caller",
+ srcs = [
+ ":b68049457_caller",
+ ":b68049457_interface",
+ "//third_party/java/jacoco:blaze-agent",
+ "@bazel_tools//tools/android:android_jar",
+ ],
+ outs = ["b68049457_caller_desugared.jar"],
+ cmd = "$(location //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar) " +
+ "-i $(location :b68049457_caller) -o $@ " +
+ "--emit_dependency_metadata_as_needed " +
+ "--classpath_entry $(location :b68049457_interface) " +
+ "--bootclasspath_entry $(location @bazel_tools//tools/android:android_jar)",
+ tools = ["//src/tools/android/java/com/google/devtools/build/android/desugar:Desugar"],
+)
+
+java_library(
+ name = "b68049457_interface",
+ srcs = ["testdata/b68049457/StaticInterfaceMethod.java"],
+ neverlink = 1,
+)
+
+java_library(
+ name = "b68049457_caller",
+ srcs = ["testdata/b68049457/StaticInterfaceMethodCaller.java"],
+ deps = [":b68049457_interface"],
+)
+
+# Creates simple .jar file with empty file entry called "j$/hello"
+genrule(
+ name = "mock_bad_entry_jar",
+ outs = ["mock_bad_entry.jar"],
+ cmd = """$(location //tools/zip:zipper) c $@ "j\$$/hello=" """,
+ tools = ["//tools/zip:zipper"],
+)
+
# b/62623509 regression test. Calls to jacoco-generated method in interface
# need to be rewritten to call the companion class even though the original
# bytecode falsely doesn't indicate that the method is declared in an
diff --git a/src/test/java/com/google/devtools/build/android/desugar/desugar_deps_consistency_test.sh b/src/test/java/com/google/devtools/build/android/desugar/desugar_deps_consistency_test.sh
index e8e7e23c6a..7a0bea55b5 100755
--- a/src/test/java/com/google/devtools/build/android/desugar/desugar_deps_consistency_test.sh
+++ b/src/test/java/com/google/devtools/build/android/desugar/desugar_deps_consistency_test.sh
@@ -14,9 +14,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
set -eu
+set -o pipefail
+
+SINGLEJAR="$1"
+shift
+JAR="$1"
+shift
out="$(mktemp)"
-if ! "devtools/blaze/singlejar/singlejar" --output "${out}" --check_desugar_deps --sources "$@"; then
+if ! "${SINGLEJAR}" --output "${out}" --check_desugar_deps --sources "$@"; then
rm "${out}"
case "$0" in
*_fail_test) echo "Singlejar failed as expected!"; exit 0;;
@@ -29,7 +35,7 @@ case "$0" in
*_fail_test) rm "${out}"; echo "Singlejar unexpectedly succeeded :("; exit 1;;
esac
-if third_party/java/jdk/jar/jar tf "${out}" | grep 'desugar_deps'; then
+if "${JAR}" tf "${out}" | grep 'desugar_deps'; then
rm "${out}"
echo "Singlejar output unexpectedly contains desugaring metadata"
exit 2