Tests for the Easy command base
This commit is contained in:
parent
dc4f6e1939
commit
0d6248394c
|
@ -5,18 +5,35 @@ module Vagrant
|
|||
# Base class for all easy commands. This contains the basic code
|
||||
# that knows how to run the easy commands.
|
||||
class CommandBase < Vagrant::Command::Base
|
||||
# This is the command that this easy command responds to
|
||||
attr_reader :command
|
||||
|
||||
# This is called by the {EasyCommand.create} method when creating
|
||||
# an easy command to set the invocation command.
|
||||
def self.configure(name, &block)
|
||||
# We use class-level instance variables so that each class has
|
||||
# its own single command/runner. If we use class variables then this
|
||||
# whole base sharse a single one.
|
||||
@command = name
|
||||
@runner = block
|
||||
end
|
||||
|
||||
def initialize(*args, &block)
|
||||
if self.class == CommandBase
|
||||
raise "CommandBase must not be instantiated directly. Please subclass."
|
||||
end
|
||||
|
||||
# Let the regular command state setup
|
||||
super
|
||||
|
||||
# Get the command we're listening to and the block we're invoking
|
||||
# when we get that command, do some basic validation.
|
||||
@command = self.class.instance_variable_get(:@command)
|
||||
@runner = self.class.instance_variable_get(:@runner)
|
||||
if !@command || !@runner
|
||||
raise ArgumentError, "CommandBase requires both a command and a runner"
|
||||
end
|
||||
|
||||
@logger = Log4r::Logger.new("vagrant::easy_command::#{@command}")
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
require File.expand_path("../../../base", __FILE__)
|
||||
|
||||
describe Vagrant::Easy::CommandBase do
|
||||
let(:klass) { Class.new(described_class) }
|
||||
|
||||
it "should raise an error if instantiated directly" do
|
||||
expect { described_class.new(nil, nil) }.to raise_error(RuntimeError)
|
||||
end
|
||||
|
||||
it "should raise an error if command/runner are not set" do
|
||||
expect { klass.new(nil, nil) }.to raise_error(ArgumentError)
|
||||
end
|
||||
|
||||
it "should inherit the configured name" do
|
||||
klass.configure("name") {}
|
||||
|
||||
instance = klass.new(nil, nil)
|
||||
instance.command.should == "name"
|
||||
end
|
||||
end
|
|
@ -109,16 +109,6 @@ describe Vagrant::Plugin::V1 do
|
|||
# Check that the command class subclasses the easy command base
|
||||
plugin.command[:foo].should < Vagrant::Easy::CommandBase
|
||||
end
|
||||
|
||||
it "should support registering multiple unique commands" do
|
||||
plugins = %w(foo bar baz).map do |cmd|
|
||||
[cmd, Vagrant::Easy.create_command(cmd)]
|
||||
end
|
||||
|
||||
plugins.each do |cmd, plugin|
|
||||
plugin.instance_variable_get(:@command).should == cmd
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "guests" do
|
||||
|
|
Loading…
Reference in New Issue