@@ -24,6 +24,39 @@ import (
24
24
)
25
25
26
26
func TestNamesMatch (t * testing.T ) {
27
+ someStruct := & types.Type {
28
+ Name : types.Name {Name : "SomeStruct" },
29
+ Kind : types .Struct ,
30
+ }
31
+ someStructPtr := & types.Type {
32
+ Name : types.Name {Name : "SomeStructPtr" },
33
+ Kind : types .Pointer ,
34
+ Elem : someStruct ,
35
+ }
36
+ intPtr := & types.Type {
37
+ Name : types.Name {Name : "IntPtr" },
38
+ Kind : types .Pointer ,
39
+ Elem : types .Int ,
40
+ }
41
+ listMeta := & types.Type {
42
+ Name : types.Name {Package : "k8s.io/apimachinery/pkg/apis/meta/v1" , Name : "ListMeta" },
43
+ Kind : types .Struct ,
44
+ }
45
+ listMetaPtr := & types.Type {
46
+ Name : types.Name {Package : "k8s.io/apimachinery/pkg/apis/meta/v1" , Name : "ListMetaPtr" },
47
+ Kind : types .Pointer ,
48
+ Elem : listMeta ,
49
+ }
50
+ objectMeta := & types.Type {
51
+ Name : types.Name {Package : "k8s.io/apimachinery/pkg/apis/meta/v1" , Name : "ObjectMeta" },
52
+ Kind : types .Struct ,
53
+ }
54
+ objectMetaPtr := & types.Type {
55
+ Name : types.Name {Package : "k8s.io/apimachinery/pkg/apis/meta/v1" , Name : "ObjectMetaPtr" },
56
+ Kind : types .Pointer ,
57
+ Elem : objectMeta ,
58
+ }
59
+
27
60
tcs := []struct {
28
61
// name of test case
29
62
name string
@@ -231,36 +264,7 @@ func TestNamesMatch(t *testing.T) {
231
264
},
232
265
expected : []string {"PodSpec" },
233
266
},
234
- // NOTE: JSON names in jsonNameBlacklist should skip evaluation
235
- // {"", "", true},
236
- {
237
- name : "unspecified" ,
238
- t : & types.Type {
239
- Kind : types .Struct ,
240
- Members : []types.Member {
241
- {
242
- Name : "" ,
243
- Tags : `json:""` ,
244
- },
245
- },
246
- },
247
- expected : []string {},
248
- },
249
- // {"podSpec", "", true},
250
- {
251
- name : "blacklist_empty" ,
252
- t : & types.Type {
253
- Kind : types .Struct ,
254
- Members : []types.Member {
255
- {
256
- Name : "podSpec" ,
257
- Tags : `json:""` ,
258
- },
259
- },
260
- },
261
- expected : []string {},
262
- },
263
- // {"podSpec", "metadata", true},
267
+ // {"podSpec", "metadata", false},
264
268
{
265
269
name : "blacklist_metadata" ,
266
270
t : & types.Type {
@@ -272,7 +276,7 @@ func TestNamesMatch(t *testing.T) {
272
276
},
273
277
},
274
278
},
275
- expected : []string {},
279
+ expected : []string {"podSpec" },
276
280
},
277
281
{
278
282
name : "non_struct" ,
@@ -338,6 +342,92 @@ func TestNamesMatch(t *testing.T) {
338
342
},
339
343
expected : []string {"Pod_Spec" },
340
344
},
345
+ {
346
+ name : "empty_JSON_name" ,
347
+ t : & types.Type {
348
+ Kind : types .Struct ,
349
+ Members : []types.Member {
350
+ {
351
+ Name : "Int" ,
352
+ Tags : `json:""` , // Not okay!
353
+ Type : types .Int ,
354
+ },
355
+ {
356
+ Name : "Struct" ,
357
+ Tags : `json:""` , // Okay, inlined.
358
+ Type : someStruct ,
359
+ },
360
+ {
361
+ Name : "IntPtr" ,
362
+ Tags : `json:""` , // Not okay!
363
+ Type : intPtr ,
364
+ },
365
+ {
366
+ Name : "StructPtr" ,
367
+ Tags : `json:""` , // Okay, inlined.
368
+ Type : someStructPtr ,
369
+ },
370
+ },
371
+ },
372
+ expected : []string {
373
+ "Int" ,
374
+ "IntPtr" ,
375
+ },
376
+ },
377
+ {
378
+ name : "metadata_no_pointers" ,
379
+ t : & types.Type {
380
+ Kind : types .Struct ,
381
+ Members : []types.Member {
382
+ {
383
+ Name : "ListMeta" ,
384
+ Tags : `json:"listMeta"` , // Not okay, should be "metadata"!
385
+ Type : listMeta ,
386
+ },
387
+ {
388
+ Name : "ObjectMeta" ,
389
+ Tags : `json:"objectMeta"` , // Not okay, should be metadata"!
390
+ Type : objectMeta ,
391
+ },
392
+ {
393
+ Name : "SomeStruct" ,
394
+ Tags : `json:"metadata"` , // Not okay, name mismatch!
395
+ Type : someStruct ,
396
+ },
397
+ },
398
+ },
399
+ expected : []string {
400
+ "ListMeta" ,
401
+ "ObjectMeta" ,
402
+ "SomeStruct" ,
403
+ },
404
+ },
405
+ {
406
+ name : "metadata_pointers" ,
407
+ t : & types.Type {
408
+ Kind : types .Struct ,
409
+ Members : []types.Member {
410
+ {
411
+ Name : "ListMeta" ,
412
+ Tags : `json:"listMeta"` , // Okay, convention only applies to struct.
413
+ Type : listMetaPtr ,
414
+ },
415
+ {
416
+ Name : "ObjectMeta" ,
417
+ Tags : `json:"objectMeta"` , // Okay, convention only applies to struct.
418
+ Type : objectMetaPtr ,
419
+ },
420
+ {
421
+ Name : "SomeStruct" ,
422
+ Tags : `json:"metadata"` , // Not okay, name mismatch!
423
+ Type : someStructPtr ,
424
+ },
425
+ },
426
+ },
427
+ expected : []string {
428
+ "SomeStruct" ,
429
+ },
430
+ },
341
431
}
342
432
343
433
n := & NamesMatch {}
0 commit comments