2010-10-18 19:45:31 +00:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Guard do
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-03 22:31:00 +00:00
|
|
|
describe "Class Methods" do
|
2010-11-30 20:23:53 +00:00
|
|
|
describe ".setup" do
|
2011-05-07 16:40:13 +00:00
|
|
|
before(:each) do
|
|
|
|
# set ENV["GUARD_NOTIFY"] to nil in case the user has ENV["GUARD_NOTIFY"] = 'false' set
|
|
|
|
@old_env_guard_notify = ENV["GUARD_NOTIFY"]
|
|
|
|
ENV["GUARD_NOTIFY"] = nil
|
|
|
|
end
|
|
|
|
after(:each) { ENV["GUARD_NOTIFY"] = @old_env_guard_notify }
|
2010-11-30 20:23:53 +00:00
|
|
|
subject { ::Guard.setup }
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-03 22:31:00 +00:00
|
|
|
it "should retrieve itself for chaining" do
|
|
|
|
subject.should be_kind_of(Module)
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-03 22:31:00 +00:00
|
|
|
it "should init guards array" do
|
|
|
|
::Guard.guards.should be_kind_of(Array)
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-03 22:31:00 +00:00
|
|
|
it "should init options" do
|
|
|
|
opts = { :my_opts => true }
|
2010-11-30 20:23:53 +00:00
|
|
|
::Guard.setup(opts).options.should include(:my_opts)
|
2010-11-03 22:31:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-03 22:31:00 +00:00
|
|
|
it "should init listener" do
|
|
|
|
::Guard.listener.should be_kind_of(Guard::Listener)
|
|
|
|
end
|
2011-04-10 20:32:29 +00:00
|
|
|
|
2011-05-06 21:19:31 +00:00
|
|
|
it "should turn on by default" do
|
|
|
|
::Guard::Notifier.should_receive(:turn_on)
|
|
|
|
::Guard.setup(:notify => true)
|
|
|
|
end
|
|
|
|
|
2011-04-10 20:32:29 +00:00
|
|
|
it "should turn off notifier if notify option is false" do
|
|
|
|
::Guard::Notifier.should_receive(:turn_off)
|
|
|
|
::Guard.setup(:notify => false)
|
|
|
|
end
|
2011-05-06 21:19:31 +00:00
|
|
|
|
|
|
|
it "should turn off notifier if env[GUARD_NOTIFY] is false" do
|
|
|
|
::Guard::Notifier.should_receive(:turn_off)
|
|
|
|
ENV["GUARD_NOTIFY"] = 'false'
|
2011-05-07 16:40:13 +00:00
|
|
|
::Guard.setup({ :notify => true }.freeze)
|
2011-05-06 21:19:31 +00:00
|
|
|
ENV["GUARD_NOTIFY"] = nil
|
|
|
|
end
|
2010-10-27 13:18:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-30 20:23:53 +00:00
|
|
|
describe ".get_guard_class" do
|
2011-04-21 21:39:46 +00:00
|
|
|
it "should report an error if the class is not found" do
|
|
|
|
::Guard::UI.should_receive(:error)
|
|
|
|
Guard.get_guard_class('notAGuardClass')
|
2010-11-03 22:31:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-02-18 18:53:05 +00:00
|
|
|
context 'loaded some nested classes' do
|
2011-04-21 21:39:46 +00:00
|
|
|
it "should find and return loaded class" do
|
2011-04-25 14:18:59 +00:00
|
|
|
Guard.should_receive(:try_to_load_gem) { |className|
|
|
|
|
className.should == 'classname'
|
2011-04-21 21:39:46 +00:00
|
|
|
class Guard::Classname
|
|
|
|
end
|
|
|
|
}
|
|
|
|
Guard.get_guard_class('classname').should == Guard::Classname
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'loaded some inline classes ' do
|
|
|
|
it 'should return inline class' do
|
|
|
|
module Guard
|
|
|
|
class Inline < Guard
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
Guard.get_guard_class('inline').should == Guard::Inline
|
2011-02-18 18:53:05 +00:00
|
|
|
end
|
|
|
|
end
|
2010-10-27 13:18:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-30 20:23:53 +00:00
|
|
|
describe ".locate_guard" do
|
2011-04-16 21:13:29 +00:00
|
|
|
it "returns guard-rspec gem path" do
|
2010-11-30 20:23:53 +00:00
|
|
|
guard_path = Guard.locate_guard('rspec')
|
|
|
|
guard_path.should match(/^.*\/guard-rspec-.*$/)
|
|
|
|
guard_path.should == guard_path.chomp
|
2010-11-03 22:31:00 +00:00
|
|
|
end
|
2010-10-27 13:18:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-30 20:23:53 +00:00
|
|
|
describe ".supervised_task" do
|
|
|
|
subject { ::Guard.setup }
|
|
|
|
before(:each) do
|
2011-04-16 21:13:29 +00:00
|
|
|
@g = mock(Guard::Guard).as_null_object
|
2010-11-30 20:23:53 +00:00
|
|
|
subject.guards.push(@g)
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-30 20:23:53 +00:00
|
|
|
describe "tasks that succeed" do
|
|
|
|
before(:each) do
|
|
|
|
@g.stub!(:regular) { true }
|
|
|
|
@g.stub!(:regular_with_arg).with("given_path") { "i'm a success" }
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-04-16 21:13:29 +00:00
|
|
|
it "doesn't fire the guard with a supervised method without argument" do
|
2010-11-30 20:23:53 +00:00
|
|
|
lambda { subject.supervised_task(@g, :regular) }.should_not change(subject.guards, :size)
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-04-16 21:13:29 +00:00
|
|
|
it "doesn't fire the guard with a supervised method with argument" do
|
2010-11-30 20:23:53 +00:00
|
|
|
lambda { subject.supervised_task(@g, :regular_with_arg, "given_path") }.should_not change(subject.guards, :size)
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-04-16 21:13:29 +00:00
|
|
|
it "returns the result of the supervised method" do
|
2010-11-30 20:23:53 +00:00
|
|
|
::Guard.supervised_task(@g, :regular).should be_true
|
|
|
|
::Guard.supervised_task(@g, :regular_with_arg, "given_path").should == "i'm a success"
|
|
|
|
end
|
2010-11-03 22:31:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2010-11-30 20:23:53 +00:00
|
|
|
describe "tasks that raise an exception" do
|
|
|
|
before(:each) { @g.stub!(:failing) { raise "I break your system" } }
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-04-16 21:13:29 +00:00
|
|
|
it "fires the guard" do
|
2010-11-30 20:23:53 +00:00
|
|
|
lambda { subject.supervised_task(@g, :failing) }.should change(subject.guards, :size).by(-1)
|
|
|
|
subject.guards.should_not include(@g)
|
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-04-16 21:13:29 +00:00
|
|
|
it "returns the exception object" do
|
2010-11-30 20:23:53 +00:00
|
|
|
failing_result = ::Guard.supervised_task(@g, :failing)
|
|
|
|
failing_result.should be_kind_of(Exception)
|
|
|
|
failing_result.message.should == 'I break your system'
|
|
|
|
end
|
2010-11-03 22:31:00 +00:00
|
|
|
end
|
2010-10-27 13:18:00 +00:00
|
|
|
end
|
2011-04-16 21:13:29 +00:00
|
|
|
|
|
|
|
describe ".locate_guard" do
|
|
|
|
it "returns the path of the guard gem" do
|
2011-05-06 19:51:50 +00:00
|
|
|
if Gem::Version.create(Gem::VERSION) >= Gem::Version.create('1.8.0')
|
|
|
|
gem_location = Gem::Specification.find_by_name("guard-rspec").full_gem_path
|
|
|
|
else
|
|
|
|
gem_location = Gem.source_index.find_name("guard-rspec").last.full_gem_path
|
|
|
|
end
|
|
|
|
|
|
|
|
Guard.locate_guard('rspec').should == gem_location
|
2011-04-16 21:13:29 +00:00
|
|
|
end
|
|
|
|
end
|
2010-10-27 13:18:00 +00:00
|
|
|
end
|
2011-02-22 14:15:09 +00:00
|
|
|
|
2011-02-18 18:53:05 +00:00
|
|
|
end
|