have bazel_example_test.sh properly depend on

- no longer uses $bazel_javabase from testenv.sh
- works with absolute $(JAVABASE) paths and JDK's other than
  local_jdk.

Progress towards #8033

Closes #8041.

PiperOrigin-RevId: 243798469
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index 399b26c..e3500ad 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -67,12 +67,15 @@
     name = "bazel_example_test",
     size = "large",
     srcs = ["bazel_example_test.sh"],
+    args = ["$(JAVABASE)"],
     data = [
         ":test-deps",
         "//src/test/shell/bazel/apple:objc-deps",
+        "@bazel_tools//tools/bash/runfiles",
     ],
     shard_count = 3,
     tags = ["no_windows"],
+    toolchains = ["@bazel_tools//tools/jdk:current_java_runtime"],
 )
 
 sh_test(
diff --git a/src/test/shell/bazel/bazel_example_test.sh b/src/test/shell/bazel/bazel_example_test.sh
index 663dfef..7472f1e 100755
--- a/src/test/shell/bazel/bazel_example_test.sh
+++ b/src/test/shell/bazel/bazel_example_test.sh
@@ -16,12 +16,39 @@
 #
 # Tests the examples provided in Bazel
 #
+# --- begin runfiles.bash initialization ---
+set -euo pipefail
+if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+    if [[ -f "$0.runfiles_manifest" ]]; then
+      export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
+    elif [[ -f "$0.runfiles/MANIFEST" ]]; then
+      export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
+    elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+      export RUNFILES_DIR="$0.runfiles"
+    fi
+fi
+if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+  source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
+elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+  source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
+            "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
+else
+  echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
+  exit 1
+fi
+# --- end runfiles.bash initialization ---
 
-# Load the test setup defined in the parent directory
-CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-source "${CURRENT_DIR}/../integration_test_setup.sh" \
+source "$(rlocation "io_bazel/src/test/shell/integration_test_setup.sh")" \
   || { echo "integration_test_setup.sh not found!" >&2; exit 1; }
 
+# $1 is equal to the $(JAVABASE) make variable
+javabase="$1"
+if [[ $javabase = external/* ]]; then
+  javabase=${javabase#external/}
+fi
+javabase="$(rlocation "${javabase}/bin/java")"
+javabase=${javabase%/bin/java}
+
 function set_up() {
   copy_examples
   cat > WORKSPACE <<EOF
@@ -42,7 +69,7 @@
 # An assertion that execute a binary from a sub directory (to test runfiles)
 function assert_binary_run_from_subdir() {
     ( # Needed to make execution from a different path work.
-    export PATH=${bazel_javabase}/bin:"$PATH" &&
+    export PATH=${javabase}/bin:"$PATH" &&
     mkdir -p x &&
     cd x &&
     unset JAVA_RUNFILES &&
@@ -118,8 +145,6 @@
 
 function test_shell() {
   assert_build "//examples/shell:bin"
-  unset RUNFILES_DIR
-  unset RUNFILES_MANIFEST_FILE
   assert_bazel_run "//examples/shell:bin" "Hello Bazel!"
   assert_test_ok "//examples/shell:test"
 }
diff --git a/src/test/shell/bin/bazel b/src/test/shell/bin/bazel
index 3a77cb3..aba1ed9 100755
--- a/src/test/shell/bin/bazel
+++ b/src/test/shell/bin/bazel
@@ -17,4 +17,10 @@
 # Wrapper script to run bazel in the tests. Any change to this file will
 # affect all our integration tests.
 #
-exec $(rlocation io_bazel/src/bazel) --bazelrc=$TEST_TMPDIR/bazelrc "$@"
+bazel_bin=$(rlocation io_bazel/src/bazel)
+# unset runfiles environment so that the "inner bazel"
+# has to detect its own runfiles
+unset RUNFILES_DIR
+unset RUNFILES_MANIFEST_FILE
+unset RUNFILES_MANIFEST_ONLY
+exec $bazel_bin --bazelrc=$TEST_TMPDIR/bazelrc "$@"