Allow command replay by hitting <enter>

This commit is contained in:
Derek Parker
2014-05-21 10:15:58 -05:00
parent a9f4f4d83b
commit c125fafe50
2 changed files with 43 additions and 0 deletions

View File

@ -23,12 +23,22 @@ func (c *Commands) Register(cmdstr string, cf cmdfunc) {
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 {
cmd, ok := c.cmds[cmdstr]
if !ok {
if cmdstr == "" {
return nullCommand
}
return noCmdAvailable
}
// Allow <enter> to replay last command
c.cmds[""] = cmd
return cmd
}
@ -40,3 +50,7 @@ func exitFunc() error {
os.Exit(0)
return nil
}
func nullCommand() error {
return nil
}

View File

@ -37,3 +37,32 @@ func TestCommandRegister(t *testing.T) {
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)
}
}