Skip to content

Commit

Permalink
fix(debug/gdebug): incorrect package name handling in function Caller…
Browse files Browse the repository at this point in the history
…Package (#3771)
  • Loading branch information
gqcn authored Sep 13, 2024
1 parent 6a99931 commit e186eab
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 6 deletions.
21 changes: 15 additions & 6 deletions debug/gdebug/gdebug_caller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
26 changes: 26 additions & 0 deletions debug/gdebug/gdebug_z_unit_internal_test.go
Original file line number Diff line number Diff line change
@@ -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()
}
}
}
6 changes: 6 additions & 0 deletions debug/gdebug/gdebug_z_unit_test.go
Original file line number Diff line number Diff line change
@@ -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 (
Expand Down

0 comments on commit e186eab

Please sign in to comment.