File tree Expand file tree Collapse file tree 2 files changed +75
-0
lines changed Expand file tree Collapse file tree 2 files changed +75
-0
lines changed Original file line number Diff line number Diff line change @@ -45,6 +45,30 @@ func (r ResultCode) String() string {
45
45
}
46
46
}
47
47
48
+ func (r ResultCode ) MarshalText () ([]byte , error ) {
49
+ switch r {
50
+ case None , Patchlevel , Minor , Major :
51
+ return []byte (r .String ()), nil
52
+ }
53
+ return nil , fmt .Errorf ("unknown ResultCode value %d" , r )
54
+ }
55
+
56
+ func (r * ResultCode ) UnmarshalText (text []byte ) error {
57
+ switch string (text ) {
58
+ case "None" :
59
+ * r = None
60
+ case "Patchlevel" :
61
+ * r = Patchlevel
62
+ case "Minor" :
63
+ * r = Minor
64
+ case "Major" :
65
+ * r = Major
66
+ default :
67
+ return fmt .Errorf ("unknown ResultCode value %q" , text )
68
+ }
69
+ return nil
70
+ }
71
+
48
72
type wrapped struct {
49
73
r Result
50
74
whyfmt string
Original file line number Diff line number Diff line change @@ -2,6 +2,8 @@ package modver
2
2
3
3
import (
4
4
"bytes"
5
+ "encoding/json"
6
+ "fmt"
5
7
"testing"
6
8
)
7
9
@@ -21,3 +23,52 @@ func TestPretty(t *testing.T) {
21
23
t .Errorf ("got %s, want %s" , buf , want )
22
24
}
23
25
}
26
+
27
+ func TestMarshalResultCode (t * testing.T ) {
28
+ cases := []struct {
29
+ rc ResultCode
30
+ want string
31
+ wantErr bool
32
+ }{{
33
+ rc : None ,
34
+ want : `"None"` ,
35
+ }, {
36
+ rc : Patchlevel ,
37
+ want : `"Patchlevel"` ,
38
+ }, {
39
+ rc : Minor ,
40
+ want : `"Minor"` ,
41
+ }, {
42
+ rc : Major ,
43
+ want : `"Major"` ,
44
+ }, {
45
+ rc : ResultCode (42 ),
46
+ wantErr : true ,
47
+ }}
48
+
49
+ for i , tc := range cases {
50
+ t .Run (fmt .Sprintf ("case_%02d" , i + 1 ), func (t * testing.T ) {
51
+ got , err := json .Marshal (tc .rc )
52
+ if err != nil && tc .wantErr {
53
+ return
54
+ }
55
+ if err != nil {
56
+ t .Fatal (err )
57
+ }
58
+ if tc .wantErr {
59
+ t .Fatal ("got no error but want one" )
60
+ }
61
+ if string (got ) != tc .want {
62
+ t .Errorf ("marshaling: got %s, want %s" , string (got ), tc .want )
63
+ }
64
+
65
+ var rc ResultCode
66
+ if err := json .Unmarshal (got , & rc ); err != nil {
67
+ t .Fatal (err )
68
+ }
69
+ if rc != tc .rc {
70
+ t .Errorf ("unmarshaling: got %v, want %v" , rc , tc .rc )
71
+ }
72
+ })
73
+ }
74
+ }
You can’t perform that action at this time.
0 commit comments