Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

80 lines (66 sloc) 2.601 kb
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
describe Thor::Task do
def task(options={})
options.each do |key, value|
options[key] = Thor::Option.parse(key, value)
end
@task ||= Thor::Task.new(:can_has, "I can has cheezburger", "I can has cheezburger\nLots and lots of it", "can_has", options)
end
describe "#formatted_usage" do
it "includes namespace within usage" do
object = Struct.new(:namespace, :arguments).new("foo", [])
task(:bar => :required).formatted_usage(object).should == "foo:can_has --bar=BAR"
end
it "includes subcommand name within subcommand usage" do
object = Struct.new(:namespace, :arguments).new("main:foo", [])
task(:bar => :required).formatted_usage(object, false, true).should == "foo can_has --bar=BAR"
end
it "removes default from namespace" do
object = Struct.new(:namespace, :arguments).new("default:foo", [])
task(:bar => :required).formatted_usage(object).should == ":foo:can_has --bar=BAR"
end
it "injects arguments into usage" do
object = Struct.new(:namespace, :arguments).new("foo", [Thor::Argument.new(:bar, nil, true, :string)])
task(:foo => :required).formatted_usage(object).should == "foo:can_has BAR --foo=FOO"
end
end
describe "#dynamic" do
it "creates a dynamic task with the given name" do
Thor::DynamicTask.new('task').name.should == 'task'
Thor::DynamicTask.new('task').description.should == 'A dynamically-generated task'
Thor::DynamicTask.new('task').usage.should == 'task'
Thor::DynamicTask.new('task').options.should == {}
end
it "does not invoke an existing method" do
mock = mock()
mock.class.should_receive(:handle_no_task_error).with("to_s")
Thor::DynamicTask.new('to_s').run(mock)
end
end
describe "#dup" do
it "dup options hash" do
task = Thor::Task.new("can_has", nil, nil, nil, :foo => true, :bar => :required)
task.dup.options.delete(:foo)
task.options[:foo].should be
end
end
describe "#run" do
it "runs a task by calling a method in the given instance" do
mock = mock()
mock.should_receive(:can_has).and_return {|*args| args }
task.run(mock, [1, 2, 3]).should == [1, 2, 3]
end
it "raises an error if the method to be invoked is private" do
klass = Class.new do
def self.handle_no_task_error(name)
name
end
private
def can_has
"fail"
end
end
task.run(klass.new).should == "can_has"
end
end
end
Jump to Line
Something went wrong with that request. Please try again.