MCPcopy Index your code
hub / github.com/coder/coder / populateValue

Function populateValue

testutil/reflect.go:69–144  ·  view source on GitHub ↗
(v reflect.Value, r *Random)

Source from the content-addressed store, hash-verified

67}
68
69func populateValue(v reflect.Value, r *Random) (reflect.Value, error) {
70 var err error
71
72 // Handle some special cases
73 switch v.Type() {
74 case reflect.TypeOf(time.Time{}):
75 v.Set(reflect.ValueOf(r.Time()))
76 return v, nil
77 default:
78 // Go to Kind instead
79 }
80
81 switch v.Kind() {
82 case reflect.Struct:
83 if err := PopulateStruct(v.Addr().Interface(), r); err != nil {
84 return v, err
85 }
86 case reflect.String:
87 v.SetString(r.String())
88 case reflect.Bool:
89 v.SetBool(true)
90 case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
91 v.SetInt(r.Int())
92 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
93 v.SetUint(r.Uint())
94 case reflect.Float32, reflect.Float64:
95 v.SetFloat(r.Float())
96 case reflect.Complex64, reflect.Complex128:
97 v.SetComplex(r.Complex())
98 case reflect.Array:
99 for i := 0; i < v.Len(); i++ {
100 nv, err := populateValue(v.Index(i), r)
101 if err != nil {
102 return v, xerrors.Errorf("array index %d : %w", i, err)
103 }
104 v.Index(i).Set(nv)
105 }
106 case reflect.Map:
107 m := reflect.MakeMap(v.Type())
108
109 // Set a value in the map
110 k := reflect.New(v.Type().Key())
111 kv := reflect.New(v.Type().Elem())
112 k, err = populateValue(k, r)
113 if err != nil {
114 return v, xerrors.Errorf("map key : %w", err)
115 }
116 kv, err = populateValue(kv, r)
117 if err != nil {
118 return v, xerrors.Errorf("map value : %w", err)
119 }
120
121 m.SetMapIndex(k, kv)
122 return m, nil
123 case reflect.Pointer:
124 return populateValue(v.Elem(), r)
125 case reflect.Slice:
126 s := reflect.MakeSlice(v.Type(), 2, 2)

Callers 1

PopulateStructFunction · 0.85

Calls 10

PopulateStructFunction · 0.85
IntMethod · 0.80
TypeMethod · 0.65
SetMethod · 0.65
NewMethod · 0.65
TimeMethod · 0.45
AddrMethod · 0.45
StringMethod · 0.45
LenMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected