/
guard_spec.rb
137 lines (112 loc) · 4.17 KB
/
guard_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
require 'spec_helper'
describe Guard do
describe "Class Methods" do
describe ".setup" do
subject { ::Guard.setup }
it "should retrieve itself for chaining" do
subject.should be_kind_of(Module)
end
it "should init guards array" do
::Guard.guards.should be_kind_of(Array)
end
it "should init options" do
opts = { :my_opts => true }
::Guard.setup(opts).options.should include(:my_opts)
end
it "should init listener" do
::Guard.listener.should be_kind_of(Guard::Listener)
end
it "should turn on by default" do
ENV["GUARD_NOTIFY"] = nil
::Guard::Notifier.should_receive(:turn_on)
::Guard.setup(:notify => true)
end
it "should turn off notifier if notify option is false" do
::Guard::Notifier.should_receive(:turn_off)
::Guard.setup(:notify => false)
end
it "should turn off notifier if env[GUARD_NOTIFY] is false" do
ENV["GUARD_NOTIFY"] = 'false'
::Guard::Notifier.should_receive(:turn_off)
::Guard.setup(:notify => true)
end
end
describe ".get_guard_class" do
it "should report an error if the class is not found" do
::Guard::UI.should_receive(:error)
Guard.get_guard_class('notAGuardClass')
end
context 'loaded some nested classes' do
it "should find and return loaded class" do
Guard.should_receive(:try_to_load_gem) { |className|
className.should == 'classname'
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
end
end
end
describe ".locate_guard" do
it "returns guard-rspec gem path" do
guard_path = Guard.locate_guard('rspec')
guard_path.should match(/^.*\/guard-rspec-.*$/)
guard_path.should == guard_path.chomp
end
end
describe ".supervised_task" do
subject { ::Guard.setup }
before(:each) do
@g = mock(Guard::Guard).as_null_object
subject.guards.push(@g)
end
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
it "doesn't fire the guard with a supervised method without argument" do
lambda { subject.supervised_task(@g, :regular) }.should_not change(subject.guards, :size)
end
it "doesn't fire the guard with a supervised method with argument" do
lambda { subject.supervised_task(@g, :regular_with_arg, "given_path") }.should_not change(subject.guards, :size)
end
it "returns the result of the supervised method" do
::Guard.supervised_task(@g, :regular).should be_true
::Guard.supervised_task(@g, :regular_with_arg, "given_path").should == "i'm a success"
end
end
describe "tasks that raise an exception" do
before(:each) { @g.stub!(:failing) { raise "I break your system" } }
it "fires the guard" do
lambda { subject.supervised_task(@g, :failing) }.should change(subject.guards, :size).by(-1)
subject.guards.should_not include(@g)
end
it "returns the exception object" do
failing_result = ::Guard.supervised_task(@g, :failing)
failing_result.should be_kind_of(Exception)
failing_result.message.should == 'I break your system'
end
end
end
describe ".locate_guard" do
it "returns the path of the guard gem" do
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
end
end
end
end