mirror of
https://gitee.com/johng/gf
synced 2026-07-08 22:40:30 +08:00
@ -8,6 +8,7 @@ package cmd
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/gogf/gf/v2/os/gfile"
|
||||
@ -60,6 +61,7 @@ func Test_Gen_Service_Default(t *testing.T) {
|
||||
dstFolder + filepath.FromSlash("/article.go"),
|
||||
dstFolder + filepath.FromSlash("/base.go"),
|
||||
dstFolder + filepath.FromSlash("/delivery.go"),
|
||||
dstFolder + filepath.FromSlash("/pointer.go"),
|
||||
dstFolder + filepath.FromSlash("/user.go"),
|
||||
})
|
||||
|
||||
@ -69,6 +71,7 @@ func Test_Gen_Service_Default(t *testing.T) {
|
||||
testPath + filepath.FromSlash("/article.go"),
|
||||
testPath + filepath.FromSlash("/base.go"),
|
||||
testPath + filepath.FromSlash("/delivery.go"),
|
||||
testPath + filepath.FromSlash("/pointer.go"),
|
||||
testPath + filepath.FromSlash("/user.go"),
|
||||
}
|
||||
for i := range files {
|
||||
@ -195,6 +198,7 @@ func Test_Gen_Service_CamelCase(t *testing.T) {
|
||||
dstFolder + filepath.FromSlash("/Article.go"),
|
||||
dstFolder + filepath.FromSlash("/Base.go"),
|
||||
dstFolder + filepath.FromSlash("/Delivery.go"),
|
||||
dstFolder + filepath.FromSlash("/Pointer.go"),
|
||||
dstFolder + filepath.FromSlash("/User.go"),
|
||||
})
|
||||
})
|
||||
@ -283,3 +287,50 @@ func Test_Issue4242(t *testing.T) {
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
func Test_Issue4741(t *testing.T) {
|
||||
gtest.C(t, func(t *gtest.T) {
|
||||
var (
|
||||
path = gfile.Temp(guid.S())
|
||||
dstFolder = path + filepath.FromSlash("/service")
|
||||
srvFolder = gtest.DataPath("genservice", "logic")
|
||||
in = genservice.CGenServiceInput{
|
||||
SrcFolder: srvFolder,
|
||||
DstFolder: dstFolder,
|
||||
DstFileNameCase: "Snake",
|
||||
WatchFile: "",
|
||||
StPattern: "",
|
||||
Packages: []string{"pointer"},
|
||||
ImportPrefix: "",
|
||||
Clear: false,
|
||||
}
|
||||
genSrv = srvFolder + filepath.FromSlash("/logic.go")
|
||||
)
|
||||
gfile.Remove(genSrv)
|
||||
defer gfile.Remove(genSrv)
|
||||
|
||||
err := gutil.FillStructWithDefault(&in)
|
||||
t.AssertNil(err)
|
||||
|
||||
err = gfile.Mkdir(path)
|
||||
t.AssertNil(err)
|
||||
defer gfile.Remove(path)
|
||||
|
||||
_, err = genservice.CGenService{}.Service(ctx, in)
|
||||
t.AssertNil(err)
|
||||
|
||||
files, err := gfile.ScanDir(dstFolder, "*.go", true)
|
||||
t.AssertNil(err)
|
||||
t.Assert(files, []string{
|
||||
dstFolder + filepath.FromSlash("/pointer.go"),
|
||||
})
|
||||
|
||||
// contents
|
||||
testPath := gtest.DataPath("genservice", "service")
|
||||
expectedFile := testPath + filepath.FromSlash("/pointer.go")
|
||||
content := gfile.GetContents(files[0])
|
||||
expected := gfile.GetContents(expectedFile)
|
||||
t.Assert(strings.TrimSpace(content), strings.TrimSpace(expected))
|
||||
t.Assert(strings.Contains(content, "*PointerOptions"), true)
|
||||
})
|
||||
}
|
||||
|
||||
@ -43,8 +43,10 @@ func (c CGenService) generateType(generatedContent *bytes.Buffer, srcStructFunct
|
||||
for _, funcInfo := range funcSlice {
|
||||
// Remove package name calls of `dstPackageName` in produced codes.
|
||||
funcHead, _ := gregex.ReplaceString(
|
||||
fmt.Sprintf(`\*{0,1}%s\.`, dstPackageName),
|
||||
``, funcInfo["funcHead"],
|
||||
// Keep the optional pointer `*` (if any), but remove the `dstPackageName.` prefix
|
||||
// so `*service.Type` becomes `*Type`.
|
||||
fmt.Sprintf(`(\*)?%s\.`, dstPackageName),
|
||||
`$1`, funcInfo["funcHead"],
|
||||
)
|
||||
funcContent = funcInfo["funcComment"] + funcHead
|
||||
funcContents = append(funcContents, funcContent)
|
||||
|
||||
@ -8,5 +8,6 @@ import (
|
||||
_ "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genservice/logic/article"
|
||||
_ "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genservice/logic/base"
|
||||
_ "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genservice/logic/delivery"
|
||||
_ "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genservice/logic/pointer"
|
||||
_ "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genservice/logic/user"
|
||||
)
|
||||
|
||||
13
cmd/gf/internal/cmd/testdata/genservice/logic/pointer/pointer.go
vendored
Normal file
13
cmd/gf/internal/cmd/testdata/genservice/logic/pointer/pointer.go
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
package pointer
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genservice/service"
|
||||
)
|
||||
|
||||
type sPointer struct{}
|
||||
|
||||
func (s *sPointer) TestPointer(ctx context.Context, opts *service.PointerOptions) error {
|
||||
return nil
|
||||
}
|
||||
31
cmd/gf/internal/cmd/testdata/genservice/service/pointer.go
vendored
Normal file
31
cmd/gf/internal/cmd/testdata/genservice/service/pointer.go
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
// ================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// You can delete these comments if you wish manually maintain this interface file.
|
||||
// ================================================================================
|
||||
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
type (
|
||||
IPointer interface {
|
||||
TestPointer(ctx context.Context, opts *PointerOptions) error
|
||||
}
|
||||
)
|
||||
|
||||
var (
|
||||
localPointer IPointer
|
||||
)
|
||||
|
||||
func Pointer() IPointer {
|
||||
if localPointer == nil {
|
||||
panic("implement not found for interface IPointer, forgot register?")
|
||||
}
|
||||
return localPointer
|
||||
}
|
||||
|
||||
func RegisterPointer(i IPointer) {
|
||||
localPointer = i
|
||||
}
|
||||
3
cmd/gf/internal/cmd/testdata/genservice/service/pointer_options.go
vendored
Normal file
3
cmd/gf/internal/cmd/testdata/genservice/service/pointer_options.go
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
package service
|
||||
|
||||
type PointerOptions struct{}
|
||||
Reference in New Issue
Block a user