diff options
Diffstat (limited to 'vendor/gems/rspec/spec/spec')
139 files changed, 15112 insertions, 0 deletions
diff --git a/vendor/gems/rspec/spec/spec/example/configuration_spec.rb b/vendor/gems/rspec/spec/spec/example/configuration_spec.rb new file mode 100755 index 0000000..5b4a604 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/configuration_spec.rb @@ -0,0 +1,282 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Example + + describe Configuration do + before(:each) do + @config = Configuration.new + @example_group = mock("example_group") + end + + describe "#mock_with" do + + it "should default mock framework to rspec" do + @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/ + end + + it "should let you set rspec mocking explicitly" do + @config.mock_with(:rspec) + @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/ + end + + it "should let you set mocha" do + @config.mock_with(:mocha) + @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/mocha$/ + end + + it "should let you set flexmock" do + @config.mock_with(:flexmock) + @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/flexmock$/ + end + + it "should let you set rr" do + @config.mock_with(:rr) + @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rr$/ + end + + it "should let you set an arbitrary adapter module" do + adapter = Module.new + @config.mock_with(adapter) + @config.mock_framework.should == adapter + end + end + + describe "#include" do + + before do + @original_configuration = Spec::Runner.configuration + spec_configuration = @config + Spec::Runner.instance_eval {@configuration = spec_configuration} + @example_group_class = Class.new(ExampleGroup) do + class << self + def this_class_has_special_methods + end + end + end + ExampleGroupFactory.register(:foobar, @example_group_class) + end + + after do + original_configuration = @original_configuration + Spec::Runner.instance_eval {@configuration = original_configuration} + ExampleGroupFactory.reset + end + + it "should include the submitted module in ExampleGroup subclasses" do + mod = Module.new + @config.include mod + Class.new(@example_group_class).included_modules.should include(mod) + end + + it "should let you define modules to be included for a specific type" do + mod = Module.new + @config.include mod, :type => :foobar + Class.new(@example_group_class).included_modules.should include(mod) + end + + it "should not include modules in a type they are not intended for" do + mod = Module.new + @other_example_group_class = Class.new(ExampleGroup) + ExampleGroupFactory.register(:baz, @other_example_group_class) + + @config.include mod, :type => :foobar + + Class.new(@other_example_group_class).included_modules.should_not include(mod) + end + + end + + end + + describe Configuration do + + before(:each) do + @config = Configuration.new + @special_example_group = Class.new(ExampleGroup) + @special_child_example_group = Class.new(@special_example_group) + @nonspecial_example_group = Class.new(ExampleGroup) + ExampleGroupFactory.register(:special, @special_example_group) + ExampleGroupFactory.register(:special_child, @special_child_example_group) + ExampleGroupFactory.register(:non_special, @nonspecial_example_group) + @example_group = @special_child_example_group.describe "Special Example Group" + @unselected_example_group = Class.new(@nonspecial_example_group).describe "Non Special Example Group" + end + + after(:each) do + ExampleGroupFactory.reset + end + + describe "#prepend_before" do + it "prepends the before block on all instances of the passed in type" do + order = [] + @config.prepend_before(:all) do + order << :prepend__before_all + end + @config.prepend_before(:all, :type => :special) do + order << :special_prepend__before_all + end + @config.prepend_before(:all, :type => :special_child) do + order << :special_child_prepend__before_all + end + @config.prepend_before(:each) do + order << :prepend__before_each + end + @config.prepend_before(:each, :type => :special) do + order << :special_prepend__before_each + end + @config.prepend_before(:each, :type => :special_child) do + order << :special_child_prepend__before_each + end + @config.prepend_before(:all, :type => :non_special) do + order << :special_prepend__before_all + end + @config.prepend_before(:each, :type => :non_special) do + order << :special_prepend__before_each + end + @example_group.it "calls prepend_before" do + end + + @example_group.run + order.should == [ + :prepend__before_all, + :special_prepend__before_all, + :special_child_prepend__before_all, + :prepend__before_each, + :special_prepend__before_each, + :special_child_prepend__before_each + ] + end + end + + describe "#append_before" do + + it "calls append_before on the type" do + order = [] + @config.append_before(:all) do + order << :append_before_all + end + @config.append_before(:all, :type => :special) do + order << :special_append_before_all + end + @config.append_before(:all, :type => :special_child) do + order << :special_child_append_before_all + end + @config.append_before(:each) do + order << :append_before_each + end + @config.append_before(:each, :type => :special) do + order << :special_append_before_each + end + @config.append_before(:each, :type => :special_child) do + order << :special_child_append_before_each + end + @config.append_before(:all, :type => :non_special) do + order << :special_append_before_all + end + @config.append_before(:each, :type => :non_special) do + order << :special_append_before_each + end + @example_group.it "calls append_before" do + end + + @example_group.run + order.should == [ + :append_before_all, + :special_append_before_all, + :special_child_append_before_all, + :append_before_each, + :special_append_before_each, + :special_child_append_before_each + ] + end + end + + describe "#prepend_after" do + + it "prepends the after block on all instances of the passed in type" do + order = [] + @config.prepend_after(:all) do + order << :prepend__after_all + end + @config.prepend_after(:all, :type => :special) do + order << :special_prepend__after_all + end + @config.prepend_after(:all, :type => :special) do + order << :special_child_prepend__after_all + end + @config.prepend_after(:each) do + order << :prepend__after_each + end + @config.prepend_after(:each, :type => :special) do + order << :special_prepend__after_each + end + @config.prepend_after(:each, :type => :special) do + order << :special_child_prepend__after_each + end + @config.prepend_after(:all, :type => :non_special) do + order << :special_prepend__after_all + end + @config.prepend_after(:each, :type => :non_special) do + order << :special_prepend__after_each + end + @example_group.it "calls prepend_after" do + end + + @example_group.run + order.should == [ + :special_child_prepend__after_each, + :special_prepend__after_each, + :prepend__after_each, + :special_child_prepend__after_all, + :special_prepend__after_all, + :prepend__after_all + ] + end + end + + describe "#append_after" do + + it "calls append_after on the type" do + order = [] + @config.append_after(:all) do + order << :append__after_all + end + @config.append_after(:all, :type => :special) do + order << :special_append__after_all + end + @config.append_after(:all, :type => :special_child) do + order << :special_child_append__after_all + end + @config.append_after(:each) do + order << :append__after_each + end + @config.append_after(:each, :type => :special) do + order << :special_append__after_each + end + @config.append_after(:each, :type => :special_child) do + order << :special_child_append__after_each + end + @config.append_after(:all, :type => :non_special) do + order << :non_special_append_after_all + end + @config.append_after(:each, :type => :non_special) do + order << :non_special_append_after_each + end + @example_group.it "calls append_after" do + end + + @example_group.run + order.should == [ + :special_child_append__after_each, + :special_append__after_each, + :append__after_each, + :special_child_append__after_all, + :special_append__after_all, + :append__after_all + ] + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb new file mode 100644 index 0000000..0b00e13 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb @@ -0,0 +1,48 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + class ExampleGroupSubclass < ExampleGroup + class << self + attr_accessor :examples_ran + end + + @@klass_variable_set = true + CONSTANT = :foobar + + before do + @instance_variable = :hello + end + + it "should run" do + self.class.examples_ran = true + end + + it "should have access to instance variables" do + @instance_variable.should == :hello + end + + it "should have access to class variables" do + @@klass_variable_set.should == true + end + + it "should have access to constants" do + CONSTANT.should == :foobar + end + + it "should have access to methods defined in the Example Group" do + a_method.should == 22 + end + + def a_method + 22 + end + end + + describe ExampleGroupSubclass do + it "should run" do + ExampleGroupSubclass.examples_ran.should be_true + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb new file mode 100644 index 0000000..3b50011 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb @@ -0,0 +1,129 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + describe ExampleGroupFactory, "with :foobar registered as custom type" do + + before do + @example_group = Class.new(ExampleGroup) + ExampleGroupFactory.register(:foobar, @example_group) + end + + after do + ExampleGroupFactory.reset + end + + it "should #get the default ExampleGroup type when passed nil" do + ExampleGroupFactory.get(nil).should == ExampleGroup + end + + it "should #get the default ExampleGroup for unregistered non-nil values" do + ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup + end + + it "should #get custom type for :foobar" do + ExampleGroupFactory.get(:foobar).should == @example_group + end + + it "should #get the actual type when that is passed in" do + ExampleGroupFactory.get(@example_group).should == @example_group + end + + end + + describe ExampleGroupFactory, "#create_example_group" do + it "should create a uniquely named class" do + example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {} + example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/ + end + + it "should create a Spec::Example::Example subclass by default" do + example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {} + example_group.superclass.should == Spec::Example::ExampleGroup + end + + it "should create a Spec::Example::Example when :type => :default" do + example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "example_group", :type => :default + ) {} + example_group.superclass.should == Spec::Example::ExampleGroup + end + + it "should create a Spec::Example::Example when :type => :default" do + example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "example_group", :type => :default + ) {} + example_group.superclass.should == Spec::Example::ExampleGroup + end + + it "should create specified type when :type => :something_other_than_default" do + klass = Class.new(ExampleGroup) do + def initialize(*args, &block); end + end + Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) + example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "example_group", :type => :something_other_than_default + ) {} + example_group.superclass.should == klass + end + + it "should create a type indicated by :spec_path" do + klass = Class.new(ExampleGroup) do + def initialize(*args, &block); end + end + Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) + example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb" + ) {} + example_group.superclass.should == klass + end + + it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do + klass = Class.new(ExampleGroup) do + def initialize(*args, &block); end + end + Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) + example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "example_group", :spec_path => "./spec\\something_other_than_default\\some_spec.rb" + ) {} + example_group.superclass.should == klass + end + + it "should create and register a Spec::Example::Example if :shared => true" do + shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true + ) {} + shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup) + SharedExampleGroup.shared_example_groups.should include(shared_example_group) + end + + it "should favor the :type over the :spec_path" do + klass = Class.new(ExampleGroup) do + def initialize(*args, &block); end + end + Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass) + example_group = Spec::Example::ExampleGroupFactory.create_example_group( + "name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default + ) {} + example_group.superclass.should == klass + end + + it "should register ExampleGroup by default" do + example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do + end + rspec_options.example_groups.should include(example_group) + end + + it "should enable unregistering of ExampleGroups" do + example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do + unregister + end + rspec_options.example_groups.should_not include(example_group) + end + + after(:each) do + Spec::Example::ExampleGroupFactory.reset + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb new file mode 100644 index 0000000..2b6d660 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb @@ -0,0 +1,489 @@ +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 + options.example_groups.delete(example_group) + options.example_groups.should_not include(example_group) + + example_group.register {} + options.example_groups.should include(example_group) + end + end + + describe '#unregister' do + before do + 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 + + describe "#registration_backtrace" do + it "returns the backtrace of where the ExampleGroup was registered" do + example_group = Class.new(ExampleGroup) + example_group.registration_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}") + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/example/example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_spec.rb new file mode 100644 index 0000000..93e558a --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_group_spec.rb @@ -0,0 +1,711 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + class ExampleModuleScopingSpec < ExampleGroup + describe ExampleGroup, "via a class definition" + + module Foo + module Bar + def self.loaded? + true + end + end + end + include Foo + + it "should understand module scoping" do + Bar.should be_loaded + end + + @@foo = 1 + + it "should allow class variables to be defined" do + @@foo.should == 1 + end + end + + class ExampleClassVariablePollutionSpec < ExampleGroup + describe ExampleGroup, "via a class definition without a class variable" + + it "should not retain class variables from other Example classes" do + proc do + @@foo + end.should raise_error + end + end + + describe ExampleGroup, "#pending" do + it "should raise a Pending error when its block fails" do + block_ran = false + lambda { + pending("something") do + block_ran = true + raise "something wrong with my example" + end + }.should raise_error(Spec::Example::ExamplePendingError, "something") + block_ran.should == true + end + + it "should raise Spec::Example::PendingExampleFixedError when its block does not fail" do + block_ran = false + lambda { + pending("something") do + block_ran = true + end + }.should raise_error(Spec::Example::PendingExampleFixedError, "Expected pending 'something' to fail. No Error was raised.") + block_ran.should == true + end + end + + describe ExampleGroup, "#run with failure in example", :shared => true do + it "should add an example failure to the TestResult" do + example_group.run.should be_false + end + end + + describe ExampleGroup, "#run" do + it_should_behave_like "sandboxed rspec_options" + attr_reader :example_group, :formatter, :reporter + before :each do + @formatter = mock("formatter", :null_object => true) + options.formatters << formatter + options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true) + @reporter = FakeReporter.new(options) + options.reporter = reporter + @example_group = Class.new(ExampleGroup) do + describe("example") + it "does nothing" do + end + end + class << example_group + public :include + end + end + + after :each do + ExampleGroup.reset + end + + it "should not run when there are no examples" do + example_group = Class.new(ExampleGroup) do + describe("Foobar") + end + example_group.examples.should be_empty + + reporter = mock("Reporter") + reporter.should_not_receive(:add_example_group) + example_group.run + end + + describe "when before_each fails" do + before(:each) do + $example_ran = $after_each_ran = false + @example_group = describe("Foobar") do + before(:each) {raise} + it "should not be run" do + $example_ran = true + end + after(:each) do + $after_each_ran = true + end + end + end + + it "should not run example block" do + example_group.run + $example_ran.should be_false + end + + it "should run after_each" do + example_group.run + $after_each_ran.should be_true + end + + it "should report failure location when in before_each" do + reporter.should_receive(:example_finished) do |example_group, error| + error.message.should eql("in before_each") + end + example_group.run + end + end + + describe ExampleGroup, "#run on dry run" do + before do + @options.dry_run = true + end + + it "should not run before(:all) or after(:all)" do + before_all_ran = false + after_all_ran = false + ExampleGroup.before(:all) { before_all_ran = true } + ExampleGroup.after(:all) { after_all_ran = true } + example_group.it("should") {} + example_group.run + before_all_ran.should be_false + after_all_ran.should be_false + end + + it "should not run example" do + example_ran = false + example_group.it("should") {example_ran = true} + example_group.run + example_ran.should be_false + end + end + + describe ExampleGroup, "#run with specified examples" do + attr_reader :examples_that_were_run + before do + @examples_that_were_run = [] + end + + describe "when specified_examples matches entire ExampleGroup" do + before do + examples_that_were_run = @examples_that_were_run + @example_group = Class.new(ExampleGroup) do + describe("the ExampleGroup") + it("should be run") do + examples_that_were_run << 'should be run' + end + + it("should also be run") do + examples_that_were_run << 'should also be run' + end + end + options.examples = ["the ExampleGroup"] + end + + it "should not run the Examples in the ExampleGroup" do + example_group.run + examples_that_were_run.should == ['should be run', 'should also be run'] + end + end + + describe ExampleGroup, "#run when specified_examples matches only Example description" do + before do + examples_that_were_run = @examples_that_were_run + @example_group = Class.new(ExampleGroup) do + describe("example") + it("should be run") do + examples_that_were_run << 'should be run' + end + end + options.examples = ["should be run"] + end + + it "should not run the example" do + example_group.run + examples_that_were_run.should == ['should be run'] + end + end + + describe ExampleGroup, "#run when specified_examples does not match an Example description" do + before do + examples_that_were_run = @examples_that_were_run + @example_group = Class.new(ExampleGroup) do + describe("example") + it("should be something else") do + examples_that_were_run << 'should be something else' + end + end + options.examples = ["does not match anything"] + end + + it "should not run the example" do + example_group.run + examples_that_were_run.should == [] + end + end + + describe ExampleGroup, "#run when specified_examples matches an Example description" do + before do + examples_that_were_run = @examples_that_were_run + @example_group = Class.new(ExampleGroup) do + describe("example") + it("should be run") do + examples_that_were_run << 'should be run' + end + it("should not be run") do + examples_that_were_run << 'should not be run' + end + end + options.examples = ["should be run"] + end + + it "should run only the example, when there in only one" do + example_group.run + examples_that_were_run.should == ["should be run"] + end + + it "should run only the one example" do + example_group.run + examples_that_were_run.should == ["should be run"] end + end + end + + describe ExampleGroup, "#run with success" do + before do + @special_example_group = Class.new(ExampleGroup) + ExampleGroupFactory.register(:special, @special_example_group) + @not_special_example_group = Class.new(ExampleGroup) + ExampleGroupFactory.register(:not_special, @not_special_example_group) + end + + after do + ExampleGroupFactory.reset + end + + it "should send reporter add_example_group" do + example_group.run + reporter.example_groups.should == [example_group] + end + + it "should run example on run" do + example_ran = false + example_group.it("should") {example_ran = true} + example_group.run + example_ran.should be_true + end + + it "should run before(:all) block only once" do + before_all_run_count_run_count = 0 + example_group.before(:all) {before_all_run_count_run_count += 1} + example_group.it("test") {true} + example_group.it("test2") {true} + example_group.run + before_all_run_count_run_count.should == 1 + end + + it "should run after(:all) block only once" do + after_all_run_count = 0 + example_group.after(:all) {after_all_run_count += 1} + example_group.it("test") {true} + example_group.it("test2") {true} + example_group.run + after_all_run_count.should == 1 + @reporter.rspec_verify + end + + it "after(:all) should have access to all instance variables defined in before(:all)" do + context_instance_value_in = "Hello there" + context_instance_value_out = "" + example_group.before(:all) { @instance_var = context_instance_value_in } + example_group.after(:all) { context_instance_value_out = @instance_var } + example_group.it("test") {true} + example_group.run + context_instance_value_in.should == context_instance_value_out + end + + it "should copy instance variables from before(:all)'s execution context into spec's execution context" do + context_instance_value_in = "Hello there" + context_instance_value_out = "" + example_group.before(:all) { @instance_var = context_instance_value_in } + example_group.it("test") {context_instance_value_out = @instance_var} + example_group.run + context_instance_value_in.should == context_instance_value_out + end + + it "should not add global before callbacks for untargetted example_group" do + fiddle = [] + + ExampleGroup.before(:all) { fiddle << "Example.before(:all)" } + ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" } + @special_example_group.before(:each) { fiddle << "Example.before(:each, :type => :special)" } + @special_example_group.prepend_before(:each) { fiddle << "Example.prepend_before(:each, :type => :special)" } + @special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" } + @special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" } + + example_group = Class.new(ExampleGroup) do + describe("I'm not special", :type => :not_special) + it "does nothing" + end + example_group.run + fiddle.should == [ + 'Example.prepend_before(:all)', + 'Example.before(:all)', + ] + end + + it "should add global before callbacks for targetted example_groups" do + fiddle = [] + + ExampleGroup.before(:all) { fiddle << "Example.before(:all)" } + ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" } + @special_example_group.before(:each) { fiddle << "special.before(:each, :type => :special)" } + @special_example_group.prepend_before(:each) { fiddle << "special.prepend_before(:each, :type => :special)" } + @special_example_group.before(:all) { fiddle << "special.before(:all, :type => :special)" } + @special_example_group.prepend_before(:all) { fiddle << "special.prepend_before(:all, :type => :special)" } + @special_example_group.append_before(:each) { fiddle << "special.append_before(:each, :type => :special)" } + + example_group = Class.new(@special_example_group).describe("I'm a special example_group") {} + example_group.it("test") {true} + example_group.run + fiddle.should == [ + 'Example.prepend_before(:all)', + 'Example.before(:all)', + 'special.prepend_before(:all, :type => :special)', + 'special.before(:all, :type => :special)', + 'special.prepend_before(:each, :type => :special)', + 'special.before(:each, :type => :special)', + 'special.append_before(:each, :type => :special)', + ] + end + + it "should order before callbacks from global to local" do + fiddle = [] + ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" } + ExampleGroup.before(:all) { fiddle << "Example.before(:all)" } + example_group.prepend_before(:all) { fiddle << "prepend_before(:all)" } + example_group.before(:all) { fiddle << "before(:all)" } + example_group.prepend_before(:each) { fiddle << "prepend_before(:each)" } + example_group.before(:each) { fiddle << "before(:each)" } + example_group.run + fiddle.should == [ + 'Example.prepend_before(:all)', + 'Example.before(:all)', + 'prepend_before(:all)', + 'before(:all)', + 'prepend_before(:each)', + 'before(:each)' + ] + end + + it "should order after callbacks from local to global" do + fiddle = [] + example_group.after(:each) { fiddle << "after(:each)" } + example_group.append_after(:each) { fiddle << "append_after(:each)" } + example_group.after(:all) { fiddle << "after(:all)" } + example_group.append_after(:all) { fiddle << "append_after(:all)" } + ExampleGroup.after(:all) { fiddle << "Example.after(:all)" } + ExampleGroup.append_after(:all) { fiddle << "Example.append_after(:all)" } + example_group.run + fiddle.should == [ + 'after(:each)', + 'append_after(:each)', + 'after(:all)', + 'append_after(:all)', + 'Example.after(:all)', + 'Example.append_after(:all)' + ] + end + + it "should have accessible instance methods from included module" do + mod1_method_called = false + mod1 = Module.new do + define_method :mod1_method do + mod1_method_called = true + end + end + + mod2_method_called = false + mod2 = Module.new do + define_method :mod2_method do + mod2_method_called = true + end + end + + example_group.include mod1, mod2 + + example_group.it("test") do + mod1_method + mod2_method + end + example_group.run + mod1_method_called.should be_true + mod2_method_called.should be_true + end + + it "should include targetted modules included using configuration" do + mod1 = Module.new + mod2 = Module.new + mod3 = Module.new + Spec::Runner.configuration.include(mod1, mod2) + Spec::Runner.configuration.include(mod3, :type => :not_special) + + example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do + it "does nothing" + end + example_group.run + + example_group.included_modules.should include(mod1) + example_group.included_modules.should include(mod2) + example_group.included_modules.should_not include(mod3) + end + + it "should include any predicate_matchers included using configuration" do + $included_predicate_matcher_found = false + Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something? + example_group = Class.new(ExampleGroup) do + describe('example') + it "should respond to do_something" do + $included_predicate_matcher_found = respond_to?(:do_something) + end + end + example_group.run + $included_predicate_matcher_found.should be(true) + end + + it "should use a mock framework set up in config" do + mod = Module.new do + class << self + def included(mod) + $included_module = mod + end + end + + def teardown_mocks_for_rspec + $torn_down = true + end + end + + begin + $included_module = nil + $torn_down = true + Spec::Runner.configuration.mock_with mod + + example_group = Class.new(ExampleGroup) do + describe('example') + it "does nothing" + end + example_group.run + + $included_module.should_not be_nil + $torn_down.should == true + ensure + Spec::Runner.configuration.mock_with :rspec + end + end + end + + describe ExampleGroup, "#run with pending example that has a failing assertion" do + before do + example_group.it("should be pending") do + pending("Example fails") {false.should be_true} + end + end + + it "should send example_pending to formatter" do + @formatter.should_receive(:example_pending).with("example", "should be pending", "Example fails") + example_group.run + end + end + + describe ExampleGroup, "#run with pending example that does not have a failing assertion" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + example_group.it("should be pending") do + pending("Example passes") {true.should be_true} + end + end + + it "should send example_pending to formatter" do + @formatter.should_receive(:example_pending).with("example", "should be pending", "Example passes") + example_group.run + end + end + + describe ExampleGroup, "#run when before(:all) fails" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + ExampleGroup.before(:all) { raise NonStandardError, "before(:all) failure" } + end + + it "should not run any example" do + spec_ran = false + example_group.it("test") {spec_ran = true} + example_group.run + spec_ran.should be_false + end + + it "should run ExampleGroup after(:all)" do + after_all_ran = false + ExampleGroup.after(:all) { after_all_ran = true } + example_group.run + after_all_ran.should be_true + end + + it "should run example_group after(:all)" do + after_all_ran = false + example_group.after(:all) { after_all_ran = true } + example_group.run + after_all_ran.should be_true + end + + it "should supply before(:all) as description" do + @reporter.should_receive(:failure) do |example, error| + example.description.should eql("before(:all)") + error.message.should eql("before(:all) failure") + end + + example_group.it("test") {true} + example_group.run + end + end + + describe ExampleGroup, "#run when before(:each) fails" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + ExampleGroup.before(:each) { raise NonStandardError } + end + + it "should run after(:all)" do + after_all_ran = false + ExampleGroup.after(:all) { after_all_ran = true } + example_group.run + after_all_ran.should be_true + end + end + + describe ExampleGroup, "#run when any example fails" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + example_group.it("should") { raise NonStandardError } + end + + it "should run after(:all)" do + after_all_ran = false + ExampleGroup.after(:all) { after_all_ran = true } + example_group.run + after_all_ran.should be_true + end + end + + describe ExampleGroup, "#run when first after(:each) block fails" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + class << example_group + attr_accessor :first_after_ran, :second_after_ran + end + example_group.first_after_ran = false + example_group.second_after_ran = false + + example_group.after(:each) do + self.class.second_after_ran = true + end + example_group.after(:each) do + self.class.first_after_ran = true + raise "first" + end + end + + it "should run second after(:each) block" do + reporter.should_receive(:example_finished) do |example, error| + example.should equal(example) + error.message.should eql("first") + end + example_group.run + example_group.first_after_ran.should be_true + example_group.second_after_ran.should be_true + end + end + + describe ExampleGroup, "#run when first before(:each) block fails" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + class << example_group + attr_accessor :first_before_ran, :second_before_ran + end + example_group.first_before_ran = false + example_group.second_before_ran = false + + example_group.before(:each) do + self.class.first_before_ran = true + raise "first" + end + example_group.before(:each) do + self.class.second_before_ran = true + end + end + + it "should not run second before(:each)" do + reporter.should_receive(:example_finished) do |name, error| + error.message.should eql("first") + end + example_group.run + example_group.first_before_ran.should be_true + example_group.second_before_ran.should be_false + end + end + + describe ExampleGroup, "#run when failure in after(:all)" do + it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example" + + before do + ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" } + end + + it "should return false" do + example_group.run.should be_false + end + end + end + + class ExampleSubclass < ExampleGroup + end + + describe ExampleGroup, "subclasses" do + after do + ExampleGroupFactory.reset + end + + it "should have access to the described_type" do + example_group = Class.new(ExampleSubclass) do + describe(Array) + end + example_group.send(:described_type).should == Array + end + + it "should concat descriptions when nested" do + example_group = Class.new(ExampleSubclass) do + describe(Array) + $nested_group = describe("when empty") do + end + end + $nested_group.description.to_s.should == "Array when empty" + end + end + + describe Enumerable do + def each(&block) + ["4", "2", "1"].each(&block) + end + + it "should be included in examples because it is a module" do + map{|e| e.to_i}.should == [4,2,1] + end + end + + describe "An", Enumerable, "as a second argument" do + def each(&block) + ["4", "2", "1"].each(&block) + end + + it "should be included in examples because it is a module" do + map{|e| e.to_i}.should == [4,2,1] + end + end + + describe Enumerable do + describe "as the parent of nested example groups" do + it "should be included in examples because it is a module" do + pending("need to make sure nested groups know the described type") do + map{|e| e.to_i}.should == [4,2,1] + end + end + end + end + + describe String do + it"should not be included in examples because it is not a module" do + lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb b/vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb new file mode 100644 index 0000000..ea0dfe0 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb @@ -0,0 +1,96 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Example + module ExampleMatcherSpecHelper + class MatchDescription + def initialize(description) + @description = description + end + + def matches?(matcher) + matcher.matches?(@description) + end + + def failure_message + "expected matcher.matches?(#{@description.inspect}) to return true, got false" + end + + def negative_failure_message + "expected matcher.matches?(#{@description.inspect}) to return false, got true" + end + end + def match_description(description) + MatchDescription.new(description) + end + end + + describe ExampleMatcher, "#matches?" do + include ExampleMatcherSpecHelper + + it "should match correct example_group and example" do + matcher = ExampleMatcher.new("example_group", "example") + matcher.should match_description("example_group example") + end + + it "should not match wrong example" do + matcher = ExampleMatcher.new("example_group", "other example") + matcher.should_not match_description("example_group example") + end + + it "should not match wrong example_group" do + matcher = ExampleMatcher.new("other example_group", "example") + matcher.should_not match_description("example_group example") + end + + it "should match example only" do + matcher = ExampleMatcher.new("example_group", "example") + matcher.should match_description("example") + end + + it "should match example_group only" do + matcher = ExampleMatcher.new("example_group", "example") + matcher.should match_description("example_group") + end + + it "should match example_group ending with before(:all)" do + matcher = ExampleMatcher.new("example_group", "example") + matcher.should match_description("example_group before(:all)") + end + + it "should escape regexp chars" do + matcher = ExampleMatcher.new("(con|text)", "[example]") + matcher.should_not match_description("con p") + end + + it "should match when example_group is modularized" do + matcher = ExampleMatcher.new("MyModule::MyClass", "example") + matcher.should match_description("MyClass example") + end + end + + describe ExampleMatcher, "#matches? normal case" do + it "matches when passed in example matches" do + matcher = ExampleMatcher.new("Foo", "bar") + matcher.matches?(["no match", "Foo bar"]).should == true + end + + it "does not match when no passed in examples match" do + matcher = ExampleMatcher.new("Foo", "bar") + matcher.matches?(["no match1", "no match2"]).should == false + end + end + + describe ExampleMatcher, "#matches? where description has '::' in it" do + it "matches when passed in example matches" do + matcher = ExampleMatcher.new("Foo::Bar", "baz") + matcher.matches?(["no match", "Foo::Bar baz"]).should == true + end + + it "does not match when no passed in examples match" do + matcher = ExampleMatcher.new("Foo::Bar", "baz") + matcher.matches?(["no match1", "no match2"]).should == false + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/example_methods_spec.rb b/vendor/gems/rspec/spec/spec/example/example_methods_spec.rb new file mode 100644 index 0000000..c185228 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_methods_spec.rb @@ -0,0 +1,104 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + module ModuleThatIsReopened + end + + module ExampleMethods + include ModuleThatIsReopened + end + + module ModuleThatIsReopened + def module_that_is_reopened_method + end + end + + describe ExampleMethods do + describe "with an included module that is reopened" do + it "should have repoened methods" do + method(:module_that_is_reopened_method).should_not be_nil + end + end + + describe "lifecycle" do + before do + @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) + @options.formatters << mock("formatter", :null_object => true) + @options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true) + @reporter = FakeReporter.new(@options) + @options.reporter = @reporter + + ExampleMethods.before_all_parts.should == [] + ExampleMethods.before_each_parts.should == [] + ExampleMethods.after_each_parts.should == [] + ExampleMethods.after_all_parts.should == [] + def ExampleMethods.count + @count ||= 0 + @count = @count + 1 + @count + end + end + + after do + ExampleMethods.instance_variable_set("@before_all_parts", []) + ExampleMethods.instance_variable_set("@before_each_parts", []) + ExampleMethods.instance_variable_set("@after_each_parts", []) + ExampleMethods.instance_variable_set("@after_all_parts", []) + end + + it "should pass before and after callbacks to all ExampleGroup subclasses" do + ExampleMethods.before(:all) do + ExampleMethods.count.should == 1 + end + + ExampleMethods.before(:each) do + ExampleMethods.count.should == 2 + end + + ExampleMethods.after(:each) do + ExampleMethods.count.should == 3 + end + + ExampleMethods.after(:all) do + ExampleMethods.count.should == 4 + end + + @example_group = Class.new(ExampleGroup) do + it "should use ExampleMethods callbacks" do + end + end + @example_group.run + ExampleMethods.count.should == 5 + end + + describe "run_with_description_capturing" do + before(:each) do + @example_group = Class.new(ExampleGroup) do end + @example = @example_group.new("foo", &(lambda { 2.should == 2 })) + @example.run_with_description_capturing + end + + it "should provide the generated description" do + @example.instance_eval { @_matcher_description }.should == "should == 2" + end + + it "should clear the global generated_description" do + Spec::Matchers.generated_description.should == nil + end + end + end + + describe "#implementation_backtrace" do + it "returns the backtrace of where the implementation was defined" do + example_group = Class.new(ExampleGroup) do + it "should use ExampleMethods callbacks" do + end + end + example = example_group.examples.first + example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-4}") + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/example/example_runner_spec.rb b/vendor/gems/rspec/spec/spec/example/example_runner_spec.rb new file mode 100644 index 0000000..1b5abdf --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_runner_spec.rb @@ -0,0 +1,194 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Example + # describe "Spec::Example::ExampleRunner", "#run", :shared => true do + # before(:each) do + # @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) + # @reporter = ::Spec::Runner::Reporter.new(@options) + # @options.reporter = @reporter + # @example_group_class = Class.new(ExampleGroup) do + # plugin_mock_framework + # describe("Some Examples") + # end + # end + # + # def create_runner(example_definition) + # example = @example_group_class.new(example_definition) + # runner = ExampleGroup.new(@options, example) + # runner.stub!(:verify_mocks) + # runner.stub!(:teardown_mocks) + # runner + # end + # end + # + # describe ExampleRunner, "#run with blank passing example" do + # it_should_behave_like "Spec::Example::ExampleRunner#run" + # + # before do + # @e = @example_group_class.it("example") {} + # @runner = create_runner(@e) + # end + # + # it "should send reporter example_started" do + # @reporter.should_receive(:example_started).with(equal(@e)) + # @runner.run + # end + # + # it "should report its name for dry run" do + # @options.dry_run = true + # @reporter.should_receive(:example_finished).with(equal(@e), nil) + # @runner.run + # end + # + # it "should report success" do + # @reporter.should_receive(:example_finished).with(equal(@e), nil) + # @runner.run + # end + # end + # + # describe ExampleRunner, "#run with a failing example" do + # predicate_matchers[:is_a] = [:is_a?] + # it_should_behave_like "Spec::Example::ExampleRunner#run" + # + # before do + # @e = @example_group_class.it("example") do + # (2+2).should == 5 + # end + # @runner = create_runner(@e) + # end + # + # it "should report failure due to failure" do + # @reporter.should_receive(:example_finished).with( + # equal(@e), + # is_a(Spec::Expectations::ExpectationNotMetError) + # ) + # @runner.run + # end + # end + # + # describe ExampleRunner, "#run with a erroring example" do + # it_should_behave_like "Spec::Example::ExampleRunner#run" + # + # before do + # @error = error = NonStandardError.new("in body") + # @example_definition = @example_group_class.it("example") do + # raise(error) + # end + # @runner = create_runner(@example_definition) + # end + # + # it "should report failure due to error" do + # @reporter.should_receive(:example_finished).with( + # equal(@example_definition), + # @error + # ) + # @runner.run + # end + # + # it "should run after_each block" do + # @example_group_class.after(:each) do + # raise("in after_each") + # end + # @reporter.should_receive(:example_finished) do |example_definition, error| + # example_definition.should equal(@example_definition) + # error.message.should eql("in body") + # end + # @runner.run + # end + # end + # + # describe ExampleRunner, "#run where after_each fails" do + # it_should_behave_like "Spec::Example::ExampleRunner#run" + # + # before do + # @example_ran = example_ran = false + # @example_definition = @example_group_class.it("should not run") do + # example_ran = true + # end + # @runner = create_runner(@example_definition) + # @example_group_class.after(:each) { raise(NonStandardError.new("in after_each")) } + # end + # + # it "should report failure location when in after_each" do + # @reporter.should_receive(:example_finished) do |example_definition, error| + # example_definition.should equal(@example_definition) + # error.message.should eql("in after_each") + # end + # @runner.run + # end + # end + # + # describe ExampleRunner, "#run with use cases" do + # predicate_matchers[:is_a] = [:is_a?] + # it_should_behave_like "Spec::Example::ExampleRunner#run" + # + # it "should report NO NAME when told to use generated description with --dry-run" do + # @options.dry_run = true + # example_definition = @example_group_class.it() do + # 5.should == 5 + # end + # runner = create_runner(example_definition) + # + # @reporter.should_receive(:example_finished) do |example_definition, error| + # example_definition.description.should == "NO NAME (Because of --dry-run)" + # end + # runner.run + # end + # + # it "should report given name if present with --dry-run" do + # @options.dry_run = true + # example_definition = @example_group_class.it("example name") do + # 5.should == 5 + # end + # runner = create_runner(example_definition) + # + # @reporter.should_receive(:example_finished) do |example_definition, error| + # example_definition.description.should == "example name" + # end + # runner.run + # end + # + # it "should report NO NAME when told to use generated description with no expectations" do + # example_definition = @example_group_class.it() {} + # runner = create_runner(example_definition) + # @reporter.should_receive(:example_finished) do |example, error| + # example.description.should == "NO NAME (Because there were no expectations)" + # end + # runner.run + # end + # + # it "should report NO NAME when told to use generated description and matcher fails" do + # example_definition = @example_group_class.it() do + # 5.should "" # Has no matches? method.. + # end + # runner = create_runner(example_definition) + # + # @reporter.should_receive(:example_finished) do |example, error| + # example_definition.description.should == "NO NAME (Because of Error raised in matcher)" + # end + # runner.run + # end + # + # it "should report generated description when told to and it is available" do + # example_definition = @example_group_class.it() { + # 5.should == 5 + # } + # runner = create_runner(example_definition) + # + # @reporter.should_receive(:example_finished) do |example_definition, error| + # example_definition.description.should == "should == 5" + # end + # runner.run + # end + # + # it "should unregister description_generated callback (lest a memory leak should build up)" do + # example_definition = @example_group_class.it("something") + # runner = create_runner(example_definition) + # + # Spec::Matchers.should_receive(:example_finished) + # runner.run + # end + # end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/example_spec.rb b/vendor/gems/rspec/spec/spec/example/example_spec.rb new file mode 100644 index 0000000..c8125b4 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/example_spec.rb @@ -0,0 +1,53 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + # describe Example do + # before(:each) do + # @example = Example.new "example" do + # foo + # end + # end + # + # it "should tell you its docstring" do + # @example.description.should == "example" + # end + # + # it "should execute its block in the context provided" do + # context = Class.new do + # def foo + # "foo" + # end + # end.new + # @example.run_in(context).should == "foo" + # end + # end + # + # describe Example, "#description" do + # it "should default to NO NAME when not passed anything when there are no matchers" do + # example = Example.new {} + # example.run_in(Object.new) + # example.description.should == "NO NAME" + # end + # + # it "should default to NO NAME description (Because of --dry-run) when passed nil and there are no matchers" do + # example = Example.new(nil) {} + # example.run_in(Object.new) + # example.description.should == "NO NAME" + # end + # + # it "should allow description to be overridden" do + # example = Example.new("Test description") + # example.description.should == "Test description" + # end + # + # it "should use description generated from matcher when there is no passed in description" do + # example = Example.new(nil) do + # 1.should == 1 + # end + # example.run_in(Object.new) + # example.description.should == "should == 1" + # end + # end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb new file mode 100644 index 0000000..35e8a98 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb @@ -0,0 +1,59 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + describe 'Nested Example Groups' do + parent = self + + def count + @count ||= 0 + @count = @count + 1 + @count + end + + before(:all) do + count.should == 1 + end + + before(:all) do + count.should == 2 + end + + before(:each) do + count.should == 3 + end + + before(:each) do + count.should == 4 + end + + it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do + count.should == 5 + end + + after(:each) do + count.should == 7 + end + + after(:each) do + count.should == 6 + end + + after(:all) do + count.should == 9 + end + + after(:all) do + count.should == 8 + end + + describe 'nested example group' do + self.superclass.should == parent + + it "should run all before and after callbacks" do + count.should == 5 + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/pending_module_spec.rb b/vendor/gems/rspec/spec/spec/example/pending_module_spec.rb new file mode 100644 index 0000000..c3ab012 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/pending_module_spec.rb @@ -0,0 +1,31 @@ +module Spec + module Example + describe Pending do + + it 'should raise an ExamplePendingError if no block is supplied' do + lambda { + include Pending + pending "TODO" + }.should raise_error(ExamplePendingError, /TODO/) + end + + it 'should raise an ExamplePendingError if a supplied block fails as expected' do + lambda { + include Pending + pending "TODO" do + raise "oops" + end + }.should raise_error(ExamplePendingError, /TODO/) + end + + it 'should raise a PendingExampleFixedError if a supplied block starts working' do + lambda { + include Pending + pending "TODO" do + # success! + end + }.should raise_error(PendingExampleFixedError, /TODO/) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb b/vendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb new file mode 100755 index 0000000..7c4638b --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb @@ -0,0 +1,21 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + class Fish + def can_swim?(distance_in_yards) + distance_in_yards < 1000 + end + end + + describe "predicate_matcher[method_on_object] = matcher_method" do + predicate_matchers[:swim] = :can_swim? + it "should match matcher_method if method_on_object returns true" do + swim(100).matches?(Fish.new).should be_true + end + it "should not match matcher_method if method_on_object returns false" do + swim(10000).matches?(Fish.new).should be_false + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb new file mode 100644 index 0000000..803536a --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb @@ -0,0 +1,265 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + describe ExampleGroup, "with :shared => true" do + it_should_behave_like "sandboxed rspec_options" + attr_reader :formatter, :example_group + before(:each) do + @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true) + options.formatters << formatter + @example_group = Class.new(ExampleGroup).describe("example_group") + class << example_group + public :include + end + end + + after(:each) do + @formatter.rspec_verify + @example_group = nil + $shared_example_groups.clear unless $shared_example_groups.nil? + end + + def make_shared_example_group(name, opts=nil, &block) + example_group = SharedExampleGroup.new(name, :shared => true, &block) + SharedExampleGroup.add_shared_example_group(example_group) + example_group + end + + def non_shared_example_group() + @non_shared_example_group ||= Class.new(ExampleGroup).describe("example_group") + end + + it "should accept an optional options hash" do + lambda { Class.new(ExampleGroup).describe("context") }.should_not raise_error(Exception) + lambda { Class.new(ExampleGroup).describe("context", :shared => true) }.should_not raise_error(Exception) + end + + it "should return all shared example_groups" do + b1 = make_shared_example_group("b1", :shared => true) {} + b2 = make_shared_example_group("b2", :shared => true) {} + + b1.should_not be(nil) + b2.should_not be(nil) + + SharedExampleGroup.find_shared_example_group("b1").should equal(b1) + SharedExampleGroup.find_shared_example_group("b2").should equal(b2) + end + + it "should register as shared example_group" do + example_group = make_shared_example_group("example_group") {} + SharedExampleGroup.shared_example_groups.should include(example_group) + end + + it "should not be shared when not configured as shared" do + example_group = non_shared_example_group + SharedExampleGroup.shared_example_groups.should_not include(example_group) + end + + it "should complain when adding a second shared example_group with the same description" do + describe "shared example_group", :shared => true do + end + lambda do + describe "shared example_group", :shared => true do + end + end.should raise_error(ArgumentError) + end + + it "should NOT complain when adding the same shared example_group instance again" do + shared_example_group = Class.new(ExampleGroup).describe("shared example_group", :shared => true) + SharedExampleGroup.add_shared_example_group(shared_example_group) + SharedExampleGroup.add_shared_example_group(shared_example_group) + end + + it "should NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do + lambda do + 2.times do + describe "shared example_group which gets loaded twice", :shared => true do + end + end + end.should_not raise_error(ArgumentError) + end + + it "should NOT complain when adding the same shared example_group in same file with different absolute path" do + shared_example_group_1 = Class.new(ExampleGroup).describe( + "shared example_group", + :shared => true, + :spec_path => "/my/spec/a/../shared.rb" + ) + shared_example_group_2 = Class.new(ExampleGroup).describe( + "shared example_group", + :shared => true, + :spec_path => "/my/spec/b/../shared.rb" + ) + + SharedExampleGroup.add_shared_example_group(shared_example_group_1) + SharedExampleGroup.add_shared_example_group(shared_example_group_2) + end + + it "should complain when adding a different shared example_group with the same name in a different file with the same basename" do + shared_example_group_1 = Class.new(ExampleGroup).describe( + "shared example_group", + :shared => true, + :spec_path => "/my/spec/a/shared.rb" + ) + shared_example_group_2 = Class.new(ExampleGroup).describe( + "shared example_group", + :shared => true, + :spec_path => "/my/spec/b/shared.rb" + ) + + SharedExampleGroup.add_shared_example_group(shared_example_group_1) + lambda do + SharedExampleGroup.add_shared_example_group(shared_example_group_2) + end.should raise_error(ArgumentError, /already exists/) + end + + it "should add examples to current example_group using it_should_behave_like" do + shared_example_group = make_shared_example_group("shared example_group") do + it("shared example") {} + it("shared example 2") {} + end + + example_group.it("example") {} + example_group.number_of_examples.should == 1 + example_group.it_should_behave_like("shared example_group") + example_group.number_of_examples.should == 3 + end + + it "should add examples to current example_group using include" do + shared_example_group = describe "all things", :shared => true do + it "should do stuff" do end + end + + example_group = describe "one thing" do + include shared_example_group + end + + example_group.number_of_examples.should == 1 + end + + it "should add examples to current example_group using it_should_behave_like with a module" do + AllThings = describe "all things", :shared => true do + it "should do stuff" do end + end + + example_group = describe "one thing" do + it_should_behave_like AllThings + end + + example_group.number_of_examples.should == 1 + end + + it "should run shared examples" do + shared_example_ran = false + shared_example_group = make_shared_example_group("shared example_group") do + it("shared example") { shared_example_ran = true } + end + + example_ran = false + + example_group.it_should_behave_like("shared example_group") + example_group.it("example") {example_ran = true} + example_group.run + example_ran.should be_true + shared_example_ran.should be_true + end + + it "should run setup and teardown from shared example_group" do + shared_setup_ran = false + shared_teardown_ran = false + shared_example_group = make_shared_example_group("shared example_group") do + before { shared_setup_ran = true } + after { shared_teardown_ran = true } + it("shared example") { shared_example_ran = true } + end + + example_ran = false + + example_group.it_should_behave_like("shared example_group") + example_group.it("example") {example_ran = true} + example_group.run + example_ran.should be_true + shared_setup_ran.should be_true + shared_teardown_ran.should be_true + end + + it "should run before(:all) and after(:all) only once from shared example_group" do + shared_before_all_run_count = 0 + shared_after_all_run_count = 0 + shared_example_group = make_shared_example_group("shared example_group") do + before(:all) { shared_before_all_run_count += 1} + after(:all) { shared_after_all_run_count += 1} + it("shared example") { shared_example_ran = true } + end + + example_ran = false + + example_group.it_should_behave_like("shared example_group") + example_group.it("example") {example_ran = true} + example_group.run + example_ran.should be_true + shared_before_all_run_count.should == 1 + shared_after_all_run_count.should == 1 + end + + it "should include modules, included into shared example_group, into current example_group" do + @formatter.should_receive(:add_example_group).with(any_args) + + shared_example_group = make_shared_example_group("shared example_group") do + it("shared example") { shared_example_ran = true } + end + + mod1_method_called = false + mod1 = Module.new do + define_method :mod1_method do + mod1_method_called = true + end + end + + mod2_method_called = false + mod2 = Module.new do + define_method :mod2_method do + mod2_method_called = true + end + end + + shared_example_group.include mod2 + + example_group.it_should_behave_like("shared example_group") + example_group.include mod1 + + example_group.it("test") do + mod1_method + mod2_method + end + example_group.run + mod1_method_called.should be_true + mod2_method_called.should be_true + end + + it "should make methods defined in the shared example_group available in consuming example_group" do + shared_example_group = make_shared_example_group("shared example_group xyz") do + def a_shared_helper_method + "this got defined in a shared example_group" + end + end + example_group.it_should_behave_like("shared example_group xyz") + success = false + example_group.it("should access a_shared_helper_method") do + a_shared_helper_method + success = true + end + example_group.run + success.should be_true + end + + it "should raise when named shared example_group can not be found" do + lambda { + example_group.it_should_behave_like("non-existent shared example group") + violated + }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found") + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb new file mode 100644 index 0000000..888f2ce --- /dev/null +++ b/vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb @@ -0,0 +1,25 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Example + class GrandParentExampleGroup < Spec::Example::ExampleGroup + describe "Grandparent ExampleGroup" + end + + class ParentExampleGroup < GrandParentExampleGroup + describe "Parent ExampleGroup" + it "should bar" do + end + end + + class ChildExampleGroup < ParentExampleGroup + describe "Child ExampleGroup" + it "should bam" do + end + end + + describe ChildExampleGroup do + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb b/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb new file mode 100644 index 0000000..ea72084 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb @@ -0,0 +1,109 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' + +module Spec + module Fixtures + class Animal + def initialize(name,species) + @name,@species = name,species + end + + def inspect + <<-EOA +<Animal + name=#{@name}, + species=#{@species} +> + EOA + end + end + end +end + +describe "Diff" do + before(:each) do + @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new) + @differ = Spec::Expectations::Differs::Default.new(@options) + end + + it "should output unified diff of two strings" do + expected="foo\nbar\nzap\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nline\n" + actual="foo\nzap\nbar\nthis\nis\nsoo\nvery\nvery\nequal\ninsert\na\nanother\nline\n" + expected_diff="\n\n@@ -1,6 +1,6 @@\n foo\n-bar\n zap\n+bar\n this\n is\n soo\n@@ -9,5 +9,6 @@\n equal\n insert\n a\n+another\n line\n" + diff = @differ.diff_as_string(expected, actual) + diff.should eql(expected_diff) + end + + it "should output unified diff message of two arrays" do + expected = [ :foo, 'bar', :baz, 'quux', :metasyntactic, 'variable', :delta, 'charlie', :width, 'quite wide' ] + actual = [ :foo, 'bar', :baz, 'quux', :metasyntactic, 'variable', :delta, 'tango' , :width, 'very wide' ] + + expected_diff = <<'EOD' + + +@@ -5,7 +5,7 @@ + :metasyntactic, + "variable", + :delta, +- "charlie", ++ "tango", + :width, +- "quite wide"] ++ "very wide"] +EOD + + + diff = @differ.diff_as_object(expected,actual) + diff.should == expected_diff + end + + it "should output unified diff message of two objects" do + expected = Spec::Fixtures::Animal.new "bob", "giraffe" + actual = Spec::Fixtures::Animal.new "bob", "tortoise" + + expected_diff = <<'EOD' + +@@ -1,5 +1,5 @@ + <Animal + name=bob, +- species=giraffe ++ species=tortoise + > +EOD + + diff = @differ.diff_as_object(expected,actual) + diff.should == expected_diff + end + +end + + +describe "Diff in context format" do + before(:each) do + @options = Spec::Runner::Options.new(StringIO.new, StringIO.new) + @options.diff_format = :context + @differ = Spec::Expectations::Differs::Default.new(@options) + end + + it "should output unified diff message of two objects" do + expected = Spec::Fixtures::Animal.new "bob", "giraffe" + actual = Spec::Fixtures::Animal.new "bob", "tortoise" + + expected_diff = <<'EOD' + +*************** +*** 1,5 **** + <Animal + name=bob, +! species=giraffe + > +--- 1,5 ---- + <Animal + name=bob, +! species=tortoise + > +EOD + + diff = @differ.diff_as_object(expected,actual) + diff.should == expected_diff + end +end diff --git a/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb b/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb new file mode 100644 index 0000000..0d9335b --- /dev/null +++ b/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb @@ -0,0 +1,107 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' + +describe Object, "#should" do + before(:each) do + @target = "target" + @matcher = mock("matcher") + @matcher.stub!(:matches?).and_return(true) + @matcher.stub!(:failure_message) + end + + it "should accept and interact with a matcher" do + @matcher.should_receive(:matches?).with(@target).and_return(true) + @target.should @matcher + end + + it "should ask for a failure_message when matches? returns false" do + @matcher.should_receive(:matches?).with(@target).and_return(false) + @matcher.should_receive(:failure_message).and_return("the failure message") + lambda { + @target.should @matcher + }.should fail_with("the failure message") + end + + it "should raise error if it receives false directly" do + lambda { + @target.should false + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives false (evaluated)" do + lambda { + @target.should eql?("foo") + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives true" do + lambda { + @target.should true + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives nil" do + lambda { + @target.should nil + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives no argument and it is not used as a left side of an operator" do + pending "Is it even possible to catch this?" + lambda { + @target.should + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end +end + +describe Object, "#should_not" do + before(:each) do + @target = "target" + @matcher = mock("matcher") + end + + it "should accept and interact with a matcher" do + @matcher.should_receive(:matches?).with(@target).and_return(false) + @matcher.stub!(:negative_failure_message) + + @target.should_not @matcher + end + + it "should ask for a negative_failure_message when matches? returns true" do + @matcher.should_receive(:matches?).with(@target).and_return(true) + @matcher.should_receive(:negative_failure_message).and_return("the negative failure message") + lambda { + @target.should_not @matcher + }.should fail_with("the negative failure message") + end + + it "should raise error if it receives false directly" do + lambda { + @target.should_not false + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives false (evaluated)" do + lambda { + @target.should_not eql?("foo") + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives true" do + lambda { + @target.should_not true + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives nil" do + lambda { + @target.should_not nil + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end + + it "should raise error if it receives no argument and it is not used as a left side of an operator" do + pending "Is it even possible to catch this?" + lambda { + @target.should_not + }.should raise_error(Spec::Expectations::InvalidMatcherError) + end +end diff --git a/vendor/gems/rspec/spec/spec/expectations/fail_with_spec.rb b/vendor/gems/rspec/spec/spec/expectations/fail_with_spec.rb new file mode 100644 index 0000000..4c369ce --- /dev/null +++ b/vendor/gems/rspec/spec/spec/expectations/fail_with_spec.rb @@ -0,0 +1,71 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe Spec::Expectations, "#fail_with with no diff" do + before(:each) do + @old_differ = Spec::Expectations.differ + Spec::Expectations.differ = nil + end + + it "should handle just a message" do + lambda { + Spec::Expectations.fail_with "the message" + }.should fail_with("the message") + end + + it "should handle an Array" do + lambda { + Spec::Expectations.fail_with ["the message","expected","actual"] + }.should fail_with("the message") + end + + after(:each) do + Spec::Expectations.differ = @old_differ + end +end + +describe Spec::Expectations, "#fail_with with diff" do + before(:each) do + @old_differ = Spec::Expectations.differ + @differ = mock("differ") + Spec::Expectations.differ = @differ + end + + it "should not call differ if no expected/actual" do + lambda { + Spec::Expectations.fail_with "the message" + }.should fail_with("the message") + end + + it "should call differ if expected/actual are presented separately" do + @differ.should_receive(:diff_as_string).and_return("diff") + lambda { + Spec::Expectations.fail_with "the message", "expected", "actual" + }.should fail_with("the message\nDiff:diff") + end + + it "should call differ if expected/actual are not strings" do + @differ.should_receive(:diff_as_object).and_return("diff") + lambda { + Spec::Expectations.fail_with "the message", :expected, :actual + }.should fail_with("the message\nDiff:diff") + end + + it "should not call differ if expected or actual are procs" do + @differ.should_not_receive(:diff_as_string) + @differ.should_not_receive(:diff_as_object) + lambda { + Spec::Expectations.fail_with "the message", lambda {}, lambda {} + }.should fail_with("the message") + end + + it "should call differ if expected/actual are presented in an Array with message" do + @differ.should_receive(:diff_as_string).with("actual","expected").and_return("diff") + lambda { + Spec::Expectations.fail_with(["the message", "expected", "actual"]) + }.should fail_with(/the message\nDiff:diff/) + end + + after(:each) do + Spec::Expectations.differ = @old_differ + end +end diff --git a/vendor/gems/rspec/spec/spec/extensions/main_spec.rb b/vendor/gems/rspec/spec/spec/extensions/main_spec.rb new file mode 100644 index 0000000..aabb616 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/extensions/main_spec.rb @@ -0,0 +1,76 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Extensions + describe Main do + it_should_behave_like "sandboxed rspec_options" + before(:each) do + @main = Class.new do; include Main; end + end + + after(:each) do + $rspec_story_steps = @original_rspec_story_steps + end + + it "should create an Options object" do + @main.send(:rspec_options).should be_instance_of(Spec::Runner::Options) + @main.send(:rspec_options).should === $rspec_options + end + + specify {@main.should respond_to(:describe)} + specify {@main.should respond_to(:context)} + + it "should raise when no block given to describe" do + lambda { @main.describe "foo" }.should raise_error(ArgumentError) + end + + it "should raise when no description given to describe" do + lambda { @main.describe do; end }.should raise_error(ArgumentError) + end + + it "should registered ExampleGroups by default" do + example_group = @main.describe("The ExampleGroup") do end + rspec_options.example_groups.should include(example_group) + end + + it "should not run unregistered ExampleGroups" do + example_group = @main.describe("The ExampleGroup") do + unregister + end + + rspec_options.example_groups.should_not include(example_group) + end + + it "should create a shared ExampleGroup with share_examples_for" do + group = @main.share_examples_for "all things" do end + group.should be_an_instance_of(Spec::Example::SharedExampleGroup) + end + + describe "#share_as" do + before(:each) do + $share_as_examples_example_module_number ||= 1 + $share_as_examples_example_module_number += 1 + t = Time.new.to_i + @group_name = "Group#{$share_as_examples_example_module_number}" + end + + it "should create a shared ExampleGroup" do + group = @main.share_as @group_name do end + group.should be_an_instance_of(Spec::Example::SharedExampleGroup) + end + + it "should create a constant that points to a Module" do + group = @main.share_as @group_name do end + Object.const_get(@group_name).should equal(group) + end + + it "should bark if you pass it something not-constantizable" do + lambda do + @group = @main.share_as "Non Constant" do end + end.should raise_error(NameError, /The first argument to share_as must be a legal name for a constant/) + end + + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb new file mode 100644 index 0000000..d6f5564 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb @@ -0,0 +1,10 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require 'test/unit' +require 'spec' + +describe "example group with failures" do + it "should fail" do + false.should be_true + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb new file mode 100644 index 0000000..ccd2488 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb @@ -0,0 +1,10 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require 'test/unit' +require 'spec' + +describe "example group with passing examples" do + it "should pass" do + true.should be_true + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb new file mode 100644 index 0000000..71427db --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb @@ -0,0 +1,10 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require 'test/unit' +require 'spec' + +describe "example group with errors" do + it "should raise errors" do + raise "error raised in example group with errors" + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb new file mode 100644 index 0000000..3fb6515 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb @@ -0,0 +1,10 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require 'test/unit' +require 'spec' + +class TestCaseThatFails < Test::Unit::TestCase + def test_that_fails + false.should be_true + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb new file mode 100644 index 0000000..69239c0 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb @@ -0,0 +1,10 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require 'test/unit' +require 'spec' + +class TestCaseThatPasses < Test::Unit::TestCase + def test_that_passes + true.should be_true + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb new file mode 100644 index 0000000..35dcb6b --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb @@ -0,0 +1,10 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require 'test/unit' +require 'spec' + +class TestCaseWithErrors < Test::Unit::TestCase + def test_with_error + raise "error raised in TestCaseWithErrors" + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb new file mode 100644 index 0000000..0c2167a --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb @@ -0,0 +1,38 @@ +rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib" +$:.unshift rspec_lib unless $:.include?(rspec_lib) +require "test/unit" +require "spec" + +module Test + module Unit + describe TestSuiteAdapter do + def create_adapter(group) + TestSuiteAdapter.new(group) + end + + describe "#size" do + it "should return the number of examples in the example group" do + group = Class.new(Spec::ExampleGroup) do + describe("some examples") + it("bar") {} + it("baz") {} + end + adapter = create_adapter(group) + adapter.size.should == 2 + end + end + + describe "#delete" do + it "should do nothing" do + group = Class.new(Spec::ExampleGroup) do + describe("Some Examples") + it("does something") {} + end + adapter = create_adapter(group) + adapter.delete(adapter.examples.first) + adapter.should be_empty + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb new file mode 100644 index 0000000..8a1e130 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb @@ -0,0 +1,45 @@ +require File.dirname(__FILE__) + '/test_unit_spec_helper' + +describe "ExampleGroup with test/unit/interop" do + include TestUnitSpecHelper + + before(:each) do + @dir = File.dirname(__FILE__) + "/resources" + end + + describe "with passing examples" do + it "should output 0 failures" do + output = ruby("#{@dir}/spec_that_passes.rb") + output.should include("1 example, 0 failures") + end + + it "should return an exit code of 0" do + ruby("#{@dir}/spec_that_passes.rb") + $?.should == 0 + end + end + + describe "with failing examples" do + it "should output 1 failure" do + output = ruby("#{@dir}/spec_that_fails.rb") + output.should include("1 example, 1 failure") + end + + it "should return an exit code of 256" do + ruby("#{@dir}/spec_that_fails.rb") + $?.should == 256 + end + end + + describe "with example that raises an error" do + it "should output 1 failure" do + output = ruby("#{@dir}/spec_with_errors.rb") + output.should include("1 example, 1 failure") + end + + it "should return an exit code of 256" do + ruby("#{@dir}/spec_with_errors.rb") + $?.should == 256 + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb new file mode 100644 index 0000000..04d5d27 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb @@ -0,0 +1,14 @@ +require File.dirname(__FILE__) + '/../../../../spec_helper' +require File.dirname(__FILE__) + '/../../../../ruby_forker' + +module TestUnitSpecHelper + include RubyForker + + def run_script(file_name) + output = ruby(file_name) + if !$?.success? || output.include?("FAILED") || output.include?("Error") + raise output + end + output + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb new file mode 100644 index 0000000..f40111a --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb @@ -0,0 +1,45 @@ +require File.dirname(__FILE__) + '/test_unit_spec_helper' + +describe "Test::Unit::TestCase" do + include TestUnitSpecHelper + + before(:each) do + @dir = File.dirname(__FILE__) + "/resources" + end + + describe "with passing test case" do + it "should output 0 failures" do + output = ruby("#{@dir}/test_case_that_passes.rb") + output.should include("1 example, 0 failures") + end + + it "should return an exit code of 0" do + ruby("#{@dir}/test_case_that_passes.rb") + $?.should == 0 + end + end + + describe "with failing test case" do + it "should output 1 failure" do + output = ruby("#{@dir}/test_case_that_fails.rb") + output.should include("1 example, 1 failure") + end + + it "should return an exit code of 256" do + ruby("#{@dir}/test_case_that_fails.rb") + $?.should == 256 + end + end + + describe "with test case that raises an error" do + it "should output 1 failure" do + output = ruby("#{@dir}/test_case_with_errors.rb") + output.should include("1 example, 1 failure") + end + + it "should return an exit code of 256" do + ruby("#{@dir}/test_case_with_errors.rb") + $?.should == 256 + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb new file mode 100644 index 0000000..722126b --- /dev/null +++ b/vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb @@ -0,0 +1,9 @@ +require File.dirname(__FILE__) + '/test_unit_spec_helper' + +describe "TestSuiteAdapter" do + include TestUnitSpecHelper + it "should pass" do + dir = File.dirname(__FILE__) + run_script "#{dir}/resources/testsuite_adapter_spec_with_test_unit.rb" + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/matchers/be_close_spec.rb b/vendor/gems/rspec/spec/spec/matchers/be_close_spec.rb new file mode 100644 index 0000000..d8452d4 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/be_close_spec.rb @@ -0,0 +1,39 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' +module Spec + module Matchers + describe BeClose do + it "should match when value == target" do + BeClose.new(5.0, 0.5).matches?(5.0).should be_true + end + it "should match when value < (target + delta)" do + BeClose.new(5.0, 0.5).matches?(5.49).should be_true + end + it "should match when value > (target - delta)" do + BeClose.new(5.0, 0.5).matches?(4.51).should be_true + end + it "should not match when value == (target - delta)" do + BeClose.new(5.0, 0.5).matches?(4.5).should be_false + end + it "should not match when value < (target - delta)" do + BeClose.new(5.0, 0.5).matches?(4.49).should be_false + end + it "should not match when value == (target + delta)" do + BeClose.new(5.0, 0.5).matches?(5.5).should be_false + end + it "should not match when value > (target + delta)" do + BeClose.new(5.0, 0.5).matches?(5.51).should be_false + end + it "should provide a useful failure message" do + #given + matcher = BeClose.new(5.0, 0.5) + #when + matcher.matches?(5.51) + #then + matcher.failure_message.should == "expected 5.0 +/- (< 0.5), got 5.51" + end + it "should describe itself" do + BeClose.new(5.0, 0.5).description.should == "be close to 5.0 (within +- 0.5)" + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/be_spec.rb b/vendor/gems/rspec/spec/spec/matchers/be_spec.rb new file mode 100644 index 0000000..d40036c --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/be_spec.rb @@ -0,0 +1,224 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should be_predicate" do + it "should pass when actual returns true for :predicate?" do + actual = stub("actual", :happy? => true) + actual.should be_happy + end + + it "should pass when actual returns true for :predicates? (present tense)" do + actual = stub("actual", :exists? => true) + actual.should be_exist + end + + it "should fail when actual returns false for :predicate?" do + actual = stub("actual", :happy? => false) + lambda { + actual.should be_happy + }.should fail_with("expected happy? to return true, got false") + end + + it "should fail when actual does not respond to :predicate?" do + lambda { + Object.new.should be_happy + }.should raise_error(NameError) + end +end + +describe "should_not be_predicate" do + it "should pass when actual returns false for :sym?" do + actual = stub("actual", :happy? => false) + actual.should_not be_happy + end + + it "should fail when actual returns true for :sym?" do + actual = stub("actual", :happy? => true) + lambda { + actual.should_not be_happy + }.should fail_with("expected happy? to return false, got true") + end + + it "should fail when actual does not respond to :sym?" do + lambda { + Object.new.should_not be_happy + }.should raise_error(NameError) + end +end + +describe "should be_predicate(*args)" do + it "should pass when actual returns true for :predicate?(*args)" do + actual = mock("actual") + actual.should_receive(:older_than?).with(3).and_return(true) + actual.should be_older_than(3) + end + + it "should fail when actual returns false for :predicate?(*args)" do + actual = mock("actual") + actual.should_receive(:older_than?).with(3).and_return(false) + lambda { + actual.should be_older_than(3) + }.should fail_with("expected older_than?(3) to return true, got false") + end + + it "should fail when actual does not respond to :predicate?" do + lambda { + Object.new.should be_older_than(3) + }.should raise_error(NameError) + end +end + +describe "should_not be_predicate(*args)" do + it "should pass when actual returns false for :predicate?(*args)" do + actual = mock("actual") + actual.should_receive(:older_than?).with(3).and_return(false) + actual.should_not be_older_than(3) + end + + it "should fail when actual returns true for :predicate?(*args)" do + actual = mock("actual") + actual.should_receive(:older_than?).with(3).and_return(true) + lambda { + actual.should_not be_older_than(3) + }.should fail_with("expected older_than?(3) to return false, got true") + end + + it "should fail when actual does not respond to :predicate?" do + lambda { + Object.new.should_not be_older_than(3) + }.should raise_error(NameError) + end +end + +describe "should be_true" do + it "should pass when actual equal(true)" do + true.should be_true + end + + it "should fail when actual equal(false)" do + lambda { + false.should be_true + }.should fail_with("expected true, got false") + end +end + +describe "should be_false" do + it "should pass when actual equal(false)" do + false.should be_false + end + + it "should fail when actual equal(true)" do + lambda { + true.should be_false + }.should fail_with("expected false, got true") + end +end + +describe "should be_nil" do + it "should pass when actual is nil" do + nil.should be_nil + end + + it "should fail when actual is not nil" do + lambda { + :not_nil.should be_nil + }.should fail_with("expected nil, got :not_nil") + end +end + +describe "should_not be_nil" do + it "should pass when actual is not nil" do + :not_nil.should_not be_nil + end + + it "should fail when actual is nil" do + lambda { + nil.should_not be_nil + }.should fail_with("expected not nil, got nil") + end +end + +describe "should be <" do + it "should pass when < operator returns true" do + 3.should be < 4 + end + + it "should fail when < operator returns false" do + lambda { 3.should be < 3 }.should fail_with("expected < 3, got 3") + end +end + +describe "should be <=" do + it "should pass when <= operator returns true" do + 3.should be <= 4 + 4.should be <= 4 + end + + it "should fail when <= operator returns false" do + lambda { 3.should be <= 2 }.should fail_with("expected <= 2, got 3") + end +end + +describe "should be >=" do + it "should pass when >= operator returns true" do + 4.should be >= 4 + 5.should be >= 4 + end + + it "should fail when >= operator returns false" do + lambda { 3.should be >= 4 }.should fail_with("expected >= 4, got 3") + end +end + +describe "should be >" do + it "should pass when > operator returns true" do + 5.should be > 4 + end + + it "should fail when > operator returns false" do + lambda { 3.should be > 4 }.should fail_with("expected > 4, got 3") + end +end + +describe "should be ==" do + it "should pass when == operator returns true" do + 5.should be == 5 + end + + it "should fail when == operator returns false" do + lambda { 3.should be == 4 }.should fail_with("expected == 4, got 3") + end +end + +describe "should be ===" do + it "should pass when === operator returns true" do + Hash.should be === Hash.new + end + + it "should fail when === operator returns false" do + lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === "not a hash", got Hash]) + end +end + +describe "should be" do + it "should pass if actual is true or a set value" do + true.should be + 1.should be + end + + it "should fail if actual is false" do + lambda {false.should be}.should fail_with("expected if to be satisfied, got false") + end + + it "should fail if actual is nil" do + lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil") + end +end + +describe "should be(value)" do + it "should pass if actual.equal?(value)" do + 5.should be(5) + end + it "should fail if !actual.equal?(value)" do + lambda { 5.should be(6) }.should fail_with("expected 6, got 5") + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/change_spec.rb b/vendor/gems/rspec/spec/spec/matchers/change_spec.rb new file mode 100644 index 0000000..d95aa6d --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/change_spec.rb @@ -0,0 +1,319 @@ +#Based on patch from Wilson Bilkovich + +require File.dirname(__FILE__) + '/../../spec_helper.rb' +class SomethingExpected + attr_accessor :some_value +end + +describe "should change(actual, message)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when actual is modified by the block" do + lambda {@instance.some_value = 6}.should change(@instance, :some_value) + end + + it "should fail when actual is not modified by the block" do + lambda do + lambda {}.should change(@instance, :some_value) + end.should fail_with("some_value should have changed, but is still 5") + end +end + +describe "should_not change(actual, message)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when actual is not modified by the block" do + lambda { }.should_not change(@instance, :some_value) + end + + it "should fail when actual is not modified by the block" do + lambda do + lambda {@instance.some_value = 6}.should_not change(@instance, :some_value) + end.should fail_with("some_value should not have changed, but did change from 5 to 6") + end +end + +describe "should change { block }" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when actual is modified by the block" do + lambda {@instance.some_value = 6}.should change { @instance.some_value } + end + + it "should fail when actual is not modified by the block" do + lambda do + lambda {}.should change{ @instance.some_value } + end.should fail_with("result should have changed, but is still 5") + end + + it "should warn if passed a block using do/end" do + lambda do + lambda {}.should change do + end + end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/) + end +end + +describe "should_not change { block }" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when actual is modified by the block" do + lambda {}.should_not change{ @instance.some_value } + end + + it "should fail when actual is not modified by the block" do + lambda do + lambda {@instance.some_value = 6}.should_not change { @instance.some_value } + end.should fail_with("result should not have changed, but did change from 5 to 6") + end + + it "should warn if passed a block using do/end" do + lambda do + lambda {}.should_not change do + end + end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/) + end +end + +describe "should change(actual, message).by(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by expected amount" do + lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1) + end + + it "should fail when the attribute is changed by unexpected amount" do + lambda do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1) + end.should fail_with("some_value should have been changed by 1, but was changed by 2") + end + + it "should fail when the attribute is changed by unexpected amount in the opposite direction" do + lambda do + lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1) + end.should fail_with("some_value should have been changed by 1, but was changed by -1") + end +end + +describe "should change{ block }.by(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by expected amount" do + lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1) + end + + it "should fail when the attribute is changed by unexpected amount" do + lambda do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1) + end.should fail_with("result should have been changed by 1, but was changed by 2") + end + + it "should fail when the attribute is changed by unexpected amount in the opposite direction" do + lambda do + lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1) + end.should fail_with("result should have been changed by 1, but was changed by -1") + end +end + +describe "should change(actual, message).by_at_least(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by greater than the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(1) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(2) + end + + it "should fail when the attribute is changed by less than the expected amount" do + lambda do + lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by_at_least(2) + end.should fail_with("some_value should have been changed by at least 2, but was changed by 1") + end + +end + +describe "should change{ block }.by_at_least(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by greater than expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(1) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(2) + end + + it "should fail when the attribute is changed by less than the unexpected amount" do + lambda do + lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by_at_least(2) + end.should fail_with("result should have been changed by at least 2, but was changed by 1") + end +end + + +describe "should change(actual, message).by_at_most(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by less than the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(3) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(2) + end + + it "should fail when the attribute is changed by greater than the expected amount" do + lambda do + lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(1) + end.should fail_with("some_value should have been changed by at most 1, but was changed by 2") + end + +end + +describe "should change{ block }.by_at_most(expected)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 5 + end + + it "should pass when attribute is changed by less than expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(3) + end + + it "should pass when attribute is changed by the expected amount" do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(2) + end + + it "should fail when the attribute is changed by greater than the unexpected amount" do + lambda do + lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(1) + end.should fail_with("result should have been changed by at most 1, but was changed by 2") + end +end + +describe "should change(actual, message).from(old)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 'string' + end + + it "should pass when attribute is == to expected value before executing block" do + lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string") + end + + it "should fail when attribute is not == to expected value before executing block" do + lambda do + lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat") + end.should fail_with("some_value should have initially been \"cat\", but was \"string\"") + end +end + +describe "should change{ block }.from(old)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 'string' + end + + it "should pass when attribute is == to expected value before executing block" do + lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string") + end + + it "should fail when attribute is not == to expected value before executing block" do + lambda do + lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat") + end.should fail_with("result should have initially been \"cat\", but was \"string\"") + end +end + +describe "should change(actual, message).to(new)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 'string' + end + + it "should pass when attribute is == to expected value after executing block" do + lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat") + end + + it "should fail when attribute is not == to expected value after executing block" do + lambda do + lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog") + end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"") + end +end + +describe "should change{ block }.to(new)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 'string' + end + + it "should pass when attribute is == to expected value after executing block" do + lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat") + end + + it "should fail when attribute is not == to expected value after executing block" do + lambda do + lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog") + end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"") + end +end + +describe "should change(actual, message).from(old).to(new)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 'string' + end + + it "should pass when #to comes before #from" do + lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string") + end + + it "should pass when #from comes before #to" do + lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat") + end +end + +describe "should change{ block }.from(old).to(new)" do + before(:each) do + @instance = SomethingExpected.new + @instance.some_value = 'string' + end + + it "should pass when #to comes before #from" do + lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string") + end + + it "should pass when #from comes before #to" do + lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat") + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb b/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb new file mode 100644 index 0000000..c494e21 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb @@ -0,0 +1,153 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "Matchers should be able to generate their own descriptions" do + after(:each) do + Spec::Matchers.clear_generated_description + end + + it "should == expected" do + "this".should == "this" + Spec::Matchers.generated_description.should == "should == \"this\"" + end + + it "should not == expected" do + "this".should_not == "that" + Spec::Matchers.generated_description.should == "should not == \"that\"" + end + + it "should be empty (arbitrary predicate)" do + [].should be_empty + Spec::Matchers.generated_description.should == "should be empty" + end + + it "should not be empty (arbitrary predicate)" do + [1].should_not be_empty + Spec::Matchers.generated_description.should == "should not be empty" + end + + it "should be true" do + true.should be_true + Spec::Matchers.generated_description.should == "should be true" + end + + it "should be false" do + false.should be_false + Spec::Matchers.generated_description.should == "should be false" + end + + it "should be nil" do + nil.should be_nil + Spec::Matchers.generated_description.should == "should be nil" + end + + it "should be > n" do + 5.should be > 3 + Spec::Matchers.generated_description.should == "should be > 3" + end + + it "should be predicate arg1, arg2 and arg3" do + 5.0.should be_between(0,10) + Spec::Matchers.generated_description.should == "should be between 0 and 10" + end + + it "should be_few_words predicate should be transformed to 'be few words'" do + 5.should be_kind_of(Fixnum) + Spec::Matchers.generated_description.should == "should be kind of Fixnum" + end + + it "should preserve a proper prefix for be predicate" do + 5.should be_a_kind_of(Fixnum) + Spec::Matchers.generated_description.should == "should be a kind of Fixnum" + 5.should be_an_instance_of(Fixnum) + Spec::Matchers.generated_description.should == "should be an instance of Fixnum" + end + + it "should equal" do + expected = "expected" + expected.should equal(expected) + Spec::Matchers.generated_description.should == "should equal \"expected\"" + end + + it "should_not equal" do + 5.should_not equal(37) + Spec::Matchers.generated_description.should == "should not equal 37" + end + + it "should eql" do + "string".should eql("string") + Spec::Matchers.generated_description.should == "should eql \"string\"" + end + + it "should not eql" do + "a".should_not eql(:a) + Spec::Matchers.generated_description.should == "should not eql :a" + end + + it "should have_key" do + {:a => "a"}.should have_key(:a) + Spec::Matchers.generated_description.should == "should have key :a" + end + + it "should have n items" do + team.should have(3).players + Spec::Matchers.generated_description.should == "should have 3 players" + end + + it "should have at least n items" do + team.should have_at_least(2).players + Spec::Matchers.generated_description.should == "should have at least 2 players" + end + + it "should have at most n items" do + team.should have_at_most(4).players + Spec::Matchers.generated_description.should == "should have at most 4 players" + end + + it "should include" do + [1,2,3].should include(3) + Spec::Matchers.generated_description.should == "should include 3" + end + + it "should match" do + "this string".should match(/this string/) + Spec::Matchers.generated_description.should == "should match /this string/" + end + + it "should raise_error" do + lambda { raise }.should raise_error + Spec::Matchers.generated_description.should == "should raise Exception" + end + + it "should raise_error with type" do + lambda { raise }.should raise_error(RuntimeError) + Spec::Matchers.generated_description.should == "should raise RuntimeError" + end + + it "should raise_error with type and message" do + lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error") + Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\"" + end + + it "should respond_to" do + [].should respond_to(:insert) + Spec::Matchers.generated_description.should == "should respond to #insert" + end + + it "should throw symbol" do + lambda { throw :what_a_mess }.should throw_symbol + Spec::Matchers.generated_description.should == "should throw a Symbol" + end + + it "should throw symbol (with named symbol)" do + lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess) + Spec::Matchers.generated_description.should == "should throw :what_a_mess" + end + + def team + Class.new do + def players + [1,2,3] + end + end.new + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/eql_spec.rb b/vendor/gems/rspec/spec/spec/matchers/eql_spec.rb new file mode 100644 index 0000000..3f265d7 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/eql_spec.rb @@ -0,0 +1,28 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Matchers + describe Eql do + it "should match when actual.eql?(expected)" do + Eql.new(1).matches?(1).should be_true + end + it "should not match when !actual.eql?(expected)" do + Eql.new(1).matches?(2).should be_false + end + it "should describe itself" do + matcher = Eql.new(1) + matcher.description.should == "eql 1" + end + it "should provide message, expected and actual on #failure_message" do + matcher = Eql.new("1") + matcher.matches?(1) + matcher.failure_message.should == ["expected \"1\", got 1 (using .eql?)", "1", 1] + end + it "should provide message, expected and actual on #negative_failure_message" do + matcher = Eql.new(1) + matcher.matches?(1) + matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .eql?)", 1, 1] + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/equal_spec.rb b/vendor/gems/rspec/spec/spec/matchers/equal_spec.rb new file mode 100644 index 0000000..7667bdc --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/equal_spec.rb @@ -0,0 +1,28 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Matchers + describe Equal do + it "should match when actual.equal?(expected)" do + Equal.new(1).matches?(1).should be_true + end + it "should not match when !actual.equal?(expected)" do + Equal.new("1").matches?("1").should be_false + end + it "should describe itself" do + matcher = Equal.new(1) + matcher.description.should == "equal 1" + end + it "should provide message, expected and actual on #failure_message" do + matcher = Equal.new("1") + matcher.matches?(1) + matcher.failure_message.should == ["expected \"1\", got 1 (using .equal?)", "1", 1] + end + it "should provide message, expected and actual on #negative_failure_message" do + matcher = Equal.new(1) + matcher.matches?(1) + matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .equal?)", 1, 1] + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb b/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb new file mode 100644 index 0000000..0a50972 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb @@ -0,0 +1,57 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +class Substance + def initialize exists, description + @exists = exists + @description = description + end + def exist? + @exists + end + def inspect + @description + end +end + +class SubstanceTester + include Spec::Matchers + def initialize substance + @substance = substance + end + def should_exist + @substance.should exist + end +end + +describe "should exist," do + + before(:each) do + @real = Substance.new true, 'something real' + @imaginary = Substance.new false, 'something imaginary' + end + + describe "within an example group" do + + it "should pass if target exists" do + @real.should exist + end + + it "should fail if target does not exist" do + lambda { @imaginary.should exist }.should fail + end + + it "should pass if target doesn't exist" do + lambda { @real.should_not exist }.should fail + end + end + + describe "outside of an example group" do + + it "should pass if target exists" do + real_tester = SubstanceTester.new @real + real_tester.should_exist + end + + end + +end diff --git a/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb b/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb new file mode 100644 index 0000000..ad4fe6f --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb @@ -0,0 +1,129 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module ExampleExpectations + + class ArbitraryMatcher + def initialize(*args, &block) + if args.last.is_a? Hash + @expected = args.last[:expected] + end + if block_given? + @expected = block.call + end + @block = block + end + + def matches?(target) + @target = target + return @expected == target + end + + def with(new_value) + @expected = new_value + self + end + + def failure_message + "expected #{@expected}, got #{@target}" + end + + def negative_failure_message + "expected not #{@expected}, got #{@target}" + end + end + + class PositiveOnlyMatcher < ArbitraryMatcher + undef negative_failure_message rescue nil + end + + def arbitrary_matcher(*args, &block) + ArbitraryMatcher.new(*args, &block) + end + + def positive_only_matcher(*args, &block) + PositiveOnlyMatcher.new(*args, &block) + end + +end + +module Spec + module Expectations + describe ExpectationMatcherHandler, ".handle_matcher" do + it "should ask the matcher if it matches" do + matcher = mock("matcher") + actual = Object.new + matcher.should_receive(:matches?).with(actual).and_return(true) + ExpectationMatcherHandler.handle_matcher(actual, matcher) + end + + it "should explain when the matcher parameter is not a matcher" do + begin + nonmatcher = mock("nonmatcher") + actual = Object.new + ExpectationMatcherHandler.handle_matcher(actual, nonmatcher) + rescue Spec::Expectations::InvalidMatcherError => e + end + + e.message.should =~ /^Expected a matcher, got / + end + end + + describe NegativeExpectationMatcherHandler, ".handle_matcher" do + it "should explain when matcher does not support should_not" do + matcher = mock("matcher") + matcher.stub!(:matches?) + actual = Object.new + lambda { + NegativeExpectationMatcherHandler.handle_matcher(actual, matcher) + }.should fail_with(/Matcher does not support should_not.\n/) + end + + it "should ask the matcher if it matches" do + matcher = mock("matcher") + actual = Object.new + matcher.stub!(:negative_failure_message) + matcher.should_receive(:matches?).with(actual).and_return(false) + NegativeExpectationMatcherHandler.handle_matcher(actual, matcher) + end + + it "should explain when the matcher parameter is not a matcher" do + begin + nonmatcher = mock("nonmatcher") + actual = Object.new + NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher) + rescue Spec::Expectations::InvalidMatcherError => e + end + + e.message.should =~ /^Expected a matcher, got / + end + end + + describe ExpectationMatcherHandler do + include ExampleExpectations + + it "should handle submitted args" do + 5.should arbitrary_matcher(:expected => 5) + 5.should arbitrary_matcher(:expected => "wrong").with(5) + lambda { 5.should arbitrary_matcher(:expected => 4) }.should fail_with("expected 4, got 5") + lambda { 5.should arbitrary_matcher(:expected => 5).with(4) }.should fail_with("expected 4, got 5") + 5.should_not arbitrary_matcher(:expected => 4) + 5.should_not arbitrary_matcher(:expected => 5).with(4) + lambda { 5.should_not arbitrary_matcher(:expected => 5) }.should fail_with("expected not 5, got 5") + lambda { 5.should_not arbitrary_matcher(:expected => 4).with(5) }.should fail_with("expected not 5, got 5") + end + + it "should handle the submitted block" do + 5.should arbitrary_matcher { 5 } + 5.should arbitrary_matcher(:expected => 4) { 5 } + 5.should arbitrary_matcher(:expected => 4).with(5) { 3 } + end + + it "should explain when matcher does not support should_not" do + lambda { + 5.should_not positive_only_matcher(:expected => 5) + }.should fail_with(/Matcher does not support should_not.\n/) + end + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/has_spec.rb b/vendor/gems/rspec/spec/spec/matchers/has_spec.rb new file mode 100644 index 0000000..47f048e --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/has_spec.rb @@ -0,0 +1,37 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should have_sym(*args)" do + it "should pass if #has_sym?(*args) returns true" do + {:a => "A"}.should have_key(:a) + end + + it "should fail if #has_sym?(*args) returns false" do + lambda { + {:b => "B"}.should have_key(:a) + }.should fail_with("expected #has_key?(:a) to return true, got false") + end + + it "should fail if target does not respond to #has_sym?" do + lambda { + Object.new.should have_key(:a) + }.should raise_error(NoMethodError) + end +end + +describe "should_not have_sym(*args)" do + it "should pass if #has_sym?(*args) returns false" do + {:a => "A"}.should_not have_key(:b) + end + + it "should fail if #has_sym?(*args) returns true" do + lambda { + {:a => "A"}.should_not have_key(:a) + }.should fail_with("expected #has_key?(:a) to return false, got true") + end + + it "should fail if target does not respond to #has_sym?" do + lambda { + Object.new.should have_key(:a) + }.should raise_error(NoMethodError) + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/have_spec.rb b/vendor/gems/rspec/spec/spec/matchers/have_spec.rb new file mode 100644 index 0000000..27083c2 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/have_spec.rb @@ -0,0 +1,291 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module HaveSpecHelper + def create_collection_owner_with(n) + owner = Spec::Expectations::Helper::CollectionOwner.new + (1..n).each do |n| + owner.add_to_collection_with_length_method(n) + owner.add_to_collection_with_size_method(n) + end + owner + end +end + +describe "should have(n).items" do + include HaveSpecHelper + + it "should pass if target has a collection of items with n members" do + owner = create_collection_owner_with(3) + owner.should have(3).items_in_collection_with_length_method + owner.should have(3).items_in_collection_with_size_method + end + + it "should convert :no to 0" do + owner = create_collection_owner_with(0) + owner.should have(:no).items_in_collection_with_length_method + owner.should have(:no).items_in_collection_with_size_method + end + + it "should fail if target has a collection of items with < n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should have(4).items_in_collection_with_length_method + }.should fail_with("expected 4 items_in_collection_with_length_method, got 3") + lambda { + owner.should have(4).items_in_collection_with_size_method + }.should fail_with("expected 4 items_in_collection_with_size_method, got 3") + end + + it "should fail if target has a collection of items with > n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should have(2).items_in_collection_with_length_method + }.should fail_with("expected 2 items_in_collection_with_length_method, got 3") + lambda { + owner.should have(2).items_in_collection_with_size_method + }.should fail_with("expected 2 items_in_collection_with_size_method, got 3") + end +end + +describe 'should have(1).item when Inflector is defined' do + include HaveSpecHelper + + before do + unless Object.const_defined?(:Inflector) + class Inflector + def self.pluralize(string) + string.to_s + 's' + end + end + end + end + + it 'should pluralize the collection name' do + owner = create_collection_owner_with(1) + owner.should have(1).item + end +end + +describe "should have(n).items where result responds to items but returns something other than a collection" do + it "should provide a meaningful error" do + owner = Class.new do + def items + Object.new + end + end.new + lambda do + owner.should have(3).items + end.should raise_error("expected items to be a collection but it does not respond to #length or #size") + end +end + +describe "should_not have(n).items" do + include HaveSpecHelper + + it "should pass if target has a collection of items with < n members" do + owner = create_collection_owner_with(3) + owner.should_not have(4).items_in_collection_with_length_method + owner.should_not have(4).items_in_collection_with_size_method + end + + it "should pass if target has a collection of items with > n members" do + owner = create_collection_owner_with(3) + owner.should_not have(2).items_in_collection_with_length_method + owner.should_not have(2).items_in_collection_with_size_method + end + + it "should fail if target has a collection of items with n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should_not have(3).items_in_collection_with_length_method + }.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3") + lambda { + owner.should_not have(3).items_in_collection_with_size_method + }.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3") + end +end + +describe "should have_exactly(n).items" do + include HaveSpecHelper + + it "should pass if target has a collection of items with n members" do + owner = create_collection_owner_with(3) + owner.should have_exactly(3).items_in_collection_with_length_method + owner.should have_exactly(3).items_in_collection_with_size_method + end + + it "should convert :no to 0" do + owner = create_collection_owner_with(0) + owner.should have_exactly(:no).items_in_collection_with_length_method + owner.should have_exactly(:no).items_in_collection_with_size_method + end + + it "should fail if target has a collection of items with < n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should have_exactly(4).items_in_collection_with_length_method + }.should fail_with("expected 4 items_in_collection_with_length_method, got 3") + lambda { + owner.should have_exactly(4).items_in_collection_with_size_method + }.should fail_with("expected 4 items_in_collection_with_size_method, got 3") + end + + it "should fail if target has a collection of items with > n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should have_exactly(2).items_in_collection_with_length_method + }.should fail_with("expected 2 items_in_collection_with_length_method, got 3") + lambda { + owner.should have_exactly(2).items_in_collection_with_size_method + }.should fail_with("expected 2 items_in_collection_with_size_method, got 3") + end +end + +describe "should have_at_least(n).items" do + include HaveSpecHelper + + it "should pass if target has a collection of items with n members" do + owner = create_collection_owner_with(3) + owner.should have_at_least(3).items_in_collection_with_length_method + owner.should have_at_least(3).items_in_collection_with_size_method + end + + it "should pass if target has a collection of items with > n members" do + owner = create_collection_owner_with(3) + owner.should have_at_least(2).items_in_collection_with_length_method + owner.should have_at_least(2).items_in_collection_with_size_method + end + + it "should fail if target has a collection of items with < n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should have_at_least(4).items_in_collection_with_length_method + }.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3") + lambda { + owner.should have_at_least(4).items_in_collection_with_size_method + }.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3") + end + + it "should provide educational negative failure messages" do + #given + owner = create_collection_owner_with(3) + length_matcher = have_at_least(3).items_in_collection_with_length_method + size_matcher = have_at_least(3).items_in_collection_with_size_method + + #when + length_matcher.matches?(owner) + size_matcher.matches?(owner) + + #then + length_matcher.negative_failure_message.should == <<-EOF +Isn't life confusing enough? +Instead of having to figure out the meaning of this: + should_not have_at_least(3).items_in_collection_with_length_method +We recommend that you use this instead: + should have_at_most(2).items_in_collection_with_length_method +EOF + + size_matcher.negative_failure_message.should == <<-EOF +Isn't life confusing enough? +Instead of having to figure out the meaning of this: + should_not have_at_least(3).items_in_collection_with_size_method +We recommend that you use this instead: + should have_at_most(2).items_in_collection_with_size_method +EOF + end +end + +describe "should have_at_most(n).items" do + include HaveSpecHelper + + it "should pass if target has a collection of items with n members" do + owner = create_collection_owner_with(3) + owner.should have_at_most(3).items_in_collection_with_length_method + owner.should have_at_most(3).items_in_collection_with_size_method + end + + it "should fail if target has a collection of items with > n members" do + owner = create_collection_owner_with(3) + lambda { + owner.should have_at_most(2).items_in_collection_with_length_method + }.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3") + lambda { + owner.should have_at_most(2).items_in_collection_with_size_method + }.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3") + end + + it "should pass if target has a collection of items with < n members" do + owner = create_collection_owner_with(3) + owner.should have_at_most(4).items_in_collection_with_length_method + owner.should have_at_most(4).items_in_collection_with_size_method + end + + it "should provide educational negative failure messages" do + #given + owner = create_collection_owner_with(3) + length_matcher = have_at_most(3).items_in_collection_with_length_method + size_matcher = have_at_most(3).items_in_collection_with_size_method + + #when + length_matcher.matches?(owner) + size_matcher.matches?(owner) + + #then + length_matcher.negative_failure_message.should == <<-EOF +Isn't life confusing enough? +Instead of having to figure out the meaning of this: + should_not have_at_most(3).items_in_collection_with_length_method +We recommend that you use this instead: + should have_at_least(4).items_in_collection_with_length_method +EOF + + size_matcher.negative_failure_message.should == <<-EOF +Isn't life confusing enough? +Instead of having to figure out the meaning of this: + should_not have_at_most(3).items_in_collection_with_size_method +We recommend that you use this instead: + should have_at_least(4).items_in_collection_with_size_method +EOF + end +end + +describe "have(n).items(args, block)" do + it "should pass args to target" do + target = mock("target") + target.should_receive(:items).with("arg1","arg2").and_return([1,2,3]) + target.should have(3).items("arg1","arg2") + end + + it "should pass block to target" do + target = mock("target") + block = lambda { 5 } + target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3]) + target.should have(3).items("arg1","arg2", block) + end +end + +describe "have(n).items where target IS a collection" do + it "should reference the number of items IN the collection" do + [1,2,3].should have(3).items + end + + it "should fail when the number of items IN the collection is not as expected" do + lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3") + end +end + +describe "have(n).characters where target IS a String" do + it "should pass if the length is correct" do + "this string".should have(11).characters + end + + it "should fail if the length is incorrect" do + lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11") + end +end + +describe "have(n).things on an object which is not a collection nor contains one" do + it "should fail" do + lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/) + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/include_spec.rb b/vendor/gems/rspec/spec/spec/matchers/include_spec.rb new file mode 100644 index 0000000..f1057f3 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/include_spec.rb @@ -0,0 +1,45 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should include(expected)" do + it "should pass if target includes expected" do + [1,2,3].should include(3) + "abc".should include("a") + end + + it "should fail if target does not include expected" do + lambda { + [1,2,3].should include(4) + }.should fail_with("expected [1, 2, 3] to include 4") + lambda { + "abc".should include("d") + }.should fail_with("expected \"abc\" to include \"d\"") + end +end + +describe "should include(with, multiple, args)" do + it "should pass if target includes all items" do + [1,2,3].should include(1,2,3) + end + + it "should fail if target does not include any one of the items" do + lambda { + [1,2,3].should include(1,2,4) + }.should fail_with("expected [1, 2, 3] to include 1, 2 and 4") + end +end + +describe "should_not include(expected)" do + it "should pass if target does not include expected" do + [1,2,3].should_not include(4) + "abc".should_not include("d") + end + + it "should fail if target includes expected" do + lambda { + [1,2,3].should_not include(3) + }.should fail_with("expected [1, 2, 3] not to include 3") + lambda { + "abc".should_not include("c") + }.should fail_with("expected \"abc\" not to include \"c\"") + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/match_spec.rb b/vendor/gems/rspec/spec/spec/matchers/match_spec.rb new file mode 100644 index 0000000..f69f7ef --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/match_spec.rb @@ -0,0 +1,37 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should match(expected)" do + it "should pass when target (String) matches expected (Regexp)" do + "string".should match(/tri/) + end + + it "should fail when target (String) does not match expected (Regexp)" do + lambda { + "string".should match(/rings/) + }.should fail + end + + it "should provide message, expected and actual on failure" do + matcher = match(/rings/) + matcher.matches?("string") + matcher.failure_message.should == ["expected \"string\" to match /rings/", /rings/, "string"] + end +end + +describe "should_not match(expected)" do + it "should pass when target (String) matches does not match (Regexp)" do + "string".should_not match(/rings/) + end + + it "should fail when target (String) matches expected (Regexp)" do + lambda { + "string".should_not match(/tri/) + }.should fail + end + + it "should provide message, expected and actual on failure" do + matcher = match(/tri/) + matcher.matches?("string") + matcher.negative_failure_message.should == ["expected \"string\" not to match /tri/", /tri/, "string"] + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/matcher_methods_spec.rb b/vendor/gems/rspec/spec/spec/matchers/matcher_methods_spec.rb new file mode 100644 index 0000000..80cc985 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/matcher_methods_spec.rb @@ -0,0 +1,78 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Matchers + context %Q{The Spec::Matchers module gets included in the execution context of every spec. +This module should provide the following methods, each of which returns a Matcher object.} do + it "be_true" do + be_true.should be_an_instance_of(Be) + end + it "be_false" do + be_false.should be_an_instance_of(Be) + end + it "be_nil" do + be_nil.should be_an_instance_of(Be) + end + it "be_arbitrary_predicate" do + be_arbitrary_predicate.should be_an_instance_of(Be) + end + it "be_close" do + be_close(1,2).should be_an_instance_of(BeClose) + end + it "change" do + change("target", :message).should be_an_instance_of(Change) + end + it "eql" do + eql(:expected).should be_an_instance_of(Eql) + end + it "equal" do + equal(:expected).should be_an_instance_of(Equal) + end + it "have" do + have(0).should be_an_instance_of(Have) + end + it "have_exactly" do + have_exactly(0).should be_an_instance_of(Have) + end + it "have_at_least" do + have_at_least(0).should be_an_instance_of(Have) + end + it "have_at_most" do + have_at_most(0).should be_an_instance_of(Have) + end + it "include" do + include(:value).should be_an_instance_of(Include) + end + it "match" do + match(:value).should be_an_instance_of(Match) + end + it "raise_error" do + raise_error.should be_an_instance_of(RaiseError) + raise_error(NoMethodError).should be_an_instance_of(RaiseError) + raise_error(NoMethodError, "message").should be_an_instance_of(RaiseError) + end + it "satisfy" do + satisfy{}.should be_an_instance_of(Satisfy) + end + it "throw_symbol" do + throw_symbol.should be_an_instance_of(ThrowSymbol) + throw_symbol(:sym).should be_an_instance_of(ThrowSymbol) + end + it "respond_to" do + respond_to(:sym).should be_an_instance_of(RespondTo) + end + end + + describe "Spec::Matchers#method_missing" do + it "should convert be_xyz to Be(:be_xyz)" do + Be.should_receive(:new).with(:be_whatever) + be_whatever + end + + it "should convert have_xyz to Has(:have_xyz)" do + Has.should_receive(:new).with(:have_whatever) + have_whatever + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb b/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb new file mode 100644 index 0000000..1292918 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb @@ -0,0 +1,24 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "The anything() mock argument constraint matcher" do + specify { anything.should == Object.new } + specify { anything.should == Class } + specify { anything.should == 1 } + specify { anything.should == "a string" } + specify { anything.should == :a_symbol } +end + +describe "The boolean() mock argument constraint matcher" do + specify { boolean.should == true } + specify { boolean.should == false } + specify { boolean.should_not == Object.new } + specify { boolean.should_not == Class } + specify { boolean.should_not == 1 } + specify { boolean.should_not == "a string" } + specify { boolean.should_not == :a_symbol } +end + +describe "The an_instance_of() mock argument constraint matcher" do + # NOTE - this is implemented as a predicate_matcher - see example_group_methods.rb + specify { an_instance_of(String).should == "string" } +end diff --git a/vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb b/vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb new file mode 100644 index 0000000..1985df0 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb @@ -0,0 +1,158 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +require 'spec/expectations/differs/default' + +describe "should ==" do + + it "should delegate message to target" do + subject = "apple" + subject.should_receive(:==).with("apple").and_return(true) + subject.should == "apple" + end + + it "should fail when target.==(actual) returns false" do + subject = "apple" + Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n got: "apple" (using ==)], "orange", "apple") + subject.should == "orange" + end + +end + +describe "should_not ==" do + + it "should delegate message to target" do + subject = "orange" + subject.should_receive(:==).with("apple").and_return(false) + subject.should_not == "apple" + end + + it "should fail when target.==(actual) returns false" do + subject = "apple" + Spec::Expectations.should_receive(:fail_with).with(%[expected not: == "apple",\n got: "apple"], "apple", "apple") + subject.should_not == "apple" + end + +end + +describe "should ===" do + + it "should delegate message to target" do + subject = "apple" + subject.should_receive(:===).with("apple").and_return(true) + subject.should === "apple" + end + + it "should fail when target.===(actual) returns false" do + subject = "apple" + subject.should_receive(:===).with("orange").and_return(false) + Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n got: "apple" (using ===)], "orange", "apple") + subject.should === "orange" + end + +end + +describe "should_not ===" do + + it "should delegate message to target" do + subject = "orange" + subject.should_receive(:===).with("apple").and_return(false) + subject.should_not === "apple" + end + + it "should fail when target.===(actual) returns false" do + subject = "apple" + subject.should_receive(:===).with("apple").and_return(true) + Spec::Expectations.should_receive(:fail_with).with(%[expected not: === "apple",\n got: "apple"], "apple", "apple") + subject.should_not === "apple" + end + +end + +describe "should =~" do + + it "should delegate message to target" do + subject = "foo" + subject.should_receive(:=~).with(/oo/).and_return(true) + subject.should =~ /oo/ + end + + it "should fail when target.=~(actual) returns false" do + subject = "fu" + subject.should_receive(:=~).with(/oo/).and_return(false) + Spec::Expectations.should_receive(:fail_with).with(%[expected: /oo/,\n got: "fu" (using =~)], /oo/, "fu") + subject.should =~ /oo/ + end + +end + +describe "should_not =~" do + + it "should delegate message to target" do + subject = "fu" + subject.should_receive(:=~).with(/oo/).and_return(false) + subject.should_not =~ /oo/ + end + + it "should fail when target.=~(actual) returns false" do + subject = "foo" + subject.should_receive(:=~).with(/oo/).and_return(true) + Spec::Expectations.should_receive(:fail_with).with(%[expected not: =~ /oo/,\n got: "foo"], /oo/, "foo") + subject.should_not =~ /oo/ + end + +end + +describe "should >" do + + it "should pass if > passes" do + 4.should > 3 + end + + it "should fail if > fails" do + Spec::Expectations.should_receive(:fail_with).with(%[expected: > 5,\n got: 4], 5, 4) + 4.should > 5 + end + +end + +describe "should >=" do + + it "should pass if >= passes" do + 4.should > 3 + 4.should >= 4 + end + + it "should fail if > fails" do + Spec::Expectations.should_receive(:fail_with).with(%[expected: >= 5,\n got: 4], 5, 4) + 4.should >= 5 + end + +end + +describe "should <" do + + it "should pass if < passes" do + 4.should < 5 + end + + it "should fail if > fails" do + Spec::Expectations.should_receive(:fail_with).with(%[expected: < 3,\n got: 4], 3, 4) + 4.should < 3 + end + +end + +describe "should <=" do + + it "should pass if <= passes" do + 4.should <= 5 + 4.should <= 4 + end + + it "should fail if > fails" do + Spec::Expectations.should_receive(:fail_with).with(%[expected: <= 3,\n got: 4], 3, 4) + 4.should <= 3 + end + +end + diff --git a/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb b/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb new file mode 100644 index 0000000..7cabf81 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb @@ -0,0 +1,191 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should raise_error" do + it "should pass if anything is raised" do + lambda {raise}.should raise_error + end + + it "should fail if nothing is raised" do + lambda { + lambda {}.should raise_error + }.should fail_with("expected Exception but nothing was raised") + end +end + +describe "should_not raise_error" do + it "should pass if nothing is raised" do + lambda {}.should_not raise_error + end + + it "should fail if anything is raised" do + lambda { + lambda {raise}.should_not raise_error + }.should fail_with("expected no Exception, got RuntimeError") + end +end + +describe "should raise_error(message)" do + it "should pass if RuntimeError is raised with the right message" do + lambda {raise 'blah'}.should raise_error('blah') + end + it "should pass if any other error is raised with the right message" do + lambda {raise NameError.new('blah')}.should raise_error('blah') + end + it "should fail if RuntimeError error is raised with the wrong message" do + lambda do + lambda {raise 'blarg'}.should raise_error('blah') + end.should fail_with("expected Exception with \"blah\", got #<RuntimeError: blarg>") + end + it "should fail if any other error is raised with the wrong message" do + lambda do + lambda {raise NameError.new('blarg')}.should raise_error('blah') + end.should fail_with("expected Exception with \"blah\", got #<NameError: blarg>") + end +end + +describe "should_not raise_error(message)" do + it "should pass if RuntimeError error is raised with the different message" do + lambda {raise 'blarg'}.should_not raise_error('blah') + end + it "should pass if any other error is raised with the wrong message" do + lambda {raise NameError.new('blarg')}.should_not raise_error('blah') + end + it "should fail if RuntimeError is raised with message" do + lambda do + lambda {raise 'blah'}.should_not raise_error('blah') + end.should fail_with(%Q|expected no Exception with "blah", got #<RuntimeError: blah>|) + end + it "should fail if any other error is raised with message" do + lambda do + lambda {raise NameError.new('blah')}.should_not raise_error('blah') + end.should fail_with(%Q|expected no Exception with "blah", got #<NameError: blah>|) + end +end + +describe "should raise_error(NamedError)" do + it "should pass if named error is raised" do + lambda { non_existent_method }.should raise_error(NameError) + end + + it "should fail if nothing is raised" do + lambda { + lambda { }.should raise_error(NameError) + }.should fail_with("expected NameError but nothing was raised") + end + + it "should fail if another error is raised (NameError)" do + lambda { + lambda { raise }.should raise_error(NameError) + }.should fail_with("expected NameError, got RuntimeError") + end + + it "should fail if another error is raised (NameError)" do + lambda { + lambda { load "non/existent/file" }.should raise_error(NameError) + }.should fail_with(/expected NameError, got #<LoadError/) + end +end + +describe "should_not raise_error(NamedError)" do + it "should pass if nothing is raised" do + lambda { }.should_not raise_error(NameError) + end + + it "should pass if another error is raised" do + lambda { raise }.should_not raise_error(NameError) + end + + it "should fail if named error is raised" do + lambda { + lambda { non_existent_method }.should_not raise_error(NameError) + }.should fail_with(/expected no NameError, got #<NameError: undefined/) + end +end + +describe "should raise_error(NamedError, error_message) with String" do + it "should pass if named error is raised with same message" do + lambda { raise "example message" }.should raise_error(RuntimeError, "example message") + end + + it "should fail if nothing is raised" do + lambda { + lambda {}.should raise_error(RuntimeError, "example message") + }.should fail_with("expected RuntimeError with \"example message\" but nothing was raised") + end + + it "should fail if incorrect error is raised" do + lambda { + lambda { raise }.should raise_error(NameError, "example message") + }.should fail_with("expected NameError with \"example message\", got RuntimeError") + end + + it "should fail if correct error is raised with incorrect message" do + lambda { + lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, "example message") + }.should fail_with(/expected RuntimeError with \"example message\", got #<RuntimeError: not the example message/) + end +end + +describe "should_not raise_error(NamedError, error_message) with String" do + it "should pass if nothing is raised" do + lambda {}.should_not raise_error(RuntimeError, "example message") + end + + it "should pass if a different error is raised" do + lambda { raise }.should_not raise_error(NameError, "example message") + end + + it "should pass if same error is raised with different message" do + lambda { raise RuntimeError.new("not the example message") }.should_not raise_error(RuntimeError, "example message") + end + + it "should fail if named error is raised with same message" do + lambda { + lambda { raise "example message" }.should_not raise_error(RuntimeError, "example message") + }.should fail_with("expected no RuntimeError with \"example message\", got #<RuntimeError: example message>") + end +end + +describe "should raise_error(NamedError, error_message) with Regexp" do + it "should pass if named error is raised with matching message" do + lambda { raise "example message" }.should raise_error(RuntimeError, /ample mess/) + end + + it "should fail if nothing is raised" do + lambda { + lambda {}.should raise_error(RuntimeError, /ample mess/) + }.should fail_with("expected RuntimeError with message matching /ample mess/ but nothing was raised") + end + + it "should fail if incorrect error is raised" do + lambda { + lambda { raise }.should raise_error(NameError, /ample mess/) + }.should fail_with("expected NameError with message matching /ample mess/, got RuntimeError") + end + + it "should fail if correct error is raised with incorrect message" do + lambda { + lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, /less than ample mess/) + }.should fail_with("expected RuntimeError with message matching /less than ample mess/, got #<RuntimeError: not the example message>") + end +end + +describe "should_not raise_error(NamedError, error_message) with Regexp" do + it "should pass if nothing is raised" do + lambda {}.should_not raise_error(RuntimeError, /ample mess/) + end + + it "should pass if a different error is raised" do + lambda { raise }.should_not raise_error(NameError, /ample mess/) + end + + it "should pass if same error is raised with non-matching message" do + lambda { raise RuntimeError.new("non matching message") }.should_not raise_error(RuntimeError, /ample mess/) + end + + it "should fail if named error is raised with matching message" do + lambda { + lambda { raise "example message" }.should_not raise_error(RuntimeError, /ample mess/) + }.should fail_with("expected no RuntimeError with message matching /ample mess/, got #<RuntimeError: example message>") + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/respond_to_spec.rb b/vendor/gems/rspec/spec/spec/matchers/respond_to_spec.rb new file mode 100644 index 0000000..2cdbbcd --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/respond_to_spec.rb @@ -0,0 +1,54 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should respond_to(:sym)" do + + it "should pass if target responds to :sym" do + Object.new.should respond_to(:methods) + end + + it "should fail target does not respond to :sym" do + lambda { + Object.new.should respond_to(:some_method) + }.should fail_with("expected target to respond to :some_method") + end + +end + +describe "should respond_to(message1, message2)" do + + it "should pass if target responds to both messages" do + Object.new.should respond_to('methods', 'inspect') + end + + it "should fail target does not respond to first message" do + lambda { + Object.new.should respond_to('method_one', 'inspect') + }.should fail_with('expected target to respond to "method_one"') + end + + it "should fail target does not respond to second message" do + lambda { + Object.new.should respond_to('inspect', 'method_one') + }.should fail_with('expected target to respond to "method_one"') + end + + it "should fail target does not respond to either message" do + lambda { + Object.new.should respond_to('method_one', 'method_two') + }.should fail_with('expected target to respond to "method_one", "method_two"') + end +end + +describe "should_not respond_to(:sym)" do + + it "should pass if target does not respond to :sym" do + Object.new.should_not respond_to(:some_method) + end + + it "should fail target responds to :sym" do + lambda { + Object.new.should_not respond_to(:methods) + }.should fail_with("expected target not to respond to :methods") + end + +end diff --git a/vendor/gems/rspec/spec/spec/matchers/satisfy_spec.rb b/vendor/gems/rspec/spec/spec/matchers/satisfy_spec.rb new file mode 100644 index 0000000..7e8d6f9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/satisfy_spec.rb @@ -0,0 +1,36 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "should satisfy { block }" do + it "should pass if block returns true" do + true.should satisfy { |val| val } + true.should satisfy do |val| + val + end + end + + it "should fail if block returns false" do + lambda { + false.should satisfy { |val| val } + }.should fail_with("expected false to satisfy block") + lambda do + false.should satisfy do |val| + val + end + end.should fail_with("expected false to satisfy block") + end +end + +describe "should_not satisfy { block }" do + it "should pass if block returns false" do + false.should_not satisfy { |val| val } + false.should_not satisfy do |val| + val + end + end + + it "should fail if block returns true" do + lambda { + true.should_not satisfy { |val| val } + }.should fail_with("expected true not to satisfy block") + end +end diff --git a/vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb b/vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb new file mode 100644 index 0000000..b731af9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Matchers + describe SimpleMatcher do + it "should match pass match arg to block" do + actual = nil + matcher = simple_matcher("message") do |given| actual = given end + matcher.matches?("foo") + actual.should == "foo" + end + + it "should provide a stock failure message" do + matcher = simple_matcher("thing") do end + matcher.matches?("other") + matcher.failure_message.should =~ /expected \"thing\" but got \"other\"/ + end + + it "should provide a stock negative failure message" do + matcher = simple_matcher("thing") do end + matcher.matches?("other") + matcher.negative_failure_message.should =~ /expected not to get \"thing\", but got \"other\"/ + end + + it "should provide a description" do + matcher = simple_matcher("thing") do end + matcher.description.should =="thing" + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb b/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb new file mode 100644 index 0000000..7459565 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb @@ -0,0 +1,54 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Matchers + describe ThrowSymbol, "(constructed with no Symbol)" do + before(:each) { @matcher = ThrowSymbol.new } + + it "should match if any Symbol is thrown" do + @matcher.matches?(lambda{ throw :sym }).should be_true + end + it "should not match if no Symbol is thrown" do + @matcher.matches?(lambda{ }).should be_false + end + it "should provide a failure message" do + @matcher.matches?(lambda{}) + @matcher.failure_message.should == "expected a Symbol but nothing was thrown" + end + it "should provide a negative failure message" do + @matcher.matches?(lambda{ throw :sym}) + @matcher.negative_failure_message.should == "expected no Symbol, got :sym" + end + end + + describe ThrowSymbol, "(constructed with a Symbol)" do + before(:each) { @matcher = ThrowSymbol.new(:sym) } + + it "should match if correct Symbol is thrown" do + @matcher.matches?(lambda{ throw :sym }).should be_true + end + it "should not match if no Symbol is thrown" do + @matcher.matches?(lambda{ }).should be_false + end + it "should not match if correct Symbol is thrown" do + @matcher.matches?(lambda{ throw :other_sym }).should be_false + @matcher.failure_message.should == "expected :sym, got :other_sym" + end + it "should provide a failure message when no Symbol is thrown" do + @matcher.matches?(lambda{}) + @matcher.failure_message.should == "expected :sym but nothing was thrown" + end + it "should provide a failure message when wrong Symbol is thrown" do + @matcher.matches?(lambda{ throw :other_sym }) + @matcher.failure_message.should == "expected :sym, got :other_sym" + end + it "should provide a negative failure message" do + @matcher.matches?(lambda{ throw :sym }) + @matcher.negative_failure_message.should == "expected :sym not to be thrown" + end + it "should only match NameErrors raised by uncaught throws" do + @matcher.matches?(lambda{ sym }).should be_false + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/any_number_of_times_spec.rb b/vendor/gems/rspec/spec/spec/mocks/any_number_of_times_spec.rb new file mode 100644 index 0000000..3f50dcf --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/any_number_of_times_spec.rb @@ -0,0 +1,29 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + + describe "AnyNumberOfTimes" do + before(:each) do + @mock = Mock.new("test mock") + end + + it "should pass if any number of times method is called many times" do + @mock.should_receive(:random_call).any_number_of_times + (1..10).each do + @mock.random_call + end + end + + it "should pass if any number of times method is called once" do + @mock.should_receive(:random_call).any_number_of_times + @mock.random_call + end + + it "should pass if any number of times method is not called" do + @mock.should_receive(:random_call).any_number_of_times + end + end + + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/argument_expectation_spec.rb b/vendor/gems/rspec/spec/spec/mocks/argument_expectation_spec.rb new file mode 100644 index 0000000..2bebbdd --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/argument_expectation_spec.rb @@ -0,0 +1,23 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe ArgumentExpectation do + it "should consider an object that responds to #matches? and #description to be a matcher" do + argument_expecatation = Spec::Mocks::ArgumentExpectation.new([]) + obj = mock("matcher") + obj.should_receive(:respond_to?).with(:matches?).and_return(true) + obj.should_receive(:respond_to?).with(:description).and_return(true) + argument_expecatation.is_matcher?(obj).should be_true + end + + it "should NOT consider an object that only responds to #matches? to be a matcher" do + argument_expecatation = Spec::Mocks::ArgumentExpectation.new([]) + obj = mock("matcher") + obj.should_receive(:respond_to?).with(:matches?).and_return(true) + obj.should_receive(:respond_to?).with(:description).and_return(false) + argument_expecatation.is_matcher?(obj).should be_false + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/at_least_spec.rb b/vendor/gems/rspec/spec/spec/mocks/at_least_spec.rb new file mode 100644 index 0000000..01b133d --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/at_least_spec.rb @@ -0,0 +1,97 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "at_least" do + before(:each) do + @mock = Mock.new("test mock") + end + + it "should fail if method is never called" do + @mock.should_receive(:random_call).at_least(4).times + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when called less than n times" do + @mock.should_receive(:random_call).at_least(4).times + @mock.random_call + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when at least once method is never called" do + @mock.should_receive(:random_call).at_least(:once) + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when at least twice method is called once" do + @mock.should_receive(:random_call).at_least(:twice) + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when at least twice method is never called" do + @mock.should_receive(:random_call).at_least(:twice) + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should pass when at least n times method is called exactly n times" do + @mock.should_receive(:random_call).at_least(4).times + @mock.random_call + @mock.random_call + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at least n times method is called n plus 1 times" do + @mock.should_receive(:random_call).at_least(4).times + @mock.random_call + @mock.random_call + @mock.random_call + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at least once method is called once" do + @mock.should_receive(:random_call).at_least(:once) + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at least once method is called twice" do + @mock.should_receive(:random_call).at_least(:once) + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at least twice method is called three times" do + @mock.should_receive(:random_call).at_least(:twice) + @mock.random_call + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at least twice method is called twice" do + @mock.should_receive(:random_call).at_least(:twice) + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/at_most_spec.rb b/vendor/gems/rspec/spec/spec/mocks/at_most_spec.rb new file mode 100644 index 0000000..f3c5e21 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/at_most_spec.rb @@ -0,0 +1,93 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "at_most" do + before(:each) do + @mock = Mock.new("test mock") + end + + it "should fail when at most n times method is called n plus 1 times" do + @mock.should_receive(:random_call).at_most(4).times + @mock.random_call + @mock.random_call + @mock.random_call + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when at most once method is called twice" do + @mock.should_receive(:random_call).at_most(:once) + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when at most twice method is called three times" do + @mock.should_receive(:random_call).at_most(:twice) + @mock.random_call + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should pass when at most n times method is called exactly n times" do + @mock.should_receive(:random_call).at_most(4).times + @mock.random_call + @mock.random_call + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at most n times method is called less than n times" do + @mock.should_receive(:random_call).at_most(4).times + @mock.random_call + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at most n times method is never called" do + @mock.should_receive(:random_call).at_most(4).times + @mock.rspec_verify + end + + it "should pass when at most once method is called once" do + @mock.should_receive(:random_call).at_most(:once) + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at most once method is never called" do + @mock.should_receive(:random_call).at_most(:once) + @mock.rspec_verify + end + + it "should pass when at most twice method is called once" do + @mock.should_receive(:random_call).at_most(:twice) + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at most twice method is called twice" do + @mock.should_receive(:random_call).at_most(:twice) + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass when at most twice method is never called" do + @mock.should_receive(:random_call).at_most(:twice) + @mock.rspec_verify + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_10260_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_10260_spec.rb new file mode 100644 index 0000000..2f7b580 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_10260_spec.rb @@ -0,0 +1,8 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "An RSpec Mock" do + it "should hide internals in its inspect representation" do + m = mock('cup') + m.inspect.should =~ /#<Spec::Mocks::Mock:0x[a-f0-9.]+ @name="cup">/ + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb new file mode 100644 index 0000000..e321922 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb @@ -0,0 +1,24 @@ +describe "Mock" do + before do + @mock = mock("test mock") + end + + specify "when one example has an expectation (non-mock) inside the block passed to the mock" do + @mock.should_receive(:msg) do |b| + b.should be_true #this call exposes the problem + end + @mock.msg(false) rescue nil + end + + specify "then the next example should behave as expected instead of saying" do + @mock.should_receive(:foobar) + @mock.foobar + @mock.rspec_verify + begin + @mock.foobar + rescue Exception => e + e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)" + end + end +end + diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_11545_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_11545_spec.rb new file mode 100644 index 0000000..8a334af --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_11545_spec.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +class LiarLiarPantsOnFire + def respond_to?(sym) + true + end + + def self.respond_to?(sym) + true + end +end + +describe 'should_receive' do + before(:each) do + @liar = LiarLiarPantsOnFire.new + end + + it "should work when object lies about responding to a method" do + @liar.should_receive(:something) + @liar.something + end + + it 'should work when class lies about responding to a method' do + LiarLiarPantsOnFire.should_receive(:something) + LiarLiarPantsOnFire.something + end + + it 'should cleanup after itself' do + LiarLiarPantsOnFire.metaclass.instance_methods.should_not include("something") + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb new file mode 100644 index 0000000..82d49ea --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb @@ -0,0 +1,30 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "mock failure" do + + it "should tell you when it receives the right message with the wrong args" do + m = mock("foo") + m.should_receive(:bar).with("message") + lambda { + m.bar("different message") + }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")}) + m.bar("message") # allows the spec to pass + end + + it "should tell you when it receives the right message with the wrong args if you stub the method" do + pending("fix bug 15719") + # NOTE - for whatever reason, if you use a the block style of pending here, + # rcov gets unhappy. Don't know why yet. + m = mock("foo") + m.stub!(:bar) + m.should_receive(:bar).with("message") + lambda { + m.bar("different message") + }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")}) + m.bar("message") # allows the spec to pass + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_7611_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_7611_spec.rb new file mode 100644 index 0000000..6c9705b --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_7611_spec.rb @@ -0,0 +1,19 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Bug7611 + class Foo + end + + class Bar < Foo + end + + describe "A Partial Mock" do + it "should respect subclasses" do + Foo.stub!(:new).and_return(Object.new) + end + + it "should" do + Bar.new.class.should == Bar + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_7805_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_7805_spec.rb new file mode 100644 index 0000000..f7edfac --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_7805_spec.rb @@ -0,0 +1,22 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Bug7805 + #This is really a duplicate of 8302 + + describe "Stubs should correctly restore module methods" do + it "1 - stub the open method" do + File.stub!(:open).and_return("something") + File.open.should == "something" + end + it "2 - use File.open to create example.txt" do + filename = "#{File.dirname(__FILE__)}/example-#{Time.new.to_i}.txt" + File.exist?(filename).should be_false + file = File.open(filename,'w') + file.close + File.exist?(filename).should be_true + File.delete(filename) + File.exist?(filename).should be_false + end + end + +end diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb new file mode 100644 index 0000000..7edc3c0 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "An object where respond_to? is true and does not have method" do + # When should_receive(:sym) is sent to any object, the Proxy sends + # respond_to?(:sym) to that object to see if the method should be proxied. + # + # If respond_to? itself is proxied, then when the Proxy sends respond_to? + # to the object, the proxy is invoked and responds yes (if so set in the spec). + # When the object does NOT actually respond to :sym, an exception is thrown + # when trying to proxy it. + # + # The fix was to keep track of whether :respond_to? had been proxied and, if + # so, call the munged copy of :respond_to? on the object. + + it "should not raise an exception for Object" do + obj = Object.new + obj.should_receive(:respond_to?).with(:foobar).and_return(true) + obj.should_receive(:foobar).and_return(:baz) + obj.respond_to?(:foobar).should be_true + obj.foobar.should == :baz + end + + it "should not raise an exception for mock" do + obj = mock("obj") + obj.should_receive(:respond_to?).with(:foobar).and_return(true) + obj.should_receive(:foobar).and_return(:baz) + obj.respond_to?(:foobar).should be_true + obj.foobar.should == :baz + end + +end diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_8302_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_8302_spec.rb new file mode 100644 index 0000000..a41df43 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_8302_spec.rb @@ -0,0 +1,26 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Bug8302 + class Foo + def Foo.class_method(arg) + end + + def instance_bar(arg) + end + end + + describe "Bug report 8302:" do + it "class method is not restored correctly when proxied" do + Foo.should_not_receive(:class_method).with(Array.new) + Foo.rspec_verify + Foo.class_method(Array.new) + end + + it "instance method is not restored correctly when proxied" do + foo = Foo.new + foo.should_not_receive(:instance_bar).with(Array.new) + foo.rspec_verify + foo.instance_bar(Array.new) + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb b/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb new file mode 100644 index 0000000..db6dcea --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb @@ -0,0 +1,115 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "failing MockArgumentConstraints" do + before(:each) do + @mock = mock("test mock") + @reporter = Mock.new("reporter", :null_object => true) + end + + after(:each) do + @mock.rspec_reset + end + + it "should reject non boolean" do + @mock.should_receive(:random_call).with(boolean()) + lambda do + @mock.random_call("false") + end.should raise_error(MockExpectationError) + end + + it "should reject non numeric" do + @mock.should_receive(:random_call).with(an_instance_of(Numeric)) + lambda do + @mock.random_call("1") + end.should raise_error(MockExpectationError) + end + + it "should reject non string" do + @mock.should_receive(:random_call).with(an_instance_of(String)) + lambda do + @mock.random_call(123) + end.should raise_error(MockExpectationError) + end + + it "should reject goose when expecting a duck" do + @mock.should_receive(:random_call).with(duck_type(:abs, :div)) + lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError) + end + + it "should fail if regexp does not match submitted string" do + @mock.should_receive(:random_call).with(/bcd/) + lambda { @mock.random_call("abc") }.should raise_error(MockExpectationError) + end + + it "should fail if regexp does not match submitted regexp" do + @mock.should_receive(:random_call).with(/bcd/) + lambda { @mock.random_call(/bcde/) }.should raise_error(MockExpectationError) + end + + it "should fail for a hash w/ wrong values" do + @mock.should_receive(:random_call).with(:a => "b", :c => "d") + lambda do + @mock.random_call(:a => "b", :c => "e") + end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/) + end + + it "should fail for a hash w/ wrong keys" do + @mock.should_receive(:random_call).with(:a => "b", :c => "d") + lambda do + @mock.random_call("a" => "b", "c" => "d") + end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/) + end + + it "should match against a Matcher" do + lambda do + @mock.should_receive(:msg).with(equal(3)) + @mock.msg(37) + end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)") + end + + it "should fail no_args with one arg" do + lambda do + @mock.should_receive(:msg).with(no_args) + @mock.msg(37) + end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (no args) but received it with (37)") + end + end + + describe "failing deprecated MockArgumentConstraints" do + before(:each) do + @mock = mock("test mock") + @reporter = Mock.new("reporter", :null_object => true) + Kernel.stub!(:warn) + end + + after(:each) do + @mock.rspec_reset + end + + it "should reject non boolean" do + @mock.should_receive(:random_call).with(:boolean) + lambda do + @mock.random_call("false") + end.should raise_error(MockExpectationError) + end + + it "should reject non numeric" do + @mock.should_receive(:random_call).with(:numeric) + lambda do + @mock.random_call("1") + end.should raise_error(MockExpectationError) + end + + it "should reject non string" do + @mock.should_receive(:random_call).with(:string) + lambda do + @mock.random_call(123) + end.should raise_error(MockExpectationError) + end + + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/mock_ordering_spec.rb b/vendor/gems/rspec/spec/spec/mocks/mock_ordering_spec.rb new file mode 100644 index 0000000..919da29 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/mock_ordering_spec.rb @@ -0,0 +1,84 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Mocks + + describe "Mock ordering" do + + before do + @mock = mock("test mock") + end + + after do + @mock.rspec_reset + end + + it "should pass two calls in order" do + @mock.should_receive(:one).ordered + @mock.should_receive(:two).ordered + @mock.one + @mock.two + @mock.rspec_verify + end + + it "should pass three calls in order" do + @mock.should_receive(:one).ordered + @mock.should_receive(:two).ordered + @mock.should_receive(:three).ordered + @mock.one + @mock.two + @mock.three + @mock.rspec_verify + end + + it "should fail if second call comes first" do + @mock.should_receive(:one).ordered + @mock.should_receive(:two).ordered + lambda do + @mock.two + end.should raise_error(MockExpectationError, "Mock 'test mock' received :two out of order") + end + + it "should fail if third call comes first" do + @mock.should_receive(:one).ordered + @mock.should_receive(:two).ordered + @mock.should_receive(:three).ordered + @mock.one + lambda do + @mock.three + end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order") + end + + it "should fail if third call comes second" do + @mock.should_receive(:one).ordered + @mock.should_receive(:two).ordered + @mock.should_receive(:three).ordered + @mock.one + lambda do + @mock.three + end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order") + end + + it "should ignore order of non ordered calls" do + @mock.should_receive(:ignored_0) + @mock.should_receive(:ordered_1).ordered + @mock.should_receive(:ignored_1) + @mock.should_receive(:ordered_2).ordered + @mock.should_receive(:ignored_2) + @mock.should_receive(:ignored_3) + @mock.should_receive(:ordered_3).ordered + @mock.should_receive(:ignored_4) + @mock.ignored_3 + @mock.ordered_1 + @mock.ignored_0 + @mock.ordered_2 + @mock.ignored_4 + @mock.ignored_2 + @mock.ordered_3 + @mock.ignored_1 + @mock.rspec_verify + end + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/mock_space_spec.rb b/vendor/gems/rspec/spec/spec/mocks/mock_space_spec.rb new file mode 100644 index 0000000..23ffd01 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/mock_space_spec.rb @@ -0,0 +1,54 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' +require 'spec/mocks' + +module Spec + module Mocks + describe Space do + before :each do + @space = Space.new + klazz = Class.new do + def rspec_verify + @verified = true + end + def verified? + @verified + end + def rspec_reset + @reset = true + end + def reset? + @reset + end + end + @m1 = klazz.new + @m2 = klazz.new + end + it "should verify all mocks within" do + @space.add(@m1) + @space.add(@m2) + @space.verify_all + @m1.should be_verified + @m2.should be_verified + end + it "should reset all mocks within" do + @space.add(m1 = mock("mock1")) + @space.add(m2 = mock("mock2")) + m1.should_receive(:rspec_reset) + m2.should_receive(:rspec_reset) + @space.reset_all + end + it "should clear internal mocks on reset_all" do + @space.add(m = mock("mock")) + @space.reset_all + @space.instance_eval { mocks.empty? }.should be_true + end + it "should only add an instance once" do + @space.add(m1 = mock("mock1")) + @space.add(m1) + m1.should_receive(:rspec_verify) + @space.verify_all + end + end + end +end + diff --git a/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb b/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb new file mode 100644 index 0000000..85a71e3 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb @@ -0,0 +1,475 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Mocks + describe Mock do + + before(:each) do + @mock = mock("test mock") + end + + after(:each) do + @mock.rspec_reset + end + + it "should report line number of expectation of unreceived message" do + expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3) + begin + @mock.rspec_verify + violated + rescue MockExpectationError => e + # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line + e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/) + end + end + + it "should pass when not receiving message specified as not to be received" do + @mock.should_not_receive(:not_expected) + @mock.rspec_verify + end + + it "should pass when receiving message specified as not to be received with different args" do + @mock.should_not_receive(:message).with("unwanted text") + @mock.should_receive(:message).with("other text") + @mock.message "other text" + @mock.rspec_verify + end + + it "should fail when receiving message specified as not to be received" do + @mock.should_not_receive(:not_expected) + @mock.not_expected + lambda { + @mock.rspec_verify + violated + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once") + end + + it "should fail when receiving message specified as not to be received with args" do + @mock.should_not_receive(:not_expected).with("unexpected text") + @mock.not_expected("unexpected text") + lambda { + @mock.rspec_verify + violated + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once") + end + + it "should pass when receiving message specified as not to be received with wrong args" do + @mock.should_not_receive(:not_expected).with("unexpected text") + @mock.not_expected "really unexpected text" + @mock.rspec_verify + end + + it "should allow block to calculate return values" do + @mock.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a } + @mock.something("a","b","c").should == "cba" + @mock.rspec_verify + end + + it "should allow parameter as return value" do + @mock.should_receive(:something).with("a","b","c").and_return("booh") + @mock.something("a","b","c").should == "booh" + @mock.rspec_verify + end + + it "should return nil if no return value set" do + @mock.should_receive(:something).with("a","b","c") + @mock.something("a","b","c").should be_nil + @mock.rspec_verify + end + + it "should raise exception if args dont match when method called" do + @mock.should_receive(:something).with("a","b","c").and_return("booh") + lambda { + @mock.something("a","d","c") + violated + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")") + end + + it "should fail if unexpected method called" do + lambda { + @mock.something("a","b","c") + violated + }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")") + end + + it "should use block for expectation if provided" do + @mock.should_receive(:something) do | a, b | + a.should == "a" + b.should == "b" + "booh" + end + @mock.something("a", "b").should == "booh" + @mock.rspec_verify + end + + it "should fail if expectation block fails" do + @mock.should_receive(:something) {| bool | bool.should be_true} + lambda { + @mock.something false + }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/) + end + + it "should fail right away when method defined as never is received" do + pending "Used to pass (false positive). Which one is wrong, the spec or the actual behavior?" + + @mock.should_receive(:not_expected).never + lambda { + @mock.not_expected + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected 0 times, but received it 1 times") + end + + it "should eventually fail when method defined as never is received" do + @mock.should_receive(:not_expected).never + @mock.not_expected + + lambda { + @mock.rspec_verify + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once") + end + + it "should raise when told to" do + @mock.should_receive(:something).and_raise(RuntimeError) + lambda do + @mock.something + end.should raise_error(RuntimeError) + end + + it "should raise passed an Exception instance" do + error = RuntimeError.new("error message") + @mock.should_receive(:something).and_raise(error) + lambda { + @mock.something + }.should raise_error(RuntimeError, "error message") + end + + it "should raise RuntimeError with passed message" do + @mock.should_receive(:something).and_raise("error message") + lambda { + @mock.something + }.should raise_error(RuntimeError, "error message") + end + + it "should not raise when told to if args dont match" do + @mock.should_receive(:something).with(2).and_raise(RuntimeError) + lambda { + @mock.something 1 + }.should raise_error(MockExpectationError) + end + + it "should throw when told to" do + @mock.should_receive(:something).and_throw(:blech) + lambda { + @mock.something + }.should throw_symbol(:blech) + end + + it "should raise when explicit return and block constrained" do + lambda { + @mock.should_receive(:fruit) do |colour| + :strawberry + end.and_return :apple + }.should raise_error(AmbiguousReturnError) + end + + it "should ignore args on any args" do + @mock.should_receive(:something).at_least(:once).with(any_args) + @mock.something + @mock.something 1 + @mock.something "a", 2 + @mock.something [], {}, "joe", 7 + @mock.rspec_verify + end + + it "should fail on no args if any args received" do + @mock.should_receive(:something).with(no_args()) + lambda { + @mock.something 1 + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)") + end + + it "should fail when args are expected but none are received" do + @mock.should_receive(:something).with(1) + lambda { + @mock.something + }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)") + end + + it "should yield 0 args to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield + a = nil + @mock.yield_back {|*a|} + a.should == [] + @mock.rspec_verify + end + + it "should yield 0 args multiple times to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield. + and_yield + a = nil + b = [] + @mock.yield_back {|*a| b << a} + b.should == [ [], [] ] + @mock.rspec_verify + end + + it "should yield one arg to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99) + a = nil + @mock.yield_back {|*a|} + a.should == [99] + @mock.rspec_verify + end + + it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99). + and_yield(43). + and_yield("something fruity") + a = nil + b = [] + @mock.yield_back {|*a| b << a} + b.should == [[99], [43], ["something fruity"]] + @mock.rspec_verify + end + + it "should yield many args to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go") + a = nil + @mock.yield_back {|*a|} + a.should == [99, 27, "go"] + @mock.rspec_verify + end + + it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go"). + and_yield("wait", :amber). + and_yield("stop", 12, :red) + a = nil + b = [] + @mock.yield_back {|*a| b << a} + b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]] + @mock.rspec_verify + end + + it "should yield single value" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield(99) + a = nil + @mock.yield_back {|a|} + a.should == 99 + @mock.rspec_verify + end + + it "should yield single value 3 times consecutively" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99). + and_yield(43). + and_yield("something fruity") + a = nil + b = [] + @mock.yield_back {|a| b << a} + b.should == [99, 43, "something fruity"] + @mock.rspec_verify + end + + it "should yield two values" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') + a, b = nil + @mock.yield_back {|a,b|} + a.should == 'wha' + b.should == 'zup' + @mock.rspec_verify + end + + it "should yield two values 3 times consecutively" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup'). + and_yield('not', 'down'). + and_yield(14, 65) + a, b = nil + c = [] + @mock.yield_back {|a,b| c << [a, b]} + c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]] + @mock.rspec_verify + end + + it "should fail when calling yielding method with wrong arity" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') + lambda { + @mock.yield_back {|a|} + }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1") + end + + it "should fail when calling yielding method consecutively with wrong arity" do + @mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup'). + and_yield('down'). + and_yield(14, 65) + lambda { + a, b = nil + c = [] + @mock.yield_back {|a,b| c << [a, b]} + }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"down\"| to block with arity of 2") + end + + it "should fail when calling yielding method without block" do + @mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup') + lambda { + @mock.yield_back + }.should raise_error(MockExpectationError, "Mock 'test mock' asked to yield |[\"wha\", \"zup\"]| but no block was passed") + end + + it "should be able to mock send" do + @mock.should_receive(:send).with(any_args) + @mock.send 'hi' + @mock.rspec_verify + end + + it "should be able to raise from method calling yielding mock" do + @mock.should_receive(:yield_me).and_yield 44 + + lambda { + @mock.yield_me do |x| + raise "Bang" + end + }.should raise_error(StandardError, "Bang") + + @mock.rspec_verify + end + + it "should clear expectations after verify" do + @mock.should_receive(:foobar) + @mock.foobar + @mock.rspec_verify + lambda { + @mock.foobar + }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :foobar with (no args)") + end + + it "should restore objects to their original state on rspec_reset" do + mock = mock("this is a mock") + mock.should_receive(:blah) + mock.rspec_reset + mock.rspec_verify #should throw if reset didn't work + end + + it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do + # Object#method_missing throws either NameErrors or NoMethodErrors. + # + # On a fresh ruby program Object#method_missing: + # * raises a NoMethodError when called directly + # * raises a NameError when called indirectly + # + # Once Object#method_missing has been called at least once (on any object) + # it starts behaving differently: + # * raises a NameError when called directly + # * raises a NameError when called indirectly + # + # There was a bug in Mock#method_missing that relied on the fact + # that calling Object#method_missing directly raises a NoMethodError. + # This example tests that the bug doesn't exist anymore. + + + # Ensures that method_missing always raises NameErrors. + a_method_that_doesnt_exist rescue + + + @mock.should_receive(:foobar) + @mock.foobar + @mock.rspec_verify + + lambda { @mock.foobar }.should_not raise_error(NameError) + lambda { @mock.foobar }.should raise_error(MockExpectationError) + end + + it "should temporarily replace a method stub on a mock" do + @mock.stub!(:msg).and_return(:stub_value) + @mock.should_receive(:msg).with(:arg).and_return(:mock_value) + @mock.msg(:arg).should equal(:mock_value) + @mock.msg.should equal(:stub_value) + @mock.msg.should equal(:stub_value) + @mock.rspec_verify + end + + it "should temporarily replace a method stub on a non-mock" do + non_mock = Object.new + non_mock.stub!(:msg).and_return(:stub_value) + non_mock.should_receive(:msg).with(:arg).and_return(:mock_value) + non_mock.msg(:arg).should equal(:mock_value) + non_mock.msg.should equal(:stub_value) + non_mock.msg.should equal(:stub_value) + non_mock.rspec_verify + end + + it "should assign stub return values" do + mock = Mock.new('name', :message => :response) + mock.message.should == :response + end + end + + describe "a mock message receiving a block" do + before(:each) do + @mock = mock("mock") + @calls = 0 + end + + def add_call + @calls = @calls + 1 + end + + it "should call the block after #should_receive" do + @mock.should_receive(:foo) { add_call } + + @mock.foo + + @calls.should == 1 + end + + it "should call the block after #once" do + @mock.should_receive(:foo).once { add_call } + + @mock.foo + + @calls.should == 1 + end + + it "should call the block after #twice" do + @mock.should_receive(:foo).twice { add_call } + + @mock.foo + @mock.foo + + @calls.should == 2 + end + + it "should call the block after #times" do + @mock.should_receive(:foo).exactly(10).times { add_call } + + (1..10).each { @mock.foo } + + @calls.should == 10 + end + + it "should call the block after #any_number_of_times" do + @mock.should_receive(:foo).any_number_of_times { add_call } + + (1..7).each { @mock.foo } + + @calls.should == 7 + end + + it "should call the block after #with" do + @mock.should_receive(:foo).with(:arg) { add_call } + + @mock.foo(:arg) + + @calls.should == 1 + end + + it "should call the block after #ordered" do + @mock.should_receive(:foo).ordered { add_call } + @mock.should_receive(:bar).ordered { add_call } + + @mock.foo + @mock.bar + + @calls.should == 2 + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb b/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb new file mode 100644 index 0000000..3e26b73 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb @@ -0,0 +1,113 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Mocks + describe "a Mock expectation with multiple return values and no specified count" do + before(:each) do + @mock = Mock.new("mock") + @return_values = ["1",2,Object.new] + @mock.should_receive(:message).and_return(@return_values[0],@return_values[1],@return_values[2]) + end + + it "should return values in order to consecutive calls" do + @mock.message.should == @return_values[0] + @mock.message.should == @return_values[1] + @mock.message.should == @return_values[2] + @mock.rspec_verify + end + + it "should complain when there are too few calls" do + third = Object.new + @mock.message.should == @return_values[0] + @mock.message.should == @return_values[1] + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice") + end + + it "should complain when there are too many calls" do + third = Object.new + @mock.message.should == @return_values[0] + @mock.message.should == @return_values[1] + @mock.message.should == @return_values[2] + @mock.message.should == @return_values[2] + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times") + end + end + + describe "a Mock expectation with multiple return values with a specified count equal to the number of values" do + before(:each) do + @mock = Mock.new("mock") + @return_values = ["1",2,Object.new] + @mock.should_receive(:message).exactly(3).times.and_return(@return_values[0],@return_values[1],@return_values[2]) + end + + it "should return values in order to consecutive calls" do + @mock.message.should == @return_values[0] + @mock.message.should == @return_values[1] + @mock.message.should == @return_values[2] + @mock.rspec_verify + end + + it "should complain when there are too few calls" do + third = Object.new + @mock.message.should == @return_values[0] + @mock.message.should == @return_values[1] + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice") + end + + it "should complain when there are too many calls" do + third = Object.new + @mock.message.should == @return_values[0] + @mock.message.should == @return_values[1] + @mock.message.should == @return_values[2] + @mock.message.should == @return_values[2] + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times") + end + end + + describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do + before(:each) do + @mock = Mock.new("mock") + @mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22) + end + + it "should use last return value for subsequent calls" do + @mock.message.should equal(11) + @mock.message.should equal(22) + @mock.message.should equal(22) + @mock.rspec_verify + end + + it "should fail when called less than the specified number" do + @mock.message.should equal(11) + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (no args) twice, but received it once") + end + end + describe "a Mock expectation with multiple return values with a specified count larger than the number of values" do + before(:each) do + @mock = Mock.new("mock") + @mock.should_receive(:message).exactly(3).times.and_return(11, 22) + end + + it "should use last return value for subsequent calls" do + @mock.message.should equal(11) + @mock.message.should equal(22) + @mock.message.should equal(22) + @mock.rspec_verify + end + + it "should fail when called less than the specified number" do + @mock.message.should equal(11) + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it once") + end + + it "should fail when called greater than the specified number" do + @mock.message.should equal(11) + @mock.message.should equal(22) + @mock.message.should equal(22) + @mock.message.should equal(22) + lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times") + end + end + end +end + diff --git a/vendor/gems/rspec/spec/spec/mocks/null_object_mock_spec.rb b/vendor/gems/rspec/spec/spec/mocks/null_object_mock_spec.rb new file mode 100644 index 0000000..57e8ca3 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/null_object_mock_spec.rb @@ -0,0 +1,40 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "a mock acting as a NullObject" do + before(:each) do + @mock = Mock.new("null_object", :null_object => true) + end + + it "should allow explicit expectation" do + @mock.should_receive(:something) + @mock.something + end + + it "should fail verification when explicit exception not met" do + lambda do + @mock.should_receive(:something) + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should ignore unexpected methods" do + @mock.random_call("a", "d", "c") + @mock.rspec_verify + end + + it "should expected message with different args first" do + @mock.should_receive(:message).with(:expected_arg) + @mock.message(:unexpected_arg) + @mock.message(:expected_arg) + end + + it "should expected message with different args second" do + @mock.should_receive(:message).with(:expected_arg) + @mock.message(:expected_arg) + @mock.message(:unexpected_arg) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/once_counts_spec.rb b/vendor/gems/rspec/spec/spec/mocks/once_counts_spec.rb new file mode 100644 index 0000000..2c15d5c --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/once_counts_spec.rb @@ -0,0 +1,53 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "OnceCounts" do + before(:each) do + @mock = mock("test mock") + end + + it "once should fail when called once with wrong args" do + @mock.should_receive(:random_call).once.with("a", "b", "c") + lambda do + @mock.random_call("d", "e", "f") + end.should raise_error(MockExpectationError) + @mock.rspec_reset + end + + it "once should fail when called twice" do + @mock.should_receive(:random_call).once + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "once should fail when not called" do + @mock.should_receive(:random_call).once + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "once should pass when called once" do + @mock.should_receive(:random_call).once + @mock.random_call + @mock.rspec_verify + end + + it "once should pass when called once with specified args" do + @mock.should_receive(:random_call).once.with("a", "b", "c") + @mock.random_call("a", "b", "c") + @mock.rspec_verify + end + + it "once should pass when called once with unspecified args" do + @mock.should_receive(:random_call).once + @mock.random_call("a", "b", "c") + @mock.rspec_verify + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb b/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb new file mode 100644 index 0000000..0bfab26 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb @@ -0,0 +1,45 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "calling :should_receive with an options hash" do + it_should_behave_like "sandboxed rspec_options" + attr_reader :reporter, :example_group + before do + @reporter = ::Spec::Runner::Reporter.new(options) + @example_group = Class.new(::Spec::Example::ExampleGroup) do + plugin_mock_framework + describe("Some Examples") + end + reporter.add_example_group example_group + end + + it "should report the file and line submitted with :expected_from" do + example_definition = example_group.it "spec" do + mock = Spec::Mocks::Mock.new("a mock") + mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37") + mock.rspec_verify + end + example = example_group.new(example_definition) + + reporter.should_receive(:example_finished) do |spec, error| + error.backtrace.detect {|line| line =~ /\/path\/to\/blah.ext:37/}.should_not be_nil + end + example.execute(options, {}) + end + + it "should use the message supplied with :message" do + example_definition = @example_group.it "spec" do + mock = Spec::Mocks::Mock.new("a mock") + mock.should_receive(:message, :message => "recebi nada") + mock.rspec_verify + end + example = @example_group.new(example_definition) + @reporter.should_receive(:example_finished) do |spec, error| + error.message.should == "recebi nada" + end + example.execute(@options, {}) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb b/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb new file mode 100644 index 0000000..d7e5944 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb @@ -0,0 +1,106 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "using a Partial Mock," do + before(:each) do + @object = Object.new + end + + it "should name the class in the failure message" do + @object.should_receive(:foo) + lambda do + @object.rspec_verify + end.should raise_error(Spec::Mocks::MockExpectationError, /Object/) + end + + it "should not conflict with @options in the object" do + @object.instance_eval { @options = Object.new } + @object.should_receive(:blah) + @object.blah + end + + it "should_not_receive should mock out the method" do + @object.should_not_receive(:fuhbar) + @object.fuhbar + lambda do + @object.rspec_verify + end.should raise_error(Spec::Mocks::MockExpectationError) + end + + it "should_not_receive should return a negative message expectation" do + @object.should_not_receive(:foobar).should be_kind_of(NegativeMessageExpectation) + end + + it "should_receive should mock out the method" do + @object.should_receive(:foobar).with(:test_param).and_return(1) + @object.foobar(:test_param).should equal(1) + end + + it "should_receive should handle a hash" do + @object.should_receive(:foobar).with(:key => "value").and_return(1) + @object.foobar(:key => "value").should equal(1) + end + + it "should_receive should handle an inner hash" do + hash = {:a => {:key => "value"}} + @object.should_receive(:foobar).with(:key => "value").and_return(1) + @object.foobar(hash[:a]).should equal(1) + end + + it "should_receive should return a message expectation" do + @object.should_receive(:foobar).should be_kind_of(MessageExpectation) + @object.foobar + end + + it "should_receive should verify method was called" do + @object.should_receive(:foobar).with(:test_param).and_return(1) + lambda do + @object.rspec_verify + end.should raise_error(Spec::Mocks::MockExpectationError) + end + + it "should_receive should also take a String argument" do + @object.should_receive('foobar') + @object.foobar + end + + it "should_not_receive should also take a String argument" do + @object.should_not_receive('foobar') + @object.foobar + lambda do + @object.rspec_verify + end.should raise_error(Spec::Mocks::MockExpectationError) + end + + it "should use report nil in the error message" do + @this_will_resolve_to_nil.should_receive(:foobar) + lambda do + @this_will_resolve_to_nil.rspec_verify + end.should raise_error(Spec::Mocks::MockExpectationError, /NilClass.*expected :foobar with/) + end + end + + describe "Partially mocking an object that defines ==, after another mock has been defined" do + before(:each) do + stub("existing mock", :foo => :foo) + end + + class PartiallyMockedEquals + attr_reader :val + def initialize(val) + @val = val + end + + def ==(other) + @val == other.val + end + end + + it "should not raise an error when stubbing the object" do + o = PartiallyMockedEquals.new :foo + lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb b/vendor/gems/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb new file mode 100644 index 0000000..c857d83 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb @@ -0,0 +1,66 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec +module Mocks +describe "PartialMockUsingMocksDirectly" do + before(:each) do + + klass=Class.new + klass.class_eval do + def existing_method + :original_value + end + end + @obj = klass.new + + end + + # See http://rubyforge.org/tracker/index.php?func=detail&aid=10263&group_id=797&atid=3149 + # specify "should clear expectations on verify" do + # @obj.should_receive(:msg) + # @obj.msg + # @obj.rspec_verify + # lambda do + # @obj.msg + # end.should raise_error(NoMethodError) + # + # end + it "should fail when expected message is not received" do + @obj.should_receive(:msg) + lambda do + @obj.rspec_verify + end.should raise_error(MockExpectationError) + + end + it "should fail when message is received with incorrect args" do + @obj.should_receive(:msg).with(:correct_arg) + lambda do + @obj.msg(:incorrect_arg) + end.should raise_error(MockExpectationError) + @obj.msg(:correct_arg) + + end + it "should pass when expected message is received" do + @obj.should_receive(:msg) + @obj.msg + @obj.rspec_verify + + end + it "should pass when message is received with correct args" do + @obj.should_receive(:msg).with(:correct_arg) + @obj.msg(:correct_arg) + @obj.rspec_verify + + end + it "should revert to original method if existed" do + @obj.existing_method.should equal(:original_value) + @obj.should_receive(:existing_method).and_return(:mock_value) + @obj.existing_method.should equal(:mock_value) + @obj.rspec_verify + @obj.existing_method.should equal(:original_value) + + end + +end +end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb b/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb new file mode 100644 index 0000000..6de0a58 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb @@ -0,0 +1,154 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "mock argument constraints", :shared => true do + before(:each) do + @mock = Mock.new("test mock") + Kernel.stub!(:warn) + end + + after(:each) do + @mock.rspec_verify + end + end + + describe Methods, "handling argument constraints with DEPRECATED symbols" do + it_should_behave_like "mock argument constraints" + + it "should accept true as boolean" do + @mock.should_receive(:random_call).with(:boolean) + @mock.random_call(true) + end + + it "should accept false as boolean" do + @mock.should_receive(:random_call).with(:boolean) + @mock.random_call(false) + end + + it "should accept fixnum as numeric" do + @mock.should_receive(:random_call).with(:numeric) + @mock.random_call(1) + end + + it "should accept float as numeric" do + @mock.should_receive(:random_call).with(:numeric) + @mock.random_call(1.5) + end + + it "should accept string as anything" do + @mock.should_receive(:random_call).with("a", :anything, "c") + @mock.random_call("a", "whatever", "c") + end + + it "should match string" do + @mock.should_receive(:random_call).with(:string) + @mock.random_call("a string") + end + + it "should match no args against any_args" do + @mock.should_receive(:random_call).with(:any_args) + @mock.random_call("a string") + end + + it "should match no args against no_args" do + @mock.should_receive(:random_call).with(:no_args) + @mock.random_call + end + end + + describe Methods, "handling argument constraints" do + it_should_behave_like "mock argument constraints" + + it "should accept true as boolean()" do + @mock.should_receive(:random_call).with(boolean()) + @mock.random_call(true) + end + + it "should accept false as boolean()" do + @mock.should_receive(:random_call).with(boolean()) + @mock.random_call(false) + end + + it "should accept fixnum as an_instance_of(Numeric)" do + @mock.should_receive(:random_call).with(an_instance_of(Numeric)) + @mock.random_call(1) + end + + it "should accept float as an_instance_of(Numeric)" do + @mock.should_receive(:random_call).with(an_instance_of(Numeric)) + @mock.random_call(1.5) + end + + it "should accept string as anything()" do + @mock.should_receive(:random_call).with("a", anything(), "c") + @mock.random_call("a", "whatever", "c") + end + + it "should match duck type with one method" do + @mock.should_receive(:random_call).with(duck_type(:length)) + @mock.random_call([]) + end + + it "should match duck type with two methods" do + @mock.should_receive(:random_call).with(duck_type(:abs, :div)) + @mock.random_call(1) + end + + it "should match no args against any_args()" do + @mock.should_receive(:random_call).with(any_args) + @mock.random_call() + end + + it "should match one arg against any_args()" do + @mock.should_receive(:random_call).with(any_args) + @mock.random_call("a string") + end + + it "should match no args against no_args()" do + @mock.should_receive(:random_call).with(no_args) + @mock.random_call() + end + end + + describe Methods, "handling non-constraint arguments" do + + it "should match non special symbol (can be removed when deprecated symbols are removed)" do + @mock.should_receive(:random_call).with(:some_symbol) + @mock.random_call(:some_symbol) + end + + it "should match string against regexp" do + @mock.should_receive(:random_call).with(/bcd/) + @mock.random_call("abcde") + end + + it "should match regexp against regexp" do + @mock.should_receive(:random_call).with(/bcd/) + @mock.random_call(/bcd/) + end + + it "should match against a hash submitted and received by value" do + @mock.should_receive(:random_call).with(:a => "a", :b => "b") + @mock.random_call(:a => "a", :b => "b") + end + + it "should match against a hash submitted by reference and received by value" do + opts = {:a => "a", :b => "b"} + @mock.should_receive(:random_call).with(opts) + @mock.random_call(:a => "a", :b => "b") + end + + it "should match against a hash submitted by value and received by reference" do + opts = {:a => "a", :b => "b"} + @mock.should_receive(:random_call).with(:a => "a", :b => "b") + @mock.random_call(opts) + end + + it "should match against a Matcher" do + @mock.should_receive(:msg).with(equal(37)) + @mock.msg(37) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/precise_counts_spec.rb b/vendor/gems/rspec/spec/spec/mocks/precise_counts_spec.rb new file mode 100644 index 0000000..ba38989 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/precise_counts_spec.rb @@ -0,0 +1,52 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "PreciseCounts" do + before(:each) do + @mock = mock("test mock") + end + + it "should fail when exactly n times method is called less than n times" do + @mock.should_receive(:random_call).exactly(3).times + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should fail when exactly n times method is never called" do + @mock.should_receive(:random_call).exactly(3).times + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "should pass if exactly n times method is called exactly n times" do + @mock.should_receive(:random_call).exactly(3).times + @mock.random_call + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "should pass multiple calls with different args and counts" do + @mock.should_receive(:random_call).twice.with(1) + @mock.should_receive(:random_call).once.with(2) + @mock.random_call(1) + @mock.random_call(2) + @mock.random_call(1) + @mock.rspec_verify + end + + it "should pass mutiple calls with different args" do + @mock.should_receive(:random_call).once.with(1) + @mock.should_receive(:random_call).once.with(2) + @mock.random_call(1) + @mock.random_call(2) + @mock.rspec_verify + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/record_messages_spec.rb b/vendor/gems/rspec/spec/spec/mocks/record_messages_spec.rb new file mode 100644 index 0000000..ec24772 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/record_messages_spec.rb @@ -0,0 +1,26 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +module Spec + module Mocks + describe "a mock" do + before(:each) do + @mock = mock("mock", :null_object => true) + end + it "should answer false for received_message? when no messages received" do + @mock.received_message?(:message).should be_false + end + it "should answer true for received_message? when message received" do + @mock.message + @mock.received_message?(:message).should be_true + end + it "should answer true for received_message? when message received with correct args" do + @mock.message 1,2,3 + @mock.received_message?(:message, 1,2,3).should be_true + end + it "should answer false for received_message? when message received with incorrect args" do + @mock.message 1,2,3 + @mock.received_message?(:message, 1,2).should be_false + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb b/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb new file mode 100644 index 0000000..d6e23d7 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb @@ -0,0 +1,181 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "A method stub" do + before(:each) do + @class = Class.new do + def self.existing_class_method + :original_value + end + + def existing_instance_method + :original_value + end + end + @instance = @class.new + end + + it "should return expected value when expected message is received" do + @instance.stub!(:msg).and_return(:return_value) + @instance.msg.should equal(:return_value) + @instance.rspec_verify + end + + it "should ignore when expected message is received" do + @instance.stub!(:msg) + @instance.msg + lambda do + @instance.rspec_verify + end.should_not raise_error + end + + it "should ignore when message is received with args" do + @instance.stub!(:msg) + @instance.msg(:an_arg) + lambda do + @instance.rspec_verify + end.should_not raise_error + end + + it "should ignore when expected message is not received" do + @instance.stub!(:msg) + lambda do + @instance.rspec_verify + end.should_not raise_error + end + + it "should clear itself when verified" do + @instance.stub!(:this_should_go).and_return(:blah) + @instance.this_should_go.should == :blah + @instance.rspec_verify + lambda do + @instance.this_should_go + end.should raise_error(NameError) + end + + it "should return values in order to consecutive calls" do + return_values = ["1",2,Object.new] + @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) + @instance.msg.should == return_values[0] + @instance.msg.should == return_values[1] + @instance.msg.should == return_values[2] + end + + it "should keep returning last value in consecutive calls" do + return_values = ["1",2,Object.new] + @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2]) + @instance.msg.should == return_values[0] + @instance.msg.should == return_values[1] + @instance.msg.should == return_values[2] + @instance.msg.should == return_values[2] + @instance.msg.should == return_values[2] + end + + it "should revert to original instance method if there is one" do + @instance.existing_instance_method.should equal(:original_value) + @instance.stub!(:existing_instance_method).and_return(:mock_value) + @instance.existing_instance_method.should equal(:mock_value) + @instance.rspec_verify + @instance.existing_instance_method.should equal(:original_value) + end + + it "should revert to original class method if there is one" do + @class.existing_class_method.should equal(:original_value) + @class.stub!(:existing_class_method).and_return(:mock_value) + @class.existing_class_method.should equal(:mock_value) + @class.rspec_verify + @class.existing_class_method.should equal(:original_value) + end + + it "should yield a specified object" do + @instance.stub!(:method_that_yields).and_yield(:yielded_obj) + current_value = :value_before + @instance.method_that_yields {|val| current_value = val} + current_value.should == :yielded_obj + @instance.rspec_verify + end + + it "should yield multiple times with multiple calls to and_yield" do + @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value). + and_yield(:another_value) + current_value = [] + @instance.method_that_yields_multiple_times {|val| current_value << val} + current_value.should == [:yielded_value, :another_value] + @instance.rspec_verify + end + + it "should yield a specified object and return another specified object" do + yielded_obj = mock("my mock") + yielded_obj.should_receive(:foo).with(:bar) + @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz) + @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz + end + + it "should throw when told to" do + @mock.stub!(:something).and_throw(:up) + lambda do + @mock.something + end.should throw_symbol(:up) + end + + it "should override a pre-existing stub" do + @stub.stub!(:existing_instance_method).and_return(:updated_stub_value) + @stub.existing_instance_method.should == :updated_stub_value + end + + it "should limit " do + @stub.stub!(:foo).with("bar") + @stub.should_receive(:foo).with("baz") + @stub.foo("bar") + @stub.foo("baz") + end + end + + describe "A method stub with args" do + before(:each) do + @stub = Object.new + @stub.stub!(:foo).with("bar") + end + + it "should not complain if not called" do + end + + it "should not complain if called with arg" do + @stub.foo("bar") + end + + it "should complain if called with no arg" do + lambda do + @stub.foo + end.should raise_error + end + + it "should complain if called with other arg" do + lambda do + @stub.foo("other") + end.should raise_error + end + + it "should not complain if also mocked w/ different args" do + @stub.should_receive(:foo).with("baz") + @stub.foo("bar") + @stub.foo("baz") + end + + it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do + @stub.should_receive(:foo).with("baz") + @stub.foo("bar") + @stub.foo("baz") + lambda do + @stub.foo("other") + end.should raise_error + end + + it "should support options" do + @stub.stub!(:foo, :expected_from => "bar") + end + end + + end +end diff --git a/vendor/gems/rspec/spec/spec/mocks/twice_counts_spec.rb b/vendor/gems/rspec/spec/spec/mocks/twice_counts_spec.rb new file mode 100644 index 0000000..d07e457 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/mocks/twice_counts_spec.rb @@ -0,0 +1,67 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Mocks + describe "TwiceCounts" do + before(:each) do + @mock = mock("test mock") + end + + it "twice should fail when call count is higher than expected" do + @mock.should_receive(:random_call).twice + @mock.random_call + @mock.random_call + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "twice should fail when call count is lower than expected" do + @mock.should_receive(:random_call).twice + @mock.random_call + lambda do + @mock.rspec_verify + end.should raise_error(MockExpectationError) + end + + it "twice should fail when called twice with wrong args on the first call" do + @mock.should_receive(:random_call).twice.with("1", 1) + lambda do + @mock.random_call(1, "1") + end.should raise_error(MockExpectationError) + @mock.rspec_reset + end + + it "twice should fail when called twice with wrong args on the second call" do + @mock.should_receive(:random_call).twice.with("1", 1) + @mock.random_call("1", 1) + lambda do + @mock.random_call(1, "1") + end.should raise_error(MockExpectationError) + @mock.rspec_reset + end + + it "twice should pass when called twice" do + @mock.should_receive(:random_call).twice + @mock.random_call + @mock.random_call + @mock.rspec_verify + end + + it "twice should pass when called twice with specified args" do + @mock.should_receive(:random_call).twice.with("1", 1) + @mock.random_call("1", 1) + @mock.random_call("1", 1) + @mock.rspec_verify + end + + it "twice should pass when called twice with unspecified args" do + @mock.should_receive(:random_call).twice + @mock.random_call("1") + @mock.random_call(1) + @mock.rspec_verify + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb b/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb new file mode 100644 index 0000000..44bfd96 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb @@ -0,0 +1,14 @@ +require File.dirname(__FILE__) + '/../../spec_helper' +require File.dirname(__FILE__) + '/../../ruby_forker' + +describe "The bin/spec script" do + include RubyForker + + it "should have no warnings" do + pending "Hangs on JRuby" if PLATFORM =~ /java/ + spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec" + + output = ruby "-w #{spec_path} --help 2>&1" + output.should_not =~ /warning/n + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb b/vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb new file mode 100644 index 0000000..b4e9e7f --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb @@ -0,0 +1,23 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe ClassAndArgumentsParser, ".parse" do + + it "should use a single : to separate class names from arguments" do + ClassAndArgumentsParser.parse('Foo').should == ['Foo', nil] + ClassAndArgumentsParser.parse('Foo:arg').should == ['Foo', 'arg'] + ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg'] + ClassAndArgumentsParser.parse('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2'] + ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2'] + ClassAndArgumentsParser.parse('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar'] + end + + it "should raise an error when passed an empty string" do + lambda do + ClassAndArgumentsParser.parse('') + end.should raise_error("Couldn't parse \"\"") + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb b/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb new file mode 100644 index 0000000..3c3be8c --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb @@ -0,0 +1,147 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe CommandLine, ".run" do + it_should_behave_like "sandboxed rspec_options" + attr_reader :options, :err, :out + before do + @err = options.error_stream + @out = options.output_stream + end + + it "should run directory" do + file = File.dirname(__FILE__) + '/../../../examples/pure' + Spec::Runner::CommandLine.run(OptionParser.parse([file,"-p","**/*.rb"], @err, @out)) + + @out.rewind + @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n + end + + it "should run file" do + file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb' + Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) + + @out.rewind + @out.read.should =~ /2 examples, 1 failure/n + end + + it "should raise when file does not exist" do + file = File.dirname(__FILE__) + '/doesntexist' + + lambda { + Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out)) + }.should raise_error + end + + it "should return true when in --generate-options mode" do + # NOTE - this used to say /dev/null but jruby hangs on that for some reason + Spec::Runner::CommandLine.run( + OptionParser.parse(['--generate-options', '/tmp/foo'], @err, @out) + ).should be_true + end + + it "should dump even if Interrupt exception is occurred" do + example_group = Class.new(::Spec::Example::ExampleGroup) do + describe("example_group") + it "no error" do + end + + it "should interrupt" do + raise Interrupt, "I'm interrupting" + end + end + + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.reporter.should_receive(:dump) + options.add_example_group(example_group) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + end + + it "should heckle when options have heckle_runner" do + example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do + it "no error" do + end + end + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.add_example_group example_group + + heckle_runner = mock("heckle_runner") + heckle_runner.should_receive(:heckle_with) + $rspec_mocks.__send__(:mocks).delete(heckle_runner) + + options.heckle_runner = heckle_runner + options.add_example_group(example_group) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + heckle_runner.rspec_verify + end + + it "should run examples backwards if options.reverse is true" do + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.reverse = true + + b1 = Class.new(Spec::Example::ExampleGroup) + b2 = Class.new(Spec::Example::ExampleGroup) + + b2.should_receive(:run).ordered + b1.should_receive(:run).ordered + + options.add_example_group(b1) + options.add_example_group(b2) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + end + + it "should pass its ExampleGroup to the reporter" do + example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do + it "should" do + end + end + options = ::Spec::Runner::Options.new(@err, @out) + options.add_example_group(example_group) + + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + options.reporter.should_receive(:add_example_group).with(example_group) + + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + end + + it "runs only selected Examples when options.examples is set" do + options = ::Spec::Runner::Options.new(@err, @out) + ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options) + + options.examples << "example_group should" + should_has_run = false + should_not_has_run = false + example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do + it "should" do + should_has_run = true + end + it "should not" do + should_not_has_run = true + end + end + + options.reporter.should_receive(:add_example_group).with(example_group) + + options.add_example_group example_group + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + + should_has_run.should be_true + should_not_has_run.should be_false + end + + it "sets Spec.run to true" do + ::Spec.run = false + ::Spec.should_not be_run + Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out)) + ::Spec.should be_run + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb b/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb new file mode 100644 index 0000000..760ec37 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb @@ -0,0 +1,92 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe DrbCommandLine, "without running local server" do + unless Config::CONFIG['ruby_install_name'] == 'jruby' + it "should print error when there is no running local server" do + err = StringIO.new + out = StringIO.new + DrbCommandLine.run(OptionParser.parse(['--version'], err, out)) + + err.rewind + err.read.should =~ /No server is running/ + end + end + end + + class DrbCommandLineSpec < ::Spec::Example::ExampleGroup + describe DrbCommandLine, "with local server" + + class CommandLineForSpec + def self.run(argv, stderr, stdout) + exit Spec::Runner::CommandLine.run(OptionParser.parse(argv, stderr, stdout)) + end + end + + unless Config::CONFIG['ruby_install_name'] == 'jruby' + before(:all) do + DRb.start_service("druby://localhost:8989", CommandLineForSpec) + @@drb_example_file_counter = 0 + end + + before(:each) do + create_dummy_spec_file + @@drb_example_file_counter = @@drb_example_file_counter + 1 + end + + after(:each) do + File.delete(@dummy_spec_filename) + end + + after(:all) do + DRb.stop_service + end + + it "should run against local server" do + out = run_spec_via_druby(['--version']) + out.should =~ /RSpec/n + end + + it "should output green colorized text when running with --colour option" do + out = run_spec_via_druby(["--colour", @dummy_spec_filename]) + out.should =~ /\e\[32m/n + end + + it "should output red colorized text when running with -c option" do + out = run_spec_via_druby(["-c", @dummy_spec_filename]) + out.should =~ /\e\[31m/n + end + + def create_dummy_spec_file + @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb" + File.open(@dummy_spec_filename, 'w') do |f| + f.write %{ + describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do + it "should be output with green bar" do + true.should be_true + end + + it "should be output with red bar" do + violated("I want to see a red bar!") + end + end + } + end + end + + def run_spec_via_druby(argv) + err, out = StringIO.new, StringIO.new + out.instance_eval do + def tty?; true end + end + options = ::Spec::Runner::Options.new(err, out) + options.argv = argv + Spec::Runner::DrbCommandLine.run(options) + out.rewind; out.read + end + end + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/empty_file.txt b/vendor/gems/rspec/spec/spec/runner/empty_file.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/empty_file.txt diff --git a/vendor/gems/rspec/spec/spec/runner/examples.txt b/vendor/gems/rspec/spec/spec/runner/examples.txt new file mode 100644 index 0000000..2fcbd35 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/examples.txt @@ -0,0 +1,2 @@ +Sir, if you were my husband, I would poison your drink. +Madam, if you were my wife, I would drink it.
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/execution_context_spec.rb b/vendor/gems/rspec/spec/spec/runner/execution_context_spec.rb new file mode 100644 index 0000000..82e7447 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/execution_context_spec.rb @@ -0,0 +1,31 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "ExecutionContext" do + + it "should provide duck_type()" do + dt = duck_type(:length) + dt.should be_an_instance_of(Spec::Mocks::DuckTypeArgConstraint) + dt.matches?([]).should be_true + end + + it "should violate when violated()" do + lambda do + violated + end.should raise_error(Spec::Expectations::ExpectationNotMetError) + end + + it "should provide mock()" do + mock("thing").should be_an_instance_of(Spec::Mocks::Mock) + end + + it "should provide stub()" do + thing_stub = stub("thing").should be_an_instance_of(Spec::Mocks::Mock) + end + + it "should add method stubs to stub()" do + thing_stub = stub("thing", :a => "A", :b => "B") + thing_stub.a.should == "A" + thing_stub.b.should == "B" + end + +end diff --git a/vendor/gems/rspec/spec/spec/runner/failed.txt b/vendor/gems/rspec/spec/spec/runner/failed.txt new file mode 100644 index 0000000..07c5442 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/failed.txt @@ -0,0 +1,3 @@ +heckler_spec.rb +command_line_spec.rb +reporter_spec.rb
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb new file mode 100644 index 0000000..a08b6e8 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb @@ -0,0 +1,44 @@ +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'spec/runner/formatter/failing_example_groups_formatter' + +module Spec + module Runner + module Formatter + describe FailingExampleGroupsFormatter do + attr_reader :example_group, :formatter, :io + + before(:each) do + @io = StringIO.new + options = mock('options') + @formatter = FailingExampleGroupsFormatter.new(options, io) + @example_group = Class.new(::Spec::Example::ExampleGroup) + end + + it "should add example name for each failure" do + formatter.add_example_group(Class.new(ExampleGroup).describe("b 1")) + formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new)) + formatter.add_example_group(Class.new(ExampleGroup).describe("b 2")) + formatter.example_failed("e 2", nil, Reporter::Failure.new(nil, RuntimeError.new)) + formatter.example_failed("e 3", nil, Reporter::Failure.new(nil, RuntimeError.new)) + io.string.should == "b 1\nb 2\n" + end + + it "should delimit ExampleGroup superclass descriptions with :" do + parent_example_group = Class.new(example_group).describe("Parent") + child_example_group = Class.new(parent_example_group).describe("#child_method") + grand_child_example_group = Class.new(child_example_group).describe("GrandChild") + + formatter.add_example_group(grand_child_example_group) + formatter.example_failed("failure", nil, Reporter::Failure.new(nil, RuntimeError.new)) + io.string.should == "Parent#child_method GrandChild\n" + end + + it "should remove druby url, which is used by Spec::Distributed" do + @formatter.add_example_group(Class.new(ExampleGroup).describe("something something (druby://99.99.99.99:99)")) + @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new)) + io.string.should == "something something\n" + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb new file mode 100644 index 0000000..fda64f9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb @@ -0,0 +1,33 @@ +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'spec/runner/formatter/failing_examples_formatter' + +module Spec + module Runner + module Formatter + describe FailingExamplesFormatter do + before(:each) do + @io = StringIO.new + options = mock('options') + @formatter = FailingExamplesFormatter.new(options, @io) + end + + it "should add example name for each failure" do + example_group_1 = Class.new(ExampleGroup).describe("A") + example_group_2 = Class.new(example_group_1).describe("B") + + @formatter.add_example_group(example_group_1) + @formatter.example_failed(example_group_1.it("a1"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) + @formatter.add_example_group(example_group_2) + @formatter.example_failed(example_group_2.it("b2"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) + @formatter.example_failed(example_group_2.it("b3"){}, nil, Reporter::Failure.new(nil, RuntimeError.new)) + @io.string.should eql(<<-EOF +A a1 +A B b2 +A B b3 +EOF +) + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html new file mode 100644 index 0000000..9cc458f --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> +<span class="linenum">14</span> <span class="keyword">end</span> +<span class="linenum">15</span> </code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> + <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> +<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> +<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> +<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span> +<span class="linenum">24</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> + <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> +<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span> +<span class="linenum">30</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> +<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span> +<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13: +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> +<span class="linenum">12</span><span class="constant">EOF</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> +<span class="linenum">14</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34: +./spec/spec/runner/formatter/html_formatter_spec.rb:24: +./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div> + <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> +<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> +<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> +<span class="linenum">35</span> <span class="keyword">end</span> +<span class="linenum">36</span><span class="keyword">end</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html new file mode 100644 index 0000000..8bf1ed9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html @@ -0,0 +1,387 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13:in `should_receive' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">11</span> it "should fail when expected message not received" do +<span class="linenum">12</span> mock = mock("poke me") +<span class="offending"><span class="linenum">13</span> mock.should_receive(:poke)</span> +<span class="linenum">14</span> end +<span class="linenum">15</span> +<span class="linenum">16</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22:in `three' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">20</span> mock.should_receive(:three).ordered +<span class="linenum">21</span> mock.one +<span class="offending"><span class="linenum">22</span> mock.three</span> +<span class="linenum">23</span> mock.two +<span class="linenum">24</span> end +<span class="linenum">25</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28:in `should_not_receive' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">26</span> it "should get yelled at when sending unexpected messages" do +<span class="linenum">27</span> mock = mock("don't talk to me") +<span class="offending"><span class="linenum">28</span> mock.should_not_receive(:any_message_at_all)</span> +<span class="linenum">29</span> mock.any_message_at_all +<span class="linenum">30</span> end +<span class="linenum">31</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `pending' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> it "has a bug we need to fix" do +<span class="offending"><span class="linenum">33</span> pending "here is the bug" do</span> +<span class="linenum">34</span> # Actually, no. It's fixed. This will fail because it passes :-) +<span class="linenum">35</span> mock = mock("Bug") +<span class="linenum">36</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13:in `==' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">11</span>framework for Ruby +<span class="linenum">12</span>EOF +<span class="offending"><span class="linenum">13</span> usa.should == uk</span> +<span class="linenum">14</span> end +<span class="linenum">15</span> +<span class="linenum">16</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34:in `should' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">32</span> expected = Animal.new "bob", "giraffe" +<span class="linenum">33</span> actual = Animal.new "bob", "tortoise" +<span class="offending"><span class="linenum">34</span> expected.should eql(actual)</span> +<span class="linenum">35</span> end +<span class="linenum">36</span>end +<span class="linenum">37</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html new file mode 100644 index 0000000..cda7226 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html @@ -0,0 +1,371 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: +./spec/spec/runner/formatter/html_formatter_spec.rb:17: +./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> +<span class="linenum">14</span> <span class="keyword">end</span> +<span class="linenum">15</span> </code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: +./spec/spec/runner/formatter/html_formatter_spec.rb:17: +./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> +<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> +<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> +<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span> +<span class="linenum">24</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: +./spec/spec/runner/formatter/html_formatter_spec.rb:17: +./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> +<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span> +<span class="linenum">30</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: +./spec/spec/runner/formatter/html_formatter_spec.rb:17: +./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> +<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span> +<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13: +./spec/spec/runner/formatter/html_formatter_spec.rb:17: +./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> +<span class="linenum">12</span><span class="constant">EOF</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> +<span class="linenum">14</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34: +./spec/spec/runner/formatter/html_formatter_spec.rb:17: +./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div> + <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> +<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> +<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> +<span class="linenum">35</span> <span class="keyword">end</span> +<span class="linenum">36</span><span class="keyword">end</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html new file mode 100644 index 0000000..4666218 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html @@ -0,0 +1,381 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> +<span class="linenum">14</span> <span class="keyword">end</span> +<span class="linenum">15</span> </code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> +<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> +<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> +<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span> +<span class="linenum">24</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> +<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span> +<span class="linenum">30</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> +<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span> +<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:2:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> +<span class="linenum">12</span><span class="constant">EOF</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> +<span class="linenum">14</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir' +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24: +/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div> + <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> +<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> +<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> +<span class="linenum">35</span> <span class="keyword">end</span> +<span class="linenum">36</span><span class="keyword">end</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html new file mode 100644 index 0000000..511495b --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> +<span class="linenum">14</span> <span class="keyword">end</span> +<span class="linenum">15</span> </code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> +<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> +<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> +<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span> +<span class="linenum">24</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> +<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span> +<span class="linenum">30</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> +<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span> +<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> +<span class="linenum">12</span><span class="constant">EOF</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> +<span class="linenum">14</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> +<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> +<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> +<span class="linenum">35</span> <span class="keyword">end</span> +<span class="linenum">36</span><span class="keyword">end</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb new file mode 100644 index 0000000..5ba39f0 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb @@ -0,0 +1,66 @@ +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'hpricot' # Needed to compare generated with wanted HTML +require 'spec/runner/formatter/html_formatter' + +module Spec + module Runner + module Formatter + describe HtmlFormatter do + ['--diff', '--dry-run'].each do |opt| + def jruby? + PLATFORM == 'java' + end + + it "should produce HTML identical to the one we designed manually with #{opt}" do + root = File.expand_path(File.dirname(__FILE__) + '/../../../..') + suffix = jruby? ? '-jruby' : '' + expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html" + raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file) + expected_html = File.read(expected_file) + unless jruby? + raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n) + end + + Dir.chdir(root) do + args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt] + err = StringIO.new + out = StringIO.new + CommandLine.run( + OptionParser.parse(args, err, out) + ) + + seconds = /\d+\.\d+ seconds/ + html = out.string.gsub seconds, 'x seconds' + expected_html.gsub! seconds, 'x seconds' + + if opt == '--diff' + # Uncomment this line temporarily in order to overwrite the expected with actual. + # Use with care!!! + # File.open(expected_file, 'w') {|io| io.write(html)} + + doc = Hpricot(html) + backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} + doc.search("div.backtrace").remove + + expected_doc = Hpricot(expected_html) + expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html} + expected_doc.search("div.backtrace").remove + + doc.inner_html.should == expected_doc.inner_html + + expected_backtraces.each_with_index do |expected_line, i| + expected_path, expected_line_number, expected_suffix = expected_line.split(':') + actual_path, actual_line_number, actual_suffix = backtraces[i].split(':') + File.expand_path(actual_path).should == File.expand_path(expected_path) + actual_line_number.should == expected_line_number + end + else + html.should =~ /This was a dry-run/m + end + end + end + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb new file mode 100644 index 0000000..9818054 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb @@ -0,0 +1,65 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/profile_formatter' + +module Spec + module Runner + module Formatter + describe ProfileFormatter do + attr_reader :io, :formatter + before(:each) do + @io = StringIO.new + options = mock('options') + options.stub!(:colour).and_return(true) + @formatter = ProfileFormatter.new(options, io) + end + + it "should print a heading" do + formatter.start(0) + io.string.should eql("Profiling enabled.\n") + end + + it "should record the current time when starting a new example" do + now = Time.now + Time.stub!(:now).and_return(now) + formatter.example_started('should foo') + formatter.instance_variable_get("@time").should == now + end + + it "should correctly record a passed example" do + now = Time.now + Time.stub!(:now).and_return(now) + parent_example_group = Class.new(ExampleGroup).describe('Parent') + child_example_group = Class.new(parent_example_group).describe('Child') + + formatter.add_example_group(child_example_group) + + formatter.example_started('when foo') + Time.stub!(:now).and_return(now+1) + formatter.example_passed(stub('foo', :description => 'i like ice cream')) + + formatter.start_dump + io.string.should include('Parent Child') + end + + it "should sort the results in descending order" do + formatter.instance_variable_set("@example_times", [['a', 'a', 0.1], ['b', 'b', 0.3], ['c', 'c', 0.2]]) + formatter.start_dump + formatter.instance_variable_get("@example_times").should == [ ['b', 'b', 0.3], ['c', 'c', 0.2], ['a', 'a', 0.1]] + end + + it "should print the top 10 results" do + example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup") + formatter.add_example_group(example_group) + formatter.instance_variable_set("@time", Time.now) + + 15.times do + formatter.example_passed(stub('foo', :description => 'i like ice cream')) + end + + io.should_receive(:print).exactly(10) + formatter.start_dump + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb new file mode 100644 index 0000000..127a617 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb @@ -0,0 +1,127 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/progress_bar_formatter' + +module Spec + module Runner + module Formatter + describe ProgressBarFormatter do + before(:each) do + @io = StringIO.new + @options = mock('options') + @options.stub!(:dry_run).and_return(false) + @options.stub!(:colour).and_return(false) + @formatter = ProgressBarFormatter.new(@options, @io) + end + + it "should produce line break on start dump" do + @formatter.start_dump + @io.string.should eql("\n") + end + + it "should produce standard summary without pending when pending has a 0 count" do + @formatter.dump_summary(3, 2, 1, 0) + @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure\n") + end + + it "should produce standard summary" do + @formatter.example_pending("example_group", ExampleGroup.new("example"), "message") + @io.rewind + @formatter.dump_summary(3, 2, 1, 1) + @io.string.should eql(%Q| +Finished in 3 seconds + +2 examples, 1 failure, 1 pending +|) + end + + it "should push green dot for passing spec" do + @io.should_receive(:tty?).and_return(true) + @options.should_receive(:colour).and_return(true) + @formatter.example_passed("spec") + @io.string.should == "\e[32m.\e[0m" + end + + it "should push red F for failure spec" do + @io.should_receive(:tty?).and_return(true) + @options.should_receive(:colour).and_return(true) + @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)) + @io.string.should eql("\e[31mF\e[0m") + end + + it "should push magenta F for error spec" do + @io.should_receive(:tty?).and_return(true) + @options.should_receive(:colour).and_return(true) + @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", RuntimeError.new)) + @io.string.should eql("\e[35mF\e[0m") + end + + it "should push blue F for fixed pending spec" do + @io.should_receive(:tty?).and_return(true) + @options.should_receive(:colour).and_return(true) + @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new)) + @io.string.should eql("\e[34mF\e[0m") + end + + it "should push nothing on start" do + @formatter.start(4) + @io.string.should eql("") + end + + it "should ensure two ':' in the first backtrace" do + backtrace = ["/tmp/x.rb:1", "/tmp/x.rb:2", "/tmp/x.rb:3"] + @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip) +/tmp/x.rb:1: +/tmp/x.rb:2: +/tmp/x.rb:3: +EOE + + backtrace = ["/tmp/x.rb:1: message", "/tmp/x.rb:2", "/tmp/x.rb:3"] + @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip) +/tmp/x.rb:1: message +/tmp/x.rb:2: +/tmp/x.rb:3: +EOE + end + + it "should dump pending" do + @formatter.example_pending("example_group", ExampleGroup.new("example"), "message") + @formatter.dump_pending + @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/ + end + end + + describe "ProgressBarFormatter outputting to custom out" do + before(:each) do + @out = mock("out") + @options = mock('options') + @out.stub!(:puts) + @formatter = ProgressBarFormatter.new(@options, @out) + @formatter.class.send :public, :output_to_tty? + end + + after(:each) do + @formatter.class.send :protected, :output_to_tty? + end + + it "should not throw NoMethodError on output_to_tty?" do + @out.should_receive(:tty?).and_raise(NoMethodError) + @formatter.output_to_tty?.should be_false + end + end + + describe ProgressBarFormatter, "dry run" do + before(:each) do + @io = StringIO.new + options = mock('options') + options.stub!(:dry_run).and_return(true) + @formatter = ProgressBarFormatter.new(options, @io) + end + + it "should not produce summary on dry run" do + @formatter.dump_summary(3, 2, 1, 0) + @io.string.should eql("") + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb new file mode 100644 index 0000000..4bb2f15 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb @@ -0,0 +1,18 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/snippet_extractor' + +module Spec + module Runner + module Formatter + describe SnippetExtractor do + it "should fall back on a default message when it doesn't understand a line" do + SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1] + end + + it "should fall back on a default message when it doesn't find the file" do + SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech" + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb new file mode 100644 index 0000000..e782254 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb @@ -0,0 +1,103 @@ +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'hpricot' # Needed to compare generated with wanted HTML +require 'spec/runner/formatter/text_mate_formatter' + +module Spec + module Runner + module Formatter + describe TextMateFormatter do + attr_reader :root, :suffix, :expected_file + before do + @root = File.expand_path(File.dirname(__FILE__) + '/../../../..') + @suffix = jruby? ? '-jruby' : '' + @expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html" + end + + def jruby? + PLATFORM == 'java' + end + + def produces_html_identical_to_manually_designed_document(opt) + root = File.expand_path(File.dirname(__FILE__) + '/../../../..') + + Dir.chdir(root) do + args = [ + 'failing_examples/mocking_example.rb', + 'failing_examples/diffing_spec.rb', + 'examples/pure/stubbing_example.rb', + 'examples/pure/pending_example.rb', + '--format', + 'textmate', + opt + ] + err = StringIO.new + out = StringIO.new + options = ::Spec::Runner::OptionParser.parse(args, err, out) + Spec::Runner::CommandLine.run(options) + + yield(out.string) + end + end + + # # Uncomment this spec temporarily in order to overwrite the expected with actual. + # # Use with care!!! + # describe TextMateFormatter, "functional spec file generator" do + # it "generates a new comparison file" do + # Dir.chdir(root) do + # args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'textmate', '--diff'] + # err = StringIO.new + # out = StringIO.new + # Spec::Runner::CommandLine.run( + # ::Spec::Runner::OptionParser.parse(args, err, out) + # ) + # + # seconds = /\d+\.\d+ seconds/ + # html = out.string.gsub seconds, 'x seconds' + # + # File.open(expected_file, 'w') {|io| io.write(html)} + # end + # end + # end + + describe "functional spec using --diff" do + it "should produce HTML identical to the one we designed manually with --diff" do + produces_html_identical_to_manually_designed_document("--diff") do |html| + suffix = jruby? ? '-jruby' : '' + expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html" + unless File.file?(expected_file) + raise "There is no HTML file with expected content for this platform: #{expected_file}" + end + expected_html = File.read(expected_file) + + seconds = /\d+\.\d+ seconds/ + html.gsub! seconds, 'x seconds' + expected_html.gsub! seconds, 'x seconds' + + doc = Hpricot(html) + backtraces = doc.search("div.backtrace/a") + doc.search("div.backtrace").remove + + expected_doc = Hpricot(expected_html) + expected_doc.search("div.backtrace").remove + + doc.inner_html.should == expected_doc.inner_html + + backtraces.each do |backtrace_link| + backtrace_link[:href].should include("txmt://open?url=") + end + end + end + + end + + describe "functional spec using --dry-run" do + it "should produce HTML identical to the one we designed manually with --dry-run" do + produces_html_identical_to_manually_designed_document("--dry-run") do |html, expected_html| + html.should =~ /This was a dry-run/m + end + end + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb new file mode 100644 index 0000000..7999530 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb @@ -0,0 +1,126 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' +require 'spec/runner/formatter/specdoc_formatter' + +module Spec + module Runner + module Formatter + describe SpecdocFormatter do + it_should_behave_like "sandboxed rspec_options" + attr_reader :io, :options, :formatter, :example_group + before(:each) do + @io = StringIO.new + options.stub!(:dry_run).and_return(false) + options.stub!(:colour).and_return(false) + @formatter = SpecdocFormatter.new(options, io) + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup") + end + + describe "where ExampleGroup has no superclasss with a description" do + before do + formatter.add_example_group(example_group) + end + + it "should produce standard summary without pending when pending has a 0 count" do + formatter.dump_summary(3, 2, 1, 0) + io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n") + end + + it "should produce standard summary" do + formatter.dump_summary(3, 2, 1, 4) + io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n") + end + + it "should push ExampleGroup name" do + io.string.should eql("\nExampleGroup\n") + end + + it "when having an error, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", RuntimeError.new) + ) + io.string.should have_example_group_output("- spec (ERROR - 98)\n") + end + + it "when having an expectation failure, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new) + ) + io.string.should have_example_group_output("- spec (FAILED - 98)\n") + end + + it "should push nothing on start" do + formatter.start(5) + io.string.should have_example_group_output("") + end + + it "should push nothing on start dump" do + formatter.start_dump + io.string.should have_example_group_output("") + end + + it "should push passing spec name" do + formatter.example_passed(example_group.it("spec")) + io.string.should have_example_group_output("- spec\n") + end + + it "should push pending example name and message" do + formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason') + io.string.should have_example_group_output("- example (PENDING: reason)\n") + end + + it "should dump pending" do + formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason') + io.rewind + formatter.dump_pending + io.string.should =~ /Pending\:\nexample_group example \(reason\)\n/ + end + + def have_example_group_output(expected_output) + expected = "\nExampleGroup\n#{expected_output}" + ::Spec::Matchers::SimpleMatcher.new(expected) do |actual| + actual == expected + end + end + end + + describe "where ExampleGroup has two superclasses with a description" do + attr_reader :child_example_group, :grand_child_example_group + before do + @child_example_group = Class.new(example_group).describe("Child ExampleGroup") + @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup") + formatter.add_example_group(grand_child_example_group) + end + + specify "when having an error, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", RuntimeError.new) + ) + io.string.should have_nested_example_group_output("- spec (ERROR - 98)\n") + end + + specify "when having an expectation failure, should push failing spec name and failure number" do + formatter.example_failed( + example_group.it("spec"), + 98, + Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new) + ) + io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n") + end + + def have_nested_example_group_output(expected_output) + expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}" + ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual| + actual == expected_full_output + end + end + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb new file mode 100644 index 0000000..37fb7c6 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb @@ -0,0 +1,61 @@ +require File.dirname(__FILE__) + '/../../../../spec_helper.rb' +require 'spec/runner/formatter/story/html_formatter' + +module Spec + module Runner + module Formatter + module Story + describe HtmlFormatter do + before :each do + @out = StringIO.new + @options = mock('options') + @reporter = HtmlFormatter.new(@options, @out) + end + + it "should just be poked at" do + @reporter.run_started(1) + @reporter.story_started('story_title', 'narrative') + + @reporter.scenario_started('story_title', 'succeeded_scenario_name') + @reporter.step_succeeded('given', 'succeded_step', 'one', 'two') + @reporter.scenario_succeeded('story_title', 'succeeded_scenario_name') + + @reporter.scenario_started('story_title', 'pending_scenario_name') + @reporter.step_pending('when', 'pending_step', 'un', 'deux') + @reporter.scenario_pending('story_title', 'pending_scenario_name', 'not done') + + @reporter.scenario_started('story_title', 'failed_scenario_name') + @reporter.step_failed('then', 'failed_step', 'en', 'to') + @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup')) + + @reporter.scenario_started('story_title', 'scenario_with_given_scenario_name') + @reporter.found_scenario('given scenario', 'succeeded_scenario_name') + + @reporter.story_ended('story_title', 'narrative') + @reporter.run_ended + end + + it "should create spans for params" do + @reporter.step_succeeded('given', 'a $coloured $animal', 'brown', 'dog') + @out.string.should == " <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n" + end + + it 'should create spanes for params in regexp steps' do + @reporter.step_succeeded :given, /a (pink|blue) (.*)/, 'brown', 'dog' + @out.string.should == " <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n" + end + + it "should create a ul for collected_steps" do + @reporter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel']) + @out.string.should == (<<-EOF) + <ul id="stock_steps" style="display: none;"> + <li>Given a $coloured $animal</li> + <li>Given a $n legged eel</li> + </ul> +EOF + end + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb new file mode 100644 index 0000000..9632b06 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb @@ -0,0 +1,335 @@ +require File.dirname(__FILE__) + '/../../../../spec_helper.rb' +require 'spec/runner/formatter/story/plain_text_formatter' + +module Spec + module Runner + module Formatter + module Story + describe PlainTextFormatter do + before :each do + # given + @out = StringIO.new + @tweaker = mock('tweaker') + @tweaker.stub!(:tweak_backtrace) + @options = mock('options') + @options.stub!(:colour).and_return(false) + @options.stub!(:backtrace_tweaker).and_return(@tweaker) + @formatter = PlainTextFormatter.new(@options, @out) + end + + it 'should summarize the number of scenarios when the run ends' do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario2') + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario3') + @formatter.run_ended + + # then + @out.string.should include('3 scenarios') + end + + it 'should summarize the number of successful scenarios when the run ends' do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario2') + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario3') + @formatter.run_ended + + # then + @out.string.should include('3 scenarios: 3 succeeded') + end + + it 'should summarize the number of failed scenarios when the run ends' do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' }) + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' }) + @formatter.run_ended + + # then + @out.string.should include("3 scenarios: 1 succeeded, 2 failed") + end + + it 'should end cleanly (no characters on the last line) with successes' do + # when + @formatter.run_started(1) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario') + @formatter.run_ended + + # then + @out.string.should =~ /\n\z/ + end + + it 'should end cleanly (no characters on the last line) with failures' do + # when + @formatter.run_started(1) + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' }) + @formatter.run_ended + + # then + @out.string.should =~ /\n\z/ + end + + it 'should end cleanly (no characters on the last line) with pending steps' do + # when + @formatter.run_started(1) + @formatter.scenario_started(nil, nil) + @formatter.step_pending(:then, 'do pend') + @formatter.scenario_pending('story', 'scenario', exception_from { raise RuntimeError, 'oops' }) + @formatter.run_ended + + # then + @out.string.should =~ /\n\z/ + end + + it 'should summarize the number of pending scenarios when the run ends' do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_pending('story', 'scenario2', 'message') + @formatter.scenario_started(nil, nil) + @formatter.scenario_pending('story', 'scenario3', 'message') + @formatter.run_ended + + # then + @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending") + end + + it "should only count the first failure in one scenario" do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' }) + @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' }) + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' }) + @formatter.run_ended + + # then + @out.string.should include("3 scenarios: 1 succeeded, 2 failed") + end + + it "should only count the first pending in one scenario" do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_pending('story', 'scenario2', 'because ...') + @formatter.scenario_pending('story', 'scenario2', 'because ...') + @formatter.scenario_started(nil, nil) + @formatter.scenario_pending('story', 'scenario3', 'because ...') + @formatter.run_ended + + # then + @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending") + end + + it "should only count a failure before the first pending in one scenario" do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' }) + @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' }) + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' }) + @formatter.run_ended + + # then + @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending") + end + + it 'should produce details of the first failure each failed scenario when the run ends' do + # when + @formatter.run_started(3) + @formatter.scenario_started(nil, nil) + @formatter.scenario_succeeded('story', 'scenario1') + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' }) + @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' }) + @formatter.scenario_started(nil, nil) + @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' }) + @formatter.run_ended + + # then + @out.string.should include("FAILURES:\n") + @out.string.should include("1) story (scenario2) FAILED") + @out.string.should include("RuntimeError: oops2") + @out.string.should_not include("RuntimeError: oops2 - this one should not appear") + @out.string.should include("2) story (scenario3) FAILED") + @out.string.should include("RuntimeError: oops3") + end + + it 'should produce details of each pending step when the run ends' do + # when + @formatter.run_started(2) + @formatter.story_started('story 1', 'narrative') + @formatter.scenario_started('story 1', 'scenario 1') + @formatter.step_pending(:given, 'todo 1', []) + @formatter.story_started('story 2', 'narrative') + @formatter.scenario_started('story 2', 'scenario 2') + @formatter.step_pending(:given, 'todo 2', []) + @formatter.run_ended + + # then + @out.string.should include("Pending Steps:\n") + @out.string.should include("1) story 1 (scenario 1): todo 1") + @out.string.should include("2) story 2 (scenario 2): todo 2") + end + + it 'should document a story title and narrative' do + # when + @formatter.story_started 'story', 'narrative' + + # then + @out.string.should include("Story: story\n\n narrative") + end + + it 'should document a scenario name' do + # when + @formatter.scenario_started 'story', 'scenario' + + # then + @out.string.should include("\n\n Scenario: scenario") + end + + it 'should document a step by sentence-casing its name' do + # when + @formatter.step_succeeded :given, 'a context' + @formatter.step_succeeded :when, 'an event' + @formatter.step_succeeded :then, 'an outcome' + + # then + @out.string.should include("\n\n Given a context\n\n When an event\n\n Then an outcome") + end + + it 'should document additional givens using And' do + # when + @formatter.step_succeeded :given, 'step 1' + @formatter.step_succeeded :given, 'step 2' + @formatter.step_succeeded :given, 'step 3' + + # then + @out.string.should include(" Given step 1\n And step 2\n And step 3") + end + + it 'should document additional events using And' do + # when + @formatter.step_succeeded :when, 'step 1' + @formatter.step_succeeded :when, 'step 2' + @formatter.step_succeeded :when, 'step 3' + + # then + @out.string.should include(" When step 1\n And step 2\n And step 3") + end + + it 'should document additional outcomes using And' do + # when + @formatter.step_succeeded :then, 'step 1' + @formatter.step_succeeded :then, 'step 2' + @formatter.step_succeeded :then, 'step 3' + + # then + @out.string.should include(" Then step 1\n And step 2\n And step 3") + end + + it 'should document a GivenScenario followed by a Given using And' do + # when + @formatter.step_succeeded :'given scenario', 'a scenario' + @formatter.step_succeeded :given, 'a context' + + # then + @out.string.should include(" Given scenario a scenario\n And a context") + end + + it 'should document steps with replaced params' do + @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21 + @out.string.should include(" Given a pink dog with 21 legs") + end + + it 'should document regexp steps with replaced params' do + @formatter.step_succeeded :given, /a (pink|blue) dog with (.*) legs/, 'pink', 21 + @out.string.should include(" Given a pink dog with 21 legs") + end + + it "should append PENDING for the first pending step" do + @formatter.scenario_started('','') + @formatter.step_pending(:given, 'a context') + + @out.string.should include('Given a context (PENDING)') + end + + it "should append PENDING for pending after already pending" do + @formatter.scenario_started('','') + @formatter.step_pending(:given, 'a context') + @formatter.step_pending(:when, 'I say hey') + + @out.string.should include('When I say hey (PENDING)') + end + + it "should append FAILED for the first failiure" do + @formatter.scenario_started('','') + @formatter.step_failed(:given, 'a context') + + @out.string.should include('Given a context (FAILED)') + end + + it "should append SKIPPED for the second failiure" do + @formatter.scenario_started('','') + @formatter.step_failed(:given, 'a context') + @formatter.step_failed(:when, 'I say hey') + + @out.string.should include('When I say hey (SKIPPED)') + end + + it "should append SKIPPED for the a failiure after PENDING" do + @formatter.scenario_started('','') + @formatter.step_pending(:given, 'a context') + @formatter.step_failed(:when, 'I say hey') + + @out.string.should include('When I say hey (SKIPPED)') + end + + it 'should print some white space after each story' do + # when + @formatter.story_ended 'title', 'narrative' + + # then + @out.string.should include("\n\n") + end + + it "should print nothing for collected_steps" do + @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel']) + @out.string.should == ("") + end + + it "should ignore messages it doesn't care about" do + lambda { + @formatter.this_method_does_not_exist + }.should_not raise_error + end + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html new file mode 100644 index 0000000..3f26374 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=13">./failing_examples/mocking_example.rb:13</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div> + <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> +<span class="linenum">14</span> <span class="keyword">end</span> +<span class="linenum">15</span> </code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=22">./failing_examples/mocking_example.rb:22</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div> + <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> +<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> +<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> +<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span> +<span class="linenum">24</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=28">./failing_examples/mocking_example.rb:28</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div> + <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> +<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span> +<span class="linenum">30</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=33">./failing_examples/mocking_example.rb:33</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div> + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> +<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span> +<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/diffing_spec.rb&line=13">./failing_examples/diffing_spec.rb:13</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div> + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> +<span class="linenum">12</span><span class="constant">EOF</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> +<span class="linenum">14</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/diffing_spec.rb&line=34">./failing_examples/diffing_spec.rb:34</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a> +<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div> + <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> +<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> +<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> +<span class="linenum">35</span> <span class="keyword">end</span> +<span class="linenum">36</span><span class="keyword">end</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html new file mode 100644 index 0000000..8a2b12e --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html @@ -0,0 +1,365 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title>RSpec results</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Expires" content="-1" /> + <meta http-equiv="Pragma" content="no-cache" /> + <style type="text/css"> + body { + margin: 0; + padding: 0; + background: #fff; + font-size: 80%; + } + </style> +</head> +<body> +<div class="rspec-report"> + <script type="text/javascript"> + // <![CDATA[ +function moveProgressBar(percentDone) { + document.getElementById("rspec-header").style.width = percentDone +"%"; +} +function makeRed(element_id) { + document.getElementById(element_id).style.background = '#C40D0D'; + document.getElementById(element_id).style.color = '#FFFFFF'; +} + +function makeYellow(element_id) { + if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D') + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } + else + { + document.getElementById(element_id).style.background = '#FAF834'; + document.getElementById(element_id).style.color = '#000000'; + } +} + + // ]]> + </script> + <style type="text/css"> +#rspec-header { + background: #65C400; color: #fff; +} + +.rspec-report h1 { + margin: 0px 10px 0px 10px; + padding: 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + font-size: 1.8em; +} + +#summary { + margin: 0; padding: 5px 10px; + font-family: "Lucida Grande", Helvetica, sans-serif; + text-align: right; + position: absolute; + top: 0px; + right: 0px; +} + +#summary p { + margin: 0 0 0 2px; +} + +#summary #totals { + font-size: 1.2em; +} + +.example_group { + margin: 0 10px 5px; + background: #fff; +} + +dl { + margin: 0; padding: 0 0 5px; + font: normal 11px "Lucida Grande", Helvetica, sans-serif; +} + +dt { + padding: 3px; + background: #65C400; + color: #fff; + font-weight: bold; +} + +dd { + margin: 5px 0 5px 5px; + padding: 3px 3px 3px 18px; +} + +dd.spec.passed { + border-left: 5px solid #65C400; + border-bottom: 1px solid #65C400; + background: #DBFFB4; color: #3D7700; +} + +dd.spec.failed { + border-left: 5px solid #C20000; + border-bottom: 1px solid #C20000; + color: #C20000; background: #FFFBD3; +} + +dd.spec.not_implemented { + border-left: 5px solid #FAF834; + border-bottom: 1px solid #FAF834; + background: #FCFB98; color: #131313; +} + +dd.spec.pending_fixed { + border-left: 5px solid #0000C2; + border-bottom: 1px solid #0000C2; + color: #0000C2; background: #D3FBFF; +} + +.backtrace { + color: #000; + font-size: 12px; +} + +a { + color: #BE5C00; +} + +/* Ruby code, style similar to vibrant ink */ +.ruby { + font-size: 12px; + font-family: monospace; + color: white; + background-color: black; + padding: 0.1em 0 0.2em 0; +} + +.ruby .keyword { color: #FF6600; } +.ruby .constant { color: #339999; } +.ruby .attribute { color: white; } +.ruby .global { color: white; } +.ruby .module { color: white; } +.ruby .class { color: white; } +.ruby .string { color: #66FF00; } +.ruby .ident { color: white; } +.ruby .method { color: #FFCC00; } +.ruby .number { color: white; } +.ruby .char { color: white; } +.ruby .comment { color: #9933CC; } +.ruby .symbol { color: white; } +.ruby .regex { color: #44B4CC; } +.ruby .punct { color: white; } +.ruby .escape { color: white; } +.ruby .interp { color: white; } +.ruby .expr { color: white; } + +.ruby .offending { background-color: gray; } +.ruby .linenum { + width: 75px; + padding: 0.1em 1em 0.2em 0; + color: #000000; + background-color: #FFFBD3; +} + + </style> + +<div id="rspec-header"> + <h1>RSpec Results</h1> + + <div id="summary"> + <p id="totals"> </p> + <p id="duration"> </p> + </div> +</div> + +<div class="results"> +<div class="example_group"> + <dl> + <dt id="example_group_1">Mocker</dt> + <script type="text/javascript">moveProgressBar('5.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd> + <script type="text/javascript">makeRed('rspec-header');</script> + <script type="text/javascript">makeRed('example_group_1');</script> + <script type="text/javascript">moveProgressBar('11.7');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when expected message not received</span> + <div class="failure" id="failure_1"> + <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should fail when expected message not received</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">poke me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span> +<span class="linenum">14</span> <span class="keyword">end</span> +<span class="linenum">15</span> </code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('17.6');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should fail when messages are received out of order</span> + <div class="failure" id="failure_2"> + <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span> +<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span> +<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span> +<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span> +<span class="linenum">24</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('23.5');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should get yelled at when sending unexpected messages</span> + <div class="failure" id="failure_3"> + <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">don't talk to me</span><span class="punct">")</span> +<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span> +<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span> +<span class="linenum">30</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('29.4');</script> + <dd class="spec pending_fixed"> + <span class="failed_spec_name">has a bug we need to fix</span> + <div class="failure" id="failure_4"> + <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div> + + <pre class="ruby"><code><span class="linenum">31</span> +<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">"</span><span class="string">has a bug we need to fix</span><span class="punct">"</span> <span class="keyword">do</span> +<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">"</span><span class="string">here is the bug</span><span class="punct">"</span> <span class="keyword">do</span></span> +<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span> +<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">("</span><span class="string">Bug</span><span class="punct">")</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_2">Running specs with --diff</dt> + <script type="text/javascript">makeRed('example_group_2');</script> + <script type="text/javascript">moveProgressBar('35.2');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different strings</span> + <div class="failure" id="failure_5"> + <div class="message"><pre>expected: "RSpec is a\nbehaviour driven development\nframework for Ruby\n", + got: "RSpec is a\nbehavior driven development\nframework for Ruby\n" (using ==) +Diff: +@@ -1,4 +1,4 @@ + RSpec is a +-behavior driven development ++behaviour driven development + framework for Ruby +</pre></div> + + <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span> +<span class="linenum">12</span><span class="constant">EOF</span> +<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span> +<span class="linenum">14</span> <span class="keyword">end</span></code></pre> + </div> + </dd> + <script type="text/javascript">moveProgressBar('41.1');</script> + <dd class="spec failed"> + <span class="failed_spec_name">should print diff of different objects' pretty representation</span> + <div class="failure" id="failure_6"> + <div class="message"><pre>expected <Animal +name=bob, +species=tortoise +> +, got <Animal +name=bob, +species=giraffe +> + (using .eql?) +Diff: +@@ -1,5 +1,5 @@ + <Animal + name=bob, +-species=giraffe ++species=tortoise + > +</pre></div> + <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33: +./spec/spec/runner/formatter/html_formatter_spec.rb:18: +./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir' +./spec/spec/runner/formatter/html_formatter_spec.rb:14:</pre></div> + <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">giraffe</span><span class="punct">"</span> +<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">"</span><span class="string">bob</span><span class="punct">",</span> <span class="punct">"</span><span class="string">tortoise</span><span class="punct">"</span> +<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span> +<span class="linenum">35</span> <span class="keyword">end</span> +<span class="linenum">36</span><span class="keyword">end</span></code></pre> + </div> + </dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_3">A consumer of a stub</dt> + <script type="text/javascript">moveProgressBar('47.0');</script> + <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_4">A stubbed method on a class</dt> + <script type="text/javascript">moveProgressBar('52.9');</script> + <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd> + <script type="text/javascript">moveProgressBar('58.8');</script> + <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd> + <script type="text/javascript">moveProgressBar('64.7');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_5">A mock</dt> + <script type="text/javascript">moveProgressBar('70.5');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd> + <script type="text/javascript">moveProgressBar('76.4');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd> + <script type="text/javascript">moveProgressBar('82.3');</script> + <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_6">pending example (using pending method)</dt> + <script type="text/javascript">makeYellow('example_group_6');</script> + <script type="text/javascript">moveProgressBar('88.2');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_7">pending example (with no block)</dt> + <script type="text/javascript">makeYellow('example_group_7');</script> + <script type="text/javascript">moveProgressBar('94.1');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as "PENDING: Not Yet Implemented" (PENDING: Not Yet Implemented)</span></dd> + </dl> +</div> +<div class="example_group"> + <dl> + <dt id="example_group_8">pending example (with block for pending)</dt> + <script type="text/javascript">makeYellow('example_group_8');</script> + <script type="text/javascript">moveProgressBar('100.0');</script> + <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as "PENDING: for some reason" (PENDING: for some reason)</span></dd> + </dl> +</div> +<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script> +<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script> +</div> +</div> +</body> +</html> diff --git a/vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb b/vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb new file mode 100644 index 0000000..539d908 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb @@ -0,0 +1,78 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' +unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} + require 'spec/runner/heckle_runner' + + module Foo + class Bar + def one; end + def two; end + end + + class Zap + def three; end + def four; end + end + end + + describe "HeckleRunner" do + before(:each) do + @heckle = mock("heckle", :null_object => true) + @heckle_class = mock("heckle_class") + end + + it "should heckle all methods in all classes in a module" do + @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Zap", "three", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Zap", "four", rspec_options).and_return(@heckle) + + heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class) + heckle_runner.heckle_with + end + + it "should heckle all methods in a class" do + @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle) + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) + + heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class) + heckle_runner.heckle_with + end + + it "should fail heckling when the class is not found" do + lambda do + heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class) + heckle_runner.heckle_with + end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module") + end + + it "should heckle specific method in a class (with #)" do + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) + + heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class) + heckle_runner.heckle_with + end + + it "should heckle specific method in a class (with .)" do + @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle) + + heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class) + heckle_runner.heckle_with + end + end + + describe "Heckler" do + it "should say yes to tests_pass? if specs pass" do + options = mock("options", :null_object => true) + options.should_receive(:run_examples).and_return(true) + heckler = Spec::Runner::Heckler.new("Foo", nil, options) + heckler.tests_pass?.should be_true + end + + it "should say no to tests_pass? if specs fail" do + options = mock("options", :null_object => true) + options.should_receive(:run_examples).and_return(false) + heckler = Spec::Runner::Heckler.new("Foo", nil, options) + heckler.tests_pass?.should be_false + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb b/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb new file mode 100644 index 0000000..7cf6606 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb @@ -0,0 +1,13 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' +unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} + require 'spec/runner/heckle_runner' + + describe "Heckler" do + it "should run examples on tests_pass?" do + options = Spec::Runner::Options.new(StringIO.new, StringIO.new) + options.should_receive(:run_examples).with().and_return(&options.method(:run_examples)) + heckler = Spec::Runner::Heckler.new('Array', 'push', options) + heckler.tests_pass? + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb new file mode 100644 index 0000000..e097f2e --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb @@ -0,0 +1,45 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe "NoisyBacktraceTweaker" do + before(:each) do + @error = RuntimeError.new + @tweaker = NoisyBacktraceTweaker.new + end + + it "should leave anything in lib spec dir" do + ["expectations", "mocks", "runner", "stubs"].each do |child| + @error.set_backtrace(["/lib/spec/#{child}/anything.rb"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should_not be_empty + end + end + + it "should leave anything in spec dir" do + @error.set_backtrace(["/lib/spec/expectations/anything.rb"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should_not be_empty + end + + it "should leave bin spec" do + @error.set_backtrace(["bin/spec:"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should_not be_empty + end + + it "should not barf on nil backtrace" do + lambda do + @tweaker.tweak_backtrace(@error) + end.should_not raise_error + end + + it "should clean up double slashes" do + @error.set_backtrace(["/a//b/c//d.rb"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should include("/a/b/c/d.rb") + end + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb b/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb new file mode 100644 index 0000000..71619b8 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb @@ -0,0 +1,378 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' +require 'fileutils' + +describe "OptionParser" do + before(:each) do + @out = StringIO.new + @err = StringIO.new + @parser = Spec::Runner::OptionParser.new(@err, @out) + end + + def parse(args) + @parser.parse(args) + @parser.options + end + + it "should accept files to include" do + options = parse(["--pattern", "foo"]) + options.filename_pattern.should == "foo" + end + + it "should accept dry run option" do + options = parse(["--dry-run"]) + options.dry_run.should be_true + end + + it "should eval and use custom formatter when none of the builtins" do + options = parse(["--format", "Custom::Formatter"]) + options.formatters[0].class.should be(Custom::Formatter) + end + + it "should support formatters with relative and absolute paths, even on windows" do + options = parse([ + "--format", "Custom::Formatter:C:\\foo\\bar", + "--format", "Custom::Formatter:foo/bar", + "--format", "Custom::Formatter:foo\\bar", + "--format", "Custom::Formatter:/foo/bar" + ]) + options.formatters[0].where.should eql("C:\\foo\\bar") + options.formatters[1].where.should eql("foo/bar") + options.formatters[2].where.should eql("foo\\bar") + options.formatters[3].where.should eql("/foo/bar") + end + + it "should not be verbose by default" do + options = parse([]) + options.verbose.should be_nil + end + + it "should not use colour by default" do + options = parse([]) + options.colour.should == false + end + + it "should print help to stdout if no args" do + pending 'A regression since 1.0.8' do + options = parse([]) + @out.rewind + @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m) + end + end + + it "should print help to stdout" do + options = parse(["--help"]) + @out.rewind + @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m) + end + + it "should print instructions about how to require missing formatter" do + lambda do + options = parse(["--format", "Custom::MissingFormatter"]) + options.formatters + end.should raise_error(NameError) + @err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n) + end + + it "should print version to stdout" do + options = parse(["--version"]) + @out.rewind + @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(build \d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n) + end + + it "should require file when require specified" do + lambda do + parse(["--require", "whatever"]) + end.should raise_error(LoadError) + end + + it "should support c option" do + options = parse(["-c"]) + options.colour.should be_true + end + + it "should support queens colour option" do + options = parse(["--colour"]) + options.colour.should be_true + end + + it "should support us color option" do + options = parse(["--color"]) + options.colour.should be_true + end + + it "should support single example with -e option" do + options = parse(["-e", "something or other"]) + options.examples.should eql(["something or other"]) + end + + it "should support single example with -s option (will be removed when autotest supports -e)" do + options = parse(["-s", "something or other"]) + options.examples.should eql(["something or other"]) + end + + it "should support single example with --example option" do + options = parse(["--example", "something or other"]) + options.examples.should eql(["something or other"]) + end + + it "should read several example names from file if --example is given an existing file name" do + options = parse(["--example", File.dirname(__FILE__) + '/examples.txt']) + options.examples.should eql([ + "Sir, if you were my husband, I would poison your drink.", + "Madam, if you were my wife, I would drink it."]) + end + + it "should read no examples if given an empty file" do + options = parse(["--example", File.dirname(__FILE__) + '/empty_file.txt']) + options.examples.should eql([]) + end + + it "should use html formatter when format is h" do + options = parse(["--format", "h"]) + options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) + end + + it "should use html story formatter when format is h" do + options = parse(["--format", "h"]) + options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter) + end + + it "should use html formatter when format is html" do + options = parse(["--format", "html"]) + options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) + end + + it "should use html story formatter when format is html" do + options = parse(["--format", "html"]) + options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter) + end + + it "should use html formatter with explicit output when format is html:test.html" do + FileUtils.rm 'test.html' if File.exist?('test.html') + options = parse(["--format", "html:test.html"]) + options.formatters # creates the file + File.should be_exist('test.html') + options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter) + options.formatters[0].close + FileUtils.rm 'test.html' + end + + it "should use noisy backtrace tweaker with b option" do + options = parse(["-b"]) + options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker) + end + + it "should use noisy backtrace tweaker with backtrace option" do + options = parse(["--backtrace"]) + options.backtrace_tweaker.should be_instance_of(Spec::Runner::NoisyBacktraceTweaker) + end + + it "should use quiet backtrace tweaker by default" do + options = parse([]) + options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker) + end + + it "should use progress bar formatter by default" do + options = parse([]) + options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter) + end + + it "should use specdoc formatter when format is s" do + options = parse(["--format", "s"]) + options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter) + end + + it "should use specdoc formatter when format is specdoc" do + options = parse(["--format", "specdoc"]) + options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter) + end + + it "should support diff option when format is not specified" do + options = parse(["--diff"]) + options.diff_format.should == :unified + end + + it "should use unified diff format option when format is unified" do + options = parse(["--diff", "unified"]) + options.diff_format.should == :unified + options.differ_class.should equal(Spec::Expectations::Differs::Default) + end + + it "should use context diff format option when format is context" do + options = parse(["--diff", "context"]) + options.diff_format.should == :context + options.differ_class.should == Spec::Expectations::Differs::Default + end + + it "should use custom diff format option when format is a custom format" do + Spec::Expectations.differ.should_not be_instance_of(Custom::Differ) + + options = parse(["--diff", "Custom::Differ"]) + options.parse_diff "Custom::Differ" + options.diff_format.should == :custom + options.differ_class.should == Custom::Differ + Spec::Expectations.differ.should be_instance_of(Custom::Differ) + end + + it "should print instructions about how to fix missing differ" do + lambda { parse(["--diff", "Custom::MissingFormatter"]) }.should raise_error(NameError) + @err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n) + end + + describe "when attempting a focussed spec" do + attr_reader :file, :dir + before do + @original_rspec_options = $rspec_options + @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb" + @dir = File.dirname(file) + end + + after do + $rspec_options = @original_rspec_options + end + + def parse(args) + options = super + $rspec_options = options + options.filename_pattern = "*_fixture.rb" + options + end + + it "should support --line to identify spec" do + options = parse([file, "--line", "13"]) + options.line_number.should == 13 + options.examples.should be_empty + options.run_examples + options.examples.should eql(["d"]) + end + + it "should fail with error message if file is dir along with --line" do + options = parse([dir, "--line", "169"]) + options.line_number.should == 169 + options.run_examples + @err.string.should match(/You must specify one file, not a directory when using the --line option/n) + end + + it "should fail with error message if file does not exist along with --line" do + options = parse(["some file", "--line", "169"]) + proc do + options.run_examples + end.should raise_error + end + + it "should fail with error message if more than one files are specified along with --line" do + options = parse([file, file, "--line", "169"]) + options.run_examples + @err.string.should match(/Only one file can be specified when using the --line option/n) + end + + it "should fail with error message if --example and --line are used simultaneously" do + options = parse([file, "--example", "some example", "--line", "169"]) + options.run_examples + @err.string.should match(/You cannot use both --line and --example/n) + end + end + + if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} + it "should barf when --heckle is specified (and platform is windows)" do + lambda do + options = parse(["--heckle", "Spec"]) + end.should raise_error(StandardError, "Heckle not supported on Windows") + end + else + it "should heckle when --heckle is specified (and platform is not windows)" do + options = parse(["--heckle", "Spec"]) + options.heckle_runner.should be_instance_of(Spec::Runner::HeckleRunner) + end + end + + it "should read options from file when --options is specified" do + options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"]) + options.diff_format.should_not be_nil + options.colour.should be_true + end + + it "should default the formatter to ProgressBarFormatter when using options file" do + options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"]) + options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter) + end + + it "should read spaced and multi-line options from file when --options is specified" do + options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"]) + options.diff_format.should_not be_nil + options.colour.should be_true + options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter) + end + + it "should save config to file when --generate-options is specified" do + FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts') + options = parse(["--colour", "--generate-options", "test.spec.opts", "--diff"]) + IO.read('test.spec.opts').should == "--colour\n--diff\n" + FileUtils.rm 'test.spec.opts' + end + + it "should save config to file when -G is specified" do + FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts') + options = parse(["--colour", "-G", "test.spec.opts", "--diff"]) + IO.read('test.spec.opts').should == "--colour\n--diff\n" + FileUtils.rm 'test.spec.opts' + end + + it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do + options = Spec::Runner::OptionParser.parse([ + "some/spec.rb", "--diff", "--colour" + ], @err, @out) + Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options| + options.argv.should == ["some/spec.rb", "--diff", "--colour"] + end + parse(["some/spec.rb", "--diff", "--drb", "--colour"]) + end + + it "should reverse spec order when --reverse is specified" do + options = parse(["some/spec.rb", "--reverse"]) + end + + it "should set an mtime comparator when --loadby mtime" do + options = parse(["--loadby", 'mtime']) + runner = Spec::Runner::ExampleGroupRunner.new(options) + Spec::Runner::ExampleGroupRunner.should_receive(:new). + with(options). + and_return(runner) + runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"]) + + Dir.chdir(File.dirname(__FILE__)) do + options.files << 'command_line_spec.rb' + options.files << 'most_recent_spec.rb' + FileUtils.touch "most_recent_spec.rb" + options.run_examples + FileUtils.rm "most_recent_spec.rb" + end + end + + it "should use the standard runner by default" do + runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options) + ::Spec::Runner::ExampleGroupRunner.should_receive(:new). + with(@parser.options). + and_return(runner) + options = parse([]) + options.run_examples + end + + it "should use a custom runner when given" do + runner = Custom::ExampleGroupRunner.new(@parser.options, nil) + Custom::ExampleGroupRunner.should_receive(:new). + with(@parser.options, nil). + and_return(runner) + options = parse(["--runner", "Custom::ExampleGroupRunner"]) + options.run_examples + end + + it "should use a custom runner with extra options" do + runner = Custom::ExampleGroupRunner.new(@parser.options, 'something') + Custom::ExampleGroupRunner.should_receive(:new). + with(@parser.options, 'something'). + and_return(runner) + options = parse(["--runner", "Custom::ExampleGroupRunner:something"]) + options.run_examples + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/options_spec.rb b/vendor/gems/rspec/spec/spec/runner/options_spec.rb new file mode 100644 index 0000000..6f08937 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/options_spec.rb @@ -0,0 +1,364 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe Options do + before(:each) do + @err = StringIO.new('') + @out = StringIO.new('') + @options = Options.new(@err, @out) + end + + after(:each) do + Spec::Expectations.differ = nil + end + + describe "#examples" do + it "should default to empty array" do + @options.examples.should == [] + end + end + + describe "#include_pattern" do + it "should default to '**/*_spec.rb'" do + @options.filename_pattern.should == "**/*_spec.rb" + end + end + + describe "#files_to_load" do + + it "should load files not following pattern if named explicitly" do + file = File.expand_path(File.dirname(__FILE__) + "/resources/a_bar.rb") + @options.files << file + @options.files_to_load.should include(file) + end + + describe "with default --pattern" do + it "should load files named _spec.rb" do + dir = File.expand_path(File.dirname(__FILE__) + "/resources/") + @options.files << dir + @options.files_to_load.should == ["#{dir}/a_spec.rb"] + end + end + + describe "with explicit pattern (single)" do + before(:each) do + @options.filename_pattern = "**/*_foo.rb" + end + + it "should load files following pattern" do + file = File.expand_path(File.dirname(__FILE__) + "/resources/a_foo.rb") + @options.files << file + @options.files_to_load.should include(file) + end + + it "should load files in directories following pattern" do + dir = File.expand_path(File.dirname(__FILE__) + "/resources") + @options.files << dir + @options.files_to_load.should include("#{dir}/a_foo.rb") + end + + it "should not load files in directories not following pattern" do + dir = File.expand_path(File.dirname(__FILE__) + "/resources") + @options.files << dir + @options.files_to_load.should_not include("#{dir}/a_bar.rb") + end + end + + describe "with explicit pattern (comma,separated,values)" do + + before(:each) do + @options.filename_pattern = "**/*_foo.rb,**/*_bar.rb" + end + + it "should support comma separated values" do + dir = File.expand_path(File.dirname(__FILE__) + "/resources") + @options.files << dir + @options.files_to_load.should include("#{dir}/a_foo.rb") + @options.files_to_load.should include("#{dir}/a_bar.rb") + end + + it "should support comma separated values with spaces" do + dir = File.expand_path(File.dirname(__FILE__) + "/resources") + @options.files << dir + @options.files_to_load.should include("#{dir}/a_foo.rb") + @options.files_to_load.should include("#{dir}/a_bar.rb") + end + + end + + end + + describe "#backtrace_tweaker" do + it "should default to QuietBacktraceTweaker" do + @options.backtrace_tweaker.class.should == QuietBacktraceTweaker + end + end + + describe "#dry_run" do + it "should default to false" do + @options.dry_run.should == false + end + end + + describe "#context_lines" do + it "should default to 3" do + @options.context_lines.should == 3 + end + end + + describe "#parse_diff with nil" do + before(:each) do + @options.parse_diff nil + end + + it "should make diff_format unified" do + @options.diff_format.should == :unified + end + + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Spec::Expectations::Differs::Default + end + end + + describe "#parse_diff with 'unified'" do + before(:each) do + @options.parse_diff 'unified' + end + + it "should make diff_format unified and uses default differ_class" do + @options.diff_format.should == :unified + @options.differ_class.should equal(Spec::Expectations::Differs::Default) + end + + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Spec::Expectations::Differs::Default + end + end + + describe "#parse_diff with 'context'" do + before(:each) do + @options.parse_diff 'context' + end + + it "should make diff_format context and uses default differ_class" do + @options.diff_format.should == :context + @options.differ_class.should == Spec::Expectations::Differs::Default + end + + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Spec::Expectations::Differs::Default + end + end + + describe "#parse_diff with Custom::Differ" do + before(:each) do + @options.parse_diff 'Custom::Differ' + end + + it "should use custom differ_class" do + @options.diff_format.should == :custom + @options.differ_class.should == Custom::Differ + Spec::Expectations.differ.should be_instance_of(Custom::Differ) + end + + it "should set Spec::Expectations.differ to be a default differ" do + Spec::Expectations.differ.class.should == + ::Custom::Differ + end + end + + describe "#parse_diff with missing class name" do + it "should raise error" do + lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError) + @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n) + end + end + + describe "#parse_example" do + it "with argument thats not a file path, sets argument as the example" do + example = "something or other" + File.file?(example).should == false + @options.parse_example example + @options.examples.should eql(["something or other"]) + end + + it "with argument that is a file path, sets examples to contents of the file" do + example = "#{File.dirname(__FILE__)}/examples.txt" + File.should_receive(:file?).with(example).and_return(true) + file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.") + File.should_receive(:open).with(example).and_return(file) + + @options.parse_example example + @options.examples.should eql([ + "Sir, if you were my husband, I would poison your drink.", + "Madam, if you were my wife, I would drink it." + ]) + end + end + + describe "#examples_should_not_be_run" do + it "should cause #run_examples to return true and do nothing" do + @options.examples_should_not_be_run + ExampleGroupRunner.should_not_receive(:new) + + @options.run_examples.should be_true + end + end + + describe "#load_class" do + it "should raise error when not class name" do + lambda do + @options.send(:load_class, 'foo', 'fruit', '--food') + end.should raise_error('"foo" is not a valid class name') + end + end + + describe "#reporter" do + it "returns a Reporter" do + @options.reporter.should be_instance_of(Reporter) + @options.reporter.options.should === @options + end + end + + describe "#add_example_group affecting passed in example_group" do + it "runs all examples when options.examples is nil" do + example_1_has_run = false + example_2_has_run = false + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + it "runs 1" do + example_1_has_run = true + end + it "runs 2" do + example_2_has_run = true + end + end + + @options.examples = nil + + @options.add_example_group @example_group + @options.run_examples + example_1_has_run.should be_true + example_2_has_run.should be_true + end + + it "keeps all example_definitions when options.examples is empty" do + example_1_has_run = false + example_2_has_run = false + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + it "runs 1" do + example_1_has_run = true + end + it "runs 2" do + example_2_has_run = true + end + end + + @options.examples = [] + + @options.add_example_group @example_group + @options.run_examples + example_1_has_run.should be_true + example_2_has_run.should be_true + end + end + + describe "#add_example_group affecting example_group" do + it "adds example_group when example_group has example_definitions and is not shared" do + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + it "uses this example_group" do + end + end + + @options.number_of_examples.should == 0 + @options.add_example_group @example_group + @options.number_of_examples.should == 1 + @options.example_groups.length.should == 1 + end + end + + describe "#remove_example_group" do + it "should remove the ExampleGroup from the list of ExampleGroups" do + @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do + end + @options.add_example_group @example_group + @options.example_groups.should include(@example_group) + + @options.remove_example_group @example_group + @options.example_groups.should_not include(@example_group) + end + end + + describe "#run_examples" do + it "should use the standard runner by default" do + runner = ::Spec::Runner::ExampleGroupRunner.new(@options) + ::Spec::Runner::ExampleGroupRunner.should_receive(:new). + with(@options). + and_return(runner) + @options.user_input_for_runner = nil + + @options.run_examples + end + + it "should use a custom runner when given" do + runner = Custom::ExampleGroupRunner.new(@options, nil) + Custom::ExampleGroupRunner.should_receive(:new). + with(@options, nil). + and_return(runner) + @options.user_input_for_runner = "Custom::ExampleGroupRunner" + + @options.run_examples + end + + it "should use a custom runner with extra options" do + runner = Custom::ExampleGroupRunner.new(@options, 'something') + Custom::ExampleGroupRunner.should_receive(:new). + with(@options, 'something'). + and_return(runner) + @options.user_input_for_runner = "Custom::ExampleGroupRunner:something" + + @options.run_examples + end + + describe "when there are examples" do + before(:each) do + @options.add_example_group Class.new(::Spec::Example::ExampleGroup) + @options.formatters << Formatter::BaseTextFormatter.new(@options, @out) + end + + it "runs the Examples and outputs the result" do + @options.run_examples + @out.string.should include("0 examples, 0 failures") + end + + it "sets #examples_run? to true" do + @options.examples_run?.should be_false + @options.run_examples + @options.examples_run?.should be_true + end + end + + describe "when there are no examples" do + before(:each) do + @options.formatters << Formatter::BaseTextFormatter.new(@options, @out) + end + + it "does not run Examples and does not output a result" do + @options.run_examples + @out.string.should_not include("examples") + @out.string.should_not include("failures") + end + + it "sets #examples_run? to false" do + @options.examples_run?.should be_false + @options.run_examples + @options.examples_run?.should be_false + end + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb new file mode 100644 index 0000000..444730d --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb @@ -0,0 +1,7 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "Running an Example" do + it "should not output twice" do + true.should be_true + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb new file mode 100644 index 0000000..a0e6131 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb @@ -0,0 +1,8 @@ +dir = File.dirname(__FILE__) +require "#{dir}/../../spec_helper" + +triggering_double_output = rspec_options +options = Spec::Runner::OptionParser.parse( + ["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout +) +Spec::Runner::CommandLine.run(options) diff --git a/vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb b/vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb new file mode 100644 index 0000000..8f67a38 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb @@ -0,0 +1,16 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe CommandLine do + it "should not output twice" do + dir = File.dirname(__FILE__) + Dir.chdir("#{dir}/../../..") do + output =`ruby #{dir}/output_one_time_fixture_runner.rb` + output.should include("1 example, 0 failures") + output.should_not include("0 examples, 0 failures") + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb new file mode 100644 index 0000000..e47b6c7 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb @@ -0,0 +1,56 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe "QuietBacktraceTweaker" do + before(:each) do + @error = RuntimeError.new + @tweaker = QuietBacktraceTweaker.new + end + + it "should not barf on nil backtrace" do + lambda do + @tweaker.tweak_backtrace(@error) + end.should_not raise_error + end + + it "should remove anything from textmate ruby bundle" do + @error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should be_empty + end + + it "should remove anything in lib spec dir" do + ["expectations", "mocks", "runner"].each do |child| + element="/lib/spec/#{child}/anything.rb" + @error.set_backtrace([element]) + @tweaker.tweak_backtrace(@error) + unless (@error.backtrace.empty?) + raise("Should have tweaked away '#{element}'") + end + end + end + + it "should remove mock_frameworks/rspec" do + element = "mock_frameworks/rspec" + @error.set_backtrace([element]) + @tweaker.tweak_backtrace(@error) + unless (@error.backtrace.empty?) + raise("Should have tweaked away '#{element}'") + end + end + + it "should remove bin spec" do + @error.set_backtrace(["bin/spec:"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should be_empty + end + + it "should clean up double slashes" do + @error.set_backtrace(["/a//b/c//d.rb"]) + @tweaker.tweak_backtrace(@error) + @error.backtrace.should include("/a/b/c/d.rb") + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb b/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb new file mode 100644 index 0000000..52377e7 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb @@ -0,0 +1,189 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +module Spec + module Runner + describe Reporter do + attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group + before(:each) do + @formatter_output = StringIO.new + @options = Options.new(StringIO.new, StringIO.new) + @backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil) + options.backtrace_tweaker = backtrace_tweaker + @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output) + options.formatters << formatter + @reporter = Reporter.new(options) + @example_group = create_example_group("example_group") + reporter.add_example_group example_group + end + + def failure + Mocks::DuckTypeArgConstraint.new(:header, :exception) + end + + def create_example_group(description_text) + example_group = Class.new(Spec::Example::ExampleGroup) + example_group.describe description_text + example_group + end + + it "should assign itself as the reporter to options" do + options.reporter.should equal(@reporter) + end + + it "should tell formatter when example_group is added" do + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + end + + it "should handle multiple example_groups with same name" do + formatter.should_receive(:add_example_group).exactly(3).times + formatter.should_receive(:example_started).exactly(3).times + formatter.should_receive(:example_passed).exactly(3).times + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0) + reporter.add_example_group(create_example_group("example_group")) + reporter.example_started("spec 1") + reporter.example_finished("spec 1") + reporter.add_example_group(create_example_group("example_group")) + reporter.example_started("spec 2") + reporter.example_finished("spec 2") + reporter.add_example_group(create_example_group("example_group")) + reporter.example_started("spec 3") + reporter.example_finished("spec 3") + reporter.dump + end + + it "should handle multiple examples with the same name" do + error=RuntimeError.new + passing = ExampleGroup.new("example") + failing = ExampleGroup.new("example") + + formatter.should_receive(:add_example_group).exactly(2).times + formatter.should_receive(:example_passed).with(passing).exactly(2).times + formatter.should_receive(:example_failed).with(failing, 1, failure) + formatter.should_receive(:example_failed).with(failing, 2, failure) + formatter.should_receive(:dump_failure).exactly(2).times + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0) + backtrace_tweaker.should_receive(:tweak_backtrace).twice + + reporter.add_example_group(create_example_group("example_group")) + reporter.example_finished(passing) + reporter.example_finished(failing, error) + + reporter.add_example_group(create_example_group("example_group")) + reporter.example_finished(passing) + reporter.example_finished(failing, error) + reporter.dump + end + + it "should push stats to formatter even with no data" do + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0) + formatter.should_receive(:close).with(no_args) + reporter.dump + end + + it "should push time to formatter" do + formatter.should_receive(:start).with(5) + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:dump_summary) do |time, a, b| + time.to_s.should match(/[0-9].[0-9|e|-]+/) + end + reporter.start(5) + reporter.end + reporter.dump + end + + describe Reporter, "reporting one passing example" do + it "should tell formatter example passed" do + formatter.should_receive(:example_passed) + reporter.example_finished("example") + end + + it "should not delegate to backtrace tweaker" do + formatter.should_receive(:example_passed) + backtrace_tweaker.should_not_receive(:tweak_backtrace) + reporter.example_finished("example") + end + + it "should account for passing example in stats" do + formatter.should_receive(:example_passed) + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0) + formatter.should_receive(:close).with(no_args) + reporter.example_finished("example") + reporter.dump + end + end + + describe Reporter, "reporting one failing example" do + it "should tell formatter that example failed" do + formatter.should_receive(:example_failed) + reporter.example_finished(example_group, RuntimeError.new) + end + + it "should delegate to backtrace tweaker" do + formatter.should_receive(:example_failed) + backtrace_tweaker.should_receive(:tweak_backtrace) + reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new) + end + + it "should account for failing example in stats" do + example = ExampleGroup.new("example") + formatter.should_receive(:example_failed).with(example, 1, failure) + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_failure).with(1, anything()) + formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0) + formatter.should_receive(:close).with(no_args) + reporter.example_finished(example, RuntimeError.new) + reporter.dump + end + + end + + describe Reporter, "reporting one pending example (ExamplePendingError)" do + it "should tell formatter example is pending" do + example = ExampleGroup.new("example") + formatter.should_receive(:example_pending).with(example_group.description, example, "reason") + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason")) + end + + it "should account for pending example in stats" do + example = ExampleGroup.new("example") + formatter.should_receive(:example_pending).with(example_group.description, example, "reason") + formatter.should_receive(:start_dump) + formatter.should_receive(:dump_pending) + formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1) + formatter.should_receive(:close).with(no_args) + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason")) + reporter.dump + end + end + + describe Reporter, "reporting one pending example (PendingExampleFixedError)" do + it "should tell formatter pending example is fixed" do + formatter.should_receive(:example_failed) do |name, counter, failure| + failure.header.should == "'example_group example' FIXED" + end + formatter.should_receive(:add_example_group).with(example_group) + reporter.add_example_group(example_group) + reporter.example_finished(ExampleGroup.new("example"), Spec::Example::PendingExampleFixedError.new("reason")) + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb b/vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb diff --git a/vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb b/vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb diff --git a/vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb b/vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb new file mode 100644 index 0000000..d9b67cc --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb @@ -0,0 +1 @@ +# Empty - used by ../options_spec.rb
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/spec.opts b/vendor/gems/rspec/spec/spec/runner/spec.opts new file mode 100644 index 0000000..fd816a4 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/spec.opts @@ -0,0 +1,2 @@ +--diff +--colour
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb b/vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb new file mode 100644 index 0000000..14602d9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb @@ -0,0 +1,70 @@ +require File.dirname(__FILE__) + '/../../../spec_helper.rb' + +describe "c" do + + it "1" do + end + + it "2" do + end + +end + +describe "d" do + + it "3" do + end + + it "4" do + end + +end + +class SpecParserSubject +end + +describe SpecParserSubject do + + it "5" do + end + +end + +describe SpecParserSubject, "described" do + + it "6" do + end + +end + +describe SpecParserSubject, "described", :something => :something_else do + + it "7" do + end + +end + +describe "described", :something => :something_else do + + it "8" do + end + +end + +describe "e" do + + it "9" do + end + + it "10" do + end + + describe "f" do + it "11" do + end + + it "12" do + end + end + +end diff --git a/vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb b/vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb new file mode 100644 index 0000000..3d8d9c2 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb @@ -0,0 +1,79 @@ +require File.dirname(__FILE__) + '/../../spec_helper.rb' + +describe "SpecParser" do + attr_reader :parser, :file + before(:each) do + @parser = Spec::Runner::SpecParser.new + @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb" + require file + end + + it "should find spec name for 'specify' at same line" do + parser.spec_name_for(file, 5).should == "c 1" + end + + it "should find spec name for 'specify' at end of spec line" do + parser.spec_name_for(file, 6).should == "c 1" + end + + it "should find context for 'context' above all specs" do + parser.spec_name_for(file, 4).should == "c" + end + + it "should find spec name for 'it' at same line" do + parser.spec_name_for(file, 15).should == "d 3" + end + + it "should find spec name for 'it' at end of spec line" do + parser.spec_name_for(file, 16).should == "d 3" + end + + it "should find context for 'describe' above all specs" do + parser.spec_name_for(file, 14).should == "d" + end + + it "should find nearest example name between examples" do + parser.spec_name_for(file, 7).should == "c 1" + end + + it "should find nothing outside a context" do + parser.spec_name_for(file, 2).should be_nil + end + + it "should find context name for type" do + parser.spec_name_for(file, 26).should == "SpecParserSubject" + end + + it "should find context and spec name for type" do + parser.spec_name_for(file, 28).should == "SpecParserSubject 5" + end + + it "should find context and description for type" do + parser.spec_name_for(file, 33).should == "SpecParserSubject described" + end + + it "should find context and description and example for type" do + parser.spec_name_for(file, 36).should == "SpecParserSubject described 6" + end + + it "should find context and description for type with modifications" do + parser.spec_name_for(file, 40).should == "SpecParserSubject described" + end + + it "should find context and described and example for type with modifications" do + parser.spec_name_for(file, 43).should == "SpecParserSubject described 7" + end + + it "should find example group" do + parser.spec_name_for(file, 47).should == "described" + end + + it "should find example" do + parser.spec_name_for(file, 50).should == "described 8" + end + + it "should find nested example" do + parser.spec_name_for(file, 63).should == "e f 11" + end + +end diff --git a/vendor/gems/rspec/spec/spec/runner/spec_spaced.opts b/vendor/gems/rspec/spec/spec/runner/spec_spaced.opts new file mode 100644 index 0000000..6b3efd2 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner/spec_spaced.opts @@ -0,0 +1,2 @@ +--diff --colour +--format s
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/runner_spec.rb b/vendor/gems/rspec/spec/spec/runner_spec.rb new file mode 100644 index 0000000..d75e661 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/runner_spec.rb @@ -0,0 +1,11 @@ +require File.dirname(__FILE__) + '/../spec_helper.rb' + +module Spec + describe Runner, ".configure" do + it "should yield global configuration" do + Spec::Runner.configure do |config| + config.should equal(Spec::Runner.configuration) + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/spec_classes.rb b/vendor/gems/rspec/spec/spec/spec_classes.rb new file mode 100644 index 0000000..c8900a7 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/spec_classes.rb @@ -0,0 +1,133 @@ +# This file contains various classes used by the specs. +module Spec + module Expectations + class Person + attr_reader :name + def initialize name + @name = name + end + def == other + return @name == other.name + end + end + + class ClassWithMultiWordPredicate + def multi_word_predicate? + true + end + end + + module Helper + class CollectionWithSizeMethod + def initialize; @list = []; end + def size; @list.size; end + def push(item); @list.push(item); end + end + + class CollectionWithLengthMethod + def initialize; @list = []; end + def length; @list.size; end + def push(item); @list.push(item); end + end + + class CollectionOwner + attr_reader :items_in_collection_with_size_method, :items_in_collection_with_length_method + + def initialize + @items_in_collection_with_size_method = CollectionWithSizeMethod.new + @items_in_collection_with_length_method = CollectionWithLengthMethod.new + end + + def add_to_collection_with_size_method(item) + @items_in_collection_with_size_method.push(item) + end + + def add_to_collection_with_length_method(item) + @items_in_collection_with_length_method.push(item) + end + + def items_for(arg) + return [1, 2, 3] if arg == 'a' + [1] + end + + def items + @items_in_collection_with_size_method + end + end + + class HandCodedMock + include Spec::Matchers + def initialize(return_val) + @return_val = return_val + @funny_called = false + end + + def funny? + @funny_called = true + @return_val + end + + def hungry?(a, b, c) + a.should equal(1) + b.should equal(2) + c.should equal(3) + @funny_called = true + @return_val + end + + def exists? + @return_val + end + + def multi_word_predicate? + @return_val + end + + def rspec_verify + @funny_called.should be_true + end + end + class ClassWithUnqueriedPredicate + attr_accessor :foo + def initialize(foo) + @foo = foo + end + end + end + end +end + +module Custom + require 'spec/runner/formatter/base_text_formatter' + class Formatter < Spec::Runner::Formatter::BaseTextFormatter + attr_reader :options, :where + + def initialize(options, where) + @options = options + @where = where + end + end + + class BadFormatter < Spec::Runner::Formatter::BaseTextFormatter + attr_reader :where + + def initialize(options, where) + bad_method + end + end + + class Differ + attr_reader :options + def initialize(options) + @options = options + end + + def diff_as_object(target, expected) + "" + end + end +end + +class FakeReporter < Spec::Runner::Reporter +end diff --git a/vendor/gems/rspec/spec/spec/story/builders.rb b/vendor/gems/rspec/spec/spec/story/builders.rb new file mode 100644 index 0000000..77d50d5 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/builders.rb @@ -0,0 +1,46 @@ +module Spec + module Story + class StoryBuilder + def initialize + @title = 'a story' + @narrative = 'narrative' + end + + def title(value) + @title = value + self + end + + def narrative(value) + @narrative = value + self + end + + def to_story(&block) + block = lambda {} unless block_given? + Story.new @title, @narrative, &block + end + end + + class ScenarioBuilder + def initialize + @name = 'a scenario' + @story = StoryBuilder.new.to_story + end + + def name(value) + @name = value + self + end + + def story(value) + @story = value + self + end + + def to_scenario(&block) + Scenario.new @story, @name, &block + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb b/vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb new file mode 100644 index 0000000..acdc341 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb @@ -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 diff --git a/vendor/gems/rspec/spec/spec/story/extensions_spec.rb b/vendor/gems/rspec/spec/spec/story/extensions_spec.rb new file mode 100644 index 0000000..612ddc7 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/extensions_spec.rb @@ -0,0 +1,14 @@ +require File.dirname(__FILE__) + '/story_helper' + +require 'spec/story' + +describe Kernel, "#Story" do + before(:each) do + Kernel.stub!(:at_exit) + end + + it "should delegate to ::Spec::Story::Runner.story_runner" do + ::Spec::Story::Runner.story_runner.should_receive(:Story) + story = Story("title","narrative"){} + end +end diff --git a/vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb b/vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb new file mode 100644 index 0000000..a688f88 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb @@ -0,0 +1,27 @@ +require File.dirname(__FILE__) + '/story_helper' + +module Spec + module Story + describe GivenScenario do + it 'should execute a scenario from the current story in its world' do + # given + class MyWorld + attr :scenario_ran + end + instance = World.create(MyWorld) + scenario = ScenarioBuilder.new.to_scenario do + @scenario_ran = true + end + Runner::StoryRunner.should_receive(:scenario_from_current_story).with('scenario name').and_return(scenario) + + step = GivenScenario.new 'scenario name' + + # when + step.perform(instance, nil) + + # then + instance.scenario_ran.should be_true + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb new file mode 100644 index 0000000..1d5f2e0 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb @@ -0,0 +1,92 @@ +require File.dirname(__FILE__) + '/../story_helper' + +module Spec + module Story + module Runner + describe PlainTextStoryRunner do + before(:each) do + StoryParser.stub!(:new).and_return(@parser = mock("parser")) + @parser.stub!(:parse).and_return([]) + File.stub!(:read).with("path").and_return("this\nand that") + end + + it "should provide access to steps" do + runner = PlainTextStoryRunner.new("path") + + runner.steps do |add| + add.given("baz") {} + end + + runner.steps.find(:given, "baz").should_not be_nil + end + + it "should parse a story file" do + runner = PlainTextStoryRunner.new("path") + + during { + runner.run + }.expect { + @parser.should_receive(:parse).with(["this", "and that"]) + } + end + + it "should build up a mediator with its own steps and the singleton story_runner" do + runner = PlainTextStoryRunner.new("path") + Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner")) + Spec::Story::Runner::StoryMediator.should_receive(:new).with(runner.steps, story_runner, {}). + and_return(mediator = stub("mediator", :run_stories => nil)) + runner.run + end + + it "should build up a parser with the mediator" do + runner = PlainTextStoryRunner.new("path") + Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner")) + Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator = stub("mediator", :run_stories => nil)) + Spec::Story::Runner::StoryParser.should_receive(:new).with(mediator).and_return(@parser) + runner.run + end + + it "should tell the mediator to run the stories" do + runner = PlainTextStoryRunner.new("path") + mediator = mock("mediator") + Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator) + mediator.should_receive(:run_stories) + runner.run + end + + it "should accept a block instead of a path" do + runner = PlainTextStoryRunner.new do |runner| + runner.load("path/to/story") + end + File.should_receive(:read).with("path/to/story").and_return("this\nand that") + runner.run + end + + it "should tell you if you try to run with no path set" do + runner = PlainTextStoryRunner.new + lambda { + runner.run + }.should raise_error(RuntimeError, "You must set a path to the file with the story. See the RDoc.") + end + + it "should pass options to the mediator" do + runner = PlainTextStoryRunner.new("path", :foo => :bar) + Spec::Story::Runner::StoryMediator.should_receive(:new). + with(anything, anything, :foo => :bar). + and_return(mediator = stub("mediator", :run_stories => nil)) + runner.run + end + + it "should provide access to its options" do + runner = PlainTextStoryRunner.new("path") + runner[:foo] = :bar + Spec::Story::Runner::StoryMediator.should_receive(:new). + with(anything, anything, :foo => :bar). + and_return(mediator = stub("mediator", :run_stories => nil)) + runner.run + end + + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb new file mode 100644 index 0000000..042c41e --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb @@ -0,0 +1,27 @@ +require File.dirname(__FILE__) + '/../story_helper' + +module Spec + module Story + module Runner + describe ScenarioCollector do + it 'should construct scenarios with the supplied story' do + # given + story = stub_everything('story') + scenario_collector = ScenarioCollector.new(story) + + # when + scenario_collector.Scenario 'scenario1' do end + scenario_collector.Scenario 'scenario2' do end + scenarios = scenario_collector.scenarios + + # then + scenario_collector.should have(2).scenarios + scenarios.first.name.should == 'scenario1' + scenarios.first.story.should equal(story) + scenarios.last.name.should == 'scenario2' + scenarios.last.story.should equal(story) + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb new file mode 100644 index 0000000..a69ed4a --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb @@ -0,0 +1,142 @@ +require File.dirname(__FILE__) + '/../story_helper' + +module Spec + module Story + module Runner + describe ScenarioRunner do + it 'should run a scenario in its story' do + # given + world = stub_everything + scenario_runner = ScenarioRunner.new + $answer = nil + story = Story.new 'story', 'narrative' do + @answer = 42 # this should be available to the scenario + end + scenario = Scenario.new story, 'scenario' do + $answer = @answer + end + + # when + scenario_runner.run(scenario, world) + + # then + $answer.should == 42 + end + + it 'should allow scenarios to share methods' do + # given + world = stub_everything + $shared_invoked = 0 + story = Story.new 'story', 'narrative' do + def shared + $shared_invoked += 1 + end + end + scenario1 = Scenario.new story, 'scenario1' do + shared() + end + scenario2 = Scenario.new story, 'scenario2' do + shared() + end + scenario_runner = ScenarioRunner.new + + # when + scenario_runner.run(scenario1, world) + scenario_runner.run(scenario2, world) + + # then + $shared_invoked.should == 2 + end + + it 'should notify listeners when a scenario starts' do + # given + world = stub_everything + story = Story.new 'story', 'narrative' do end + scenario = Scenario.new story, 'scenario1' do + # succeeds + end + scenario_runner = ScenarioRunner.new + mock_listener1 = stub_everything('listener1') + mock_listener2 = stub_everything('listener2') + scenario_runner.add_listener(mock_listener1) + scenario_runner.add_listener(mock_listener2) + + # expect + mock_listener1.should_receive(:scenario_started).with('story', 'scenario1') + mock_listener2.should_receive(:scenario_started).with('story', 'scenario1') + + # when + scenario_runner.run(scenario, world) + + # then + end + + it 'should notify listeners when a scenario succeeds' do + # given + world = stub_everything('world') + story = Story.new 'story', 'narrative' do end + scenario = Scenario.new story, 'scenario1' do + # succeeds + end + scenario_runner = ScenarioRunner.new + mock_listener1 = stub_everything('listener1') + mock_listener2 = stub_everything('listener2') + scenario_runner.add_listener(mock_listener1) + scenario_runner.add_listener(mock_listener2) + + # expect + mock_listener1.should_receive(:scenario_succeeded).with('story', 'scenario1') + mock_listener2.should_receive(:scenario_succeeded).with('story', 'scenario1') + + # when + scenario_runner.run(scenario, world) + + # then + end + + it 'should notify listeners ONCE when a scenario raises an error' do + # given + error = RuntimeError.new('oops') + story = Story.new 'title', 'narrative' do end + scenario = Scenario.new story, 'scenario1' do + end + scenario_runner = ScenarioRunner.new + mock_listener = stub_everything('listener') + scenario_runner.add_listener(mock_listener) + world = stub_everything + + # expect + world.should_receive(:errors).twice.and_return([error, error]) + mock_listener.should_receive(:scenario_failed).with('title', 'scenario1', error).once + + # when + scenario_runner.run scenario, world + + # then + end + + it 'should notify listeners when a scenario is pending' do + # given + pending_error = Spec::Example::ExamplePendingError.new('todo') + story = Story.new 'title', 'narrative' do end + scenario = Scenario.new story, 'scenario1' do + end + scenario_runner = ScenarioRunner.new + mock_listener = mock('listener') + scenario_runner.add_listener(mock_listener) + world = stub_everything + + # expect + world.should_receive(:errors).twice.and_return([pending_error, pending_error]) + mock_listener.should_receive(:scenario_started).with('title', 'scenario1') + mock_listener.should_receive(:scenario_pending).with('title', 'scenario1', 'todo').once + + # when + scenario_runner.run scenario, world + + # then + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb new file mode 100644 index 0000000..4192e48 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb @@ -0,0 +1,133 @@ +require File.dirname(__FILE__) + '/../story_helper' + +module Spec + module Story + module Runner + + describe StoryMediator do + before(:each) do + $story_mediator_spec_value = nil + @step_group = StepGroup.new + @step_group.create_matcher(:given, "given") { $story_mediator_spec_value = "given matched" } + @step_group.create_matcher(:when, "when") { $story_mediator_spec_value = "when matched" } + @step_group.create_matcher(:then, "then") { $story_mediator_spec_value = "then matched" } + + @scenario_runner = ScenarioRunner.new + @runner = StoryRunner.new @scenario_runner + @mediator = StoryMediator.new @step_group, @runner + end + + def run_stories + @mediator.run_stories + @runner.run_stories + end + + it "should have no stories" do + @mediator.stories.should be_empty + end + + it "should create two stories" do + @mediator.create_story "story title", "story narrative" + @mediator.create_story "story title 2", "story narrative 2" + run_stories + + @runner.should have(2).stories + @runner.stories.first.title.should == "story title" + @runner.stories.first.narrative.should == "story narrative" + @runner.stories.last.title.should == "story title 2" + @runner.stories.last.narrative.should == "story narrative 2" + end + + it "should create a scenario" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario name" + run_stories + + @runner.should have(1).scenarios + @runner.scenarios.first.name.should == "scenario name" + @runner.scenarios.first.story.should == @runner.stories.first + end + + it "should create a given scenario step if one matches" do + pending("need to untangle the dark mysteries of the story runner - something needs to get stubbed here") do + story = @mediator.create_story "title", "narrative" + @mediator.create_scenario "previous scenario" + @mediator.create_scenario "current scenario" + @mediator.create_given_scenario "previous scenario" + run_stories + + $story_mediator_spec_value.should == "previous scenario matched" + end + end + + it "should create a given step if one matches" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario" + @mediator.create_given "given" + run_stories + + $story_mediator_spec_value.should == "given matched" + end + + it "should create a pending step if no given step matches" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario" + @mediator.create_given "no match" + mock_listener = stub_everything("listener") + mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match") + @scenario_runner.add_listener mock_listener + run_stories + end + + it "should create a when step if one matches" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario" + @mediator.create_when "when" + run_stories + + $story_mediator_spec_value.should == "when matched" + end + + it "should create a pending step if no when step matches" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario" + @mediator.create_when "no match" + mock_listener = stub_everything("listener") + mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match") + @scenario_runner.add_listener mock_listener + run_stories + end + + it "should create a then step if one matches" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario" + @mediator.create_then "then" + run_stories + + $story_mediator_spec_value.should == "then matched" + end + + it "should create a pending step if no 'then' step matches" do + @mediator.create_story "title", "narrative" + @mediator.create_scenario "scenario" + @mediator.create_then "no match" + mock_listener = stub_everything("listener") + mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match") + @scenario_runner.add_listener mock_listener + run_stories + end + + it "should pass options to the stories it creates" do + @mediator = StoryMediator.new @step_group, @runner, :foo => :bar + @mediator.create_story "story title", "story narrative" + + run_stories + + @runner.stories.first[:foo].should == :bar + end + + end + + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb new file mode 100644 index 0000000..5efc8fd --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb @@ -0,0 +1,384 @@ +require File.dirname(__FILE__) + '/../story_helper' + +module Spec + module Story + module Runner + + describe StoryParser do + before(:each) do + @story_mediator = mock("story_mediator") + @parser = StoryParser.new(@story_mediator) + end + + it "should parse no lines" do + @parser.parse([]) + end + + it "should ignore text before the first Story: begins" do + @story_mediator.should_not_receive(:create_scenario) + @story_mediator.should_not_receive(:create_given) + @story_mediator.should_not_receive(:create_when) + @story_mediator.should_not_receive(:create_then) + @story_mediator.should_receive(:create_story).with("simple addition", "") + @parser.parse(["Here is a bunch of text", "about a calculator and all the things", "that it will do", "Story: simple addition"]) + end + + it "should create a story" do + @story_mediator.should_receive(:create_story).with("simple addition", "") + @parser.parse(["Story: simple addition"]) + end + + it "should create a story when line has leading spaces" do + @story_mediator.should_receive(:create_story).with("simple addition", "") + @parser.parse([" Story: simple addition"]) + end + + it "should add a one line narrative to the story" do + @story_mediator.should_receive(:create_story).with("simple addition","narrative") + @parser.parse(["Story: simple addition","narrative"]) + end + + it "should add a multi line narrative to the story" do + @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2\nline 3") + @parser.parse(["Story: simple addition","narrative line 1", "line 2", "line 3"]) + end + + it "should exclude blank lines from the narrative" do + @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2") + @parser.parse(["Story: simple addition","narrative line 1", "", "line 2"]) + end + + it "should exclude Scenario from the narrative" do + @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2") + @story_mediator.should_receive(:create_scenario) + @parser.parse(["Story: simple addition","narrative line 1", "line 2", "Scenario: add one plus one"]) + end + + end + + describe StoryParser, "in Story state" do + before(:each) do + @story_mediator = mock("story_mediator") + @parser = StoryParser.new(@story_mediator) + @story_mediator.stub!(:create_story) + end + + it "should create a second Story for Story" do + @story_mediator.should_receive(:create_story).with("number two","") + @parser.parse(["Story: s", "Story: number two"]) + end + + it "should include And in the narrative" do + @story_mediator.should_receive(:create_story).with("s","And foo") + @story_mediator.should_receive(:create_scenario).with("bar") + @parser.parse(["Story: s", "And foo", "Scenario: bar"]) + end + + it "should create a Scenario for Scenario" do + @story_mediator.should_receive(:create_scenario).with("number two") + @parser.parse(["Story: s", "Scenario: number two"]) + end + + it "should include Given in the narrative" do + @story_mediator.should_receive(:create_story).with("s","Given foo") + @story_mediator.should_receive(:create_scenario).with("bar") + @parser.parse(["Story: s", "Given foo", "Scenario: bar"]) + end + + it "should include Given: in the narrative" do + @story_mediator.should_receive(:create_story).with("s","Given: foo") + @story_mediator.should_receive(:create_scenario).with("bar") + @parser.parse(["Story: s", "Given: foo", "Scenario: bar"]) + end + + it "should include When in the narrative" do + @story_mediator.should_receive(:create_story).with("s","When foo") + @story_mediator.should_receive(:create_scenario).with("bar") + @parser.parse(["Story: s", "When foo", "Scenario: bar"]) + end + + it "should include Then in the narrative" do + @story_mediator.should_receive(:create_story).with("s","Then foo") + @story_mediator.should_receive(:create_scenario).with("bar") + @parser.parse(["Story: s", "Then foo", "Scenario: bar"]) + end + + it "should include other in the story" do + @story_mediator.should_receive(:create_story).with("s","narrative") + @parser.parse(["Story: s", "narrative"]) + end + end + + describe StoryParser, "in Scenario state" do + before(:each) do + @story_mediator = mock("story_mediator") + @parser = StoryParser.new(@story_mediator) + @story_mediator.stub!(:create_story) + @story_mediator.stub!(:create_scenario) + end + + it "should create a Story for Story" do + @story_mediator.should_receive(:create_story).with("number two","") + @parser.parse(["Story: s", "Scenario: s", "Story: number two"]) + end + + it "should create a Scenario for Scenario" do + @story_mediator.should_receive(:create_scenario).with("number two") + @parser.parse(["Story: s", "Scenario: s", "Scenario: number two"]) + end + + it "should raise for And" do + lambda { + @parser.parse(["Story: s", "Scenario: s", "And second"]) + }.should raise_error(IllegalStepError, /^Illegal attempt to create a And after a Scenario/) + end + + it "should create a Given for Given" do + @story_mediator.should_receive(:create_given).with("gift") + @parser.parse(["Story: s", "Scenario: s", "Given gift"]) + end + + it "should create a Given for Given:" do + @story_mediator.should_receive(:create_given).with("gift") + @parser.parse(["Story: s", "Scenario: s", "Given: gift"]) + end + + it "should create a GivenScenario for GivenScenario" do + @story_mediator.should_receive(:create_given_scenario).with("previous") + @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"]) + end + + it "should create a GivenScenario for GivenScenario:" do + @story_mediator.should_receive(:create_given_scenario).with("previous") + @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"]) + end + + it "should transition to Given state after GivenScenario" do + @story_mediator.stub!(:create_given_scenario) + @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"]) + @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState) + end + + it "should transition to Given state after GivenScenario:" do + @story_mediator.stub!(:create_given_scenario) + @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"]) + @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState) + end + + it "should create a When for When" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "When ever"]) + end + + it "should create a When for When:" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "When: ever"]) + end + + it "should create a Then for Then" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Then and there"]) + end + + it "should create a Then for Then:" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Then: and there"]) + end + + it "should ignore other" do + @parser.parse(["Story: s", "Scenario: s", "this is ignored"]) + end + end + + describe StoryParser, "in Given state" do + before(:each) do + @story_mediator = mock("story_mediator") + @parser = StoryParser.new(@story_mediator) + @story_mediator.stub!(:create_story) + @story_mediator.stub!(:create_scenario) + @story_mediator.should_receive(:create_given).with("first") + end + + it "should create a Story for Story" do + @story_mediator.should_receive(:create_story).with("number two","") + @parser.parse(["Story: s", "Scenario: s", "Given first", "Story: number two"]) + end + + it "should create a Scenario for Scenario" do + @story_mediator.should_receive(:create_scenario).with("number two") + @parser.parse(["Story: s", "Scenario: s", "Given first", "Scenario: number two"]) + end + + it "should create a second Given for Given" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given first", "Given second"]) + end + + it "should create a second Given for And" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "And second"]) + end + + it "should create a second Given for And:" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given first", "And: second"]) + end + + it "should create a When for When" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When ever"]) + end + + it "should create a When for When:" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When: ever"]) + end + + it "should create a Then for Then" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Given first", "Then and there"]) + end + + it "should create a Then for Then:" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"]) + end + + it "should ignore other" do + @parser.parse(["Story: s", "Scenario: s", "Given first", "this is ignored"]) + end + end + + describe StoryParser, "in When state" do + before(:each) do + @story_mediator = mock("story_mediator") + @parser = StoryParser.new(@story_mediator) + @story_mediator.stub!(:create_story) + @story_mediator.stub!(:create_scenario) + @story_mediator.should_receive(:create_given).with("first") + @story_mediator.should_receive(:create_when).with("else") + end + + it "should create a Story for Story" do + @story_mediator.should_receive(:create_story).with("number two","") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When: else", "Story: number two"]) + end + + it "should create a Scenario for Scenario" do + @story_mediator.should_receive(:create_scenario).with("number two") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Scenario: number two"]) + end + + it "should create Given for Given" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given second"]) + end + + it "should create Given for Given:" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given: second"]) + end + + it "should create a second When for When" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "When ever"]) + end + + it "should create a second When for When:" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "When: ever"]) + end + + it "should create a second When for And" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "And ever"]) + end + + it "should create a second When for And:" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "And: ever"]) + end + + it "should create a Then for Then" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then and there"]) + end + + it "should create a Then for Then:" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"]) + end + + it "should ignore other" do + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "this is ignored"]) + end + end + + describe StoryParser, "in Then state" do + before(:each) do + @story_mediator = mock("story_mediator") + @parser = StoryParser.new(@story_mediator) + @story_mediator.stub!(:create_story) + @story_mediator.stub!(:create_scenario) + @story_mediator.should_receive(:create_given).with("first") + @story_mediator.should_receive(:create_when).with("else") + @story_mediator.should_receive(:create_then).with("what") + end + + it "should create a Story for Story" do + @story_mediator.should_receive(:create_story).with("number two","") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Story: number two"]) + end + + it "should create a Scenario for Scenario" do + @story_mediator.should_receive(:create_scenario).with("number two") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Scenario: number two"]) + end + + it "should create Given for Given" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Given second"]) + end + + it "should create Given for Given:" do + @story_mediator.should_receive(:create_given).with("second") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Given: second"]) + end + + it "should create When for When" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "When ever"]) + end + + it "should create When for When:" do + @story_mediator.should_receive(:create_when).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "When: ever"]) + end + + it "should create a Then for Then" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Then and there"]) + end + + it "should create a Then for Then:" do + @story_mediator.should_receive(:create_then).with("and there") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Then: and there"]) + end + + it "should create a second Then for And" do + @story_mediator.should_receive(:create_then).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "And ever"]) + end + + it "should create a second Then for And:" do + @story_mediator.should_receive(:create_then).with("ever") + @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"]) + end + + it "should ignore other" do + @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "this is ignored"]) + end + end + end + end +end
\ No newline at end of file diff --git a/vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb new file mode 100644 index 0000000..0fc4640 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb @@ -0,0 +1,256 @@ +require File.dirname(__FILE__) + '/../story_helper' + +module Spec + module Story + module Runner + describe StoryRunner do + it 'should collect all the stories' do + # given + story_runner = StoryRunner.new(stub('scenario_runner')) + + # when + story_runner.Story 'title1', 'narrative1' do end + story_runner.Story 'title2', 'narrative2' do end + stories = story_runner.stories + + # then + story_runner.should have(2).stories + stories.first.title.should == 'title1' + stories.first.narrative.should == 'narrative1' + stories.last.title.should == 'title2' + stories.last.narrative.should == 'narrative2' + end + + it 'should gather all the scenarios in the stories' do + # given + story_runner = StoryRunner.new(stub('scenario_runner')) + + # when + story_runner.Story "story1", "narrative1" do + Scenario "scenario1" do end + Scenario "scenario2" do end + end + story_runner.Story "story2", "narrative2" do + Scenario "scenario3" do end + end + scenarios = story_runner.scenarios + + # then + story_runner.should have(3).scenarios + scenarios[0].name.should == 'scenario1' + scenarios[1].name.should == 'scenario2' + scenarios[2].name.should == 'scenario3' + end + + # captures worlds passed into a ScenarioRunner + class ScenarioWorldCatcher + attr_accessor :worlds + def run(scenario, world) + (@worlds ||= []) << world + end + end + + it 'should run each scenario in a separate object' do + # given + scenario_world_catcher = ScenarioWorldCatcher.new + story_runner = StoryRunner.new(scenario_world_catcher) + story_runner.Story 'story', 'narrative' do + Scenario 'scenario1' do end + Scenario 'scenario2' do end + end + + # when + story_runner.run_stories + + # then + worlds = scenario_world_catcher.worlds + scenario_world_catcher.should have(2).worlds + worlds[0].should_not == worlds[1] + end + + it 'should use the provided world creator to create worlds' do + # given + stub_scenario_runner = stub_everything + mock_world_creator = mock('world creator') + story_runner = StoryRunner.new(stub_scenario_runner, mock_world_creator) + story_runner.Story 'story', 'narrative' do + Scenario 'scenario1' do end + Scenario 'scenario2' do end + end + + # expect + mock_world_creator.should_receive(:create).twice + + # when + story_runner.run_stories + + # then + end + + it 'should notify listeners of the scenario count when the run starts' do + # given + story_runner = StoryRunner.new(stub_everything) + mock_listener1 = stub_everything('listener1') + mock_listener2 = stub_everything('listener2') + story_runner.add_listener(mock_listener1) + story_runner.add_listener(mock_listener2) + + story_runner.Story 'story1', 'narrative1' do + Scenario 'scenario1' do end + end + story_runner.Story 'story2', 'narrative2' do + Scenario 'scenario2' do end + Scenario 'scenario3' do end + end + + # expect + mock_listener1.should_receive(:run_started).with(3) + mock_listener2.should_receive(:run_started).with(3) + + # when + story_runner.run_stories + + # then + end + + it 'should notify listeners when a story starts' do + # given + story_runner = StoryRunner.new(stub_everything) + mock_listener1 = stub_everything('listener1') + mock_listener2 = stub_everything('listener2') + story_runner.add_listener(mock_listener1) + story_runner.add_listener(mock_listener2) + + story_runner.Story 'story1', 'narrative1' do + Scenario 'scenario1' do end + end + story_runner.Story 'story2', 'narrative2' do + Scenario 'scenario2' do end + Scenario 'scenario3' do end + end + + # expect + mock_listener1.should_receive(:story_started).with('story1', 'narrative1') + mock_listener1.should_receive(:story_ended).with('story1', 'narrative1') + mock_listener2.should_receive(:story_started).with('story2', 'narrative2') + mock_listener2.should_receive(:story_ended).with('story2', 'narrative2') + + # when + story_runner.run_stories + + # then + end + + it 'should notify listeners when the run ends' do + # given + story_runner = StoryRunner.new(stub_everything) + mock_listener1 = stub_everything('listener1') + mock_listener2 = stub_everything('listener2') + story_runner.add_listener mock_listener1 + story_runner.add_listener mock_listener2 + story_runner.Story 'story1', 'narrative1' do + Scenario 'scenario1' do end + end + + # expect + mock_listener1.should_receive(:run_ended) + mock_listener2.should_receive(:run_ended) + + # when + story_runner.run_stories + + # then + end + + it 'should run a story in an instance of a specified class' do + # given + scenario_world_catcher = ScenarioWorldCatcher.new + story_runner = StoryRunner.new(scenario_world_catcher) + story_runner.Story 'title', 'narrative', :type => String do + Scenario 'scenario' do end + end + + # when + story_runner.run_stories + + # then + scenario_world_catcher.worlds[0].should be_kind_of(String) + scenario_world_catcher.worlds[0].should be_kind_of(World) + end + + it 'should pass initialization params through to the constructed instance' do + # given + scenario_world_catcher = ScenarioWorldCatcher.new + story_runner = StoryRunner.new(scenario_world_catcher) + story_runner.Story 'title', 'narrative', :type => Array, :args => [3] do + Scenario 'scenario' do end + end + + # when + story_runner.run_stories + + # then + scenario_world_catcher.worlds[0].should be_kind_of(Array) + scenario_world_catcher.worlds[0].size.should == 3 + end + + it 'should find a scenario in the current story by name' do + # given + story_runner = StoryRunner.new(ScenarioRunner.new) + $scenario = nil + + story_runner.Story 'title', 'narrative' do + Scenario 'first scenario' do + end + Scenario 'second scenario' do + $scenario = StoryRunner.scenario_from_current_story 'first scenario' + end + end + + # when + story_runner.run_stories + + # then + $scenario.name.should == 'first scenario' + end + + it "should clean the steps between stories" do + #given + story_runner = StoryRunner.new(ScenarioRunner.new) + result = mock 'result' + + step1 = Step.new('step') do + result.one + end + steps1 = StepGroup.new + steps1.add :when, step1 + + story_runner.Story 'title', 'narrative', :steps => steps1 do + Scenario 'first scenario' do + When 'step' + end + end + + step2 = Step.new('step') do + result.two + end + steps2 = StepGroup.new + steps2.add :when, step2 + + story_runner.Story 'title2', 'narrative', :steps => steps2 do + Scenario 'second scenario' do + When 'step' + end + end + + #then + result.should_receive(:one) + result.should_receive(:two) + + #when + story_runner.run_stories + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner_spec.rb new file mode 100644 index 0000000..81e8526 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/runner_spec.rb @@ -0,0 +1,106 @@ +require File.dirname(__FILE__) + '/story_helper' + +module Spec + module Story + describe Runner, "module" do + def dev_null + io = StringIO.new + def io.write(str) + str.to_s.size + end + return io + end + + before :each do + Kernel.stub!(:at_exit) + @stdout, $stdout = $stdout, dev_null + @argv = Array.new(ARGV) + @runner_module = Runner.dup + @world_creator = World.dup + @runner_module.module_eval { @run_options = @story_runner = @scenario_runner = @world_creator = nil } + end + + after :each do + $stdout = @stdout + ARGV.replace @argv + @runner_module.module_eval { @run_options = @story_runner = @scenario_runner = @world_creator = nil } + end + + it 'should wire up a singleton StoryRunner' do + @runner_module.story_runner.should_not be_nil + end + + it 'should set its options based on ARGV' do + # given + ARGV << '--dry-run' + + # when + options = @runner_module.run_options + + # then + options.dry_run.should be_true + end + + it 'should add a reporter to the runner classes' do + # given + story_runner = mock('story runner', :null_object => true) + scenario_runner = mock('scenario runner', :null_object => true) + world_creator = mock('world', :null_object => true) + + @runner_module::class_eval { @world_creator = world_creator } + @runner_module::StoryRunner.stub!(:new).and_return(story_runner) + @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner) + + # expect + world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter)) + story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter)) + scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter)) + + # when + @runner_module.story_runner + end + + it 'should add a documenter to the runner classes if one is specified' do + # given + ARGV << "--format" << "html" + story_runner = mock('story runner', :null_object => true) + scenario_runner = mock('scenario runner', :null_object => true) + world_creator = mock('world', :null_object => true) + + @runner_module::class_eval { @world_creator = world_creator } + @runner_module::StoryRunner.stub!(:new).and_return(story_runner) + @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner) + + # expect + world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter)) + story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter)) + scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter)) + + # when + @runner_module.story_runner + end + + it 'should add any registered listener to the runner classes' do + # given + ARGV << "--format" << "html" + story_runner = mock('story runner', :null_object => true) + scenario_runner = mock('scenario runner', :null_object => true) + world_creator = mock('world', :null_object => true) + + @runner_module::class_eval { @world_creator = world_creator } + @runner_module::StoryRunner.stub!(:new).and_return(story_runner) + @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner) + + listener = Object.new + + # expect + world_creator.should_receive(:add_listener).with(listener) + story_runner.should_receive(:add_listener).with(listener) + scenario_runner.should_receive(:add_listener).with(listener) + + # when + @runner_module.register_listener listener + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/scenario_spec.rb b/vendor/gems/rspec/spec/spec/story/scenario_spec.rb new file mode 100644 index 0000000..0cf7aff --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/scenario_spec.rb @@ -0,0 +1,20 @@ +require File.dirname(__FILE__) + '/story_helper' + +module Spec + module Story + describe Scenario do + it 'should not raise an error if no body is supplied' do + # given + story = StoryBuilder.new.to_story + + # when + error = exception_from do + Scenario.new story, 'name' + end + + # then + error.should be_nil + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/step_group_spec.rb b/vendor/gems/rspec/spec/spec/story/step_group_spec.rb new file mode 100644 index 0000000..dd28bfa --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/step_group_spec.rb @@ -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 diff --git a/vendor/gems/rspec/spec/spec/story/step_mother_spec.rb b/vendor/gems/rspec/spec/spec/story/step_mother_spec.rb new file mode 100644 index 0000000..64efd7a --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/step_mother_spec.rb @@ -0,0 +1,72 @@ +require File.dirname(__FILE__) + '/story_helper' + +module Spec + module Story + describe StepMother do + it 'should store a step by name and type' do + # given + step_mother = StepMother.new + step = Step.new("a given", &lambda {}) + step_mother.store(:given, step) + + # when + found = step_mother.find(:given, "a given") + + # then + found.should == step + end + + it 'should NOT raise an error if a step is missing' do + # given + step_mother = StepMother.new + + # then + lambda do + # when + step_mother.find(:given, "doesn't exist") + end.should_not raise_error + end + + it "should create a default step which raises a pending error" do + # given + step_mother = StepMother.new + + # when + step = step_mother.find(:given, "doesn't exist") + + # then + step.should be_an_instance_of(Step) + + lambda do + step.perform(Object.new, "doesn't exist") + end.should raise_error(Spec::Example::ExamplePendingError, /Unimplemented/) + end + + it 'should clear itself' do + # given + step_mother = StepMother.new + step = Step.new("a given") do end + step_mother.store(:given, step) + + # when + step_mother.clear + + # then + step_mother.should be_empty + end + + it "should use assigned steps" do + step_mother = StepMother.new + + step = Step.new('step') {} + step_group = StepGroup.new + step_group.add(:given, step) + + step_mother.use(step_group) + + step_mother.find(:given, "step").should equal(step) + end + + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/step_spec.rb b/vendor/gems/rspec/spec/spec/story/step_spec.rb new file mode 100644 index 0000000..0b6e515 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/step_spec.rb @@ -0,0 +1,200 @@ +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 match a regexp with a named variable" do + step = Step.new(/this $variable 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 match a non matching regexp with a named variable" do + step = Step.new(/this $variable 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 + + it "should match alteration as well as a named variable" do + step = Step.new(/(he|she) is $adjective/) {} + step.matches?("he is cool").should be_true + step.parse_args("he is cool").should == ['he', 'cool'] + end + + it "should match alteration as well as a anonymous and named variable" do + step = Step.new(/(he|she) is (.*?) $adjective/) {} + step.matches?("he is very cool").should be_true + step.parse_args("he is very cool").should == ['he', 'very', '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 diff --git a/vendor/gems/rspec/spec/spec/story/story_helper.rb b/vendor/gems/rspec/spec/spec/story/story_helper.rb new file mode 100644 index 0000000..bb906f2 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/story_helper.rb @@ -0,0 +1,2 @@ +require File.dirname(__FILE__) + '/../../spec_helper' +require File.dirname(__FILE__) + '/builders' diff --git a/vendor/gems/rspec/spec/spec/story/story_spec.rb b/vendor/gems/rspec/spec/spec/story/story_spec.rb new file mode 100644 index 0000000..21257e9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/story_spec.rb @@ -0,0 +1,86 @@ +require File.dirname(__FILE__) + '/story_helper' + +module Spec + module Story + describe Story do + it 'should run itself in a given object' do + # given + $instance = nil + story = Story.new 'title', 'narrative' do + $instance = self + end + object = Object.new + + # when + story.run_in(object) + + # then + $instance.should be(object) + end + + it 'should not raise an error if no block is supplied' do + # when + error = exception_from do + Story.new 'title', 'narrative' + end + + # then + error.should be_nil + end + + it "should raise when error raised running in another object" do + #given + story = Story.new 'title', 'narrative' do + raise "this is raised in the story" + end + object = Object.new + + # when/then + lambda do + story.run_in(object) + end.should raise_error + end + + it "should use the steps it is told to using a StepGroup" do + story = Story.new("title", "narrative", :steps => steps = StepGroup.new) do end + assignee = mock("assignee") + assignee.should_receive(:use).with(steps) + story.assign_steps_to(assignee) + end + + it "should use the steps it is told to using a key" do + begin + orig_rspec_story_steps = $rspec_story_steps + $rspec_story_steps = StepGroupHash.new + $rspec_story_steps[:foo] = steps = Object.new + + story = Story.new("title", "narrative", :steps_for => :foo) do end + assignee = mock("assignee") + + assignee.should_receive(:use).with(steps) + story.assign_steps_to(assignee) + ensure + $rspec_story_steps = orig_rspec_story_steps + end + end + + it "should use the steps it is told to using multiple keys" do + begin + orig_rspec_story_steps = $rspec_story_steps + $rspec_story_steps = StepGroupHash.new + $rspec_story_steps[:foo] = foo_steps = Object.new + $rspec_story_steps[:bar] = bar_steps = Object.new + + story = Story.new("title", "narrative", :steps_for => [:foo, :bar]) do end + assignee = mock("assignee") + + assignee.should_receive(:use).with(foo_steps) + assignee.should_receive(:use).with(bar_steps) + story.assign_steps_to(assignee) + ensure + $rspec_story_steps = orig_rspec_story_steps + end + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/story/world_spec.rb b/vendor/gems/rspec/spec/spec/story/world_spec.rb new file mode 100644 index 0000000..f5113dc --- /dev/null +++ b/vendor/gems/rspec/spec/spec/story/world_spec.rb @@ -0,0 +1,423 @@ +require File.dirname(__FILE__) + '/story_helper' + +require 'spec/story' + +module Spec + module Story + describe World do + before :each do + World.listeners.clear + end + + after :each do + World.listeners.clear + World.step_mother.clear + end + + it 'should create an object that mixes in a World' do + # when + obj = World::create + + # then + obj.should be_kind_of(World) + end + + it 'should create a World from any object type' do + # when + obj = World::create String + + # then + obj.should be_kind_of(String) + obj.should be_kind_of(World) + end + + it 'should pass arguments to #new when creating an object of a specified type that mixes in a world' do + # given + Thing = Struct.new(:name, :age) + + # when + obj = World::create Thing, "David", "I'm not telling" + + # then + obj.should be_an_instance_of(Thing) + obj.name.should == "David" + obj.age.should == "I'm not telling" + obj.should be_kind_of(World) + end + + def ensure_world_executes_step(&block) + # given + obj = World::create + $step_ran = false + + # when + obj.instance_eval(&block) + + # then + $step_ran.should be_true + end + + it 'should execute a Given, When or Then step' do + ensure_world_executes_step do + Given 'a given' do + $step_ran = true + end + end + + ensure_world_executes_step do + When 'an event' do + $step_ran = true + end + end + + ensure_world_executes_step do + Then 'an outcome' do + $step_ran = true + end + end + end + + it 'should interpret Given... And... as multiple givens' do + # given + world = World.create + $steps = [] + + # when + world.instance_eval do + Given 'step 1' do + $steps << 1 + end + And 'step 2' do + $steps << 2 + end + end + + # then + $steps.should == [1,2] + World.step_mother.find(:given, 'step 1').should_not be_nil + World.step_mother.find(:given, 'step 2').should_not be_nil + end + + it 'should interpret When... And... as multiple events' do + # given + world = World.create + $steps = [] + + # when + world.instance_eval do + When 'step 1' do + $steps << 1 + end + And 'step 2' do + $steps << 2 + end + end + + # then + $steps.should == [1,2] + World.step_mother.find(:when, 'step 1').should_not be_nil + World.step_mother.find(:when, 'step 2').should_not be_nil + end + + it 'should interpret Then... And... as multiple outcomes' do + # given + world = World.create + $steps = [] + + # when + world.instance_eval do + Then 'step 1' do + $steps << 1 + end + And 'step 2' do + $steps << 2 + end + end + + # then + $steps.should == [1,2] + World.step_mother.find(:then, 'step 1').should_not be_nil + World.step_mother.find(:then, 'step 2').should_not be_nil + end + + it 'should reuse a given across scenarios' do + # given + $num_invoked = 0 + a_world = World::create + a_world.instance_eval do + Given 'a given' do + $num_invoked += 1 + end + end + another_world = World::create + + # when + another_world.instance_eval do + Given 'a given' # without a body + end + + # then + $num_invoked.should == 2 + end + + it 'should reuse an event across scenarios' do + # given + $num_invoked = 0 + a_world = World::create + a_world.instance_eval do + When 'an event' do + $num_invoked += 1 + end + end + + another_world = World::create + + # when + another_world.instance_eval do + When 'an event' # without a body + end + + # then + $num_invoked.should == 2 + end + + it 'should reuse an outcome across scenarios' do + # given + $num_invoked = 0 + a_world = World::create + a_world.instance_eval do + Then 'an outcome' do + $num_invoked += 1 + end + end + + another_world = World::create + + # when + another_world.instance_eval do + Then 'an outcome' # without a body + end + + # then + $num_invoked.should == 2 + end + + it 'should preserve instance variables between steps within a scenario' do + # given + world = World::create + $first = nil + $second = nil + + # when + world.instance_eval do + Given 'given' do + @first = 'first' + end + When 'event' do + @second = @first # from given + end + Then 'outcome' do + $first = @first # from given + $second = @second # from event + end + end + + # then + $first.should == 'first' + $second.should == 'first' + end + + it 'should invoke a reused step in the new object instance' do + # given + $instances = [] + $debug = true + world1 = World.create + world1.instance_eval do + Given 'a given' do + $instances << self.__id__ + end + end + world2 = World.create + + # when + world2.instance_eval do + Given 'a given' # reused + Then 'an outcome' do + $instances << __id__ + end + end + $debug = false + # then + $instances.should == [ world1.__id__, world2.__id__, world2.__id__ ] + end + + def ensure_world_collects_error(expected_error, &block) + # given + world = World.create + # $error = nil + + # when + world.start_collecting_errors + world.instance_eval(&block) + + # then + world.should have(1).errors + world.errors[0].should be_kind_of(expected_error) + end + + it 'should collect a failure from a Given step' do + ensure_world_collects_error RuntimeError do + Given 'a given' do + raise RuntimeError, "oops" + end + end + end + + it 'should collect a failure from a When step' do + ensure_world_collects_error RuntimeError do + When 'an event' do + raise RuntimeError, "oops" + end + end + end + + it 'should collect a failure from a Then step' do + ensure_world_collects_error RuntimeError do + Then 'an outcome' do + raise RuntimeError, "oops" + end + end + end + + it 'should inform listeners when it runs a Given, When or Then step' do + # given + world = World.create + mock_listener1 = mock('listener1') + mock_listener2 = mock('listener2') + World.add_listener(mock_listener1) + World.add_listener(mock_listener2) + + # expect + mock_listener1.should_receive(:step_upcoming).with(:given, 'a context') + mock_listener1.should_receive(:step_succeeded).with(:given, 'a context') + mock_listener1.should_receive(:step_upcoming).with(:when, 'an event') + mock_listener1.should_receive(:step_succeeded).with(:when, 'an event') + mock_listener1.should_receive(:step_upcoming).with(:then, 'an outcome') + mock_listener1.should_receive(:step_succeeded).with(:then, 'an outcome') + + mock_listener2.should_receive(:step_upcoming).with(:given, 'a context') + mock_listener2.should_receive(:step_succeeded).with(:given, 'a context') + mock_listener2.should_receive(:step_upcoming).with(:when, 'an event') + mock_listener2.should_receive(:step_succeeded).with(:when, 'an event') + mock_listener2.should_receive(:step_upcoming).with(:then, 'an outcome') + mock_listener2.should_receive(:step_succeeded).with(:then, 'an outcome') + + # when + world.instance_eval do + Given 'a context' do end + When 'an event' do end + Then 'an outcome' do end + end + + # then + end + + it 'should tell listeners but not execute the step in dry-run mode' do + # given + Runner.stub!(:dry_run).and_return(true) + mock_listener = mock('listener') + World.add_listener(mock_listener) + $step_invoked = false + world = World.create + + # expect + mock_listener.should_receive(:step_upcoming).with(:given, 'a context') + mock_listener.should_receive(:step_succeeded).with(:given, 'a context') + + # when + world.instance_eval do + Given 'a context' do + $step_invoked = true + end + end + + # then + $step_invoked.should be(false) + end + + it 'should suppress listeners while it runs a GivenScenario' do + # given + $scenario_ran = false + + scenario = ScenarioBuilder.new.name('a scenario').to_scenario do + $scenario_ran = true + Given 'given' do end + When 'event' do end + Then 'outcome' do end + end + + given_scenario = GivenScenario.new('a scenario') + Runner::StoryRunner.should_receive(:scenario_from_current_story). + with('a scenario').and_return(scenario) + + world = World.create + listener = mock('listener') + World.add_listener(listener) + + # expect + listener.should_receive(:found_scenario).with(:'given scenario', 'a scenario') + listener.should_receive(:step_succeeded).never.with(:given, 'given') + listener.should_receive(:step_succeeded).never.with(:when, 'event') + listener.should_receive(:step_succeeded).never.with(:then, 'outcome') + + # when + world.GivenScenario 'a scenario' + + # then + $scenario_ran.should be_true + end + + it 'should interpret GivenScenario... And... as multiple givens' do + # given + world = World.create + $steps = [] + + scenario = ScenarioBuilder.new.name('a scenario').to_scenario do + $steps << 1 + end + Runner::StoryRunner.should_receive(:scenario_from_current_story). + with('a scenario').and_return(scenario) + + # when + world.instance_eval do + GivenScenario 'a scenario' + And 'step 2' do + $steps << 2 + end + end + + # then + $steps.should == [1,2] + World.step_mother.find(:given, 'step 2').should_not be_nil + end + + it 'should provide rspec matchers' do + # given + world = World.create + + # then + world.instance_eval do + 'hello'.should match(/^hello$/) + end + end + + it "should use assigned matchers" do + world = World.create + + World.should_receive(:use).with(steps = Object.new) + + World.use(steps) + end + end + end +end diff --git a/vendor/gems/rspec/spec/spec/translator_spec.rb b/vendor/gems/rspec/spec/spec/translator_spec.rb new file mode 100644 index 0000000..01293d9 --- /dev/null +++ b/vendor/gems/rspec/spec/spec/translator_spec.rb @@ -0,0 +1,265 @@ +require File.dirname(__FILE__) + '/../spec_helper.rb' +require 'spec/translator' + +describe "Translator" do + before do + @t = Spec::Translator.new + end + + it "should translate files" do + from = File.dirname(__FILE__) + '/..' + to = "#{Dir.tmpdir}/translated_specs" + @t.translate_dir(from, to) + end + + it "should translate context_setup do" do + @t.translate_line( + "context_setup do\n" + ).should eql( + "before(:all) do\n" + ) + end + + it "should translate context_setup {foo}" do + @t.translate_line( + "context_setup {foo}\n" + ).should eql( + "before(:all) {foo}\n" + ) + end + + it "should translate context ' to describe '" do + @t.translate_line( + "context 'Translator' do\n" + ).should eql( + "describe 'Translator' do\n" + ) + end + + it 'should translate context " to describe "' do + @t.translate_line( + 'context "Translator"' + ).should eql( + 'describe "Translator"' + ) + end + + it 'should translate spaces then context " to describe "' do + @t.translate_line( + ' context "Translator"' + ).should eql( + ' describe "Translator"' + ) + end + + it "should not translate context=foo" do + @t.translate_line(' context=foo').should eql(' context=foo') + end + + it "should not translate context = foo" do + @t.translate_line(' context = foo').should eql(' context = foo') + end + + it "should not translate context = foo" do + @t.translate_line(' context = foo').should eql(' context = foo') + end + + it "should translate should_be_close" do + @t.translate_line('5.0.should_be_close(5.0, 0.5)').should eql('5.0.should be_close(5.0, 0.5)') + end + + it "should translate should_not_raise" do + @t.translate_line('lambda { self.call }.should_not_raise').should eql('lambda { self.call }.should_not raise_error') + end + + it "should translate should_throw" do + @t.translate_line('lambda { self.call }.should_throw').should eql('lambda { self.call }.should throw_symbol') + end + + it "should not translate 0.9 should_not" do + @t.translate_line('@target.should_not @matcher').should eql('@target.should_not @matcher') + end + + it "should leave should_not_receive" do + @t.translate_line('@mock.should_not_receive(:not_expected).with("unexpected text")').should eql('@mock.should_not_receive(:not_expected).with("unexpected text")') + end + + it "should leave should_receive" do + @t.translate_line('@mock.should_receive(:not_expected).with("unexpected text")').should eql('@mock.should_receive(:not_expected).with("unexpected text")') + end + + it "should translate multi word predicates" do + @t.translate_line('foo.should_multi_word_predicate').should eql('foo.should be_multi_word_predicate') + end + + it "should translate multi word predicates prefixed with be" do + @t.translate_line('foo.should_be_multi_word_predicate').should eql('foo.should be_multi_word_predicate') + end + + it "should translate be(expected) to equal(expected)" do + @t.translate_line('foo.should_be :cool').should eql('foo.should equal :cool') + end + + it "should translate instance_of" do + @t.translate_line('5.should_be_an_instance_of(Integer)').should eql('5.should be_an_instance_of(Integer)') + end + + it "should translate should_be <" do + @t.translate_line('3.should_be < 4').should eql('3.should be < 4') + end + + it "should translate should_be <=" do + @t.translate_line('3.should_be <= 4').should eql('3.should be <= 4') + end + + it "should translate should_be >=" do + @t.translate_line('4.should_be >= 3').should eql('4.should be >= 3') + end + + it "should translate should_be >" do + @t.translate_line('4.should_be > 3').should eql('4.should be > 3') + end + + it "should translate should_be_happy" do + @t.translate_line("4.should_be_happy").should eql("4.should be_happy") + end + + it "should translate custom method taking regexp with parenthesis" do + @t.translate_line("@browser.should_contain_text(/Sn.rrunger og annet rusk/)").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)") + end + + it "should translate custom method taking regexp without parenthesis" do + @t.translate_line("@browser.should_contain_text /Sn.rrunger og annet rusk/\n").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)\n") + end + + it "should translate should_not_be_nil" do + @t.translate_line("foo.should_not_be_nil\n").should eql("foo.should_not be_nil\n") + end + + it "should translate kind of" do + @t.translate_line('@object.should_be_kind_of(MessageExpectation)').should( + eql('@object.should be_kind_of(MessageExpectation)')) + end + + it "should translate should_be_true" do + @t.translate_line("foo.should_be_true\n").should eql("foo.should be_true\n") + end + + # [#9674] spec_translate incorrectly handling shoud_match, when regexp in a var, in a block + # http://rubyforge.org/tracker/?func=detail&atid=3149&aid=9674&group_id=797 + it "should translate should_match on a regexp, in a var, in a block" do + @t.translate_line("collection.each { |c| c.should_match a_regexp_in_a_var }\n").should eql("collection.each { |c| c.should match(a_regexp_in_a_var) }\n") + @t.translate_line("collection.each{|c| c.should_match a_regexp_in_a_var}\n").should eql("collection.each{|c| c.should match(a_regexp_in_a_var) }\n") + end + + # From Rubinius specs + it "should translate close_to without parens" do + @t.translate_line("end.should_be_close 3.14159_26535_89793_23846, TOLERANCE\n").should eql("end.should be_close(3.14159_26535_89793_23846, TOLERANCE)\n") + end + + # [#9882] 0.9 Beta 1 - translator bugs + # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 + it "should support symbol arguments" do + @t.translate_line( + "lambda { sequence.parse('bar') }.should_throw :ZeroWidthParseSuccess\n" + ).should eql( + "lambda { sequence.parse('bar') }.should throw_symbol(:ZeroWidthParseSuccess)\n" + ) + end + + # [#9882] 0.9 Beta 1 - translator bugs + # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 + it "should support instance var arguments" do + @t.translate_line( + "a.should_eql @local" + ).should eql( + "a.should eql(@local)" + ) + end + + # [#9882] 0.9 Beta 1 - translator bugs + # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 + it "should support lambdas as expecteds" do + @t.translate_line( + "@parslet.should_not_eql lambda { nil }.to_parseable" + ).should eql( + "@parslet.should_not eql(lambda { nil }.to_parseable)" + ) + end + + # [#9882] 0.9 Beta 1 - translator bugs + # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 + it "should support fully qualified names" do + @t.translate_line( + "results.should_be_kind_of SimpleASTLanguage::Identifier" + ).should eql( + "results.should be_kind_of(SimpleASTLanguage::Identifier)" + ) + end + + # [#9882] 0.9 Beta 1 - translator bugs + # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149 + # it "should leave whitespace between expression and comments" do + # @t.translate_line( + # "lambda { @instance.foo = foo }.should_raise NoMethodError # no writer defined" + # ).should eql( + # "lambda { @instance.foo = foo }.should raise_error(NoMethodError) # no writer defined" + # ) + # end + + it "should translate redirects" do + @t.translate_line( + "controller.should_redirect_to 'http://not_existing_domain_for_novalis.test.host/404.html'" + ).should eql( + "controller.should redirect_to('http://not_existing_domain_for_novalis.test.host/404.html')" + ) + end + + it "should translate :any_args" do + @t.translate_line( + "mock.should_receive(:foo).with(:any_args)" + ).should eql( + "mock.should_receive(:foo).with(any_args)" + ) + end + + it "should translate :anything" do + @t.translate_line( + "mock.should_receive(:foo).with(:anything)" + ).should eql( + "mock.should_receive(:foo).with(anything)" + ) + end + + it "should translate :boolean" do + @t.translate_line( + "mock.should_receive(:foo).with(:boolean)" + ).should eql( + "mock.should_receive(:foo).with(boolean)" + ) + end + + it "should translate :no_args" do + @t.translate_line( + "mock.should_receive(:foo).with(:no_args)" + ).should eql( + "mock.should_receive(:foo).with(no_args)" + ) + end + + it "should translate :numeric" do + @t.translate_line( + "mock.should_receive(:foo).with(:numeric)" + ).should eql( + "mock.should_receive(:foo).with(an_instance_of(Numeric))" + ) + end + + it "should translate :string" do + @t.translate_line( + "mock.should_receive(:foo).with(:string)" + ).should eql( + "mock.should_receive(:foo).with(an_instance_of(String))" + ) + end +end |