@@ -11,49 +11,197 @@ public class KotlinMetadataTests : ClassFileFixture
11
11
[ Test ]
12
12
public void PublicKotlinClassFile ( )
13
13
{
14
- var meta = GetMetadataForClassFile ( "PublicClass.class" ) ;
14
+ var klass_meta = GetClassMetadata ( "PublicClass.class" ) ;
15
15
16
- Assert . AreEqual ( KotlinMetadataKind . Class , meta . Kind ) ;
16
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
17
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
18
+ }
17
19
18
- var klass_meta = meta . AsClassMetadata ( ) ;
20
+ [ Test ]
21
+ public void PrivateKotlinClassFile ( )
22
+ {
23
+ var klass_meta = GetClassMetadata ( "PrivateClass.class" ) ;
19
24
20
- Assert . True ( klass_meta . Flags . HasFlag ( KotlinClassFlags . Public ) ) ;
25
+ Assert . AreEqual ( KotlinClassVisibility . Private , klass_meta . Visibility ) ;
26
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
21
27
}
22
28
23
29
[ Test ]
24
- public void PrivateKotlinClassFile ( )
30
+ public void InternalKotlinClassFile ( )
25
31
{
26
- var meta = GetMetadataForClassFile ( "PrivateClass .class" ) ;
32
+ var klass_meta = GetClassMetadata ( "InternalClass .class" ) ;
27
33
28
- Assert . AreEqual ( KotlinMetadataKind . Class , meta . Kind ) ;
34
+ Assert . AreEqual ( KotlinClassVisibility . Internal , klass_meta . Visibility ) ;
35
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
36
+ }
29
37
30
- var klass_meta = meta . AsClassMetadata ( ) ;
38
+ [ Test ]
39
+ public void ProtectedKotlinClassFile ( )
40
+ {
41
+ var klass_meta = GetClassMetadata ( "PublicClass$ProtectedClass.class" ) ;
31
42
32
- Assert . True ( klass_meta . Flags . HasFlag ( KotlinClassFlags . Private ) ) ;
43
+ Assert . AreEqual ( KotlinClassVisibility . Protected , klass_meta . Visibility ) ;
44
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
33
45
}
34
46
35
47
[ Test ]
36
- public void InternalKotlinClassFile ( )
48
+ public void SealedClassFile ( )
37
49
{
38
- var meta = GetMetadataForClassFile ( "InternalClass .class" ) ;
50
+ var klass_meta = GetClassMetadata ( "SealedClass .class" ) ;
39
51
40
- Assert . AreEqual ( KotlinMetadataKind . Class , meta . Kind ) ;
52
+ Assert . AreEqual ( KotlinClassInheritability . Sealed , klass_meta . Inheritability ) ;
53
+ }
41
54
42
- var klass_meta = meta . AsClassMetadata ( ) ;
55
+ [ Test ]
56
+ public void Interface ( )
57
+ {
58
+ var klass_meta = GetClassMetadata ( "MyInterface.class" ) ;
43
59
44
- Assert . True ( klass_meta . Flags . HasFlag ( KotlinClassFlags . Internal ) ) ;
60
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
61
+ Assert . AreEqual ( KotlinClassInheritability . Abstract , klass_meta . Inheritability ) ;
62
+ Assert . AreEqual ( KotlinClassType . Interface , klass_meta . ObjectType ) ;
63
+
64
+ Assert . AreEqual ( 2 , klass_meta . Functions . Count ) ;
65
+ Assert . AreEqual ( 2 , klass_meta . Properties . Count ) ;
45
66
}
46
67
47
68
[ Test ]
48
- public void ProtectedKotlinClassFile ( )
69
+ public void InterfaceDefaultImpls ( )
49
70
{
50
- var meta = GetMetadataForClassFile ( "PublicClass$ProtectedClass .class" ) ;
71
+ var meta = GetMetadataForClassFile ( "MyInterface$DefaultImpls .class" ) ;
51
72
52
- Assert . AreEqual ( KotlinMetadataKind . Class , meta . Kind ) ;
73
+ Assert . AreEqual ( KotlinMetadataKind . SyntheticClass , meta . Kind ) ;
74
+
75
+ // TODO: We don't support SyntheticClass yet
76
+ }
53
77
54
- var klass_meta = meta . AsClassMetadata ( ) ;
78
+ [ Test ]
79
+ public void InterfaceInheritingInterface ( )
80
+ {
81
+ var klass_meta = GetClassMetadata ( "MyInterface2.class" ) ;
82
+
83
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
84
+ Assert . AreEqual ( KotlinClassInheritability . Abstract , klass_meta . Inheritability ) ;
85
+ Assert . AreEqual ( KotlinClassType . Interface , klass_meta . ObjectType ) ;
86
+
87
+ Assert . AreEqual ( 0 , klass_meta . Functions . Count ) ;
88
+ Assert . AreEqual ( 2 , klass_meta . Properties . Count ) ;
89
+ Assert . AreEqual ( "MyInterface;" , klass_meta . SuperTypes [ 0 ] . ClassName ) ;
90
+ }
91
+
92
+ [ Test ]
93
+ public void ClassInheritingInterface ( )
94
+ {
95
+ var klass_meta = GetClassMetadata ( "MyInterfaceChild.class" ) ;
96
+
97
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
98
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
99
+
100
+ Assert . AreEqual ( 1 , klass_meta . Functions . Count ) ;
101
+ Assert . AreEqual ( 1 , klass_meta . Properties . Count ) ;
102
+ Assert . AreEqual ( "MyInterface;" , klass_meta . SuperTypes [ 0 ] . ClassName ) ;
103
+ }
55
104
56
- Assert . True ( klass_meta . Flags . HasFlag ( KotlinClassFlags . Protected ) ) ;
105
+ [ Test ]
106
+ public void DataClass ( )
107
+ {
108
+ var klass_meta = GetClassMetadata ( "DataClass.class" ) ;
109
+
110
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
111
+ Assert . True ( klass_meta . Flags . HasFlag ( KotlinClassFlags . IsData ) ) ;
112
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
113
+
114
+ Assert . AreEqual ( 1 , klass_meta . Constructors . Count ) ;
115
+ Assert . AreEqual ( 6 , klass_meta . Functions . Count ) ;
116
+ Assert . AreEqual ( 3 , klass_meta . Properties . Count ) ;
117
+ }
118
+
119
+ [ Test ]
120
+ public void EnumClassFile ( )
121
+ {
122
+ var klass_meta = GetClassMetadata ( "EnumClass.class" ) ;
123
+
124
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
125
+ Assert . AreEqual ( KotlinClassType . EnumClass , klass_meta . ObjectType ) ;
126
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
127
+
128
+ Assert . AreEqual ( 1 , klass_meta . Constructors . Count ) ;
129
+ Assert . AreEqual ( 4 , klass_meta . EnumEntries . Count ) ;
130
+ }
131
+
132
+ [ Test ]
133
+ public void EnumClassWithInterfaces ( )
134
+ {
135
+ var klass_meta = GetClassMetadata ( "EnumClassWithInterfaces.class" ) ;
136
+
137
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
138
+ Assert . AreEqual ( KotlinClassType . EnumClass , klass_meta . ObjectType ) ;
139
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
140
+
141
+ Assert . AreEqual ( 1 , klass_meta . Constructors . Count ) ;
142
+ Assert . AreEqual ( 1 , klass_meta . Functions . Count ) ;
143
+ Assert . AreEqual ( 2 , klass_meta . EnumEntries . Count ) ;
144
+
145
+ Assert . AreEqual ( "PLUS" , klass_meta . EnumEntries [ 0 ] ) ;
146
+ Assert . AreEqual ( "TIMES" , klass_meta . EnumEntries [ 1 ] ) ;
147
+
148
+ Assert . AreEqual ( 2 , klass_meta . SuperTypes . Count ) ;
149
+
150
+ Assert . AreEqual ( "kotlin/Enum" , klass_meta . SuperTypes [ 0 ] . ClassName ) ;
151
+ Assert . AreEqual ( "EnumClassWithInterfacesInterface;" , klass_meta . SuperTypes [ 1 ] . ClassName ) ;
152
+ }
153
+
154
+ [ Test ]
155
+ public void EnumClassWithFunction ( )
156
+ {
157
+ var klass_meta = GetClassMetadata ( "EnumClassWithInterfaces$PLUS.class" ) ;
158
+
159
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
160
+ Assert . AreEqual ( KotlinClassType . EnumEntry , klass_meta . ObjectType ) ;
161
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
162
+
163
+ Assert . AreEqual ( 1 , klass_meta . Functions . Count ) ;
164
+ Assert . AreEqual ( 1 , klass_meta . SuperTypes . Count ) ;
165
+
166
+ Assert . AreEqual ( "EnumClassWithInterfaces;" , klass_meta . SuperTypes [ 0 ] . ClassName ) ;
167
+ }
168
+
169
+ [ Test ]
170
+ public void InlineClass ( )
171
+ {
172
+ var klass_meta = GetClassMetadata ( "InlineClass.class" ) ;
173
+
174
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
175
+ Assert . True ( klass_meta . Flags . HasFlag ( KotlinClassFlags . IsInlineClass ) ) ;
176
+ }
177
+
178
+ [ Test ]
179
+ public void Object ( )
180
+ {
181
+ var klass_meta = GetClassMetadata ( "Object.class" ) ;
182
+
183
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
184
+
185
+ // One would expect this to be "Object" but it doesn't seem to be
186
+ Assert . AreEqual ( KotlinClassType . Class , klass_meta . ObjectType ) ;
187
+ }
188
+
189
+ [ Test ]
190
+ public void CompanionObject ( )
191
+ {
192
+ var klass_meta = GetClassMetadata ( "CompanionObject$Companion.class" ) ;
193
+
194
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
195
+ Assert . AreEqual ( KotlinClassType . CompanionObject , klass_meta . ObjectType ) ;
196
+ }
197
+
198
+ [ Test ]
199
+ public void KotlinExtensionMethods ( )
200
+ {
201
+ var klass_meta = GetClassMetadata ( "ExtensionMethods.class" ) ;
202
+
203
+ Assert . AreEqual ( KotlinClassInheritability . Final , klass_meta . Inheritability ) ;
204
+ Assert . AreEqual ( KotlinClassVisibility . Public , klass_meta . Visibility ) ;
57
205
}
58
206
59
207
private KotlinMetadata GetMetadataForClassFile ( string file )
@@ -68,6 +216,18 @@ private KotlinMetadata GetMetadataForClassFile (string file)
68
216
69
217
return meta ;
70
218
}
219
+
220
+ private KotlinClass GetClassMetadata ( string file )
221
+ {
222
+ var meta = GetMetadataForClassFile ( file ) ;
223
+
224
+ Assert . AreEqual ( KotlinMetadataKind . Class , meta . Kind ) ;
225
+
226
+ Assert . AreEqual ( "1.0.3" , meta . ByteCodeVersion . ToString ( ) ) ;
227
+ Assert . AreEqual ( "1.1.15" , meta . MetadataVersion . ToString ( ) ) ;
228
+
229
+ return meta . AsClassMetadata ( ) ;
230
+ }
71
231
}
72
232
}
73
233
0 commit comments