diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java index 1533fdbf94067f..1b8065de701197 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkDefinedAspectsTest.java @@ -494,7 +494,7 @@ public void aspectWithOutputGroupsAsList() throws Exception { "test/aspect.bzl", "def _impl(target, ctx):", " g = target.output_group('_hidden_top_level" + INTERNAL_SUFFIX + "')", - " return struct(output_groups = { 'my_result' : [ f for f in g] })", + " return struct(output_groups = { 'my_result' : g.to_list() })", "", "MyAspect = aspect(", " implementation=_impl,", @@ -526,7 +526,7 @@ public void aspectWithOutputGroupsAsListDeclaredProvider() throws Exception { "test/aspect.bzl", "def _impl(target, ctx):", " g = target[OutputGroupInfo]._hidden_top_level" + INTERNAL_SUFFIX, - " return [OutputGroupInfo(my_result= [ f for f in g])]", + " return [OutputGroupInfo(my_result=g.to_list())]", "", "MyAspect = aspect(", " implementation=_impl,", diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java index 7d1b2c884f6d77..c0b6ca42e30763 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java @@ -332,7 +332,7 @@ public void testOutputGroupsWithList() throws Exception { "load('//myinfo:myinfo.bzl', 'MyInfo')", "def _impl(ctx):", " f = ctx.attr.dep.output_group('_hidden_top_level" + INTERNAL_SUFFIX + "')", - " g = list(f)", + " g = f.to_list()", " return [MyInfo(result = f),", " OutputGroupInfo(my_group = g, my_empty_group = [])]", "my_rule = rule(implementation = _impl,", @@ -361,7 +361,7 @@ public void testOutputGroupsDeclaredProviderWithList() throws Exception { "load('//myinfo:myinfo.bzl', 'MyInfo')", "def _impl(ctx):", " f = ctx.attr.dep[OutputGroupInfo]._hidden_top_level" + INTERNAL_SUFFIX, - " g = list(f)", + " g = f.to_list()", " return [MyInfo(result = f),", " OutputGroupInfo(my_group = g, my_empty_group = [])]", "my_rule = rule(implementation = _impl,", diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java index 9cac21757197db..566e25c13bea17 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java @@ -1530,13 +1530,14 @@ public void testAccessingRunfiles() throws Exception { SkylarkRuleContext ruleContext = createRuleContext("//test:foo"); Object filenames = evalRuleContextCode( - ruleContext, "[f.short_path for f in ruleContext.attr.dep.default_runfiles.files]"); + ruleContext, + "[f.short_path for f in ruleContext.attr.dep.default_runfiles.files.to_list()]"); assertThat(filenames).isInstanceOf(SkylarkList.class); SkylarkList filenamesList = (SkylarkList) filenames; assertThat(filenamesList).containsAtLeast("test/lib.py", "test/lib2.py"); Object emptyFilenames = evalRuleContextCode( - ruleContext, "list(ruleContext.attr.dep.default_runfiles.empty_filenames)"); + ruleContext, "ruleContext.attr.dep.default_runfiles.empty_filenames.to_list()"); assertThat(emptyFilenames).isInstanceOf(SkylarkList.class); SkylarkList emptyFilenamesList = (SkylarkList) emptyFilenames; assertThat(emptyFilenamesList).containsExactly("test/__init__.py"); @@ -1544,7 +1545,7 @@ public void testAccessingRunfiles() throws Exception { SkylarkRuleContext ruleWithInitContext = createRuleContext("//test:foo_with_init"); Object noEmptyFilenames = evalRuleContextCode( - ruleWithInitContext, "list(ruleContext.attr.dep.default_runfiles.empty_filenames)"); + ruleWithInitContext, "ruleContext.attr.dep.default_runfiles.empty_filenames.to_list()"); assertThat(noEmptyFilenames).isInstanceOf(SkylarkList.class); SkylarkList noEmptyFilenamesList = (SkylarkList) noEmptyFilenames; assertThat(noEmptyFilenamesList).isEmpty(); @@ -1587,7 +1588,7 @@ public void testAccessingRunfilesSymlinks_legacy() throws Exception { evalRuleContextCode( ruleWithSymlinkContext, "[s.path for s in", - "ruleContext.attr.data[0].data_runfiles.symlinks]"); + "ruleContext.attr.data[0].data_runfiles.symlinks.to_list()]"); assertThat(symlinkPaths).isInstanceOf(SkylarkList.class); SkylarkList symlinkPathsList = (SkylarkList) symlinkPaths; assertThat(symlinkPathsList).containsExactly("symlink_test/a.py").inOrder(); @@ -1595,7 +1596,7 @@ public void testAccessingRunfilesSymlinks_legacy() throws Exception { evalRuleContextCode( ruleWithSymlinkContext, "[s.target_file.short_path for s in", - "ruleContext.attr.data[0].data_runfiles.symlinks]"); + "ruleContext.attr.data[0].data_runfiles.symlinks.to_list()]"); assertThat(symlinkFilenames).isInstanceOf(SkylarkList.class); SkylarkList symlinkFilenamesList = (SkylarkList) symlinkFilenames; assertThat(symlinkFilenamesList).containsExactly("test/a.py").inOrder(); @@ -1638,7 +1639,7 @@ public void testAccessingRunfilesSymlinks() throws Exception { evalRuleContextCode( ruleWithSymlinkContext, "[s.path for s in", - "ruleContext.attr.data[0].data_runfiles.symlinks]"); + "ruleContext.attr.data[0].data_runfiles.symlinks.to_list()]"); assertThat(symlinkPaths).isInstanceOf(SkylarkList.class); SkylarkList symlinkPathsList = (SkylarkList) symlinkPaths; assertThat(symlinkPathsList).containsExactly("symlink_test/a.py").inOrder(); @@ -1646,7 +1647,7 @@ public void testAccessingRunfilesSymlinks() throws Exception { evalRuleContextCode( ruleWithSymlinkContext, "[s.target_file.short_path for s in", - "ruleContext.attr.data[0].data_runfiles.symlinks]"); + "ruleContext.attr.data[0].data_runfiles.symlinks.to_list()]"); assertThat(symlinkFilenames).isInstanceOf(SkylarkList.class); SkylarkList symlinkFilenamesList = (SkylarkList) symlinkFilenames; assertThat(symlinkFilenamesList).containsExactly("test/a.py").inOrder(); @@ -1690,7 +1691,7 @@ public void testAccessingRunfilesRootSymlinks_legacy() throws Exception { evalRuleContextCode( ruleWithRootSymlinkContext, "[s.path for s in", - "ruleContext.attr.data[0].data_runfiles.root_symlinks]"); + "ruleContext.attr.data[0].data_runfiles.root_symlinks.to_list()]"); assertThat(rootSymlinkPaths).isInstanceOf(SkylarkList.class); SkylarkList rootSymlinkPathsList = (SkylarkList) rootSymlinkPaths; assertThat(rootSymlinkPathsList).containsExactly("root_symlink_test/a.py").inOrder(); @@ -1698,7 +1699,7 @@ public void testAccessingRunfilesRootSymlinks_legacy() throws Exception { evalRuleContextCode( ruleWithRootSymlinkContext, "[s.target_file.short_path for s in", - "ruleContext.attr.data[0].data_runfiles.root_symlinks]"); + "ruleContext.attr.data[0].data_runfiles.root_symlinks.to_list()]"); assertThat(rootSymlinkFilenames).isInstanceOf(SkylarkList.class); SkylarkList rootSymlinkFilenamesList = (SkylarkList) rootSymlinkFilenames; assertThat(rootSymlinkFilenamesList).containsExactly("test/a.py").inOrder(); @@ -1742,7 +1743,7 @@ public void testAccessingRunfilesRootSymlinks() throws Exception { evalRuleContextCode( ruleWithRootSymlinkContext, "[s.path for s in", - "ruleContext.attr.data[0].data_runfiles.root_symlinks]"); + "ruleContext.attr.data[0].data_runfiles.root_symlinks.to_list()]"); assertThat(rootSymlinkPaths).isInstanceOf(SkylarkList.class); SkylarkList rootSymlinkPathsList = (SkylarkList) rootSymlinkPaths; assertThat(rootSymlinkPathsList).containsExactly("root_symlink_test/a.py").inOrder(); @@ -1750,7 +1751,7 @@ public void testAccessingRunfilesRootSymlinks() throws Exception { evalRuleContextCode( ruleWithRootSymlinkContext, "[s.target_file.short_path for s in", - "ruleContext.attr.data[0].data_runfiles.root_symlinks]"); + "ruleContext.attr.data[0].data_runfiles.root_symlinks.to_list()]"); assertThat(rootSymlinkFilenames).isInstanceOf(SkylarkList.class); SkylarkList rootSymlinkFilenamesList = (SkylarkList) rootSymlinkFilenames; assertThat(rootSymlinkFilenamesList).containsExactly("test/a.py").inOrder(); @@ -1851,7 +1852,7 @@ public void testDependencyActionsProvider() throws Exception { Object mapping = eval("actions.by_file"); assertThat(mapping).isInstanceOf(SkylarkDict.class); assertThat((SkylarkDict) mapping).hasSize(1); - update("file", eval("list(ruleContext.attr.dep.files)[0]")); + update("file", eval("ruleContext.attr.dep.files.to_list()[0]")); Object actionUnchecked = eval("actions.by_file[file]"); assertThat(actionUnchecked).isInstanceOf(ActionAnalysisMetadata.class); } @@ -1913,10 +1914,10 @@ public void testAbstractActionInterface() throws Exception { assertThat(eval("action2.content")).isEqualTo(Runtime.NONE); assertThat(eval("action1.substitutions")).isEqualTo(Runtime.NONE); - assertThat(eval("list(action1.inputs)")).isEqualTo(eval("[]")); - assertThat(eval("list(action1.outputs)")).isEqualTo(eval("[file1]")); - assertThat(eval("list(action2.inputs)")).isEqualTo(eval("[file1]")); - assertThat(eval("list(action2.outputs)")).isEqualTo(eval("[file2]")); + assertThat(eval("action1.inputs.to_list()")).isEqualTo(eval("[]")); + assertThat(eval("action1.outputs.to_list()")).isEqualTo(eval("[file1]")); + assertThat(eval("action2.inputs.to_list()")).isEqualTo(eval("[file1]")); + assertThat(eval("action2.outputs.to_list()")).isEqualTo(eval("[file2]")); } // For created_actions() tests, the "undertest" rule represents both the code under test and the @@ -1991,7 +1992,7 @@ public void testSpawnActionInterface() throws Exception { simpleBuildDefinition); SkylarkRuleContext ruleContext = createRuleContext("//test:testing"); update("ruleContext", ruleContext); - update("file", eval("list(ruleContext.attr.dep.files)[0]")); + update("file", eval("ruleContext.attr.dep.files.to_list()[0]")); update("action", eval("ruleContext.attr.dep[Actions].by_file[file]")); assertThat(eval("type(action)")).isEqualTo("Action"); @@ -2102,7 +2103,7 @@ public void testFileWriteActionInterface() throws Exception { simpleBuildDefinition); SkylarkRuleContext ruleContext = createRuleContext("//test:testing"); update("ruleContext", ruleContext); - update("file", eval("list(ruleContext.attr.dep.files)[0]")); + update("file", eval("ruleContext.attr.dep.files.to_list()[0]")); update("action", eval("ruleContext.attr.dep[Actions].by_file[file]")); assertThat(eval("type(action)")).isEqualTo("Action"); @@ -2141,7 +2142,7 @@ public void testTemplateExpansionActionInterface() throws Exception { ")"); SkylarkRuleContext ruleContext = createRuleContext("//test:testing"); update("ruleContext", ruleContext); - update("file", eval("list(ruleContext.attr.dep.files)[0]")); + update("file", eval("ruleContext.attr.dep.files.to_list()[0]")); update("action", eval("ruleContext.attr.dep[Actions].by_file[file]")); assertThat(eval("type(action)")).isEqualTo("Action"); diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java index 6f38acc5d75875..baa1c16e36513f 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java @@ -67,6 +67,7 @@ import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.syntax.SkylarkList.MutableList; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; +import com.google.devtools.build.lib.syntax.StarlarkSemantics; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.OsUtils; @@ -248,6 +249,13 @@ public void testSkylarkFunctionAmbiguousArguments() throws Exception { @SuppressWarnings("unchecked") @Test public void testListComprehensionsWithNestedSet() throws Exception { + ev = + createEvaluationTestCase( + StarlarkSemantics.DEFAULT_SEMANTICS.toBuilder() + .incompatibleDepsetIsNotIterable(false) + .build()); + ev.initialize(); + Object result = eval("[x + x for x in depset([1, 2, 3])]"); assertThat((Iterable) result).containsExactly(2, 4, 6).inOrder(); } @@ -706,8 +714,8 @@ public void testResolveCommandExpandLocations() throws Exception { " label_dict = {}", " all = []", " for dep in ruleContext.attr.srcs + ruleContext.attr.tools:", - " all.extend(list(dep.files))", - " label_dict[dep.label] = list(dep.files)", + " all.extend(dep.files.to_list())", + " label_dict[dep.label] = dep.files.to_list()", " return ruleContext.resolve_command(", " command='A$(locations //foo:mytool) B$(location //foo:file3.dat)',", " attribute='cmd', expand_locations=True, label_dict=label_dict)", @@ -3185,4 +3193,3 @@ public String getMessage() { } } } - diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java index 7745179fd52da3..c68ea658f3384a 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java @@ -78,7 +78,7 @@ public void testStackTraceWithIf() throws Exception { + LINE_SEPARATOR + "\t\ts[0]", "def foo():", - " s = depset()", + " s = []", " if s[0] == 1:", " x = 1", "foo()"); @@ -249,7 +249,6 @@ public void testListSort() throws Exception { .testEval("sorted([True, False, True])", "[False, True, True]") .testEval("sorted(['a','x','b','z'])", "[\"a\", \"b\", \"x\", \"z\"]") .testEval("sorted({1: True, 5: True, 4: False})", "[1, 4, 5]") - .testEval("sorted(depset([1, 5, 4]))", "[1, 4, 5]") .testIfExactError("Cannot compare function with function", "sorted([sorted, sorted])"); } @@ -637,8 +636,7 @@ public void testZipFunction() throws Exception { .testStatement("str(zip([1], {2: 'a'}))", "[(1, 2)]") .testStatement("str(zip([1], []))", "[]") .testIfErrorContains("type 'int' is not iterable", "zip(123)") - .testIfErrorContains("type 'int' is not iterable", "zip([1], 1)") - .testStatement("str(zip([1], depset([2])))", "[(1, 2)]"); + .testIfErrorContains("type 'int' is not iterable", "zip([1], 1)"); } /** @@ -701,7 +699,6 @@ public void testFail() throws Exception { public void testTupleCoercion() throws Exception { new BothModesTest() .testStatement("tuple([1, 2]) == (1, 2)", true) - .testStatement("tuple(depset([1, 2])) == (1, 2)", true) // Depends on current implementation of dict .testStatement("tuple({1: 'foo', 2: 'bar'}) == (1, 2)", true); } diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java index 12a789aa20aa03..2e8fdc71267e0f 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java @@ -1487,8 +1487,8 @@ public void testClassObjectAccess() throws Exception { } @Test - public void testInSet() throws Exception { - new SkylarkTest() + public void testInSetDeprecated() throws Exception { + new SkylarkTest("--incompatible_depset_is_not_iterable=false") .testStatement("'b' in depset(['a', 'b'])", Boolean.TRUE) .testStatement("'c' in depset(['a', 'b'])", Boolean.FALSE) .testStatement("1 in depset(['a', 'b'])", Boolean.FALSE);