@@ -14,19 +14,20 @@ import (
1414)
1515
1616type Struct struct {
17- String string
18- Int int
19- Bool bool
20- Strings []string
21- Time time.Time
22- Struct * Struct
23- Nil * Struct
24- Structs []* Struct
25- Map map [string ]string
26- Stringer Stringer
27- StringerPtr * Stringer
28- Size * scw.Size
29- Bytes []byte
17+ String string
18+ Int int
19+ Bool bool
20+ Strings []string
21+ Time time.Time
22+ Struct * Struct
23+ Nil * Struct
24+ Structs []* Struct
25+ Map map [string ]string
26+ Stringer Stringer
27+ StringerPtr * Stringer
28+ Size * scw.Size
29+ Bytes []byte
30+ MapStringList map [string ][]string
3031}
3132
3233type StructAny struct {
@@ -112,6 +113,77 @@ func TestMarshal(t *testing.T) {
112113 "key1" : "v1" ,
113114 "key2" : "v2" ,
114115 },
116+ MapStringList : map [string ][]string {
117+ "key1" : {"v1" , "v2" },
118+ "key2" : {"v3" , "v4" },
119+ },
120+ Stringer : Stringer {},
121+ StringerPtr : & Stringer {},
122+ Size : scw .SizePtr (13200 ),
123+ Bytes : []byte {0 , 1 },
124+ },
125+ result : `
126+ String This is a string
127+ Int 42
128+ Bool true
129+ Strings.0 s1
130+ Strings.1 s2
131+ Time ` + humanDate + `
132+ Struct.String -
133+ Struct.Int 0
134+ Struct.Bool false
135+ Struct.Time a long while ago
136+ Struct.Stringer a stringer
137+ Structs.0.String Nested string
138+ Structs.0.Int 0
139+ Structs.0.Bool false
140+ Structs.0.Time a long while ago
141+ Structs.0.Stringer a stringer
142+ Map.key1 v1
143+ Map.key2 v2
144+ Stringer a stringer
145+ StringerPtr a stringer
146+ Size 13 kB
147+ Bytes AAE=
148+ MapStringList.key1.0 v1
149+ MapStringList.key1.1 v2
150+ MapStringList.key2.0 v3
151+ MapStringList.key2.1 v4
152+ ` ,
153+ }))
154+
155+ t .Run ("structWithMapsInSection" , run (& testCase {
156+ opt : & human.MarshalOpt {
157+ Sections : []* human.MarshalSection {
158+ {
159+ FieldName : "MapStringList" ,
160+ },
161+ {
162+ FieldName : "Map" ,
163+ },
164+ },
165+ },
166+ data : & Struct {
167+ String : "This is a string" ,
168+ Int : 42 ,
169+ Bool : true ,
170+ Strings : []string {"s1" , "s2" },
171+ Time : date ,
172+ Struct : & Struct {},
173+ Nil : nil ,
174+ Structs : []* Struct {
175+ {
176+ String : "Nested string" ,
177+ },
178+ },
179+ Map : map [string ]string {
180+ "key1" : "v1" ,
181+ "key2" : "v2" ,
182+ },
183+ MapStringList : map [string ][]string {
184+ "key1" : {"v1" , "v2" },
185+ "key2" : {"v3" , "v4" },
186+ },
115187 Stringer : Stringer {},
116188 StringerPtr : & Stringer {},
117189 Size : scw .SizePtr (13200 ),
@@ -123,7 +195,7 @@ func TestMarshal(t *testing.T) {
123195 Bool true
124196 Strings.0 s1
125197 Strings.1 s2
126- Time ` + humanDate + `
198+ Time 34 years ago
127199 Struct.String -
128200 Struct.Int 0
129201 Struct.Bool false
@@ -134,12 +206,18 @@ func TestMarshal(t *testing.T) {
134206 Structs.0.Bool false
135207 Structs.0.Time a long while ago
136208 Structs.0.Stringer a stringer
137- Map.key1 v1
138- Map.key2 v2
139209 Stringer a stringer
140210 StringerPtr a stringer
141211 Size 13 kB
142212 Bytes AAE=
213+
214+ Map String List:
215+ key1 v1 v2
216+ key2 v3 v4
217+
218+ Map:
219+ key1 v1
220+ key2 v2
143221 ` ,
144222 }))
145223
@@ -338,7 +416,7 @@ func Test_getStructFieldsIndex(t *testing.T) {
338416 },
339417 ),
340418 },
341- want : [][]int {{0 }, {1 }, {2 }, {3 }, {4 }, {5 }, {6 }, {7 }, {8 }, {9 }, {10 }, {11 }, {12 }},
419+ want : [][]int {{0 }, {1 }, {2 }, {3 }, {4 }, {5 }, {6 }, {7 }, {8 }, {9 }, {10 }, {11 }, {12 }, { 13 } },
342420 },
343421 }
344422 for _ , tt := range tests {
0 commit comments