]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/spec/spec/story/step_group_spec.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / spec / spec / story / step_group_spec.rb
diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/step_group_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/step_group_spec.rb
new file mode 100644 (file)
index 0000000..dd28bfa
--- /dev/null
@@ -0,0 +1,157 @@
+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