]> git.openstreetmap.org Git - rails.git/blob - vendor/gems/rspec-1.1.2/examples/stories/calculator.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / examples / stories / calculator.rb
1 $:.push File.join(File.dirname(__FILE__), *%w[.. .. lib])
2 require 'spec'
3
4 class AdditionMatchers < Spec::Story::StepGroup
5   steps do |add|
6     add.given("an addend of $addend") do |addend|
7       @adder ||= Adder.new
8       @adder << addend.to_i
9     end
10   end
11 end
12
13 steps = AdditionMatchers.new do |add|  
14   add.then("the sum should be $sum") do |sum|
15     @sum.should == sum.to_i
16   end
17 end
18
19 steps.when("they are added") do
20   @sum = @adder.sum
21 end
22
23 # This Story uses steps (see above) instead of blocks
24 # passed to Given, When and Then
25
26 Story "addition", %{
27   As an accountant
28   I want to add numbers
29   So that I can count some beans
30 }, :steps => steps do
31   Scenario "2 + 3" do
32     Given "an addend of 2"
33     And "an addend of 3"
34     When "they are added"
35     Then "the sum should be 5"
36   end
37   
38   # This scenario uses GivenScenario, which silently runs
39   # all the steps in a previous scenario.
40   
41   Scenario "add 4 more" do
42     GivenScenario "2 + 3"
43     Given "an addend of 4"
44     When "they are added"
45     Then "the sum should be 9"
46   end
47 end
48
49 # And the class that makes the story pass
50
51 class Adder
52   def << addend
53     addends << addend
54   end
55   
56   def sum
57     @addends.inject(0) do |result, addend|
58       result + addend.to_i
59     end
60   end
61   
62   def addends
63     @addends ||= []
64   end
65 end