+++ /dev/null
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe Step, "matching" do
- it "should match a text string" do
- step = Step.new("this text") {}
- step.matches?("this text").should be_true
- end
-
- it "should not match a text string that does not start the same" do
- step = Step.new("this text") {}
- step.matches?("Xthis text").should be_false
- end
-
- it "should not match a text string that does not end the same" do
- step = Step.new("this text") {}
- step.matches?("this textX").should be_false
- end
-
- it "should match a text string with a param" do
- step = Step.new("this $param text") {}
- step.matches?("this anything text").should be_true
- end
-
- it "should not be greedy" do
- step = Step.new("enter $value for $key") {}
- step.parse_args("enter 3 for keys for a piano").should == ['3','keys for a piano']
- end
-
- it "should match a text string with 3 params" do
- step = Step.new("1 $one 2 $two 3 $three 4") {}
- step.matches?("1 a 2 b 3 c 4").should be_true
- end
-
- it "should match a text string with a param at the beginning" do
- step = Step.new("$one 2 3") {}
- step.matches?("a 2 3").should be_true
- end
-
- it "should match a text string with a param at the end" do
- step = Step.new("1 2 $three") {}
- step.matches?("1 2 c").should be_true
- end
-
- it "should not match a different string" do
- step = Step.new("this text") {}
- step.matches?("other text").should be_false
- end
-
- it "should match a regexp" do
- step = Step.new(/this text/) {}
- step.matches?("this text").should be_true
- end
-
- it "should match a regexp with a match group" do
- step = Step.new(/this (.*) text/) {}
- step.matches?("this anything text").should be_true
- end
-
- it "should not match a non matching regexp" do
- step = Step.new(/this (.*) text/) {}
- step.matches?("other anything text").should be_false
- end
-
- it "should not get bogged down by parens in strings" do
- step = Step.new("before () after") {}
- step.matches?("before () after").should be_true
- end
-
- it "should match any option of an alteration" do
- step = Step.new(/(he|she) is cool/) {}
- step.matches?("he is cool").should be_true
- step.matches?("she is cool").should be_true
- end
-
- it "should match alteration as well as a variable" do
- step = Step.new(/(he|she) is (.*)/) {}
- step.matches?("he is cool").should be_true
- step.parse_args("he is cool").should == ['he', 'cool']
- end
-
- end
-
- describe Step do
- it "should make complain with no block" do
- lambda {
- step = Step.new("foo")
- }.should raise_error
- end
-
- it "should perform itself on an object" do
- # given
- $instance = nil
- step = Step.new 'step' do
- $instance = self
- end
- instance = Object.new
-
- # when
- step.perform(instance, "step")
-
- # then
- $instance.should == instance
- end
-
- it "should perform itself with one parameter with match expression" do
- # given
- $result = nil
- step = Step.new 'an account with $count dollars' do |count|
- $result = count
- end
- instance = Object.new
-
- # when
- args = step.parse_args("an account with 3 dollars")
- step.perform(instance, *args)
-
- # then
- $result.should == "3"
- end
-
- it "should perform itself with one parameter without a match expression" do
- # given
- $result = nil
- step = Step.new 'an account with a balance of' do |amount|
- $result = amount
- end
- instance = Object.new
-
- # when
- step.perform(instance, 20)
-
- # then
- $result.should == 20
- end
-
- it "should perform itself with 2 parameters" do
- # given
- $account_type = nil
- $amount = nil
- step = Step.new 'a $account_type account with $amount dollars' do |account_type, amount|
- $account_type = account_type
- $amount = amount
- end
- instance = Object.new
-
- # when
- args = step.parse_args("a savings account with 3 dollars")
- step.perform(instance, *args)
-
- # then
- $account_type.should == "savings"
- $amount.should == "3"
- end
-
- it "should perform itself when defined with a regexp with 2 parameters" do
- # given
- $pronoun = nil
- $adjective = nil
- step = Step.new /(he|she) is (.*)/ do |pronoun, adjective|
- $pronoun = pronoun
- $adjective = adjective
- end
- instance = Object.new
-
- # when
- args = step.parse_args("he is cool")
- step.perform(instance, *args)
-
- # then
- $pronoun.should == "he"
- $adjective.should == "cool"
- end
-
- end
- end
-end