mirror of
https://gitee.com/johng/gf.git
synced 2024-12-02 04:07:47 +08:00
324 lines
8.2 KiB
Go
324 lines
8.2 KiB
Go
// 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.
|
|
|
|
// go test *.go -bench=".*" -benchmem
|
|
|
|
package gcmd_test
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/os/gcmd"
|
|
"github.com/gogf/gf/v2/os/gctx"
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
)
|
|
|
|
type TestCmdObject struct {
|
|
g.Meta `name:"root" usage:"root env/test" brief:"root env command" dc:"description" ad:"ad"`
|
|
}
|
|
|
|
type TestCmdObjectEnvInput struct {
|
|
g.Meta `name:"env" usage:"root env" brief:"root env command" dc:"root env command description" ad:"root env command ad"`
|
|
}
|
|
|
|
type TestCmdObjectEnvOutput struct{}
|
|
|
|
type TestCmdObjectTestInput struct {
|
|
g.Meta `name:"test" usage:"root test" brief:"root test command" dc:"root test command description" ad:"root test command ad"`
|
|
Name string `v:"required" short:"n" orphan:"false" brief:"name for test command"`
|
|
}
|
|
|
|
type TestCmdObjectTestOutput struct {
|
|
Content string
|
|
}
|
|
|
|
func (TestCmdObject) Env(ctx context.Context, in TestCmdObjectEnvInput) (out *TestCmdObjectEnvOutput, err error) {
|
|
return
|
|
}
|
|
|
|
func (TestCmdObject) Test(ctx context.Context, in TestCmdObjectTestInput) (out *TestCmdObjectTestOutput, err error) {
|
|
out = &TestCmdObjectTestOutput{
|
|
Content: in.Name,
|
|
}
|
|
return
|
|
}
|
|
|
|
func Test_Command_NewFromObject_Help(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
cmd, err = gcmd.NewFromObject(&TestCmdObject{})
|
|
)
|
|
t.AssertNil(err)
|
|
t.Assert(cmd.Name, "root")
|
|
|
|
os.Args = []string{"root"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, nil)
|
|
})
|
|
}
|
|
|
|
func Test_Command_NewFromObject_Run(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
cmd, err = gcmd.NewFromObject(&TestCmdObject{})
|
|
)
|
|
t.AssertNil(err)
|
|
t.Assert(cmd.Name, "root")
|
|
|
|
os.Args = []string{"root", "test", "-n=john"}
|
|
|
|
cmd.Run(ctx)
|
|
})
|
|
}
|
|
|
|
func Test_Command_NewFromObject_RunWithValue(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
cmd, err = gcmd.NewFromObject(&TestCmdObject{})
|
|
)
|
|
t.AssertNil(err)
|
|
t.Assert(cmd.Name, "root")
|
|
|
|
os.Args = []string{"root", "test", "-n=john"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Content":"john"}`)
|
|
})
|
|
}
|
|
|
|
func Test_Command_AddObject(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
command = gcmd.Command{
|
|
Name: "start",
|
|
}
|
|
)
|
|
err := command.AddObject(&TestCmdObject{})
|
|
t.AssertNil(err)
|
|
|
|
os.Args = []string{"start", "root", "test", "-n=john"}
|
|
value, err := command.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Content":"john"}`)
|
|
})
|
|
}
|
|
|
|
type TestObjectForRootTag struct {
|
|
g.Meta `name:"root" root:"root"`
|
|
}
|
|
|
|
type TestObjectForRootTagEnvInput struct {
|
|
g.Meta `name:"env" usage:"root env" brief:"root env command" dc:"root env command description" ad:"root env command ad"`
|
|
}
|
|
|
|
type TestObjectForRootTagEnvOutput struct{}
|
|
|
|
type TestObjectForRootTagTestInput struct {
|
|
g.Meta `name:"root"`
|
|
Name string `v:"required" short:"n" orphan:"false" brief:"name for test command"`
|
|
}
|
|
|
|
type TestObjectForRootTagTestOutput struct {
|
|
Content string
|
|
}
|
|
|
|
func (TestObjectForRootTag) Env(ctx context.Context, in TestObjectForRootTagEnvInput) (out *TestObjectForRootTagEnvOutput, err error) {
|
|
return
|
|
}
|
|
|
|
func (TestObjectForRootTag) Root(ctx context.Context, in TestObjectForRootTagTestInput) (out *TestObjectForRootTagTestOutput, err error) {
|
|
out = &TestObjectForRootTagTestOutput{
|
|
Content: in.Name,
|
|
}
|
|
return
|
|
}
|
|
|
|
func Test_Command_RootTag(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
)
|
|
cmd, err := gcmd.NewFromObject(TestObjectForRootTag{})
|
|
t.AssertNil(err)
|
|
|
|
os.Args = []string{"root", "-n=john"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Content":"john"}`)
|
|
})
|
|
// Pointer.
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
)
|
|
cmd, err := gcmd.NewFromObject(&TestObjectForRootTag{})
|
|
t.AssertNil(err)
|
|
|
|
os.Args = []string{"root", "-n=john"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Content":"john"}`)
|
|
})
|
|
}
|
|
|
|
type TestObjectForNeedArgs struct {
|
|
g.Meta `name:"root" root:"root"`
|
|
}
|
|
|
|
type TestObjectForNeedArgsEnvInput struct {
|
|
g.Meta `name:"env" usage:"root env" brief:"root env command" dc:"root env command description" ad:"root env command ad"`
|
|
}
|
|
|
|
type TestObjectForNeedArgsEnvOutput struct{}
|
|
|
|
type TestObjectForNeedArgsTestInput struct {
|
|
g.Meta `name:"test"`
|
|
Arg1 string `arg:"true" brief:"arg1 for test command"`
|
|
Arg2 string `arg:"true" brief:"arg2 for test command"`
|
|
Name string `v:"required" short:"n" orphan:"false" brief:"name for test command"`
|
|
}
|
|
|
|
type TestObjectForNeedArgsTestOutput struct {
|
|
Args []string
|
|
}
|
|
|
|
func (TestObjectForNeedArgs) Env(ctx context.Context, in TestObjectForNeedArgsEnvInput) (out *TestObjectForNeedArgsEnvOutput, err error) {
|
|
return
|
|
}
|
|
|
|
func (TestObjectForNeedArgs) Test(ctx context.Context, in TestObjectForNeedArgsTestInput) (out *TestObjectForNeedArgsTestOutput, err error) {
|
|
out = &TestObjectForNeedArgsTestOutput{
|
|
Args: []string{in.Arg1, in.Arg2, in.Name},
|
|
}
|
|
return
|
|
}
|
|
|
|
func Test_Command_NeedArgs(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
)
|
|
cmd, err := gcmd.NewFromObject(TestObjectForNeedArgs{})
|
|
t.AssertNil(err)
|
|
|
|
//os.Args = []string{"root", "test", "a", "b", "c", "-h"}
|
|
//value, err := cmd.RunWithValueError(ctx)
|
|
//t.AssertNil(err)
|
|
|
|
os.Args = []string{"root", "test", "a", "b", "c", "-n=john"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Args":["a","b","john"]}`)
|
|
})
|
|
}
|
|
|
|
type TestObjectPointerTag struct {
|
|
g.Meta `name:"root" root:"root"`
|
|
}
|
|
|
|
type TestObjectPointerTagEnvInput struct {
|
|
g.Meta `name:"env" usage:"root env" brief:"root env command" dc:"root env command description" ad:"root env command ad"`
|
|
}
|
|
|
|
type TestObjectPointerTagEnvOutput struct{}
|
|
|
|
type TestObjectPointerTagTestInput struct {
|
|
g.Meta `name:"root"`
|
|
Name string `v:"required" short:"n" orphan:"false" brief:"name for test command"`
|
|
}
|
|
|
|
type TestObjectPointerTagTestOutput struct {
|
|
Content string
|
|
}
|
|
|
|
func (c *TestObjectPointerTag) Env(ctx context.Context, in TestObjectPointerTagEnvInput) (out *TestObjectPointerTagEnvOutput, err error) {
|
|
return
|
|
}
|
|
|
|
func (c *TestObjectPointerTag) Root(ctx context.Context, in TestObjectPointerTagTestInput) (out *TestObjectPointerTagTestOutput, err error) {
|
|
out = &TestObjectPointerTagTestOutput{
|
|
Content: in.Name,
|
|
}
|
|
return
|
|
}
|
|
|
|
func Test_Command_Pointer(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
)
|
|
cmd, err := gcmd.NewFromObject(TestObjectPointerTag{})
|
|
t.AssertNil(err)
|
|
|
|
os.Args = []string{"root", "-n=john"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Content":"john"}`)
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var (
|
|
ctx = gctx.New()
|
|
)
|
|
cmd, err := gcmd.NewFromObject(&TestObjectPointerTag{})
|
|
t.AssertNil(err)
|
|
|
|
os.Args = []string{"root", "-n=john"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value, `{"Content":"john"}`)
|
|
})
|
|
}
|
|
|
|
type TestCommandOrphan struct {
|
|
g.Meta `name:"root" root:"root"`
|
|
}
|
|
|
|
type TestCommandOrphanIndexInput struct {
|
|
g.Meta `name:"index"`
|
|
Orphan1 bool `short:"n1" orphan:"true"`
|
|
Orphan2 bool `short:"n2" orphan:"true"`
|
|
Orphan3 bool `short:"n3" orphan:"true"`
|
|
}
|
|
|
|
type TestCommandOrphanIndexOutput struct {
|
|
Orphan1 bool
|
|
Orphan2 bool
|
|
Orphan3 bool
|
|
}
|
|
|
|
func (c *TestCommandOrphan) Index(ctx context.Context, in TestCommandOrphanIndexInput) (out *TestCommandOrphanIndexOutput, err error) {
|
|
out = &TestCommandOrphanIndexOutput{
|
|
Orphan1: in.Orphan1,
|
|
Orphan2: in.Orphan2,
|
|
Orphan3: in.Orphan3,
|
|
}
|
|
return
|
|
}
|
|
|
|
func Test_Command_Orphan_Parameter(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
var ctx = gctx.New()
|
|
cmd, err := gcmd.NewFromObject(TestCommandOrphan{})
|
|
t.AssertNil(err)
|
|
|
|
os.Args = []string{"root", "index", "-n1", "-n2=0", "-n3=1"}
|
|
value, err := cmd.RunWithValueError(ctx)
|
|
t.AssertNil(err)
|
|
t.Assert(value.(*TestCommandOrphanIndexOutput).Orphan1, true)
|
|
t.Assert(value.(*TestCommandOrphanIndexOutput).Orphan2, false)
|
|
t.Assert(value.(*TestCommandOrphanIndexOutput).Orphan3, true)
|
|
})
|
|
}
|