bazel syntax: make some stragglers implement StarlarkValue
- make actions.RunfileSupplier implement StarlarkValue.
Because it is one, intended or not.
- make tests' dummy values implement StarlarkValue.
PiperOrigin-RevId: 282618274
diff --git a/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java b/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
index f6bac6b..c0c3d4d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/RunfilesSupplier.java
@@ -18,6 +18,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.util.Map;
@@ -25,7 +26,10 @@
/** Convenience wrapper around runfiles allowing lazy expansion. */
// TODO(bazel-team): Ideally we could refer to Runfiles objects directly here, but current package
// structure makes this difficult. Consider moving things around to make this possible.
-public interface RunfilesSupplier {
+//
+// RunfilesSuppliers appear to be Starlark values;
+// they are exposed through ctx.resolve_tools[2], for example.
+public interface RunfilesSupplier extends StarlarkValue {
/** @return the contained artifacts */
NestedSet<Artifact> getArtifacts();
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java
index ddcccbb..80bfd8d 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkStringRepresentationsTest.java
@@ -18,6 +18,7 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
+import com.google.devtools.build.lib.syntax.StarlarkValue;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
@@ -239,7 +240,8 @@
assertThat(skylarkLoadingEval("repr(Label('//foo:bar'))")).isEqualTo("Label(\"//foo:bar\")");
assertThat(skylarkLoadingEval("'%r' % Label('//foo:bar')")).isEqualTo("Label(\"//foo:bar\")");
- assertThat(skylarkLoadingEval("'{}'.format([Label('//foo:bar')])")).isEqualTo("[Label(\"//foo:bar\")]");
+ assertThat(skylarkLoadingEval("'{}'.format([Label('//foo:bar')])"))
+ .isEqualTo("[Label(\"//foo:bar\")]");
}
@Test
@@ -375,14 +377,17 @@
}
}
- @Test
- public void testStringRepresentationsOfUnknownObjects() throws Exception {
- update("mock", new Object());
+ private static class Dummy implements StarlarkValue {}
- assertThat(eval("str(mock)")).isEqualTo("<unknown object java.lang.Object>");
- assertThat(eval("repr(mock)")).isEqualTo("<unknown object java.lang.Object>");
- assertThat(eval("'{}'.format(mock)")).isEqualTo("<unknown object java.lang.Object>");
- assertThat(eval("'%s' % mock")).isEqualTo("<unknown object java.lang.Object>");
- assertThat(eval("'%r' % mock")).isEqualTo("<unknown object java.lang.Object>");
+ @Test
+ public void testStringRepresentationsOfArbitraryObjects() throws Exception {
+ update("dummy", new Dummy());
+
+ String dummy = "com.google.devtools.build.lib.skylark.SkylarkStringRepresentationsTest$Dummy";
+ assertThat(eval("str(dummy)")).isEqualTo("<unknown object " + dummy + ">");
+ assertThat(eval("repr(dummy)")).isEqualTo("<unknown object " + dummy + ">");
+ assertThat(eval("'{}'.format(dummy)")).isEqualTo("<unknown object " + dummy + ">");
+ assertThat(eval("'%s' % dummy")).isEqualTo("<unknown object " + dummy + ">");
+ assertThat(eval("'%r' % dummy")).isEqualTo("<unknown object " + dummy + ">");
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index e259432..2ff2eee 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -664,24 +664,29 @@
};
}
+ private static class Dummy implements StarlarkValue {}
+
@Test
- public void testPercOnObject() throws Exception {
+ public void testPercentOnDummyValue() throws Exception {
newTest().update("obj", createObjWithStr()).testExpression("'%s' % obj", "<str marker>");
newTest()
- .update("unknown", new Object())
- .testExpression("'%s' % unknown", "<unknown object java.lang.Object>");
+ .update("unknown", new Dummy())
+ .testExpression(
+ "'%s' % unknown",
+ "<unknown object com.google.devtools.build.lib.syntax.EvaluationTest$Dummy>");
}
@Test
- public void testPercOnObjectList() throws Exception {
+ public void testPercentOnTupleOfDummyValues() throws Exception {
newTest()
.update("obj", createObjWithStr())
.testExpression("'%s %s' % (obj, obj)", "<str marker> <str marker>");
newTest()
- .update("unknown", new Object())
+ .update("unknown", new Dummy())
.testExpression(
"'%s %s' % (unknown, unknown)",
- "<unknown object java.lang.Object> <unknown object java.lang.Object>");
+ "<unknown object com.google.devtools.build.lib.syntax.EvaluationTest$Dummy> <unknown"
+ + " object com.google.devtools.build.lib.syntax.EvaluationTest$Dummy>");
}
@Test