Слияние кода завершено, страница обновится автоматически
package gcli_test
import (
"bytes"
"fmt"
"testing"
"github.com/gookit/gcli/v3"
"github.com/gookit/goutil/dump"
"github.com/stretchr/testify/assert"
)
var (
buf = new(bytes.Buffer)
)
func newNotExitApp(fns ...func(app *gcli.App)) *gcli.App {
cli := gcli.New(fns...)
cli.ExitOnEnd = false
return cli
}
func TestApp_Hooks_EvtAppInit(t *testing.T) {
buf.Reset()
cli := newNotExitApp()
cli.On(gcli.EvtAppInit, func(data ...interface{}) bool {
buf.WriteString("trigger " + gcli.EvtAppInit)
return false
})
cli.Add(simpleCmd)
assert.Equal(t, "trigger "+gcli.EvtAppInit, buf.String())
buf.Reset()
cli.On(gcli.EvtGOptionsParsed, func(data ...interface{}) bool {
buf.WriteString("trigger " + gcli.EvtGOptionsParsed + ", args:" + fmt.Sprintf("%v", data[1]))
return false
})
cli.Run([]string{"simple"})
assert.Equal(t, "trigger "+gcli.EvtGOptionsParsed+", args:[simple]", buf.String())
}
func TestApp_Hooks_EvtCmdInit(t *testing.T) {
buf.Reset()
cli := newNotExitApp()
cli.On(gcli.EvtCmdInit, func(data ...interface{}) (stop bool) {
buf.WriteString(gcli.EvtCmdInit)
buf.WriteString(":")
c := data[1].(*gcli.Command)
buf.WriteString(c.Name + ";")
return
})
cli.Add(emptyCmd)
assert.Equal(t, "cmd.init:empty;", buf.String())
cli.Add(simpleCmd)
assert.Equal(t, "cmd.init:empty;cmd.init:simple;", buf.String())
}
func TestCommand_Hooks_EvtCmdOptParsed(t *testing.T) {
buf.Reset()
cli := newNotExitApp()
cli.Add(&gcli.Command{
Name: "test",
Desc: "desc",
Config: func(c *gcli.Command) {
buf.WriteString("run config;")
c.On(gcli.EvtCmdOptParsed, func(data ...interface{}) (stop bool) {
dump.P(data[1])
buf.WriteString(gcli.EvtCmdOptParsed)
return
})
},
})
assert.Contains(t, buf.String(), "run config;")
cli.Run([]string{"test"})
assert.Contains(t, buf.String(), gcli.EvtCmdOptParsed)
}
func TestApp_On_CmdNotFound(t *testing.T) {
buf.Reset()
cli := newNotExitApp()
cli.Add(simpleCmd)
fmt.Println("--------- will print command tips ----------")
cli.On(gcli.EvtCmdNotFound, func(data ...interface{}) bool {
buf.WriteString("trigger: " + gcli.EvtCmdNotFound)
buf.WriteString("; command: " + fmt.Sprint(data[1]))
return false
})
cli.Run([]string{"top"})
assert.Equal(t, "trigger: cmd.not.found; command: top", buf.String())
buf.Reset()
fmt.Println("--------- dont print command tips ----------")
cli.On(gcli.EvtCmdNotFound, func(data ...interface{}) bool {
buf.WriteString("trigger: " + gcli.EvtCmdNotFound)
buf.WriteString("; command: " + fmt.Sprint(data[1]))
return true
})
cli.Run([]string{"top"})
assert.Equal(t, "trigger: cmd.not.found; command: top", buf.String())
}
func TestApp_On_CmdNotFound_redirect(t *testing.T) {
buf.Reset()
simpleCmd.ClearData()
assert.Equal(t, nil, simpleCmd.Value("simple"))
cli := newNotExitApp()
cli.Add(simpleCmd)
fmt.Println("--------- redirect to run another command ----------")
cli.On(gcli.EvtCmdNotFound, func(data ...interface{}) bool {
buf.WriteString("trigger:" + gcli.EvtCmdNotFound)
buf.WriteString(" - command:" + fmt.Sprint(data[1]))
buf.WriteString("; redirect:simple - ")
app := data[0].(*gcli.App)
err := app.Exec("simple", nil)
assert.NoError(t, err)
buf.WriteString("value:" + simpleCmd.StrValue("simple"))
return true
})
cli.Run([]string{"top"})
want := "trigger:cmd.not.found - command:top; redirect:simple - value:simple command"
assert.Equal(t, want, buf.String())
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )