140 lines
3.8 KiB
Ruby
140 lines
3.8 KiB
Ruby
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
|
|
|
class CommandsBaseTest < Test::Unit::TestCase
|
|
setup do
|
|
@klass = Vagrant::Commands::Base
|
|
end
|
|
|
|
context "initializing" do
|
|
should "setup the env attribute" do
|
|
env = mock("env")
|
|
instance = @klass.new(env)
|
|
assert_equal env, instance.env
|
|
end
|
|
end
|
|
|
|
context "class methods" do
|
|
setup do
|
|
@env = mock_environment
|
|
@klass.subcommands.clear
|
|
end
|
|
|
|
context "registering commands" do
|
|
should "register commands" do
|
|
klass = mock("klass")
|
|
@klass.subcommand("init", klass)
|
|
assert_equal klass, @klass.subcommands["init"]
|
|
end
|
|
end
|
|
|
|
context "dispatching to subcommands" do
|
|
setup do
|
|
@command_klass = mock("klass")
|
|
@name = "init"
|
|
@klass.subcommand(@name, @command_klass)
|
|
|
|
@args = [1,2,3]
|
|
end
|
|
|
|
should "call dispatch on child if subcommand is found" do
|
|
@command_klass.expects(:dispatch).with(@env, *@args)
|
|
@klass.dispatch(@env, @name, *@args)
|
|
end
|
|
|
|
should "instantiate and execute when no subcommand is found" do
|
|
instance = mock("instance")
|
|
@klass.expects(:new).with(@env).returns(instance)
|
|
instance.expects(:execute).with(@args)
|
|
@klass.dispatch(@env, *@args)
|
|
end
|
|
end
|
|
|
|
context "descriptions" do
|
|
should "be able to set description" do
|
|
description = "The lazy fox yada yada"
|
|
@klass.description(description)
|
|
assert_equal description, @klass.description
|
|
end
|
|
end
|
|
end
|
|
|
|
context "instance methods" do
|
|
setup do
|
|
@env = mock_environment
|
|
@instance = @klass.new(@env)
|
|
end
|
|
|
|
context "executing" do
|
|
should "show version if flag is set" do
|
|
@instance.expects(:puts_version).once
|
|
@instance.expects(:show_help).never
|
|
@instance.execute(["--version"])
|
|
end
|
|
|
|
should "just print the help by default" do
|
|
@instance.expects(:puts_version).never
|
|
@instance.expects(:show_help).once
|
|
@instance.execute([])
|
|
end
|
|
end
|
|
|
|
context "all or single methods" do
|
|
should "call the single method if a name is given" do
|
|
name = "bar"
|
|
@instance.expects(:foo_single).with(name).once
|
|
@instance.all_or_single(["bar"], :foo)
|
|
end
|
|
|
|
should "call the single method for each VM if no name is given" do
|
|
vms = { :foo => nil, :bar => nil }
|
|
vms.keys.each do |name|
|
|
@instance.expects(:foo_single).with(name).once
|
|
end
|
|
|
|
@env.stubs(:vms).returns(vms)
|
|
@instance.all_or_single([], :foo)
|
|
end
|
|
end
|
|
|
|
context "getting the option parser" do
|
|
should "create it with the options spec if it hasn't been created yet" do
|
|
opts = mock("opts")
|
|
opts.stubs(:on)
|
|
|
|
result = mock("result")
|
|
OptionParser.expects(:new).yields(opts).returns(result)
|
|
@instance.expects(:options_spec).with(opts)
|
|
|
|
assert_equal result, @instance.option_parser(true)
|
|
end
|
|
|
|
should "not create it once its been created" do
|
|
result = mock("result")
|
|
OptionParser.expects(:new).once.returns(result)
|
|
|
|
assert_equal result, @instance.option_parser(true)
|
|
assert_equal result, @instance.option_parser
|
|
assert_equal result, @instance.option_parser
|
|
end
|
|
end
|
|
|
|
context "parsing options" do
|
|
setup do
|
|
@args = []
|
|
|
|
@options = mock("options")
|
|
@option_parser = mock("option_parser")
|
|
|
|
@instance.stubs(:option_parser).returns(@option_parser)
|
|
@instance.stubs(:options).returns(@options)
|
|
end
|
|
|
|
should "parse the options with the args" do
|
|
result = mock("result")
|
|
@option_parser.expects(:parse!).with(@args).once.returns(result)
|
|
assert_equal result, @instance.parse_options(@args)
|
|
end
|
|
end
|
|
end
|
|
end
|