]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/spec/spec/story/extensions/main_spec.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / spec / spec / story / extensions / main_spec.rb
diff --git a/vendor/gems/rspec-1.1.2/spec/spec/story/extensions/main_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/story/extensions/main_spec.rb
new file mode 100644 (file)
index 0000000..acdc341
--- /dev/null
@@ -0,0 +1,161 @@
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+module Spec
+  module Story
+    module Extensions
+      describe "the main object extended with Main", :shared => true do
+        before(:each) do
+          @main = Class.new do; include Main; end
+          @original_rspec_story_steps, $rspec_story_steps = $rspec_story_steps, nil
+        end
+
+        after(:each) do
+          $rspec_story_steps = @original_rspec_story_steps
+        end
+
+        def have_step(type, name)
+          return simple_matcher(%[step group containing a #{type} named #{name.inspect}]) do |actual|
+            Spec::Story::Step === actual.find(type, name)
+          end
+        end
+      end
+
+      describe Main, "#run_story" do
+        it_should_behave_like "the main object extended with Main"
+
+        it "should create a PlainTextStoryRunner with run_story" do
+          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(mock("runner", :null_object => true))
+          @main.run_story
+        end
+
+        it "should yield the runner if arity == 1" do
+          File.should_receive(:read).with("some/path").and_return("Story: foo")
+          $main_spec_runner = nil
+          @main.run_story("some/path") do |runner|
+            $main_spec_runner = runner
+          end
+          $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner)
+        end
+
+        it "should run in the runner if arity == 0" do
+          File.should_receive(:read).with("some/path").and_return("Story: foo")
+          $main_spec_runner = nil
+          @main.run_story("some/path") do
+            $main_spec_runner = self
+          end
+          $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner)
+        end
+
+        it "should tell the PlainTextStoryRunner to run with run_story" do
+          runner = mock("runner")
+          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(runner)
+          runner.should_receive(:run)
+          @main.run_story
+        end  
+      end
+
+      describe Main, "#steps_for" do
+        it_should_behave_like "the main object extended with Main"
+
+        it "should have no steps for a non existent key" do
+          @main.steps_for(:key).find(:given, "foo").should be_nil
+        end
+
+        it "should create steps for a key" do
+          $main_spec_invoked = false
+          @main.steps_for(:key) do
+            Given("foo") {
+              $main_spec_invoked = true
+            }
+          end
+          @main.steps_for(:key).find(:given, "foo").perform(Object.new, "foo")
+          $main_spec_invoked.should be_true
+        end
+
+        it "should append steps to steps_for a given key" do
+          @main.steps_for(:key) do
+            Given("first") {}
+          end
+          @main.steps_for(:key) do
+            Given("second") {}
+          end
+          @main.steps_for(:key).should have_step(:given, "first")
+          @main.steps_for(:key).should have_step(:given, "second")
+        end
+      end
+
+      describe Main, "#with_steps_for adding new steps" do
+        it_should_behave_like "the main object extended with Main"
+
+        it "should result in a group containing pre-existing steps and newly defined steps" do
+          first_group = @main.steps_for(:key) do
+            Given("first") {}
+          end
+          second_group = @main.with_steps_for(:key) do
+            Given("second") {}
+          end
+
+          second_group.should have_step(:given, "first")
+          second_group.should have_step(:given, "second")
+        end
+
+        it "should not add its steps to the existing group" do
+          first_group = @main.steps_for(:key) do
+            Given("first") {}
+          end
+          second_group = @main.with_steps_for(:key) do
+            Given("second") {}
+          end
+
+          first_group.should have_step(:given, "first")
+          first_group.should_not have_step(:given, "second")
+        end
+      end
+
+      describe Main, "#with_steps_for running a story" do
+        it_should_behave_like "the main object extended with Main"
+        
+        before(:each) do
+          @runner = mock("runner")
+          @runner_step_group = StepGroup.new
+          @runner.stub!(:steps).and_return(@runner_step_group)
+          @runner.stub!(:run)
+          Spec::Story::Runner::PlainTextStoryRunner.stub!(:new).and_return(@runner)
+        end
+        
+        it "should create a PlainTextStoryRunner with a path" do
+          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with('path/to/file',{}).and_return(@runner)
+          @main.with_steps_for(:foo) do
+            run 'path/to/file'
+          end
+        end
+        
+        it "should create a PlainTextStoryRunner with a path and options" do
+          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with(anything,{:bar => :baz}).and_return(@runner)
+          @main.with_steps_for(:foo) do
+            run 'path/to/file', :bar => :baz
+          end
+        end
+        
+        it "should pass the group it creates to the runner's steps" do
+          steps = @main.steps_for(:ice_cream) do
+            Given("vanilla") {}
+          end
+          @main.with_steps_for(:ice_cream) do
+            run 'foo'
+          end
+          @runner_step_group.should have_step(:given, "vanilla")
+        end
+        
+        it "should run a story" do
+          @runner.should_receive(:run)
+          Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(@runner)
+          @main.with_steps_for(:foo) do
+            run 'path/to/file'
+          end
+        end
+
+      end
+    end
+  end
+end
\ No newline at end of file