github.com/go-spring/spring-base@v1.1.3/util/value_test.go (about) 1 /* 2 * Copyright 2012-2019 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package util_test 18 19 import ( 20 "reflect" 21 "testing" 22 23 "github.com/go-spring/spring-base/assert" 24 "github.com/go-spring/spring-base/util" 25 "github.com/go-spring/spring-base/util/testdata" 26 ) 27 28 func TestPatchValue(t *testing.T) { 29 var r struct{ v int } 30 v := reflect.ValueOf(&r) 31 v = v.Elem().Field(0) 32 assert.Panic(t, func() { 33 v.SetInt(4) 34 }, "using value obtained using unexported field") 35 v = util.PatchValue(v) 36 v.SetInt(4) 37 } 38 39 func TestIndirect(t *testing.T) { 40 var r struct{ v int } 41 typ := reflect.TypeOf(r) 42 assert.Equal(t, util.Indirect(typ), reflect.TypeOf(r)) 43 typ = reflect.TypeOf(&r) 44 assert.Equal(t, util.Indirect(typ), reflect.TypeOf(r)) 45 } 46 47 func fnNoArgs() {} 48 49 func fnWithArgs(i int) {} 50 51 type receiver struct{} 52 53 func (r receiver) fnNoArgs() {} 54 55 func (r receiver) fnWithArgs(i int) {} 56 57 func (r *receiver) ptrFnNoArgs() {} 58 59 func (r *receiver) ptrFnWithArgs(i int) {} 60 61 func TestFileLine(t *testing.T) { 62 offset := 62 63 testcases := []struct { 64 fn interface{} 65 file string 66 line int 67 fnName string 68 }{ 69 { 70 fn: fnNoArgs, 71 file: "spring-base/util/value_test.go", 72 line: offset - 15, 73 fnName: "fnNoArgs", 74 }, 75 { 76 fnWithArgs, 77 "spring-base/util/value_test.go", 78 offset - 13, 79 "fnWithArgs", 80 }, 81 { 82 receiver{}.fnNoArgs, 83 "spring-base/util/value_test.go", 84 offset - 9, 85 "receiver.fnNoArgs", 86 }, 87 { 88 receiver.fnNoArgs, 89 "spring-base/util/value_test.go", 90 offset - 9, 91 "receiver.fnNoArgs", 92 }, 93 { 94 receiver{}.fnWithArgs, 95 "spring-base/util/value_test.go", 96 offset - 7, 97 "receiver.fnWithArgs", 98 }, 99 { 100 receiver.fnWithArgs, 101 "spring-base/util/value_test.go", 102 offset - 7, 103 "receiver.fnWithArgs", 104 }, 105 { 106 (&receiver{}).ptrFnNoArgs, 107 "spring-base/util/value_test.go", 108 offset - 5, 109 "(*receiver).ptrFnNoArgs", 110 }, 111 { 112 (*receiver).ptrFnNoArgs, 113 "spring-base/util/value_test.go", 114 offset - 5, 115 "(*receiver).ptrFnNoArgs", 116 }, 117 { 118 (&receiver{}).ptrFnWithArgs, 119 "spring-base/util/value_test.go", 120 offset - 3, 121 "(*receiver).ptrFnWithArgs", 122 }, 123 { 124 (*receiver).ptrFnWithArgs, 125 "spring-base/util/value_test.go", 126 offset - 3, 127 "(*receiver).ptrFnWithArgs", 128 }, 129 { 130 testdata.FnNoArgs, 131 "spring-base/util/testdata/pkg.go", 132 19, 133 "FnNoArgs", 134 }, 135 { 136 testdata.FnWithArgs, 137 "spring-base/util/testdata/pkg.go", 138 21, 139 "FnWithArgs", 140 }, 141 { 142 testdata.Receiver{}.FnNoArgs, 143 "spring-base/util/testdata/pkg.go", 144 25, 145 "Receiver.FnNoArgs", 146 }, 147 { 148 testdata.Receiver{}.FnWithArgs, 149 "spring-base/util/testdata/pkg.go", 150 27, 151 "Receiver.FnWithArgs", 152 }, 153 { 154 (&testdata.Receiver{}).PtrFnNoArgs, 155 "spring-base/util/testdata/pkg.go", 156 29, 157 "(*Receiver).PtrFnNoArgs", 158 }, 159 { 160 (&testdata.Receiver{}).PtrFnWithArgs, 161 "spring-base/util/testdata/pkg.go", 162 31, 163 "(*Receiver).PtrFnWithArgs", 164 }, 165 { 166 testdata.Receiver.FnNoArgs, 167 "spring-base/util/testdata/pkg.go", 168 25, 169 "Receiver.FnNoArgs", 170 }, 171 { 172 testdata.Receiver.FnWithArgs, 173 "spring-base/util/testdata/pkg.go", 174 27, 175 "Receiver.FnWithArgs", 176 }, 177 { 178 (*testdata.Receiver).PtrFnNoArgs, 179 "spring-base/util/testdata/pkg.go", 180 29, 181 "(*Receiver).PtrFnNoArgs", 182 }, 183 { 184 (*testdata.Receiver).PtrFnWithArgs, 185 "spring-base/util/testdata/pkg.go", 186 31, 187 "(*Receiver).PtrFnWithArgs", 188 }, 189 } 190 for _, c := range testcases { 191 file, line, fnName := util.FileLine(c.fn) 192 assert.String(t, file).HasSuffix(c.file) 193 assert.Equal(t, line, c.line) 194 assert.Equal(t, fnName, c.fnName) 195 } 196 }