diff --git a/debug/gdebug/gdebug_caller.go b/debug/gdebug/gdebug_caller.go index d02ff4ab8..e5863e25f 100644 --- a/debug/gdebug/gdebug_caller.go +++ b/debug/gdebug/gdebug_caller.go @@ -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. diff --git a/debug/gdebug/gdebug_z_unit_internal_test.go b/debug/gdebug/gdebug_z_unit_internal_test.go new file mode 100644 index 000000000..272141479 --- /dev/null +++ b/debug/gdebug/gdebug_z_unit_internal_test.go @@ -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() + } + } +} diff --git a/debug/gdebug/gdebug_z_unit_test.go b/debug/gdebug/gdebug_z_unit_test.go index 606a9c4c5..0a8b0f84f 100644 --- a/debug/gdebug/gdebug_z_unit_test.go +++ b/debug/gdebug/gdebug_z_unit_test.go @@ -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 (