]> git.openstreetmap.org Git - rails.git/blob - vendor/gems/rspec-1.1.2/lib/spec/story/step_group.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / lib / spec / story / step_group.rb
1 module Spec
2   module Story
3
4     class StepGroupHash < Hash
5       def initialize
6         super do |h,k|
7           h[k] = Spec::Story::StepGroup.new
8         end
9       end
10     end
11
12     class StepGroup
13       def self.steps(&block)
14         @step_group ||= StepGroup.new(false)
15         @step_group.instance_eval(&block) if block
16         @step_group
17       end
18       
19       def initialize(init_defaults=true, &block)
20         @hash_of_lists_of_steps = Hash.new {|h, k| h[k] = []}
21         if init_defaults
22           self.class.steps.add_to(self)
23         end
24         instance_eval(&block) if block
25       end
26       
27       def find(type, name)
28         @hash_of_lists_of_steps[type].each do |step|
29           return step if step.matches?(name)
30         end
31         return nil
32       end
33
34       def GivenScenario(name, &block)
35         create_matcher(:given_scenario, name, &block)
36       end
37       
38       def Given(name, &block)
39         create_matcher(:given, name, &block)
40       end
41       
42       def When(name, &block)
43         create_matcher(:when, name, &block)
44       end
45       
46       def Then(name, &block)
47         create_matcher(:then, name, &block)
48       end
49
50       alias :given_scenario :GivenScenario
51       alias :given :Given
52       alias :when :When
53       alias :then :Then
54       
55       def add(type, steps)
56         (@hash_of_lists_of_steps[type] << steps).flatten!
57       end
58       
59       def clear
60         @hash_of_lists_of_steps.clear
61       end
62       
63       def empty?
64         [:given_scenario, :given, :when, :then].each do |type|
65           return false unless @hash_of_lists_of_steps[type].empty?
66         end
67         return true
68       end
69       
70       def add_to(other_step_matchers)
71         [:given_scenario, :given, :when, :then].each do |type|
72           other_step_matchers.add(type, @hash_of_lists_of_steps[type])
73         end
74       end
75       
76       def <<(other_step_matchers)
77         other_step_matchers.add_to(self) if other_step_matchers.respond_to?(:add_to)
78       end
79       
80       # TODO - make me private
81       def create_matcher(type, name, &block)
82         matcher = Step.new(name, &block)
83         @hash_of_lists_of_steps[type] << matcher
84         matcher
85       end
86       
87     end
88   end
89 end