openstreetmap-website/vendor/gems/rspec-1.1.2/examples/stories/calculator.rb
2008-01-22 16:39:09 +00:00

65 lines
1.3 KiB
Ruby

$:.push File.join(File.dirname(__FILE__), *%w[.. .. lib])
require 'spec'
class AdditionMatchers < Spec::Story::StepGroup
steps do |add|
add.given("an addend of $addend") do |addend|
@adder ||= Adder.new
@adder << addend.to_i
end
end
end
steps = AdditionMatchers.new do |add|
add.then("the sum should be $sum") do |sum|
@sum.should == sum.to_i
end
end
steps.when("they are added") do
@sum = @adder.sum
end
# This Story uses steps (see above) instead of blocks
# passed to Given, When and Then
Story "addition", %{
As an accountant
I want to add numbers
So that I can count some beans
}, :steps => steps do
Scenario "2 + 3" do
Given "an addend of 2"
And "an addend of 3"
When "they are added"
Then "the sum should be 5"
end
# This scenario uses GivenScenario, which silently runs
# all the steps in a previous scenario.
Scenario "add 4 more" do
GivenScenario "2 + 3"
Given "an addend of 4"
When "they are added"
Then "the sum should be 9"
end
end
# And the class that makes the story pass
class Adder
def << addend
addends << addend
end
def sum
@addends.inject(0) do |result, addend|
result + addend.to_i
end
end
def addends
@addends ||= []
end
end