master/spec/guard/hook_spec.rb

79 lines
2.2 KiB
Ruby
Raw Normal View History

require 'spec_helper'
2011-04-10 23:08:43 +00:00
describe Guard::Hook do
subject { Guard::Hook }
2011-04-10 23:08:43 +00:00
class Guard::Dummy < Guard::Guard
include Guard::Hook
def run_all
hook :begin
hook :end
end
end
let(:guard_class) { ::Guard::Dummy }
let(:listener) { double('listener').as_null_object }
context "--module methods--" do
before { subject.add_callback(listener, guard_class, :start_begin) }
2011-04-10 23:08:43 +00:00
after { subject.reset_callbacks! }
2011-04-10 23:08:43 +00:00
describe ".add_callback" do
2011-04-10 23:08:43 +00:00
it "can add a single callback" do
subject.has_callback?(listener, guard_class, :start_begin).should be_true
end
it "can add multiple callbacks" do
subject.add_callback(listener, guard_class, [:event1, :event2])
2011-04-10 23:08:43 +00:00
subject.has_callback?(listener, guard_class, :event1).should be_true
subject.has_callback?(listener, guard_class, :event2).should be_true
end
end
describe ".notify" do
2011-04-10 23:08:43 +00:00
it "sends :call to the given Guard class's callbacks" do
listener.should_receive(:call).with(guard_class, :start_begin)
subject.notify(guard_class, :start_begin)
end
it "runs only the given callbacks" do
2011-04-10 23:08:43 +00:00
listener2 = double('listener2')
subject.add_callback(listener2, guard_class, :start_end)
2011-04-10 23:08:43 +00:00
listener2.should_not_receive(:call).with(guard_class, :start_end)
subject.notify(guard_class, :start_begin)
end
it "runs callbacks only for the guard given" do
2011-04-10 23:08:43 +00:00
guard2_class = double('Guard::Dummy2').class
subject.add_callback(listener, guard2_class, :start_begin)
2011-04-10 23:08:43 +00:00
listener.should_not_receive(:call).with(guard2_class, :start_begin)
subject.notify(guard_class, :start_begin)
end
end
end
describe "#hook" do
2011-04-10 23:08:43 +00:00
it "calls Guard::Hook.notify" do
guard = guard_class.new
Guard::Hook.should_receive(:notify).with(guard_class, :run_all_begin)
Guard::Hook.should_receive(:notify).with(guard_class, :run_all_end)
2011-04-10 23:08:43 +00:00
guard.run_all
end
it "if passed a string parameter, will use that for the hook name" do
guard_class.class_eval do
def start
hook "my_hook"
end
end
guard = guard_class.new
Guard::Hook.should_receive(:notify).with(guard_class, :my_hook)
2011-04-10 23:08:43 +00:00
guard.start
end
end
2011-04-10 23:08:43 +00:00
end