1
1
package tuple
2
2
3
3
import (
4
+ "encoding/json"
4
5
"testing"
5
6
6
7
"github.com/stretchr/testify/require"
@@ -9,10 +10,11 @@ import (
9
10
{ {/* These variables can be used when the context of dot changes. */} }
10
11
{ {$indexes := .Indexes} }
11
12
{ {$len := .Len} }
13
+ { {$stringOverload := buildSingleTypedOverload $indexes " string" } }
12
14
13
15
func TestT{ {.Len} }_New(t *testing.T) {
14
16
tup := New{{.Len} }({ {range .Indexes} }{ {. | quote} },{ {end} })
15
- require.Equal(t, T { {.Len } }[ { {range $ i , $ index := .Indexes } } { { if gt $ i 0 } }, { {end } }string { {end } }] {
17
+ require.Equal(t, { { $ stringOverload } } {
16
18
{{range .Indexes -} }
17
19
V{ {.} }: { {. | quote} },
18
20
{ {end} }
@@ -227,7 +229,7 @@ func TestT{{.Len}}_String(t *testing.T) {
227
229
228
230
func TestT{ {.Len} }_GoString(t *testing.T) {
229
231
tup := New{{.Len} }({ {range .Indexes} }{ {. | quote} },{ {end} })
230
- require.Equal(t, `tuple.T { {.Len } }[ { {range $ i , $ index := .Indexes } } { { if gt $ i 0 } }, { {end } }string { {end } }] {
232
+ require.Equal(t, `tuple.{ { $ stringOverload } } {
231
233
{{- range $i , $index := .Indexes -} }
232
234
{ {- if gt $i 0} }, { {end -} }
233
235
V{ {$index } }: { {$index | quote} }
@@ -281,7 +283,7 @@ func TestT{{.Len}}_FromArrayX(t *testing.T) {
281
283
282
284
for _, tt := range tests {
283
285
t.Run(tt.name, func(t *testing.T) {
284
- do := func () T{{.Len } }[ { {range $ i , $ index := .Indexes } } { { if gt $ i 0 } }, { {end } }string { {end } }] {
286
+ do := func () {{ $ stringOverload } } {
285
287
return FromArray{{.Len} }X[{ {range $i , $index := .Indexes} }{ {if gt $i 0} }, { {end} }string{ {end} }](tt.array)
286
288
}
287
289
@@ -393,7 +395,7 @@ func TestT{{.Len}}_FromSliceX(t *testing.T) {
393
395
394
396
for _, tt := range tests {
395
397
t.Run(tt.name, func(t *testing.T) {
396
- do := func () T{{.Len } }[ { {range $ i , $ index := .Indexes } } { { if gt $ i 0 } }, { {end } }string { {end } }] {
398
+ do := func () {{ $ stringOverload } } {
397
399
return FromSlice{{.Len} }X[{ {range $i , $index := .Indexes} }{ {if gt $i 0} }, { {end} }string{ {end} }](tt.slice)
398
400
}
399
401
@@ -472,3 +474,96 @@ func TestT{{.Len}}_FromSlice(t *testing.T) {
472
474
})
473
475
}
474
476
}
477
+
478
+ func TestT{ {.Len} }_MarshalJSON(t *testing.T) {
479
+ tup := New{{.Len} }({ {range .Indexes} }{ {. | quote} },{ {end} })
480
+
481
+ got, err := json.Marshal(tup)
482
+ require.NoError(t, err)
483
+ require.Equal(t, got, []byte(`[{ {range .Indexes} }{ {if ne . 1} },{ {end} }{ {. | quote} }{ {end} }]`))
484
+ }
485
+
486
+ func TestT{ {.Len} }_UnmarshalJSON(t *testing.T) {
487
+ tests := []struct{
488
+ name string
489
+ data []byte
490
+ want {{$stringOverload } }
491
+ wantErr bool
492
+ }{
493
+ {
494
+ name: " nil data" ,
495
+ data: nil,
496
+ wantErr: true ,
497
+ } ,
498
+ {
499
+ name: " empty data" ,
500
+ data: []byte{} ,
501
+ wantErr: true,
502
+ },
503
+ {
504
+ name: " string data" ,
505
+ data: []byte(`" hi" `),
506
+ wantErr: true ,
507
+ } ,
508
+ {
509
+ name: " empty json array" ,
510
+ data: []byte(`[]`),
511
+ wantErr: true ,
512
+ } ,
513
+ {
514
+ name: " longer json array" ,
515
+ data: []byte(`[" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" , " 10" ]`),
516
+ wantErr: true ,
517
+ } ,
518
+ {
519
+ name: " json array of invalid types" ,
520
+ data: []byte(`[{{range $.Indexes} }{ {if ne . 1} },{ {end} }{ {.} }{ {end} }]`),
521
+ wantErr: true,
522
+ },
523
+ { {if gt .Len 1 -} }
524
+ {
525
+ name: " json array with 1 invalid type" ,
526
+ data: []byte(`[{{range $.Indexes} }{ {if ne . 1} },{ {end} }{ {if eq . 1} }{ {.} }{ {else } }{ {. | quote} }{ {end} }{ {end} }]`),
527
+ wantErr: true,
528
+ },
529
+ { {- end} }
530
+ {
531
+ name: " json array of valid types" ,
532
+ data: []byte(`[{{range $.Indexes} }{ {if ne . 1} },{ {end} }{ {. | quote} }{ {end} }]`),
533
+ want: New{ {.Len} }({ {range .Indexes} }{ {. | quote} },{ {end} }),
534
+ wantErr: false,
535
+ },
536
+ {
537
+ name: " json object of valid types" ,
538
+ data: []byte(`{{" {" } }{ {range $.Indexes} }{ {if ne . 1} },{ {end} }"V{ {.} }": { {. | quote} }{ {end} }{ {" }" } }`),
539
+ wantErr: true,
540
+ },
541
+ }
542
+
543
+ for _, tt := range tests {
544
+ t.Run(tt.name, func(t *testing.T) {
545
+ var got {{$stringOverload } }
546
+ err := json.Unmarshal(tt.data, &got)
547
+ if tt.wantErr {
548
+ require.Error(t, err)
549
+ return
550
+ }
551
+
552
+ require.NoError(t, err)
553
+ require.Equal(t, tt.want, got)
554
+ })
555
+ }
556
+ }
557
+
558
+ func TestT{ {.Len} }_Marshal_Unmarshal(t *testing.T) {
559
+ tup := New{{.Len} }({ {range .Indexes} }{ {. | quote} },{ {end} })
560
+
561
+ marshalled, err := json.Marshal(tup)
562
+ require.NoError(t, err)
563
+
564
+ var unmarshalled { {$stringOverload } }
565
+ err = json.Unmarshal(marshalled, &unmarshalled)
566
+
567
+ require.NoError(t, err)
568
+ require.Equal(t, tup, unmarshalled)
569
+ }
0 commit comments