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