github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/cmd/juju/commands/commands_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package commands
     5  
     6  import (
     7  	"github.com/juju/cmd"
     8  	"github.com/juju/errors"
     9  	"github.com/juju/testing"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/cmd/modelcmd"
    13  )
    14  
    15  var _ = gc.Suite(&commandsSuite{})
    16  
    17  type commandsSuite struct {
    18  	stub    *testing.Stub
    19  	command *stubCommand
    20  }
    21  
    22  func (s *commandsSuite) SetUpTest(c *gc.C) {
    23  	s.stub = &testing.Stub{}
    24  	s.command = &stubCommand{stub: s.stub}
    25  }
    26  
    27  func (s *commandsSuite) TearDownTest(c *gc.C) {
    28  	registeredCommands = nil
    29  	registeredEnvCommands = nil
    30  }
    31  
    32  func (s *commandsSuite) TestRegisterCommand(c *gc.C) {
    33  	RegisterCommand(func() cmd.Command {
    34  		return s.command
    35  	})
    36  
    37  	// We can't compare functions directly, so...
    38  	c.Check(registeredEnvCommands, gc.HasLen, 0)
    39  	c.Assert(registeredCommands, gc.HasLen, 1)
    40  	command := registeredCommands[0]()
    41  	c.Check(command, gc.Equals, s.command)
    42  }
    43  
    44  func (s *commandsSuite) TestRegisterEnvCommand(c *gc.C) {
    45  	RegisterEnvCommand(func() modelcmd.ModelCommand {
    46  		return s.command
    47  	})
    48  
    49  	// We can't compare functions directly, so...
    50  	c.Assert(registeredCommands, gc.HasLen, 0)
    51  	c.Assert(registeredEnvCommands, gc.HasLen, 1)
    52  	command := registeredEnvCommands[0]()
    53  	c.Check(command, gc.Equals, s.command)
    54  }
    55  
    56  type stubCommand struct {
    57  	modelcmd.ModelCommandBase
    58  	stub    *testing.Stub
    59  	info    *cmd.Info
    60  	envName string
    61  }
    62  
    63  func (c *stubCommand) Info() *cmd.Info {
    64  	c.stub.AddCall("Info")
    65  	c.stub.NextErr() // pop one off
    66  
    67  	if c.info == nil {
    68  		return &cmd.Info{
    69  			Name: "some-command",
    70  		}
    71  	}
    72  	return c.info
    73  }
    74  
    75  func (c *stubCommand) Run(ctx *cmd.Context) error {
    76  	c.stub.AddCall("Run", ctx)
    77  	if err := c.stub.NextErr(); err != nil {
    78  		return errors.Trace(err)
    79  	}
    80  
    81  	return nil
    82  }
    83  
    84  func (c *stubCommand) SetModelName(name string) error {
    85  	c.stub.AddCall("SetModelName", name)
    86  	c.envName = name
    87  	return c.stub.NextErr()
    88  }
    89  
    90  func (c *stubCommand) ModelName() string {
    91  	c.stub.AddCall("ModelName")
    92  	c.stub.NextErr() // pop one off
    93  
    94  	return c.envName
    95  }
    96  
    97  type stubRegistry struct {
    98  	stub *testing.Stub
    99  
   100  	names []string
   101  }
   102  
   103  func (r *stubRegistry) Register(subcmd cmd.Command) {
   104  	r.stub.AddCall("Register", subcmd)
   105  	r.stub.NextErr() // pop one off
   106  
   107  	r.names = append(r.names, subcmd.Info().Name)
   108  	for _, name := range subcmd.Info().Aliases {
   109  		r.names = append(r.names, name)
   110  	}
   111  }
   112  
   113  func (r *stubRegistry) RegisterSuperAlias(name, super, forName string, check cmd.DeprecationCheck) {
   114  	r.stub.AddCall("RegisterSuperAlias", name, super, forName)
   115  	r.stub.NextErr() // pop one off
   116  
   117  	r.names = append(r.names, name)
   118  }
   119  
   120  func (r *stubRegistry) RegisterDeprecated(subcmd cmd.Command, check cmd.DeprecationCheck) {
   121  	r.stub.AddCall("RegisterDeprecated", subcmd, check)
   122  	r.stub.NextErr() // pop one off
   123  
   124  	r.names = append(r.names, subcmd.Info().Name)
   125  	for _, name := range subcmd.Info().Aliases {
   126  		r.names = append(r.names, name)
   127  	}
   128  }