fix(debug/gdebug): incorrect package name handling in function CallerPackage (#3771)

This commit is contained in:
John Guo 2024-09-13 16:51:39 +08:00 committed by GitHub
parent 6a99931798
commit e186eab1a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 6 deletions

View File

@ -133,16 +133,25 @@ func filterFileByFilters(file string, filters []string) (filtered bool) {
// CallerPackage returns the package name of the caller.
func CallerPackage() string {
function, _, _ := Caller()
// it defines a new internal function to retrieve the package name from caller function name,
// which is for unit testing purpose for core logic of this function.
return getPackageFromCallerFunction(function)
}
func getPackageFromCallerFunction(function string) string {
indexSplit := strings.LastIndexByte(function, '/')
if indexSplit == -1 {
return function[:strings.IndexByte(function, '.')]
} else {
leftPart := function[:indexSplit+1]
rightPart := function[indexSplit+1:]
indexDot := strings.IndexByte(function, '.')
rightPart = rightPart[:indexDot-1]
return leftPart + rightPart
}
var (
leftPart = function[:indexSplit+1]
rightPart = function[indexSplit+1:]
indexDot = strings.IndexByte(rightPart, '.')
)
if indexDot >= 0 {
rightPart = rightPart[:indexDot]
}
return leftPart + rightPart
}
// CallerFunction returns the function name of the caller.

View File

@ -0,0 +1,26 @@
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package gdebug
import (
"testing"
)
func Test_getPackageFromCallerFunction(t *testing.T) {
dataMap := map[string]string{
"github.com/gogf/gf/v2/test/a": "github.com/gogf/gf/v2/test/a",
"github.com/gogf/gf/v2/test/a.C": "github.com/gogf/gf/v2/test/a",
"github.com/gogf/gf/v2/test/aa.C": "github.com/gogf/gf/v2/test/aa",
"github.com/gogf/gf/v2/test/gtest.C": "github.com/gogf/gf/v2/test/gtest",
}
for functionName, packageName := range dataMap {
if result := getPackageFromCallerFunction(functionName); result != packageName {
t.Logf(`%s != %s`, result, packageName)
t.Fail()
}
}
}

View File

@ -1,3 +1,9 @@
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package gdebug_test
import (