diff --git a/src/test/java/com/google/devtools/build/lib/query2/testutil/AbstractQueryTest.java b/src/test/java/com/google/devtools/build/lib/query2/testutil/AbstractQueryTest.java
index 50014a7..fe9c07e 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/testutil/AbstractQueryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/testutil/AbstractQueryTest.java
@@ -1072,17 +1072,17 @@
 
   @Test
   public void testNodepDeps_defaultIsTrue() throws Exception {
-    runNodepDepsTest(/*expectVisibilityDep=*/ true);
+    runNodepDepsTest(/* expectVisibilityDep= */ true);
   }
 
   @Test
   public void testNodepDeps_false() throws Exception {
-    runNodepDepsTest(/*expectVisibilityDep=*/ false, Setting.NO_NODEP_DEPS);
+    runNodepDepsTest(/* expectVisibilityDep= */ false, Setting.NO_NODEP_DEPS);
   }
 
   @Test
   public void testCycleInStarlark() throws Exception {
-    runCycleInStarlarkTest(/*checkFailureDetail=*/ true);
+    runCycleInStarlarkTest(/* checkFailureDetail= */ true);
   }
 
   protected void runCycleInStarlarkTest(boolean checkFailureDetail) throws Exception {
@@ -1103,8 +1103,7 @@
   public void testLabelsOperator() throws Exception {
     writeBuildFiles3();
     writeBuildFilesWithConfigurableAttributes();
-    writeFile("k/BUILD", "py_binary(name='k', srcs=['k.py'])");
-    analysisMock.pySupport().setup(mockToolsConfig);
+    writeBuildFilesWithImplicitAttribute();
 
     // srcs:
     assertThat(eval("labels(srcs, //a)")).isEqualTo(eval("//b + //c"));
@@ -1123,13 +1122,12 @@
     assertThat(eval("labels(no_such_attr, //b)")).isEqualTo(EMPTY);
 
     // singleton LABEL:
-    assertThat(eval("labels(srcs, //k)")).isEqualTo(eval("//k:k.py"));
+    assertThat(eval("labels(srcs, //k)")).isEqualTo(eval("//k:k.txt"));
 
     // Works for implicit edges too.  This is for consistency with --output
-    // xml, which exposes them too.
-    RepositoryName toolsRepository = helper.getToolsRepository();
-    assertThat(eval("labels(\"$py_toolchain_type\", //k)"))
-        .isEqualTo(eval(toolsRepository + "//tools/python:toolchain_type"));
+    // xml, which exposes them too. Note that, for whatever reason, the
+    // implicit attribute must be referenced using "$" instead of "_".
+    assertThat(eval("labels('$implicit', //k)")).isEqualTo(eval("//k:implicit"));
 
     // Configurable deps:
     if (testConfigurableAttributes()) {
@@ -1138,6 +1136,25 @@
     }
   }
 
+  private void writeBuildFilesWithImplicitAttribute() throws Exception {
+    writeFile(
+        "k/defs.bzl",
+        "def impl(ctx):",
+        "  return [DefaultInfo()]",
+        "has_implicit_attr = rule(",
+        "    implementation=impl,",
+        "    attrs = {",
+        "        'srcs': attr.label_list(),",
+        "        '_implicit': attr.label(default='//k:implicit')",
+        "    },",
+        ")");
+    writeFile(
+        "k/BUILD",
+        "load(':defs.bzl', 'has_implicit_attr')",
+        "has_implicit_attr(name='k', srcs=['k.txt'])",
+        "filegroup(name='implicit')");
+  }
+
   /* tests(x) operator */
 
   @Test
@@ -1886,7 +1903,7 @@
     writeFile("foo/BUILD", "sh_library(name = 'foo', deps = ['//bar:bar'])");
     writeFile("bar/BUILD", "sh_library(name = 'bar', srcs = 'bad_single_file')");
     EvalThrowsResult evalThrowsResult =
-        evalThrows("deps(//foo:foo)", /*unconditionallyThrows=*/ false);
+        evalThrows("deps(//foo:foo)", /* unconditionallyThrows= */ false);
     FailureDetail.Builder failureDetailBuilder = FailureDetail.newBuilder();
     if (code instanceof FailureDetails.PackageLoading.Code) {
       failureDetailBuilder.setPackageLoading(
@@ -1979,7 +1996,7 @@
         "sh_library(name = 'foo', deps = [':dep'])",
         "sh_library(name = 'dep', deps = ['//bar:missing'])");
     assertThat(
-            evalThrows("rdeps(//foo:foo, //foo:dep, 1)", /*unconditionallyThrows=*/ false)
+            evalThrows("rdeps(//foo:foo, //foo:dep, 1)", /* unconditionallyThrows= */ false)
                 .getMessage())
         .contains("preloading transitive closure failed: no such package 'bar':");
   }
