Add a test for `java_binary` srcs file types

(ignore-relnotes)

PiperOrigin-RevId: 974388917
Change-Id: I6288c87f9691f95b9aa4b95db174d9a0f338dd5c
diff --git a/test/java/common/rules/a.foo b/test/java/common/rules/a.foo
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/java/common/rules/a.foo
diff --git a/test/java/common/rules/java_binary_tests.bzl b/test/java/common/rules/java_binary_tests.bzl
index 20c6ee0..8b688e1 100644
--- a/test/java/common/rules/java_binary_tests.bzl
+++ b/test/java/common/rules/java_binary_tests.bzl
@@ -538,6 +538,72 @@
         matching.str_matches("deps not allowed without srcs"),
     )
 
+def _test_java_binary_srcs_filetypes(name):
+    util.helper_target(
+        java_binary,
+        name = name + "/valid",
+        srcs = [
+            "a.java",
+            name + "/gmix",
+            name + "/gvalid",
+        ],
+    )
+    util.helper_target(
+        java_binary,
+        name = name + "/invalid",
+        srcs = [
+            "a.foo",
+            name + "/ginvalid",
+        ],
+    )
+    util.helper_target(
+        java_binary,
+        name = name + "/mix",
+        srcs = [
+            "a.foo",
+            "a.java",
+        ],
+    )
+    util.helper_target(
+        native.genrule,
+        name = name + "/gvalid",
+        outs = [name + "/b.java"],
+        cmd = "",
+    )
+    util.helper_target(
+        native.genrule,
+        name = name + "/ginvalid",
+        outs = [name + "/b.foo"],
+        cmd = "",
+    )
+    util.helper_target(
+        native.genrule,
+        name = name + "/gmix",
+        outs = [name + "/c.java", name + "/c.foo"],
+        cmd = "",
+    )
+
+    analysis_test(
+        name = name,
+        impl = _test_java_binary_srcs_filetypes_impl,
+        targets = {
+            "valid": name + "/valid",
+            "invalid": name + "/invalid",
+            "mix": name + "/mix",
+        },
+        expect_failure = True,
+    )
+
+def _test_java_binary_srcs_filetypes_impl(env, targets):
+    env.expect.that_target(targets.valid).failures().contains_exactly([])
+    env.expect.that_target(targets.invalid).failures().contains_at_least_predicates([
+        matching.str_matches("'*/ginvalid' does not produce any java_binary srcs files"),
+        matching.str_matches("source file '*:a.foo' is misplaced here"),
+    ])
+    env.expect.that_target(targets.mix).failures().contains_at_least_predicates([
+        matching.str_matches("'*:a.foo' does not produce any java_binary srcs files"),
+    ])
+
 def java_binary_tests(name):
     test_suite(
         name = name,
@@ -557,5 +623,6 @@
             _test_java_binary_duplicate_classpath_resources,
             _test_java_binary_jdeps,
             _test_java_binary_deps_without_srcs,
+            _test_java_binary_srcs_filetypes,
         ],
     )