--- /dev/null
+require File.dirname(__FILE__) + '/story_helper'
+
+module Spec
+ module Story
+ describe StepGroup do
+ before(:each) do
+ @step_group = StepGroup.new
+ end
+
+ it "should not find a matcher if empty" do
+ @step_group.find(:given, "this and that").should be_nil
+ end
+
+ it "should create a given_scenario matcher" do
+ step = @step_group.given_scenario("this and that") {}
+ @step_group.find(:given_scenario, "this and that").should_not be_nil
+ @step_group.find(:given_scenario, "this and that").should equal(step)
+ end
+
+ it "should create a given matcher" do
+ step = @step_group.given("this and that") {}
+ @step_group.find(:given, "this and that").should equal(step)
+ end
+
+ it "should create a when matcher" do
+ step = @step_group.when("this and that") {}
+ @step_group.find(:when, "this and that").should equal(step)
+ end
+
+ it "should create a them matcher" do
+ step = @step_group.then("this and that") {}
+ @step_group.find(:then, "this and that").should equal(step)
+ end
+
+ it "should add a matcher object" do
+ step = Step.new("this and that") {}
+ @step_group.add(:given, step)
+ @step_group.find(:given, "this and that").should equal(step)
+ end
+
+ it "should add it matchers to another StepGroup (with one given)" do
+ source = StepGroup.new
+ target = StepGroup.new
+ step = source.given("this and that") {}
+ source.add_to target
+ target.find(:given, "this and that").should equal(step)
+ end
+
+ it "should add it matchers to another StepGroup (with some of each type)" do
+ source = StepGroup.new
+ target = StepGroup.new
+ given_scenario = source.given_scenario("1") {}
+ given = source.given("1") {}
+ when1 = source.when("1") {}
+ when2 = source.when("2") {}
+ then1 = source.then("1") {}
+ then2 = source.then("2") {}
+ then3 = source.then("3") {}
+ source.add_to target
+ target.find(:given_scenario, "1").should equal(given_scenario)
+ target.find(:given, "1").should equal(given)
+ target.find(:when, "1").should equal(when1)
+ target.find(:when, "2").should equal(when2)
+ target.find(:then, "1").should equal(then1)
+ target.find(:then, "2").should equal(then2)
+ target.find(:then, "3").should equal(then3)
+ end
+
+ it "should append another collection" do
+ matchers_to_append = StepGroup.new
+ step = matchers_to_append.given("this and that") {}
+ @step_group << matchers_to_append
+ @step_group.find(:given, "this and that").should equal(step)
+ end
+
+ it "should append several other collections" do
+ matchers_to_append = StepGroup.new
+ more_matchers_to_append = StepGroup.new
+ first_matcher = matchers_to_append.given("this and that") {}
+ second_matcher = more_matchers_to_append.given("and the other") {}
+ @step_group << matchers_to_append
+ @step_group << more_matchers_to_append
+ @step_group.find(:given, "this and that").should equal(first_matcher)
+ @step_group.find(:given, "and the other").should equal(second_matcher)
+ end
+
+ it "should yield itself on initialization" do
+ begin
+ $step_group_spec_step = nil
+ matchers = StepGroup.new do |matchers|
+ $step_group_spec_step = matchers.given("foo") {}
+ end
+ $step_group_spec_step.matches?("foo").should be_true
+ ensure
+ $step_group_spec_step = nil
+ end
+ end
+
+ it "should support defaults" do
+ class StepGroupSubclass < StepGroup
+ steps do |add|
+ add.given("foo") {}
+ end
+ end
+ StepGroupSubclass.new.find(:given, "foo").should_not be_nil
+ end
+
+ it "should create a Given" do
+ sub = Class.new(StepGroup).new
+ step = sub.Given("foo") {}
+ sub.find(:given, "foo").should == step
+ end
+
+ it "should create a When" do
+ sub = Class.new(StepGroup).new
+ step = sub.When("foo") {}
+ sub.find(:when, "foo").should == step
+ end
+
+ it "should create a Then" do
+ sub = Class.new(StepGroup).new
+ step = sub.Then("foo") {}
+ sub.find(:then, "foo").should == step
+ end
+
+ it "should create steps in a block" do
+ sub = Class.new(StepGroup).new do
+ Given("a given") {}
+ When("a when") {}
+ Then("a then") {}
+ end
+ sub.find(:given, "a given").should_not be_nil
+ sub.find(:when, "a when").should_not be_nil
+ sub.find(:then, "a then").should_not be_nil
+ end
+
+ it "should clear itself" do
+ step = @step_group.given("this and that") {}
+ @step_group.clear
+ @step_group.find(:given, "this and that").should be_nil
+ end
+
+ it "should tell you when it is empty" do
+ @step_group.should be_empty
+ end
+
+ it "should tell you when it is not empty" do
+ @step_group.given("this and that") {}
+ @step_group.should_not be_empty
+ end
+
+ it "should handle << nil" do
+ @step_group << nil
+ end
+ end
+ end
+end