-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinterfaces_test.go
80 lines (61 loc) · 1.43 KB
/
interfaces_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package json
import "testing"
type neverzero int
func (nz neverzero) IsZero() bool {
return false
}
type alwayszero int
func (az alwayszero) IsZero() bool {
return true
}
type OptionalsIsZero struct {
Sr string `json:"sr"`
So string `json:"so,omitempty"`
Sw string `json:"-"`
Ir int `json:"omitempty"` // actually named omitempty, not an option
Io int `json:"io,omitempty"`
Slr []string `json:"slr,random"`
Slo []string `json:"slo,omitempty"`
Mr map[string]any `json:"mr"`
Mo map[string]any `json:",omitempty"`
Fr float64 `json:"fr"`
Fo float64 `json:"fo,omitempty"`
Br bool `json:"br"`
Bo bool `json:"bo,omitempty"`
Ur uint `json:"ur"`
Uo uint `json:"uo,omitempty"`
Str struct{} `json:"str"`
Sto struct{} `json:"sto,omitempty"`
Nzr neverzero `json:"nzr"`
Nzo neverzero `json:"nzo,omitempty"`
Azr alwayszero `json:"azr"`
Azo alwayszero `json:"azo,omitempty"`
PtrAzo *alwayszero `json:"ptrAzo,omitempty"`
}
var optionalsIsZeroExpected = `{
"sr": "",
"omitempty": 0,
"slr": null,
"mr": {},
"fr": 0,
"br": false,
"ur": 0,
"str": {},
"sto": {},
"nzr": 0,
"nzo": 0,
"azr": 0
}`
func TestOmitEmptyAndIsZero(t *testing.T) {
var o OptionalsIsZero
o.Sw = "something"
o.Mr = map[string]any{}
o.Mo = map[string]any{}
got, err := MarshalIndent(&o, "", " ")
if err != nil {
t.Fatal(err)
}
if got := string(got); got != optionalsIsZeroExpected {
t.Errorf(" got: %s\nwant: %s\n", got, optionalsIsZeroExpected)
}
}