-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjson_test.go
89 lines (68 loc) · 1.83 KB
/
json_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
81
82
83
84
85
86
87
88
89
package option_test
import (
"encoding/json"
"testing"
"github.com/BooleanCat/option"
"github.com/BooleanCat/option/internal/assert"
)
func TestMarshalSome(t *testing.T) {
t.Parallel()
data, err := json.Marshal(option.Some(4))
assert.Nil(t, err)
assert.Equal(t, string(data), "4")
}
func TestMarshalNone(t *testing.T) {
t.Parallel()
data, err := json.Marshal(option.None[int]())
assert.Nil(t, err)
assert.Equal(t, string(data), "null")
}
func TestMarshalSomeParsed(t *testing.T) {
t.Parallel()
type name struct {
MiddleName option.Option[string] `json:"middle_name"`
}
data, err := json.Marshal(name{MiddleName: option.Some("Barry")})
assert.Nil(t, err)
assert.Equal(t, string(data), `{"middle_name":"Barry"}`)
}
func TestMarshalNoneParsed(t *testing.T) {
t.Parallel()
type name struct {
MiddleName option.Option[string] `json:"middle_name"`
}
data, err := json.Marshal(name{MiddleName: option.None[string]()})
assert.Nil(t, err)
assert.Equal(t, string(data), `{"middle_name":null}`)
}
func TestUnmarshalSome(t *testing.T) {
t.Parallel()
var number option.Option[int]
err := json.Unmarshal([]byte("4"), &number)
assert.Nil(t, err)
assert.Equal(t, number, option.Some(4))
}
func TestUnmarshalNone(t *testing.T) {
t.Parallel()
var number option.Option[int]
err := json.Unmarshal([]byte("null"), &number)
assert.Nil(t, err)
assert.True(t, number.IsNone())
}
func TestUnmarshalEmpty(t *testing.T) {
t.Parallel()
type name struct {
MiddleName option.Option[string] `json:"middle_name"`
}
var value name
err := json.Unmarshal([]byte("{}"), &value)
assert.Nil(t, err)
assert.True(t, value.MiddleName.IsNone())
}
func TestUnmarshalError(t *testing.T) {
t.Parallel()
var number option.Option[int]
err := number.UnmarshalJSON([]byte("not a number"))
assert.NotNil(t, err)
assert.True(t, number.IsNone())
}