changelog shortlog tags changeset manifest revisions annotate raw

vendor/plugins/rspec/lib/spec/story/step_group.rb

changeset 15: 64acf98d15f4
author: moriq@moriq.com
date: Mon Mar 10 10:12:58 2008 +0900 (16 years ago)
permissions: -rw-r--r--
description: add plugins rspec
1module 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
89end