]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/gems/rspec-1.1.2/spec/spec/example/example_group_methods_spec.rb
added RSpec and RSpec on Rails
[rails.git] / vendor / gems / rspec-1.1.2 / spec / spec / example / example_group_methods_spec.rb
diff --git a/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_methods_spec.rb b/vendor/gems/rspec-1.1.2/spec/spec/example/example_group_methods_spec.rb
new file mode 100644 (file)
index 0000000..fa08e6f
--- /dev/null
@@ -0,0 +1,480 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+  module Example
+    describe 'ExampleGroupMethods' do
+      it_should_behave_like "sandboxed rspec_options"
+      attr_reader :example_group, :result, :reporter
+      before(:each) do
+        options.formatters << mock("formatter", :null_object => true)
+        options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
+        @reporter = FakeReporter.new(@options)
+        options.reporter = reporter
+        @example_group = Class.new(ExampleGroup) do
+          describe("ExampleGroup")
+          it "does nothing"
+        end
+        class << example_group
+          public :include
+        end
+        @result = nil
+      end
+
+      after(:each) do
+        ExampleGroup.reset
+      end
+
+      describe "#describe" do
+        attr_reader :child_example_group
+        before do
+          @child_example_group = @example_group.describe("Another ExampleGroup") do
+            it "should pass" do
+              true.should be_true
+            end
+          end
+        end
+
+        it "should create a subclass of the ExampleGroup when passed a block" do
+          child_example_group.superclass.should == @example_group
+          @options.example_groups.should include(child_example_group)
+        end
+
+        it "should not inherit examples" do
+          child_example_group.examples.length.should == 1
+        end
+      end
+
+      describe "#it" do
+        it "should should create an example instance" do
+          lambda {
+            @example_group.it("")
+          }.should change { @example_group.examples.length }.by(1)
+        end
+      end
+
+      describe "#xit" do
+        before(:each) do
+          Kernel.stub!(:warn)
+        end
+
+        it "should NOT  should create an example instance" do
+          lambda {
+            @example_group.xit("")
+          }.should_not change(@example_group.examples, :length)
+        end
+
+        it "should warn that it is disabled" do
+          Kernel.should_receive(:warn).with("Example disabled: foo")
+          @example_group.xit("foo")
+        end
+      end
+
+      describe "#examples" do
+        it "should have Examples" do
+          example_group = Class.new(ExampleGroup) do
+            describe('example')
+            it "should pass" do
+              1.should == 1
+            end
+          end
+          example_group.examples.length.should == 1
+          example_group.examples.first.description.should == "should pass"
+        end
+
+        it "should not include methods that begin with test (only when TU interop is loaded)" do
+          example_group = Class.new(ExampleGroup) do
+            describe('example')
+            def test_any_args(*args)
+              true.should be_true
+            end
+            def test_something
+              1.should == 1
+            end
+            def test
+              raise "This is not a real test"
+            end
+            def testify
+              raise "This is not a real test"
+            end
+          end
+          example_group.examples.length.should == 0
+          example_group.run.should be_true
+        end
+
+        it "should include methods that begin with should and has an arity of 0 in suite" do
+          example_group = Class.new(ExampleGroup) do
+            describe('example')
+            def shouldCamelCase
+              true.should be_true
+            end
+            def should_any_args(*args)
+              true.should be_true
+            end
+            def should_something
+              1.should == 1
+            end
+            def should_not_something
+              1.should_not == 2
+            end
+            def should
+              raise "This is not a real example"
+            end
+            def should_not
+              raise "This is not a real example"
+            end
+          end
+          example_group = example_group.dup
+          example_group.examples.length.should == 4
+          descriptions = example_group.examples.collect {|example| example.description}.sort
+          descriptions.should include("shouldCamelCase")
+          descriptions.should include("should_any_args")
+          descriptions.should include("should_something")
+          descriptions.should include("should_not_something")
+        end
+
+        it "should not include methods that begin with test_ and has an arity > 0 in suite" do
+          example_group = Class.new(ExampleGroup) do
+            describe('example')
+            def test_invalid(foo)
+              1.should == 1
+            end
+            def testInvalidCamelCase(foo)
+              1.should == 1
+            end
+          end
+          example_group.examples.length.should == 0
+        end
+
+        it "should not include methods that begin with should_ and has an arity > 0 in suite" do
+          example_group = Class.new(ExampleGroup) do
+            describe('example')
+            def should_invalid(foo)
+              1.should == 2
+            end
+            def shouldInvalidCamelCase(foo)
+              1.should == 3
+            end
+            def should_not_invalid(foo)
+              1.should == 4
+            end
+            def should_valid
+              1.should == 1
+            end
+          end
+          example_group.examples.length.should == 1
+          example_group.run.should be_true
+        end
+
+        it "should run should_methods" do
+          example_group = Class.new(ExampleGroup) do
+            def should_valid
+              1.should == 2
+            end
+          end
+          example_group.examples.length.should == 1
+          example_group.run.should be_false
+        end
+      end
+
+      describe "#set_description" do
+        attr_reader :example_group
+        before do
+          class << example_group
+            public :set_description
+          end
+        end
+
+        describe "#set_description(String)" do
+          before(:each) do
+            example_group.set_description("abc")
+          end
+
+          specify ".description should return the String passed into .set_description" do
+            example_group.description.should == "abc"
+          end
+
+          specify ".described_type should provide nil as its type" do
+            example_group.described_type.should be_nil
+          end
+        end
+
+        describe "#set_description(Type)" do
+          before(:each) do
+            example_group.set_description(ExampleGroup)
+          end
+
+          specify ".description should return a String representation of that type (fully qualified) as its name" do
+            example_group.description.should == "Spec::Example::ExampleGroup"
+          end
+
+          specify ".described_type should return the passed in type" do
+            example_group.described_type.should == Spec::Example::ExampleGroup
+          end
+        end
+
+        describe "#set_description(String, Type)" do
+          before(:each) do
+            example_group.set_description("behaving", ExampleGroup)
+          end
+
+          specify ".description should return String then space then Type" do
+            example_group.description.should == "behaving Spec::Example::ExampleGroup"
+          end
+
+          specify ".described_type should return the passed in type" do
+            example_group.described_type.should == Spec::Example::ExampleGroup
+          end
+        end
+
+        describe "#set_description(Type, String not starting with a space)" do
+          before(:each) do
+            example_group.set_description(ExampleGroup, "behaving")
+          end
+
+          specify ".description should return the Type then space then String" do
+            example_group.description.should == "Spec::Example::ExampleGroup behaving"
+          end
+        end
+
+        describe "#set_description(Type, String starting with .)" do
+          before(:each) do
+            example_group.set_description(ExampleGroup, ".behaving")
+          end
+
+          specify ".description should return the Type then String" do
+            example_group.description.should == "Spec::Example::ExampleGroup.behaving"
+          end
+        end
+
+        describe "#set_description(Type, String containing .)" do
+          before(:each) do
+            example_group.set_description(ExampleGroup, "calling a.b")
+          end
+
+          specify ".description should return the Type then space then String" do
+            example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
+          end
+        end
+
+        describe "#set_description(Type, String starting with .)" do
+          before(:each) do
+            example_group.set_description(ExampleGroup, ".behaving")
+          end
+
+          specify "should return the Type then String" do
+            example_group.description.should == "Spec::Example::ExampleGroup.behaving"
+          end
+        end
+
+        describe "#set_description(Type, String containing .)" do
+          before(:each) do
+            example_group.set_description(ExampleGroup, "is #1")
+          end
+
+          specify ".description should return the Type then space then String" do
+            example_group.description.should == "Spec::Example::ExampleGroup is #1"
+          end
+        end
+
+        describe "#set_description(String, Type, String)" do
+          before(:each) do
+            example_group.set_description("A", Hash, "with one entry")
+          end
+
+          specify ".description should return the first String then space then Type then second String" do
+            example_group.description.should == "A Hash with one entry"
+          end
+        end
+
+        describe "#set_description(Hash representing options)" do
+          before(:each) do
+            example_group.set_description(:a => "b", :spec_path => "blah")
+          end
+
+          it ".spec_path should expand the passed in :spec_path option passed into the constructor" do
+            example_group.spec_path.should == File.expand_path("blah")
+          end
+
+          it ".description_options should return all the options passed in" do
+            example_group.description_options.should == {:a => "b", :spec_path => "blah"}
+          end
+
+        end
+      end
+
+      describe "#description" do
+        it "should return the same description instance for each call" do
+          example_group.description.should eql(example_group.description)
+        end
+
+        it "should not add a space when description_text begins with #" do
+          child_example_group = Class.new(example_group) do
+            describe("#foobar", "Does something")
+          end
+          child_example_group.description.should == "ExampleGroup#foobar Does something"
+        end
+
+        it "should not add a space when description_text begins with ." do
+          child_example_group = Class.new(example_group) do
+            describe(".foobar", "Does something")
+          end
+          child_example_group.description.should == "ExampleGroup.foobar Does something"
+        end
+        
+        it "should return the class name if nil" do
+          example_group.set_description(nil)
+          example_group.description.should =~ /Class:/
+        end
+        
+        it "should return the class name if nil" do
+          example_group.set_description("")
+          example_group.description.should =~ /Class:/
+        end
+      end
+
+      describe "#description_parts" do
+        it "should return an Array of the current class description args" do
+          example_group.description_parts.should == [example_group.description]
+        end
+
+        it "should return an Array of the description args from each class in the hierarchy" do
+          child_example_group = Class.new(example_group)
+          child_example_group.describe("Child", ExampleGroup)
+          child_example_group.description.should_not be_empty
+
+          grand_child_example_group = Class.new(child_example_group)
+          grand_child_example_group.describe("GrandChild", ExampleGroup)
+          grand_child_example_group.description.should_not be_empty
+
+          grand_child_example_group.description_parts.should == [
+            "ExampleGroup",
+            "Child",
+            Spec::Example::ExampleGroup,
+            "GrandChild",
+            Spec::Example::ExampleGroup
+          ]
+        end
+      end
+
+      describe "#described_type" do
+        it "should return passed in type" do
+          child_example_group = Class.new(example_group) do
+            describe Object
+          end
+          child_example_group.described_type.should == Object
+        end
+
+        it "should return #described_type of superclass when no passed in type" do
+          parent_example_group = Class.new(ExampleGroup) do
+            describe Object, "#foobar"
+          end
+          child_example_group = Class.new(parent_example_group) do
+            describe "not a type"
+          end
+          child_example_group.described_type.should == Object
+        end
+      end
+
+      describe "#remove_after" do
+        it "should unregister a given after(:each) block" do
+          after_all_ran = false
+          @example_group.it("example") {}
+          proc = Proc.new { after_all_ran = true }
+          ExampleGroup.after(:each, &proc)
+          @example_group.run
+          after_all_ran.should be_true
+
+          after_all_ran = false
+          ExampleGroup.remove_after(:each, &proc)
+          @example_group.run
+          after_all_ran.should be_false
+        end
+      end
+
+      describe "#include" do
+        it "should have accessible class methods from included module" do
+          mod1_method_called = false
+          mod1 = Module.new do
+            class_methods = Module.new do
+              define_method :mod1_method do
+                mod1_method_called = true
+              end
+            end
+
+            metaclass.class_eval do
+              define_method(:included) do |receiver|
+                receiver.extend class_methods
+              end
+            end
+          end
+
+          mod2_method_called = false
+          mod2 = Module.new do
+            class_methods = Module.new do
+              define_method :mod2_method do
+                mod2_method_called = true
+              end
+            end
+
+            metaclass.class_eval do
+              define_method(:included) do |receiver|
+                receiver.extend class_methods
+              end
+            end
+          end
+
+          @example_group.include mod1, mod2
+
+          @example_group.mod1_method
+          @example_group.mod2_method
+          mod1_method_called.should be_true
+          mod2_method_called.should be_true
+        end
+      end
+
+      describe "#number_of_examples" do
+        it "should count number of specs" do
+          proc do
+            @example_group.it("one") {}
+            @example_group.it("two") {}
+            @example_group.it("three") {}
+            @example_group.it("four") {}
+          end.should change {@example_group.number_of_examples}.by(4)
+        end
+      end
+
+      describe "#class_eval" do
+        it "should allow constants to be defined" do
+          example_group = Class.new(ExampleGroup) do
+            describe('example')
+            FOO = 1
+            it "should reference FOO" do
+              FOO.should == 1
+            end
+          end
+          example_group.run
+          Object.const_defined?(:FOO).should == false
+        end
+      end
+
+      describe '#register' do
+        it "should add ExampleGroup to set of ExampleGroups to be run" do
+          example_group.register
+          options.example_groups.should include(example_group)
+        end
+      end
+
+      describe '#unregister' do
+        before do
+          example_group.register
+          options.example_groups.should include(example_group)
+        end
+
+        it "should remove ExampleGroup from set of ExampleGroups to be run" do
+          example_group.unregister
+          options.example_groups.should_not include(example_group)
+        end
+      end
+    end
+  end
+end
\ No newline at end of file