runfiles test: extract mock Java code to a file

Move the mock java file in
//src/test/py/bazel:runfiles_test to an actual
file in the source tree. This change makes the
test more readable, and the file more easily
discoverable.

See https://github.com/bazelbuild/bazel/issues/4460

Change-Id: I94b033f63b218554b0e0e11814fde4c13bf7cca0
PiperOrigin-RevId: 184692391
diff --git a/src/test/py/bazel/runfiles_test.py b/src/test/py/bazel/runfiles_test.py
index 2f9f193..ca3cc0b 100644
--- a/src/test/py/bazel/runfiles_test.py
+++ b/src/test/py/bazel/runfiles_test.py
@@ -32,48 +32,36 @@
                   "\n".join(stderr))
 
   def testJavaRunfilesLibraryInBazelToolsRepo(self):
-    self.ScratchFile("WORKSPACE", ["workspace(name = 'foo_ws')"])
-    self.ScratchFile("foo/BUILD", [
-        "java_binary(",
-        "    name = 'Foo',",
-        "    main_class = 'Foo',",
-        "    srcs = ['Foo.java'],",
-        "    deps = ['@bazel_tools//tools/runfiles:java-runfiles'],",
-        "    data = ['//foo/bar:hello.txt'],",
-        ")"
-    ])
-    self.ScratchFile("foo/Foo.java", [
-        "import com.google.devtools.build.runfiles.Runfiles;",
-        ""
-        "public class Foo {",
-        "  public static void main(String[] args) throws java.io.IOException {",
-        "    System.out.println(\"Hello Foo!\");",
-        "    Runfiles r = Runfiles.create();",
-        "    System.out.println(",
-        "        \"rloc=\" + r.rlocation(\"foo_ws/foo/bar/hello.txt\"));",
-        "  }",
-        "}"
-    ])
-    self.ScratchFile("foo/bar/BUILD", ["exports_files(['hello.txt'])"])
-    self.ScratchFile("foo/bar/hello.txt", ["world"])
+    for s, t in [
+        ("WORKSPACE.mock", "WORKSPACE"),
+        ("foo/BUILD.mock", "foo/BUILD"),
+        ("foo/Foo.java", "foo/Foo.java"),
+        ("foo/datadep/hello.txt", "foo/datadep/hello.txt"),
+    ]:
+      self.CopyFile(
+          self.Rlocation(
+              "io_bazel/src/test/py/bazel/testdata/runfiles_test/" + s), t)
 
     exit_code, stdout, stderr = self.RunBazel(["info", "bazel-bin"])
     self.AssertExitCode(exit_code, 0, stderr)
     bazel_bin = stdout[0]
 
-    exit_code, _, stderr = self.RunBazel(["build", "//foo:Foo"])
+    exit_code, _, stderr = self.RunBazel(["build", "//foo:runfiles-java"])
     self.AssertExitCode(exit_code, 0, stderr)
 
-    bin_path = os.path.join(bazel_bin, "foo/Foo" +
-                            (".exe" if test_base.TestBase.IsWindows() else ""))
+    if test_base.TestBase.IsWindows():
+      bin_path = os.path.join(bazel_bin, "foo/runfiles-java.exe")
+    else:
+      bin_path = os.path.join(bazel_bin, "foo/runfiles-java")
+
     self.assertTrue(os.path.exists(bin_path))
 
     exit_code, stdout, stderr = self.RunProgram([bin_path])
     self.AssertExitCode(exit_code, 0, stderr)
     if len(stdout) != 2:
       self.fail("stdout: %s" % stdout)
-    self.assertEqual(stdout[0], "Hello Foo!")
-    six.assertRegex(self, stdout[1], "^rloc=.*/foo/bar/hello.txt")
+    self.assertEqual(stdout[0], "Hello Java Foo!")
+    six.assertRegex(self, stdout[1], "^rloc=.*/foo/datadep/hello.txt")
     with open(stdout[1].split("=", 1)[1], "r") as f:
       lines = [l.strip() for l in f.readlines()]
     if len(lines) != 1:
diff --git a/src/test/py/bazel/testdata/runfiles_test/foo/BUILD.mock b/src/test/py/bazel/testdata/runfiles_test/foo/BUILD.mock
index 63d1d4e3..618ea72 100644
--- a/src/test/py/bazel/testdata/runfiles_test/foo/BUILD.mock
+++ b/src/test/py/bazel/testdata/runfiles_test/foo/BUILD.mock
@@ -8,3 +8,13 @@
     main = "runfiles.py",
     deps = ["@bazel_tools//tools/runfiles:py-runfiles"],
 )
+
+java_binary(
+    name = "runfiles-java",
+    srcs = ["Foo.java"],
+    data = [
+        "datadep/hello.txt",
+    ],
+    main_class = "Foo",
+    deps = ["@bazel_tools//tools/runfiles:java-runfiles"],
+)
diff --git a/src/test/py/bazel/testdata/runfiles_test/foo/Foo.java b/src/test/py/bazel/testdata/runfiles_test/foo/Foo.java
new file mode 100644
index 0000000..0e9f5cf
--- /dev/null
+++ b/src/test/py/bazel/testdata/runfiles_test/foo/Foo.java
@@ -0,0 +1,25 @@
+// Copyright 2018 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.
+
+import com.google.devtools.build.runfiles.Runfiles;
+import java.io.IOException;
+
+/** A mock Java binary only used in tests, to exercise the Java Runfiles library. */
+public class Foo {
+  public static void main(String[] args) throws IOException {
+    System.out.println("Hello Java Foo!");
+    Runfiles r = Runfiles.create();
+    System.out.println("rloc=" + r.rlocation("foo_ws/foo/datadep/hello.txt"));
+  }
+}