23
23
import static com .google .devtools .build .lib .packages .Attribute .attr ;
24
24
import static org .junit .Assert .assertThrows ;
25
25
26
+ import com .google .common .collect .ImmutableList ;
27
+ import com .google .common .collect .ImmutableMap ;
26
28
import com .google .devtools .build .lib .cmdline .Label ;
27
29
import com .google .devtools .build .lib .packages .Attribute .AllowedValueSet ;
28
30
import com .google .devtools .build .lib .packages .BuildType ;
29
31
import com .google .devtools .build .lib .packages .BuildType .LabelConversionContext ;
30
32
import com .google .devtools .build .lib .packages .Type ;
31
33
import com .google .devtools .build .lib .util .FileTypeSet ;
32
34
import java .util .HashMap ;
35
+ import net .starlark .java .eval .Dict ;
36
+ import net .starlark .java .eval .Mutability ;
37
+ import net .starlark .java .eval .Starlark ;
33
38
import net .starlark .java .eval .StarlarkInt ;
34
39
import net .starlark .java .eval .StarlarkList ;
40
+ import net .starlark .java .eval .StarlarkSemantics ;
41
+ import net .starlark .java .eval .Structure ;
35
42
import org .junit .Test ;
36
43
import org .junit .runner .RunWith ;
37
44
import org .junit .runners .JUnit4 ;
40
47
@ RunWith (JUnit4 .class )
41
48
public class TypeCheckedTagTest {
42
49
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
+
43
59
@ Test
44
60
public void basic () throws Exception {
45
61
TypeCheckedTag typeCheckedTag =
@@ -48,7 +64,7 @@ public void basic() throws Exception {
48
64
buildTag ("tag_name" ).addAttr ("foo" , StarlarkInt .of (3 )).build (),
49
65
/*labelConversionContext=*/ null );
50
66
assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" );
51
- assertThat (typeCheckedTag . getValue ( "foo" )).isEqualTo (StarlarkInt .of (3 ));
67
+ assertThat (getattr ( typeCheckedTag , "foo" )).isEqualTo (StarlarkInt .of (3 ));
52
68
}
53
69
54
70
@ Test
@@ -66,14 +82,47 @@ public void label() throws Exception {
66
82
createRepositoryMapping (createModuleKey ("test" , "1.0" ), "repo" , "other_repo" ),
67
83
new HashMap <>()));
68
84
assertThat (typeCheckedTag .getFieldNames ()).containsExactly ("foo" );
69
- assertThat (typeCheckedTag . getValue ( "foo" ))
85
+ assertThat (getattr ( typeCheckedTag , "foo" ))
70
86
.isEqualTo (
71
87
StarlarkList .immutableOf (
72
88
Label .parseAbsoluteUnchecked ("@myrepo//mypkg:thing1" ),
73
89
Label .parseAbsoluteUnchecked ("@myrepo//pkg:thing2" ),
74
90
Label .parseAbsoluteUnchecked ("@other_repo//pkg:thing3" )));
75
91
}
76
92
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
+
77
126
@ Test
78
127
public void multipleAttributesAndDefaults () throws Exception {
79
128
TypeCheckedTag typeCheckedTag =
@@ -88,9 +137,9 @@ public void multipleAttributesAndDefaults() throws Exception {
88
137
.build (),
89
138
/*labelConversionContext=*/ null );
90
139
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" ))
94
143
.isEqualTo (StarlarkList .immutableOf ("quuxValue1" , "quuxValue2" ));
95
144
}
96
145
0 commit comments