@@ -1205,31 +1205,28 @@ func assertOpts(expected, actual interface{}) (expectedFmt, actualFmt string) {
1205
1205
expectedOpts := reflect .ValueOf (expected )
1206
1206
actualOpts := reflect .ValueOf (actual )
1207
1207
1208
- var expectedNames []string
1209
- for i := 0 ; i < expectedOpts .Len (); i ++ {
1210
- expectedNames = append (expectedNames , funcName (expectedOpts .Index (i ).Interface ()))
1211
- }
1212
- var actualNames []string
1213
- for i := 0 ; i < actualOpts .Len (); i ++ {
1214
- actualNames = append (actualNames , funcName (actualOpts .Index (i ).Interface ()))
1215
- }
1216
- if ! assert .ObjectsAreEqual (expectedNames , actualNames ) {
1217
- expectedFmt = fmt .Sprintf ("%v" , expectedNames )
1218
- actualFmt = fmt .Sprintf ("%v" , actualNames )
1208
+ if expectedOpts .Len () != actualOpts .Len () {
1209
+ expectedFmt = fmt .Sprintf ("%v" , expected )
1210
+ actualFmt = fmt .Sprintf ("%v" , actual )
1219
1211
return
1220
1212
}
1221
1213
1214
+ var funcNames []string
1215
+
1222
1216
for i := 0 ; i < expectedOpts .Len (); i ++ {
1223
- expectedOpt := expectedOpts .Index (i ).Interface ()
1224
- actualOpt := actualOpts . Index ( i ). Interface ( )
1217
+ expectedFunc := getRuntimeFunc ( expectedOpts .Index (i ).Interface () )
1218
+ funcNames = append ( funcNames , funcName ( getRuntimeFunc ( expectedFunc )) )
1225
1219
1226
- expectedFunc := expectedNames [i ]
1227
- actualFunc := actualNames [i ]
1228
- if expectedFunc != actualFunc {
1229
- expectedFmt = expectedFunc
1230
- actualFmt = actualFunc
1220
+ if actualFunc := getRuntimeFunc (actualOpts .Index (i ).Interface ()); ! isFuncSame (expectedFunc , actualFunc ) {
1221
+ expectedFmt = funcName (expectedFunc )
1222
+ actualFmt = funcName (actualFunc )
1231
1223
return
1232
1224
}
1225
+ }
1226
+
1227
+ for i := 0 ; i < expectedOpts .Len (); i ++ {
1228
+ expectedOpt := expectedOpts .Index (i ).Interface ()
1229
+ actualOpt := actualOpts .Index (i ).Interface ()
1233
1230
1234
1231
ot := reflect .TypeOf (expectedOpt )
1235
1232
var expectedValues []reflect.Value
@@ -1249,8 +1246,8 @@ func assertOpts(expected, actual interface{}) (expectedFmt, actualFmt string) {
1249
1246
1250
1247
for i := 0 ; i < ot .NumIn (); i ++ {
1251
1248
if expectedArg , actualArg := expectedValues [i ].Interface (), actualValues [i ].Interface (); ! assert .ObjectsAreEqual (expectedArg , actualArg ) {
1252
- expectedFmt = fmt .Sprintf ("%s(%T) -> %#v" , expectedNames [i ], expectedArg , expectedArg )
1253
- actualFmt = fmt .Sprintf ("%s(%T) -> %#v" , expectedNames [i ], actualArg , actualArg )
1249
+ expectedFmt = fmt .Sprintf ("%s(%T) -> %#v" , funcNames [i ], expectedArg , expectedArg )
1250
+ actualFmt = fmt .Sprintf ("%s(%T) -> %#v" , funcNames [i ], actualArg , actualArg )
1254
1251
return
1255
1252
}
1256
1253
}
@@ -1259,9 +1256,13 @@ func assertOpts(expected, actual interface{}) (expectedFmt, actualFmt string) {
1259
1256
return "" , ""
1260
1257
}
1261
1258
1262
- func funcName (opt interface {}) string {
1263
- n := runtime .FuncForPC (reflect .ValueOf (opt ).Pointer ()).Name ()
1264
- trimmed := strings .TrimSuffix (path .Base (n ), path .Ext (n ))
1259
+ func getRuntimeFunc (opt interface {}) * runtime.Func {
1260
+ return runtime .FuncForPC (reflect .ValueOf (opt ).Pointer ())
1261
+ }
1262
+
1263
+ func funcName (f * runtime.Func ) string {
1264
+ name := f .Name ()
1265
+ trimmed := strings .TrimSuffix (path .Base (name ), path .Ext (name ))
1265
1266
splitted := strings .Split (trimmed , "." )
1266
1267
1267
1268
if len (splitted ) == 0 {
@@ -1270,3 +1271,10 @@ func funcName(opt interface{}) string {
1270
1271
1271
1272
return splitted [len (splitted )- 1 ]
1272
1273
}
1274
+
1275
+ func isFuncSame (f1 , f2 * runtime.Func ) bool {
1276
+ f1File , f1Loc := f1 .FileLine (f1 .Entry ())
1277
+ f2File , f2Loc := f2 .FileLine (f2 .Entry ())
1278
+
1279
+ return f1File == f2File && f1Loc == f2Loc
1280
+ }
0 commit comments