2323import static com .google .devtools .build .lib .packages .Attribute .attr ;
2424import static org .junit .Assert .assertThrows ;
2525
26+ import com .google .common .collect .ImmutableList ;
27+ import com .google .common .collect .ImmutableMap ;
2628import com .google .devtools .build .lib .cmdline .Label ;
2729import com .google .devtools .build .lib .packages .Attribute .AllowedValueSet ;
2830import com .google .devtools .build .lib .packages .BuildType ;
2931import com .google .devtools .build .lib .packages .BuildType .LabelConversionContext ;
3032import com .google .devtools .build .lib .packages .Type ;
3133import com .google .devtools .build .lib .util .FileTypeSet ;
3234import java .util .HashMap ;
35+ import net .starlark .java .eval .Dict ;
36+ import net .starlark .java .eval .Mutability ;
37+ import net .starlark .java .eval .Starlark ;
3338import net .starlark .java .eval .StarlarkInt ;
3439import net .starlark .java .eval .StarlarkList ;
40+ import net .starlark .java .eval .StarlarkSemantics ;
41+ import net .starlark .java .eval .Structure ;
3542import org .junit .Test ;
3643import org .junit .runner .RunWith ;
3744import org .junit .runners .JUnit4 ;
4047@ RunWith (JUnit4 .class )
4148public class TypeCheckedTagTest {
4249
50+ private static Object getattr (Structure structure , String fieldName ) throws Exception {
51+ return Starlark .getattr (
52+ Mutability .IMMUTABLE ,
53+ StarlarkSemantics .DEFAULT ,
54+ structure ,
55+ fieldName ,
56+ /*defaultValue=*/ null );
57+ }
58+
4359 @ Test
4460 public void basic () throws Exception {
4561 TypeCheckedTag typeCheckedTag =
@@ -48,7 +64,7 @@ public void basic() throws Exception {
4864 buildTag ("tag_name" ).addAttr ("foo" , StarlarkInt .of (3 )).build (),
4965 /*labelConversionContext=*/ null );
5066 assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" );
51- assertThat (typeCheckedTag . getValue ( "foo" )).isEqualTo (StarlarkInt .of (3 ));
67+ assertThat (getattr ( typeCheckedTag , "foo" )).isEqualTo (StarlarkInt .of (3 ));
5268 }
5369
5470 @ Test
@@ -66,14 +82,47 @@ public void label() throws Exception {
6682 createRepositoryMapping (createModuleKey ("test" , "1.0" ), "repo" , "other_repo" ),
6783 new HashMap <>()));
6884 assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" );
69- assertThat (typeCheckedTag . getValue ( "foo" ))
85+ assertThat (getattr ( typeCheckedTag , "foo" ))
7086 .isEqualTo (
7187 StarlarkList .immutableOf (
7288 Label .parseAbsoluteUnchecked ("@myrepo//mypkg:thing1" ),
7389 Label .parseAbsoluteUnchecked ("@myrepo//pkg:thing2" ),
7490 Label .parseAbsoluteUnchecked ("@other_repo//pkg:thing3" )));
7591 }
7692
93+ @ Test
94+ public void label_withoutDefaultValue () throws Exception {
95+ TypeCheckedTag typeCheckedTag =
96+ TypeCheckedTag .create (
97+ createTagClass (
98+ attr ("foo" , BuildType .LABEL ).allowedFileTypes (FileTypeSet .ANY_FILE ).build ()),
99+ buildTag ("tag_name" ).build (),
100+ new LabelConversionContext (
101+ Label .parseAbsoluteUnchecked ("@myrepo//mypkg:defs.bzl" ),
102+ createRepositoryMapping (createModuleKey ("test" , "1.0" ), "repo" , "other_repo" ),
103+ new HashMap <>()));
104+ assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" );
105+ assertThat (getattr (typeCheckedTag , "foo" )).isEqualTo (Starlark .NONE );
106+ }
107+
108+ @ Test
109+ public void stringListDict_default () throws Exception {
110+ TypeCheckedTag typeCheckedTag =
111+ TypeCheckedTag .create (
112+ createTagClass (
113+ attr ("foo" , Type .STRING_LIST_DICT )
114+ .value (ImmutableMap .of ("key" , ImmutableList .of ("value1" , "value2" )))
115+ .build ()),
116+ buildTag ("tag_name" ).build (),
117+ null );
118+ assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" );
119+ assertThat (getattr (typeCheckedTag , "foo" ))
120+ .isEqualTo (
121+ Dict .builder ()
122+ .put ("key" , StarlarkList .immutableOf ("value1" , "value2" ))
123+ .buildImmutable ());
124+ }
125+
77126 @ Test
78127 public void multipleAttributesAndDefaults () throws Exception {
79128 TypeCheckedTag typeCheckedTag =
@@ -88,9 +137,9 @@ public void multipleAttributesAndDefaults() throws Exception {
88137 .build (),
89138 /*labelConversionContext=*/ null );
90139 assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" , "bar" , "quux" );
91- assertThat (typeCheckedTag . getValue ( "foo" )).isEqualTo ("fooValue" );
92- assertThat (typeCheckedTag . getValue ( "bar" )).isEqualTo (StarlarkInt .of (3 ));
93- assertThat (typeCheckedTag . getValue ( "quux" ))
140+ assertThat (getattr ( typeCheckedTag , "foo" )).isEqualTo ("fooValue" );
141+ assertThat (getattr ( typeCheckedTag , "bar" )).isEqualTo (StarlarkInt .of (3 ));
142+ assertThat (getattr ( typeCheckedTag , "quux" ))
94143 .isEqualTo (StarlarkList .immutableOf ("quuxValue1" , "quuxValue2" ));
95144 }
96145
0 commit comments