1
1
package testutil
2
2
3
3
import (
4
- "fmt"
5
4
"reflect"
6
5
"time"
6
+
7
+ "golang.org/x/xerrors"
7
8
)
8
9
9
10
type Random struct {
@@ -35,12 +36,12 @@ func PopulateStruct(s interface{}, r *Random) error {
35
36
36
37
v := reflect .ValueOf (s )
37
38
if v .Kind ()!= reflect .Ptr || v .IsNil () {
38
- return fmt .Errorf ("s must be a non-nil pointer" )
39
+ return xerrors .Errorf ("s must be a non-nil pointer" )
39
40
}
40
41
41
42
v = v .Elem ()
42
43
if v .Kind ()!= reflect .Struct {
43
- return fmt .Errorf ("s must be a pointer to a struct" )
44
+ return xerrors .Errorf ("s must be a pointer to a struct" )
44
45
}
45
46
46
47
t := v .Type ()
@@ -55,7 +56,7 @@ func PopulateStruct(s interface{}, r *Random) error {
55
56
56
57
nv ,err := populateValue (fieldValue ,r )
57
58
if err != nil {
58
- return fmt .Errorf ("%s : %w" ,fieldName ,err )
59
+ return xerrors .Errorf ("%s : %w" ,fieldName ,err )
59
60
}
60
61
v .Field (i ).Set (nv )
61
62
}
@@ -96,7 +97,7 @@ func populateValue(v reflect.Value, r *Random) (reflect.Value, error) {
96
97
for i := 0 ;i < v .Len ();i ++ {
97
98
nv ,err := populateValue (v .Index (i ),r )
98
99
if err != nil {
99
- return v ,fmt .Errorf ("array index %d : %w" ,i ,err )
100
+ return v ,xerrors .Errorf ("array index %d : %w" ,i ,err )
100
101
}
101
102
v .Index (i ).Set (nv )
102
103
}
@@ -108,11 +109,11 @@ func populateValue(v reflect.Value, r *Random) (reflect.Value, error) {
108
109
kv := reflect .New (v .Type ().Elem ())
109
110
k ,err = populateValue (k ,r )
110
111
if err != nil {
111
- return v ,fmt .Errorf ("map key : %w" ,err )
112
+ return v ,xerrors .Errorf ("map key : %w" ,err )
112
113
}
113
114
kv ,err = populateValue (kv ,r )
114
115
if err != nil {
115
- return v ,fmt .Errorf ("map value : %w" ,err )
116
+ return v ,xerrors .Errorf ("map value : %w" ,err )
116
117
}
117
118
118
119
m .SetMapIndex (k ,kv )
@@ -123,7 +124,7 @@ func populateValue(v reflect.Value, r *Random) (reflect.Value, error) {
123
124
s := reflect .MakeSlice (v .Type (),2 ,2 )
124
125
sv ,err := populateValue (reflect .New (v .Type ().Elem ()),r )
125
126
if err != nil {
126
- return v ,fmt .Errorf ("slice value : %w" ,err )
127
+ return v ,xerrors .Errorf ("slice value : %w" ,err )
127
128
}
128
129
129
130
s .Index (0 ).Set (sv )
@@ -133,9 +134,9 @@ func populateValue(v reflect.Value, r *Random) (reflect.Value, error) {
133
134
return s ,nil
134
135
case reflect .Uintptr ,reflect .UnsafePointer ,reflect .Chan ,reflect .Func ,reflect .Interface :
135
136
// Unsupported
136
- return v ,fmt .Errorf ("%s is not supported" ,v .Kind ())
137
+ return v ,xerrors .Errorf ("%s is not supported" ,v .Kind ())
137
138
default :
138
- return v ,fmt .Errorf ("unsupported kind %s" ,v .Kind ())
139
+ return v ,xerrors .Errorf ("unsupported kind %s" ,v .Kind ())
139
140
}
140
141
return v ,nil
141
142
}