summaryrefslogtreecommitdiffstats
path: root/vendor/gems/rspec/spec/spec
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/rspec/spec/spec')
-rwxr-xr-xvendor/gems/rspec/spec/spec/example/configuration_spec.rb282
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb48
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb129
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb489
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_spec.rb711
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb96
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_methods_spec.rb104
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_runner_spec.rb194
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_spec.rb53
-rw-r--r--vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb59
-rw-r--r--vendor/gems/rspec/spec/spec/example/pending_module_spec.rb31
-rwxr-xr-xvendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb21
-rw-r--r--vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb265
-rw-r--r--vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb25
-rw-r--r--vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb109
-rw-r--r--vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb107
-rw-r--r--vendor/gems/rspec/spec/spec/expectations/fail_with_spec.rb71
-rw-r--r--vendor/gems/rspec/spec/spec/extensions/main_spec.rb76
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb38
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb14
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb9
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/be_close_spec.rb39
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/be_spec.rb224
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/change_spec.rb319
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb153
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/eql_spec.rb28
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/equal_spec.rb28
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/exist_spec.rb57
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/handler_spec.rb129
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/has_spec.rb37
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/have_spec.rb291
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/include_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/match_spec.rb37
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/matcher_methods_spec.rb78
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb24
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb158
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb191
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/respond_to_spec.rb54
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/satisfy_spec.rb36
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb31
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb54
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/any_number_of_times_spec.rb29
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/argument_expectation_spec.rb23
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/at_least_spec.rb97
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/at_most_spec.rb93
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_10260_spec.rb8
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb24
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_11545_spec.rb31
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb30
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_7611_spec.rb19
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_7805_spec.rb22
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb31
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_8302_spec.rb26
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb115
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/mock_ordering_spec.rb84
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/mock_space_spec.rb54
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/mock_spec.rb475
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb113
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/null_object_mock_spec.rb40
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/once_counts_spec.rb53
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb106
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb66
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb154
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/precise_counts_spec.rb52
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/record_messages_spec.rb26
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/stub_spec.rb181
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/twice_counts_spec.rb67
-rw-r--r--vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb14
-rw-r--r--vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb23
-rw-r--r--vendor/gems/rspec/spec/spec/runner/command_line_spec.rb147
-rw-r--r--vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb92
-rw-r--r--vendor/gems/rspec/spec/spec/runner/empty_file.txt0
-rw-r--r--vendor/gems/rspec/spec/spec/runner/examples.txt2
-rw-r--r--vendor/gems/rspec/spec/spec/runner/execution_context_spec.rb31
-rw-r--r--vendor/gems/rspec/spec/spec/runner/failed.txt3
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb44
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb33
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html387
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html371
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html381
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb66
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb65
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb127
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb18
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb103
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb126
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb61
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb335
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb78
-rw-r--r--vendor/gems/rspec/spec/spec/runner/heckler_spec.rb13
-rw-r--r--vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb378
-rw-r--r--vendor/gems/rspec/spec/spec/runner/options_spec.rb364
-rw-r--r--vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb7
-rw-r--r--vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb8
-rw-r--r--vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb16
-rw-r--r--vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb56
-rw-r--r--vendor/gems/rspec/spec/spec/runner/reporter_spec.rb189
-rw-r--r--vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb0
-rw-r--r--vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb0
-rw-r--r--vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb1
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec.opts2
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb70
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb79
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec_spaced.opts2
-rw-r--r--vendor/gems/rspec/spec/spec/runner_spec.rb11
-rw-r--r--vendor/gems/rspec/spec/spec/spec_classes.rb133
-rw-r--r--vendor/gems/rspec/spec/spec/story/builders.rb46
-rw-r--r--vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb161
-rw-r--r--vendor/gems/rspec/spec/spec/story/extensions_spec.rb14
-rw-r--r--vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb27
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb92
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb27
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb142
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb133
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb384
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb256
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner_spec.rb106
-rw-r--r--vendor/gems/rspec/spec/spec/story/scenario_spec.rb20
-rw-r--r--vendor/gems/rspec/spec/spec/story/step_group_spec.rb157
-rw-r--r--vendor/gems/rspec/spec/spec/story/step_mother_spec.rb72
-rw-r--r--vendor/gems/rspec/spec/spec/story/step_spec.rb200
-rw-r--r--vendor/gems/rspec/spec/spec/story/story_helper.rb2
-rw-r--r--vendor/gems/rspec/spec/spec/story/story_spec.rb86
-rw-r--r--vendor/gems/rspec/spec/spec/story/world_spec.rb423
-rw-r--r--vendor/gems/rspec/spec/spec/translator_spec.rb265
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">&nbsp;</p>
+ <p id="duration">&nbsp;</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">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</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">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</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">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</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">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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">&nbsp;</p>
+ <p id="duration">&nbsp;</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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">&nbsp;</p>
+ <p id="duration">&nbsp;</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">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</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">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</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">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</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">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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">&nbsp;</p>
+ <p id="duration">&nbsp;</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">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</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">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</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">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</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">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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">&nbsp;</p>
+ <p id="duration">&nbsp;</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">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</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">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</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">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</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">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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">&nbsp;</p>
+ <p id="duration">&nbsp;</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">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</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">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</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">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</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">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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">&nbsp;</p>
+ <p id="duration">&nbsp;</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">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</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">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</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">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</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">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</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">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</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: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
+ got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (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 &lt;Animal
+name=bob,
+species=tortoise
+&gt;
+, got &lt;Animal
+name=bob,
+species=giraffe
+&gt;
+ (using .eql?)
+Diff:
+@@ -1,5 +1,5 @@
+ &lt;Animal
+ name=bob,
+-species=giraffe
++species=tortoise
+ &gt;
+</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</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">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</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 &quot;PENDING: for some reason&quot; (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 &quot;PENDING: Not Yet Implemented&quot; (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 &quot;PENDING: for some reason&quot; (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