mirror of
https://github.com/go-delve/delve.git
synced 2025-11-01 12:01:35 +08:00
Allow command replay by hitting <enter>
This commit is contained in:
@ -23,12 +23,22 @@ func (c *Commands) Register(cmdstr string, cf cmdfunc) {
|
|||||||
c.cmds[cmdstr] = cf
|
c.cmds[cmdstr] = cf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find will look up the command function for the given command input.
|
||||||
|
// If it cannot find the command it will defualt to noCmdAvailable().
|
||||||
|
// If the command is an empty string it will replay the last command.
|
||||||
func (c *Commands) Find(cmdstr string) cmdfunc {
|
func (c *Commands) Find(cmdstr string) cmdfunc {
|
||||||
cmd, ok := c.cmds[cmdstr]
|
cmd, ok := c.cmds[cmdstr]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
if cmdstr == "" {
|
||||||
|
return nullCommand
|
||||||
|
}
|
||||||
|
|
||||||
return noCmdAvailable
|
return noCmdAvailable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allow <enter> to replay last command
|
||||||
|
c.cmds[""] = cmd
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,3 +50,7 @@ func exitFunc() error {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nullCommand() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@ -37,3 +37,32 @@ func TestCommandRegister(t *testing.T) {
|
|||||||
t.Fatal("wrong command output")
|
t.Fatal("wrong command output")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCommandReplay(t *testing.T) {
|
||||||
|
cmds := Commands{make(map[string]cmdfunc)}
|
||||||
|
cmds.Register("foo", func() error { return fmt.Errorf("registered command") })
|
||||||
|
cmd := cmds.Find("foo")
|
||||||
|
|
||||||
|
err := cmd()
|
||||||
|
if err.Error() != "registered command" {
|
||||||
|
t.Fatal("wrong command output")
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd = cmds.Find("")
|
||||||
|
err = cmd()
|
||||||
|
if err.Error() != "registered command" {
|
||||||
|
t.Fatal("wrong command output")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCommandReplayWithoutPreviousCommand(t *testing.T) {
|
||||||
|
var (
|
||||||
|
cmds = Commands{make(map[string]cmdfunc)}
|
||||||
|
cmd = cmds.Find("")
|
||||||
|
err = cmd()
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Error("Null command not returned", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user