mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-01 03:42:59 +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
	 Derek Parker
					Derek Parker