aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/gems/rspec-1.3.1/spec
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/rspec-1.3.1/spec')
-rw-r--r--vendor/gems/rspec-1.3.1/spec/README.jruby15
-rw-r--r--vendor/gems/rspec-1.3.1/spec/autotest/autotest_helper.rb8
-rw-r--r--vendor/gems/rspec-1.3.1/spec/autotest/autotest_matchers.rb38
-rw-r--r--vendor/gems/rspec-1.3.1/spec/autotest/discover_spec.rb8
-rw-r--r--vendor/gems/rspec-1.3.1/spec/autotest/failed_results_re_spec.rb31
-rw-r--r--vendor/gems/rspec-1.3.1/spec/autotest/rspec_spec.rb126
-rw-r--r--vendor/gems/rspec-1.3.1/spec/ruby_forker.rb13
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec.opts6
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/dsl/main_spec.rb103
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_group_class_definition_spec.rb51
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_group_factory_spec.rb180
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_group_methods_spec.rb778
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_group_proxy_spec.rb107
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_group_spec.rb632
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_matcher_spec.rb85
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_methods_spec.rb162
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/example_proxy_spec.rb57
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/helper_method_spec.rb24
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/nested_example_group_spec.rb71
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/pending_module_spec.rb58
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/predicate_matcher_spec.rb41
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/shared_example_group_spec.rb257
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/subclassing_example_group_spec.rb25
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/example/subject_spec.rb110
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/expectations/differs/default_spec.rb194
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/expectations/extensions/kernel_spec.rb45
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/expectations/fail_with_spec.rb96
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/expectations/handler_spec.rb206
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/expectations/wrap_expectation_spec.rb31
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_that_fails.rb10
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_that_passes.rb10
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_with_errors.rb10
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb13
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_that_fails.rb10
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_that_passes.rb10
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_errors.rb10
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb22
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb38
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/spec_spec.rb48
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/test_unit_spec_helper.rb18
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testcase_spec.rb50
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testsuite_adapter_spec.rb9
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/be_close_spec.rb50
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/be_instance_of_spec.rb36
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/be_kind_of_spec.rb33
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/be_spec.rb460
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/change_spec.rb349
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/compatibility_spec.rb28
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/description_generation_spec.rb160
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/dsl_spec.rb34
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/eql_spec.rb33
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/equal_spec.rb57
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/exist_spec.rb65
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/has_spec.rb190
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/have_spec.rb381
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/include_spec.rb88
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/match_array_spec.rb115
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/match_spec.rb57
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/matcher_spec.rb289
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/matchers_spec.rb2
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/operator_matcher_spec.rb191
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/raise_exception_spec.rb345
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/respond_to_spec.rb116
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/satisfy_spec.rb36
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/simple_matcher_spec.rb100
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/matchers/throw_symbol_spec.rb121
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/and_yield_spec.rb117
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/any_number_of_times_spec.rb36
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_expectation_spec.rb23
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_matchers_spec.rb19
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/at_least_spec.rb97
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/at_most_spec.rb93
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_10260_spec.rb8
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_10263_spec.rb27
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_11545_spec.rb32
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_15719_spec.rb30
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_496_spec.rb17
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_600_spec.rb22
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7611_spec.rb19
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7805_spec.rb22
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_8165_spec.rb31
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_8302_spec.rb26
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_830_spec.rb21
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/double_spec.rb12
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/failing_argument_matchers_spec.rb95
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_including_matcher_spec.rb90
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_not_including_matcher_spec.rb67
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_ordering_spec.rb94
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_space_spec.rb54
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_spec.rb594
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/multiple_return_value_spec.rb113
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/nil_expectation_warning_spec.rb53
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/null_object_mock_spec.rb54
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/once_counts_spec.rb53
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/options_hash_spec.rb35
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_spec.rb164
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb66
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/passing_argument_matchers_spec.rb145
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/precise_counts_spec.rb52
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/record_messages_spec.rb26
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_chain_spec.rb42
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_implementation_spec.rb31
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_spec.rb203
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/stubbed_message_expectations_spec.rb26
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/twice_counts_spec.rb67
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/mocks/unstub_spec.rb127
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/package/bin_spec_spec.rb16
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/rake/spectask_spec.rb150
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/class_and_argument_parser_spec.rb23
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/command_line_spec.rb162
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/configuration_spec.rb320
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/drb_command_line_spec.rb146
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/empty_file.txt0
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/example_group_runner_spec.rb26
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/examples.txt2
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/failed.txt3
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_formatter_spec.rb30
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_text_formatter_spec.rb113
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb45
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_examples_formatter_spec.rb33
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html377
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6.html377
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.7.html377
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.9.1.html377
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatter_spec.rb118
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/nested_text_formatter_spec.rb329
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/profile_formatter_spec.rb70
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/progress_bar_formatter_spec.rb149
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/snippet_extractor_spec.rb18
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/specdoc_formatter_spec.rb159
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html371
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html371
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html371
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html371
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatter_spec.rb106
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/heckle_runner_spec.rb78
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/heckler_spec.rb20
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query/line_number_query_fixture.rb70
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query_spec.rb129
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/noisy_backtrace_tweaker_spec.rb51
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/option_parser_spec.rb551
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/options_spec.rb554
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture.rb7
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture_runner.rb7
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_spec.rb15
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/quiet_backtrace_tweaker_spec.rb123
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/reporter_spec.rb244
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_bar.rb0
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_foo.rb0
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_spec.rb1
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/resources/custom_example_group_runner.rb14
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/resources/utf8_encoded.rb8
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/spec.opts2
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/spec_drb.opts2
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner/spec_spaced.opts2
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec/runner_spec.rb13
-rw-r--r--vendor/gems/rspec-1.3.1/spec/spec_helper.rb113
-rw-r--r--vendor/gems/rspec-1.3.1/spec/support/macros.rb29
-rw-r--r--vendor/gems/rspec-1.3.1/spec/support/spec_classes.rb133
159 files changed, 17231 insertions, 0 deletions
diff --git a/vendor/gems/rspec-1.3.1/spec/README.jruby b/vendor/gems/rspec-1.3.1/spec/README.jruby
new file mode 100644
index 000000000..7eddb5671
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/README.jruby
@@ -0,0 +1,15 @@
+= Running specs on JRuby =
+
+svn co http://svn.codehaus.org/jruby/trunk jruby
+cd jruby/jruby
+ant clean
+ant
+# put JRuby's bin dir on your PATH
+jruby -S gem install rake --no-ri --no-rdoc
+jruby -S gem install diff-lcs
+jruby -S gem install syntax
+cd ../testsuites/rspec
+mkdir target
+jruby -S rake checkout_code
+cd target/rspec
+jruby bin/spec spec -c
diff --git a/vendor/gems/rspec-1.3.1/spec/autotest/autotest_helper.rb b/vendor/gems/rspec-1.3.1/spec/autotest/autotest_helper.rb
new file mode 100644
index 000000000..3af9295de
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/autotest/autotest_helper.rb
@@ -0,0 +1,8 @@
+require 'spec_helper'
+begin
+ require 'autotest'
+rescue LoadError
+ raise "You must install ZenTest to use autotest"
+end
+require 'autotest/rspec'
+require 'autotest/autotest_matchers'
diff --git a/vendor/gems/rspec-1.3.1/spec/autotest/autotest_matchers.rb b/vendor/gems/rspec-1.3.1/spec/autotest/autotest_matchers.rb
new file mode 100644
index 000000000..2bfca4ac3
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/autotest/autotest_matchers.rb
@@ -0,0 +1,38 @@
+module Spec
+ module Matchers
+ class AutotestMappingMatcher
+ def initialize(specs)
+ @specs = specs
+ end
+
+ def to(file)
+ @file = file
+ self
+ end
+
+ def matches?(autotest)
+ @autotest = prepare(autotest)
+ @actual = autotest.test_files_for(@file)
+ @actual == @specs
+ end
+
+ def failure_message
+ "expected #{@autotest.class} to map #{@specs.inspect} to #{@file.inspect}\ngot #{@actual.inspect}"
+ end
+
+ private
+
+ def prepare(autotest)
+ find_order = @specs.dup << @file
+ autotest.instance_eval { @find_order = find_order }
+ autotest
+ end
+
+ end
+
+ def map_specs(specs)
+ AutotestMappingMatcher.new(specs)
+ end
+
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/autotest/discover_spec.rb b/vendor/gems/rspec-1.3.1/spec/autotest/discover_spec.rb
new file mode 100644
index 000000000..46b872c17
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/autotest/discover_spec.rb
@@ -0,0 +1,8 @@
+require 'autotest/autotest_helper'
+
+describe Autotest::Rspec, "discovery" do
+ it "adds the rspec autotest plugin" do
+ Autotest.should_receive(:add_discovery)
+ load File.expand_path("../../../lib/autotest/discover.rb", __FILE__)
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/autotest/failed_results_re_spec.rb b/vendor/gems/rspec-1.3.1/spec/autotest/failed_results_re_spec.rb
new file mode 100644
index 000000000..87c65d407
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/autotest/failed_results_re_spec.rb
@@ -0,0 +1,31 @@
+require 'autotest/autotest_helper'
+
+describe "failed_results_re" do
+ it "should match a failure" do
+ re = Autotest::Rspec.new.failed_results_re
+ re =~ "1)\n'this example' FAILED\nreason\n/path.rb:37:\n\n"
+ $1.should == "this example"
+ $2.should == "reason\n/path.rb:37:"
+ end
+
+ it "should match a failure when matcher outputs multiple lines" do
+ re = Autotest::Rspec.new.failed_results_re
+ re =~ "1)\n'other example' FAILED\n\nreason line 1\nreason line 2\n\n(additional info)\n/path.rb:37:\n\n"
+ $1.should == "other example"
+ $2.should == "reason line 1\nreason line 2\n\n(additional info)\n/path.rb:37:"
+ end
+
+ it "should match an Error" do
+ re = Autotest::Rspec.new.failed_results_re
+ re =~ "1)\nRuntimeError in 'this example'\nreason\n/path.rb:37:\n\n"
+ $1.should == "this example"
+ $2.should == "reason\n/path.rb:37:"
+ end
+
+ it "should match an Error that doesn't end in Error" do
+ re = Autotest::Rspec.new.failed_results_re
+ re =~ "1)\nInvalidArgument in 'this example'\nreason\n/path.rb:37:\n\n"
+ $1.should == "this example"
+ $2.should == "reason\n/path.rb:37:"
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/autotest/rspec_spec.rb b/vendor/gems/rspec-1.3.1/spec/autotest/rspec_spec.rb
new file mode 100644
index 000000000..27fa600cc
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/autotest/rspec_spec.rb
@@ -0,0 +1,126 @@
+require 'autotest/autotest_helper'
+
+describe Autotest::Rspec do
+ describe "adding spec.opts --options" do
+ before(:each) do
+ @rspec_autotest = Autotest::Rspec.new
+ end
+
+ it "should return the command line option to add spec.opts if the options file exists" do
+ File.stub!(:exist?).and_return true
+ @rspec_autotest.add_options_if_present.should == "-O spec/spec.opts "
+ end
+
+ it "should return an empty string if no spec.opts exists" do
+ File.stub!(:exist?).and_return false
+ Autotest::Rspec.new.add_options_if_present.should == ""
+ end
+ end
+
+ describe "commands" do
+ before(:each) do
+ @rspec_autotest = Autotest::Rspec.new
+ @rspec_autotest.stub!(:ruby).and_return "ruby"
+ @rspec_autotest.stub!(:add_options_if_present).and_return "-O spec/spec.opts"
+
+ @ruby = @rspec_autotest.ruby
+ @spec_cmd = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
+ @options = @rspec_autotest.add_options_if_present
+ files = %w[file_one file_two]
+ @files_to_test = {
+ files[0] => [],
+ files[1] => []
+ }
+ # this is not the inner representation of Autotest!
+ @rspec_autotest.files_to_test = @files_to_test
+ @to_test = files.map { |f| File.expand_path(f) }.join ' '
+ end
+
+ it "should make the appropriate test command" do
+ cmd = @rspec_autotest.make_test_cmd(@files_to_test)
+ (cmd =~ /#{@ruby} #{@spec_cmd} --autospec (.*) #{@options}/).should be_true
+ $1.should =~ /#{File.expand_path('file_one')}/
+ $1.should =~ /#{File.expand_path('file_two')}/
+ end
+
+ it "should return a blank command for no files" do
+ @rspec_autotest.make_test_cmd({}).should == ''
+ end
+ end
+
+ describe "mappings" do
+
+ before(:each) do
+ @lib_file = "lib/something.rb"
+ @spec_file = "spec/something_spec.rb"
+ @rspec_autotest = Autotest::Rspec.new
+ @rspec_autotest.hook :initialize
+ end
+
+ it "should find the spec file for a given lib file" do
+ @rspec_autotest.should map_specs([@spec_file]).to(@lib_file)
+ end
+
+ it "should find the spec file if given a spec file" do
+ @rspec_autotest.should map_specs([@spec_file]).to(@spec_file)
+ end
+
+ it "should ignore files in spec dir that aren't specs" do
+ @rspec_autotest.should map_specs([]).to("spec/spec_helper.rb")
+ end
+
+ it "should ignore untracked files (in @file)" do
+ @rspec_autotest.should map_specs([]).to("lib/untracked_file")
+ end
+ end
+
+ describe "consolidating failures" do
+ before(:each) do
+ @rspec_autotest = Autotest::Rspec.new
+
+ @spec_file = "spec/autotest/some_spec.rb"
+ @rspec_autotest.instance_variable_set("@files", {@spec_file => Time.now})
+ @rspec_autotest.stub!(:find_files_to_test).and_return true
+ end
+
+ it "should return no failures if no failures were given in the output" do
+ @rspec_autotest.consolidate_failures([[]]).should == {}
+ end
+
+ it "should return a hash with the spec filename => spec name for each failure or error" do
+ @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/some_spec.rb"
+ failures = [
+ [
+ "false should be false",
+ "expected: true,\n got: false (using ==)\n#{@spec_file}:203:"
+ ]
+ ]
+ @rspec_autotest.consolidate_failures(failures).should == {
+ @spec_file => ["false should be false"]
+ }
+ end
+
+ it "should not include the subject file" do
+ subject_file = "lib/autotest/some.rb"
+ @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/some_spec.rb"
+ failures = [
+ [
+ "false should be false",
+ "expected: true,\n got: false (using ==)\n#{subject_file}:143:\n#{@spec_file}:203:"
+ ]
+ ]
+ @rspec_autotest.consolidate_failures(failures).keys.should_not include(subject_file)
+ end
+ end
+
+ describe "normalizing file names" do
+ it "should ensure that a single file appears in files_to_test only once" do
+ @rspec_autotest = Autotest::Rspec.new
+ @files_to_test = {}
+ ['filename.rb', './filename.rb', File.expand_path('filename.rb')].each do |file|
+ @files_to_test[file] = []
+ end
+ @rspec_autotest.normalize(@files_to_test).should have(1).file
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/ruby_forker.rb b/vendor/gems/rspec-1.3.1/spec/ruby_forker.rb
new file mode 100644
index 000000000..6ab038750
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/ruby_forker.rb
@@ -0,0 +1,13 @@
+require 'rbconfig'
+
+module RubyForker
+ # Forks a ruby interpreter with same type as ourself.
+ # juby will fork jruby, ruby will fork ruby etc.
+ def ruby(args, stderr=nil)
+ config = ::Config::CONFIG
+ interpreter = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
+ cmd = "#{interpreter} #{args}"
+ cmd << " 2> #{stderr}" unless stderr.nil?
+ `#{cmd}`
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec.opts b/vendor/gems/rspec-1.3.1/spec/spec.opts
new file mode 100644
index 000000000..48e51f93b
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec.opts
@@ -0,0 +1,6 @@
+--colour
+--format
+profile
+--timeout
+20
+--diff \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/dsl/main_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/dsl/main_spec.rb
new file mode 100644
index 000000000..1edd8695e
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/dsl/main_spec.rb
@@ -0,0 +1,103 @@
+require 'spec_helper'
+
+module Spec
+ module DSL
+ describe Main do
+ before(:each) do
+ @main = Class.new do; include Spec::DSL::Main; end
+ end
+
+ [:describe, :context].each do |method|
+ describe "##{method}" do
+ it "should delegate to Spec::Example::ExampleGroupFactory.create_example_group" do
+ block = lambda {|a,b|}
+ Spec::Example::ExampleGroupFactory.should_receive(:create_example_group).with(
+ "The ExampleGroup", hash_including(:location), &block
+ )
+ @main.__send__ method, "The ExampleGroup", &block
+ end
+
+ it "raises with no description" do
+ block = lambda {|a,b|}
+ lambda do
+ @main.__send__ method, &block
+ end.should raise_error(ArgumentError, /No description supplied for example group declared on #{__FILE__}:#{__LINE__ - 1}/)
+ end
+ end
+ end
+
+ [:share_examples_for, :shared_examples_for].each do |method|
+ describe "##{method}" do
+ it "should create a shared ExampleGroup" do
+ block = lambda {|a,b|}
+ Spec::Example::ExampleGroupFactory.should_receive(:create_shared_example_group).with(
+ "shared group", hash_including(:location), &block
+ )
+ @main.__send__ method, "shared group", &block
+ end
+ end
+ end
+
+ describe "#describe; with RUBY_VERSION = 1.9" do
+ it "includes an enclosing module into the block's scope" do
+ Spec::Ruby.stub!(:version).and_return("1.9")
+
+ module Foo; module Bar; end; end
+
+ Foo::Bar.should_receive(:included).with do |*args|
+ included_by = args.last
+ included_by.description.should == "this example group"
+ end
+
+ module Foo
+ module Bar
+ describe("this example group") do; end
+ end
+ end
+ end
+ end
+
+ describe "#share_as" do
+ def self.next_group_name
+ @group_number ||= 0
+ @group_number += 1
+ "Group#{@group_number}"
+ end
+
+ def group_name
+ @group_name ||= self.class.next_group_name
+ end
+
+ before(:each) do
+ Spec.stub(:deprecate)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ share_as group_name do; end
+ end
+
+ it "registers a shared ExampleGroup" do
+ block = lambda {|a,b|}
+ Spec::Example::ExampleGroupFactory.should_receive(:create_shared_example_group).with(
+ group_name, hash_including(:location), &block
+ )
+ @main.share_as group_name, &block
+ end
+
+ it "creates 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 "complains if you pass it a not-constantizable name" 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
+
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_class_definition_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_class_definition_spec.rb
new file mode 100644
index 000000000..96bd21110
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_class_definition_spec.rb
@@ -0,0 +1,51 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ class ExampleGroupSubclass < ExampleGroup
+ class << self
+ attr_accessor :examples_ran
+ end
+
+ @@class_variable = :class_variable
+ CONSTANT = :constant
+
+ before(:each) do
+ @instance_variable = :instance_variable
+ end
+
+ after(:all) do
+ self.class.examples_ran = true
+ end
+
+ def a_method
+ 22
+ end
+
+ it "can access instance variables defined before(:each)" do
+ @instance_variable.should == :instance_variable
+ end
+
+ it "can access class variables (Ruby 1.8 only)" do
+ with_ruby 1.8 do
+ @@class_variable.should == :class_variable
+ end
+ end
+
+ it "can access constants" do
+ CONSTANT.should == :constant
+ end
+
+ it "can access methods defined in the Example Group" do
+ a_method.should == 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-1.3.1/spec/spec/example/example_group_factory_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_factory_spec.rb
new file mode 100644
index 000000000..0819d3a3e
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_factory_spec.rb
@@ -0,0 +1,180 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ describe ExampleGroupFactory do
+ describe "#get" do
+ attr_reader :example_group
+ before(:each) do
+ @example_group_class = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.register(:registered_type, @example_group_class)
+ end
+
+ after(:each) do
+ ExampleGroupFactory.reset
+ end
+
+ it "should return the default ExampleGroup type for nil" do
+ ExampleGroupFactory[nil].should == ExampleGroup
+ end
+
+ it "should return the default ExampleGroup for an unregistered non-nil value" do
+ ExampleGroupFactory[:does_not_exist].should == ExampleGroup
+ end
+
+ it "should return custom type if registered" do
+ ExampleGroupFactory[:registered_type].should == @example_group_class
+ end
+
+ it "should get the custom type after setting the default" do
+ @alternate_example_group_class = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.default(@alternate_example_group_class)
+ ExampleGroupFactory[:registered_type].should == @example_group_class
+ end
+ end
+
+ describe "#create_example_group" do
+ attr_reader :parent_example_group
+ before do
+ @parent_example_group = Class.new(ExampleGroupDouble) do
+ def initialize(*args, &block)
+ ;
+ end
+ end
+ end
+
+ 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 raise when no description is given" do
+ lambda {
+ Spec::Example::ExampleGroupFactory.create_example_group do; end
+ }.should raise_error(ArgumentError)
+ end
+
+ it "should raise when no block is given" do
+ lambda { Spec::Example::ExampleGroupFactory.create_example_group "foo" }.should raise_error(ArgumentError)
+ end
+
+ it "should run registered ExampleGroups" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group "The ExampleGroup" do end
+ Spec::Runner.options.example_groups.should include(example_group)
+ end
+
+ it "should not run unregistered ExampleGroups" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group "The ExampleGroup" do Spec::Runner.options.remove_example_group self; end
+ Spec::Runner.options.example_groups.should_not include(example_group)
+ end
+
+ describe "with :type => :default" do
+ it "should create a Spec::Example::ExampleGroup" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :type => :default
+ ) {}
+ example_group.superclass.should == Spec::Example::ExampleGroup
+ end
+ end
+
+ describe "with :type => :something_other_than_default" do
+ it "should create the specified type" do
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
+ non_default_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :type => :something_other_than_default
+ ) {}
+ non_default_example_group.superclass.should == parent_example_group
+ end
+ end
+
+ it "should create a type indicated by :location" do
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :location => "./spec/something_other_than_default/some_spec.rb"
+ ) {}
+ custom_example_group.superclass.should == parent_example_group
+ end
+
+ it "should create a type indicated by :location (with location generated by caller on windows)" do
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group",
+ :location => "./spec\\something_other_than_default\\some_spec.rb"
+ ) {}
+ custom_example_group.superclass.should == parent_example_group
+ end
+
+ it "should create a type indicated by location for a path-like key" do
+ Spec::Example::ExampleGroupFactory.register('path/to/custom/', parent_example_group)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :location => "./spec/path/to/custom/some_spec.rb"
+ ) {}
+ custom_example_group.superclass.should == parent_example_group
+ end
+
+ it "should use the longest key that matches when creating a type indicated by location" do
+ longer = Class.new parent_example_group
+ Spec::Example::ExampleGroupFactory.register(:longer, longer)
+ long = Class.new parent_example_group
+ Spec::Example::ExampleGroupFactory.register(:long, long)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :location => "./spec/longer/some_spec.rb"
+ ) {}
+ custom_example_group.superclass.should == longer
+ end
+
+ describe "with :shared => true" do
+ def shared_example_group
+ @shared_example_group ||= Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :location => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
+ ) {}
+ end
+
+ it "should create and register a Spec::Example::SharedExampleGroup" do
+ shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
+ SharedExampleGroup.should include(shared_example_group)
+ end
+ end
+
+ it "should favor the :type over the :location" do
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :location => '/blah/spec/models/blah.rb', :type => :something_other_than_default
+ ) {}
+ custom_example_group.superclass.should == parent_example_group
+ end
+
+ it "should register ExampleGroup by default" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
+ end
+ Spec::Runner.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
+ Spec::Runner.options.remove_example_group self
+ end
+ Spec::Runner.options.example_groups.should_not include(example_group)
+ end
+
+ after(:each) do
+ Spec::Example::ExampleGroupFactory.reset
+ end
+ end
+
+ describe "#create_shared_example_group" do
+ it "registers a new shared example group" do
+ shared_example_group = Spec::Example::ExampleGroupFactory.create_shared_example_group("something shared") {}
+ shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
+ SharedExampleGroup.should include(shared_example_group)
+ end
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_methods_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_methods_spec.rb
new file mode 100644
index 000000000..32eaee6a7
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_methods_spec.rb
@@ -0,0 +1,778 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ describe 'ExampleGroupMethods' do
+ with_sandboxed_options do
+ attr_reader :example_group, :result, :reporter
+ before(:each) do
+ # See http://rspec.lighthouseapp.com/projects/5645-rspec/tickets/525-arity-changed-on-partial-mocks#ticket-525-2
+ method_with_three_args = lambda { |arg1, arg2, arg3| }
+ options.formatters << mock("formatter", :null_object => true, :example_pending => method_with_three_args)
+ options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
+ @reporter = FakeReporter.new(@options)
+ options.reporter = reporter
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("ExampleGroup")
+ it "does nothing"
+ end
+ end
+
+ after(:each) do
+ ExampleGroupDouble.reset
+ end
+
+ ["describe","context"].each do |method|
+ describe "##{method}" do
+ describe "when creating an ExampleGroup" do
+ before(:each) do
+ @parent_example_group = Class.new(ExampleGroupDouble) do
+ example "first example" do; end
+ end
+ @child_example_group = @parent_example_group.__send__ method, "Child" do
+ example "second example" do; end
+ end
+ end
+
+ it "should create a subclass of the ExampleGroup when passed a block" do
+ @child_example_group.superclass.should == @parent_example_group
+ options.example_groups.should include(@child_example_group)
+ end
+
+ it "should not inherit examples" do
+ @child_example_group.should have(1).examples
+ end
+
+ it "records the spec path" do
+ @child_example_group.location.should =~ /#{__FILE__}:#{__LINE__ - 15}/
+ end
+ end
+
+ describe "when creating an example group with no description" do
+ it "raises an ArgumentError" do
+ lambda do
+ Class.new(ExampleGroupDouble).describe
+ end.should raise_error(Spec::Example::NoDescriptionError, /No description supplied for example group declared on #{__FILE__}:#{__LINE__ - 1}/)
+ end
+ end
+
+ describe "when creating a SharedExampleGroup" do
+ before(:each) do
+ @shared_example_group = @example_group.__send__ method, "A Shared ExampleGroup", :shared => true do; end
+ end
+
+ after(:each) do
+ SharedExampleGroup.instance_eval{@shared_example_groups}.delete @shared_example_group
+ end
+
+ it "should create a SharedExampleGroup" do
+ @shared_example_group.should_not be_nil
+ SharedExampleGroup.find("A Shared ExampleGroup").should == @shared_example_group
+ end
+ end
+
+ end
+ end
+
+ [:example, :specify, :it].each do |method|
+ describe "##{method.to_s}" do
+ it "should add an example" do
+ lambda {
+ @example_group.__send__(method, "")
+ }.should change { @example_group.examples.length }.by(1)
+ end
+
+ describe "with no location supplied" do
+ describe "creates an ExampleProxy" do
+ before(:all) do
+ @example_group = Class.new(ExampleGroupDouble).describe("bar")
+ @example_proxy = @example_group.__send__(method, "foo", {:this => :that}) {}
+ @location = "#{__FILE__}:#{__LINE__ - 1}"
+ end
+
+ specify "with a description" do
+ @example_proxy.description.should == "foo"
+ end
+
+ specify "with options" do
+ @example_proxy.options.should == {:this => :that}
+ end
+
+ specify "with a default backtrace (DEPRECATED)" do
+ Spec.stub!(:deprecate)
+ @example_proxy.backtrace.should =~ /#{@location}/
+ end
+
+ specify "with a default location" do
+ @example_proxy.location.should =~ /#{@location}/
+ end
+ end
+ end
+
+ describe "with a location supplied" do
+ describe "creates an ExampleProxy" do
+ before(:all) do
+ @example_group = Class.new(ExampleGroupDouble).describe("bar")
+ @example_proxy = @example_group.__send__(method, "foo", {:this => :that}, "the location") {}
+ end
+
+ specify "with the supplied location as #backtrace (DEPRECATED)" do
+ Spec.stub!(:deprecate)
+ @example_proxy.backtrace.should == "the location"
+ end
+
+ specify "with the supplied location as #location" do
+ @example_proxy.location.should == "the location"
+ end
+ end
+ end
+
+
+ end
+ end
+
+ [:xexample, :xit, :xspecify].each do |method|
+ describe "##{method.to_s}" do
+ before(:each) do
+ Kernel.stub!(:warn)
+ end
+
+ it "should NOT create an example" do
+ lambda {
+ @example_group.__send__(method,"")
+ }.should_not change(@example_group.examples, :length)
+ end
+
+ it "should warn that the example is disabled" do
+ Kernel.should_receive(:warn).with("Example disabled: foo")
+ @example_group.__send__(method,"foo")
+ end
+ end
+ end
+
+ describe "#examples" do
+ it "should have Examples" do
+ example_group = Class.new(ExampleGroupDouble) do
+ it "should exist" do; end
+ end
+ example_group.examples.length.should == 1
+ example_group.examples.first.description.should == "should exist"
+ end
+
+ it "should not include methods that begin with test (only when TU interop is loaded)" do
+ example_group = Class.new(ExampleGroupDouble) do
+ 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
+ def should_something
+ # forces the run
+ end
+ end
+
+ example_group.examples.length.should == 1
+ example_group.run(options).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(ExampleGroupDouble) do
+ 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.should have(4).examples
+ descriptions = example_group.examples.collect {|e| e.description}
+ descriptions.should include(
+ "shouldCamelCase",
+ "should_any_args",
+ "should_something",
+ "should_not_something")
+ descriptions.should_not include(
+ "should",
+ "should_not"
+ )
+ end
+
+ it "should not include methods that begin with test_ and has an arity > 0 in suite" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def test_invalid(foo)
+ 1.should == 1
+ end
+ def testInvalidCamelCase(foo)
+ 1.should == 1
+ end
+ end
+ example_group.should have(:no).examples
+ end
+
+ it "should not include methods that begin with should_ and has an arity > 0 in suite" do
+ example_group = Class.new(ExampleGroupDouble) do
+ 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.should have(1).examples
+ example_group.run(options).should be_true
+ end
+
+ it "should run should_methods" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def should_valid
+ 1.should == 2
+ end
+ end
+ example_group.should have(1).examples
+ example_group.run(options).should be_false
+ end
+ end
+
+ describe "#set_description" do
+ attr_reader :example_group
+ before do
+ class << example_group
+ public :set_description
+ end
+ end
+
+ describe "given a 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 "given a Class" 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 "given a String and a Class" 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 "given a Class and a String (starting with an alpha char)" 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 "given a Class and a String (starting with a '.')" 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(Class, String starting with #)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "#behaving")
+ end
+
+ specify "should return the Class then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup#behaving"
+ end
+ end
+
+ describe "#set_description(Class, 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(Class, 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", :location => "blah")
+ end
+
+ it ".location should expand the passed in :location option passed into the constructor" do
+ example_group.location.should == File.expand_path("blah")
+ end
+
+ it ".options should return all the options passed in" do
+ example_group.options.should == {:a => "b", :location => "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 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 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
+
+ it "is cached" do
+ example_group.set_description("describe me")
+ example_group.description.should be(example_group.description)
+ 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
+ parent_example_group = Class.new(ExampleGroupDouble) do
+ describe("Parent")
+ end
+
+ child_example_group = Class.new(parent_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 == [
+ "Parent",
+ "Child",
+ Spec::Example::ExampleGroup,
+ "GrandChild",
+ Spec::Example::ExampleGroup
+ ]
+ end
+
+ it "caches the description parts" do
+ example_group.description_parts.should equal(example_group.description_parts)
+ 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(ExampleGroupDouble) 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
+
+ it "is cached per example group" do
+ klass = Class.new
+ group = Class.new(ExampleGroupDouble) do
+ describe(klass)
+ end
+ group.should_receive(:description_parts).once.and_return([klass])
+ group.described_type
+ group.described_type
+ end
+ end
+
+ describe "#include" do
+ it "should have accessible class methods from included module" do
+ mod_method_called = false
+ mod = Module.new do
+ class_methods = Module.new do
+ define_method :mod_method do
+ mod_method_called = true
+ end
+ end
+
+ self.class.class_eval do
+ define_method(:included) do |receiver|
+ receiver.extend class_methods
+ end
+ end
+ end
+
+ @example_group.__send__ :include, mod
+
+ @example_group.mod_method
+ mod_method_called.should be_true
+ end
+ end
+
+ describe "#number_of_examples" do
+ it "should count number of examples" 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(ExampleGroupDouble) do
+ FOO = 1
+ it "should reference FOO" do
+ FOO.should == 1
+ end
+ end
+ success = example_group.run(options)
+ success.should be_true
+ Object.const_defined?(:FOO).should == false
+ end
+ end
+
+ describe '#register' do
+ after(:each) do
+ Spec::Runner.options.remove_example_group example_group
+ end
+ it "should add ExampleGroup to set of ExampleGroups to be run" do
+ Spec::Runner.options.add_example_group example_group
+ options.example_groups.should include(example_group)
+ end
+ end
+
+ describe '#remove_example_group' do
+ before(:each) do
+ Spec::Runner.options.add_example_group example_group
+ end
+ it "should remove ExampleGroup from set of ExampleGroups to be run" do
+ Spec::Runner.options.remove_example_group example_group
+ options.example_groups.should_not include(example_group)
+ end
+ end
+
+ describe "#run" do
+ describe "given an example group with at least one example" do
+ it "should call add_example_group" do
+ example_group = Class.new(ExampleGroupDouble) do
+ example("anything") {}
+ end
+ reporter.should_receive(:add_example_group)
+ example_group.run(options)
+ end
+ end
+
+ describe "given an example group with no examples" do
+ it "should NOT call add_example_group" do
+ example_group = Class.new(ExampleGroupDouble) do end
+ reporter.should_not_receive(:add_example_group)
+ example_group.run(options)
+ end
+ end
+ end
+
+ describe "#matcher_class=" do
+ it "should call new and matches? on the class used for matching examples" do
+ example_group = Class.new(ExampleGroupDouble) do
+ it "should do something" do end
+ def self.specified_examples
+ ["something"]
+ end
+ def self.to_s
+ "TestMatcher"
+ end
+ end
+
+ matcher = mock("matcher")
+ matcher.should_receive(:matches?).with(["something"]).any_number_of_times
+
+ matcher_class = Class.new
+ matcher_class.should_receive(:new).with("TestMatcher", "should do something").and_return(matcher)
+
+ begin
+ ExampleGroupMethods.matcher_class = matcher_class
+
+ example_group.run(options)
+ ensure
+ ExampleGroupMethods.matcher_class = ExampleMatcher
+ end
+ end
+ end
+
+ describe "#options" do
+ it "should expose the options hash" do
+ group = describe("group", :this => 'hash') {}
+ group.options[:this].should == 'hash'
+ end
+ end
+
+ describe "#before" do
+ it "stores before(:each) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.before(:each, &block)
+ example_group.before_each_parts.should include(block)
+ end
+
+ it "stores before(:all) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.before(:all, &block)
+ example_group.before_all_parts.should include(block)
+ end
+
+ it "stores before(:suite) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ parts = []
+ ExampleGroupMethods.stub!(:before_suite_parts).and_return(parts)
+ block = lambda {}
+ example_group.before(:suite, &block)
+ example_group.before_suite_parts.should include(block)
+ end
+ end
+
+
+ describe "#after" do
+ it "stores after(:each) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.after(:each, &block)
+ example_group.after_each_parts.should include(block)
+ end
+
+ it "stores after(:all) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.after(:all, &block)
+ example_group.after_all_parts.should include(block)
+ end
+
+ it "stores after(:suite) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ parts = []
+ ExampleGroupMethods.stub!(:after_suite_parts).and_return(parts)
+ block = lambda {}
+ example_group.after(:suite, &block)
+ example_group.after_suite_parts.should include(block)
+ end
+ end
+
+ describe "#run_before_all" do
+ it "does not create an instance if before_all_parts are empty" do
+ example_group = Class.new(ExampleGroupDouble) { example("one example") {} }
+ example_group.should_not_receive(:new)
+ example_group.__send__ :run_before_all, nil
+ end
+ end
+
+ describe "#run_after_all" do
+ it "does not create an instance if after_all_parts are empty" do
+ example_group = Class.new(ExampleGroupDouble) { example("one example") {} }
+ example_group.should_not_receive(:new)
+ example_group.__send__ :run_after_all, true, {}, nil
+ end
+ end
+
+ describe "#examples_to_run" do
+ it "runs only the example identified by a line number" do
+ example_group = Class.new(ExampleGroupDouble).describe("this") do
+ it { 3.should == 3 }
+ it "has another example which raises" do
+ raise "this shouldn't have run"
+ end
+ end
+ options.examples << :ignore
+ options.line_number = __LINE__ - 6
+ options.files << __FILE__
+ example_group.run(options).should be_true
+ end
+
+ it "runs the example identified by a line number even if it's not the example line number" do
+ example_group = Class.new(ExampleGroupDouble).describe("this") do
+
+ it { raise "foo" }
+
+ end
+ options.examples << :ignore
+ options.line_number = __LINE__ - 3
+ options.files << __FILE__
+ example_group.run(options).should be_false
+ end
+
+ it "runs all the examples in the group " do
+ first_example_ran = false
+ second_example_ran = false
+ example_group = Class.new(ExampleGroupDouble).describe("this") do
+
+ it { first_example_ran = true }
+ it { second_example_ran = true }
+
+ end
+ options.line_number = __LINE__ - 6
+ options.files << __FILE__
+ options.examples << :ignore
+ example_group.run(options)
+ first_example_ran.should be_true
+ second_example_ran.should be_true
+ end
+
+ it "doesn't run any examples in another group" do
+ example_ran = false
+ example_group_1 = Class.new(ExampleGroupDouble).describe("this") do
+ it "ignore" do
+ example_ran = true
+ end
+ end
+ example_group_2 = Class.new(ExampleGroupDouble).describe("that") do
+ end
+ options.examples << :ignore
+ options.line_number = __LINE__ - 3
+ options.files << __FILE__
+ example_group_1.run(options)
+ example_group_2.run(options)
+ example_ran.should be_false
+ end
+ end
+
+ describe "#let" do
+ let(:counter) do
+ Class.new do
+ def initialize
+ @count = 0
+ end
+ def count
+ @count += 1
+ end
+ end.new
+ end
+
+ it "generates an instance method" do
+ counter.count.should == 1
+ end
+
+ it "caches the value" do
+ counter.count.should == 1
+ counter.count.should == 2
+ end
+ end
+
+ describe "#let!" do
+ let!(:creator) do
+ class Creator
+ @count = 0
+ def self.count
+ @count += 1
+ end
+ end
+ end
+
+ it "evaluates the value non-lazily" do
+ lambda { Creator.count }.should_not raise_error
+ end
+
+ it "does not interfere between tests" do
+ Creator.count.should == 1
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_proxy_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_proxy_spec.rb
new file mode 100644
index 000000000..8d42f3a04
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_proxy_spec.rb
@@ -0,0 +1,107 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ describe ExampleGroupProxy do
+ before(:each) do
+ @group = stub("example group",:nested_descriptions => []).as_null_object
+ end
+
+ attr_reader :group
+ def proxy
+ @proxy ||= ExampleGroupProxy.new(@group)
+ end
+
+ describe "#description" do
+ it "provides the example group's description" do
+ group.stub!(:description => "the description")
+ proxy.description.should == "the description"
+ end
+ end
+
+ describe "#nested_descriptions" do
+ it "provides the example group's nested_descriptions" do
+ group.stub!(:nested_descriptions => ["the description"])
+ proxy.nested_descriptions.should == ["the description"]
+ end
+ end
+
+ describe "#filtered_description (DEPRECATED)" do
+ before(:each) do
+ Spec.stub!(:deprecate)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ proxy.filtered_description(/(ignore)/)
+ end
+
+ it "builds the description from the group's nested_descriptions" do
+ group.stub!(:nested_descriptions => ["ignore","the","description"])
+ proxy.filtered_description(/(ignore)/).should == "the description"
+ end
+
+ it "filters out description parts that match the supplied regexp" do
+ group.stub!(:nested_descriptions => ["ignore the","description"])
+ proxy.filtered_description(/(ignore )/).should == "the description"
+ end
+ end
+
+ describe "#examples" do
+ it "provides a collection of example group proxies" do
+ group.stub!(:example_proxies => ["array","of","proxies"])
+ proxy.examples.should == ["array","of","proxies"]
+ end
+ end
+
+ describe "#backtrace (deprecated - use #location)" do
+ before(:each) do
+ Spec.stub!(:deprecate)
+ end
+
+ it "provides the location of the declaration of this group" do
+ group.stub!(:location => "path/to/location:37")
+ proxy.backtrace.should == "path/to/location:37"
+ end
+
+ it "warns deprecation" do
+ Spec.should_receive(:deprecate)
+ group.stub!(:location => "path/to/location:37")
+ proxy.backtrace
+ end
+ end
+
+ describe "#location" do
+ it "provides the location of the declaration of this group" do
+ group.stub!(:location => "path/to/location:37")
+ proxy.location.should == "path/to/location:37"
+ end
+ end
+
+ describe "#options" do
+ it "provides the options passed to the example group declaration" do
+ group.stub!(:options => {:a => 'b'})
+ proxy.options.should == {:a => 'b'}
+ end
+
+ it "excludes :location" do
+ group.stub!(:options => {:location => 'b'})
+ proxy.options.should == {}
+ end
+
+ it "excludes :scope" do
+ group.stub!(:options => {:scope => 'b'})
+ proxy.options.should == {}
+ end
+
+ it "preserves the original hash" do
+ hash = {:a => 'b', :location => 'here', :scope => 'tiny'}
+ group.stub!(:options => hash)
+ proxy.options.should == {:a => 'b'}
+ hash.should == {:a => 'b', :location => 'here', :scope => 'tiny'}
+ end
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_spec.rb
new file mode 100644
index 000000000..da04a3803
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_group_spec.rb
@@ -0,0 +1,632 @@
+require '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
+
+ @@class_variable = "a class variable"
+
+ it "can access class variables in examples in Ruby 1.8" do
+ @@class_variable.should == "a class variable"
+ 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
+ @@class_variable
+ 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(options).should be_false
+ end
+ end
+
+ describe ExampleGroup, "#run" do
+ with_sandboxed_options do
+ attr_reader :example_group, :formatter, :reporter
+ before :each do
+ method_with_three_args = lambda { |arg1, arg2, arg3| }
+ @formatter = mock("formatter", :null_object => true, :example_pending => method_with_three_args)
+ options.formatters << formatter
+ options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
+ @reporter = FakeReporter.new(options)
+ options.reporter = reporter
+ @example_group = Class.new(ExampleGroupDouble) 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(ExampleGroupDouble) do
+ describe("Foobar")
+ end
+ example_group.examples.should be_empty
+
+ reporter = mock("Reporter")
+ reporter.should_not_receive(:add_example_group)
+ example_group.run(options)
+ end
+
+ it "should report the start of an example run" do
+ reporter.should_receive(:example_started) do |example|
+ example.should equal(example_group.examples[0])
+ end
+ example_group.run(options)
+ end
+
+ it "should report the end of an example run" do
+ reporter.should_receive(:example_finished) do |example, execution_error|
+ example.should equal(example_group.examples[0])
+ execution_error.should be_nil
+ end
+ example_group.run(options)
+ 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(options)
+ $example_ran.should be_false
+ end
+
+ it "should run after_each" do
+ example_group.run(options)
+ $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(options)
+ 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(options)
+ 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(options)
+ 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(ExampleGroupDouble) 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.parse_example "the ExampleGroup"
+ end
+
+ it "should not run the Examples in the ExampleGroup" do
+ example_group.run(options)
+ 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(ExampleGroupDouble) do
+ describe("example")
+ it("should be run") do
+ examples_that_were_run << 'should be run'
+ end
+ end
+ options.parse_example "should be run"
+ end
+
+ it "should not run the example" do
+ example_group.run(options)
+ 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(ExampleGroupDouble) do
+ describe("example")
+ it("should be something else") do
+ examples_that_were_run << 'should be something else'
+ end
+ end
+ options.parse_example "does not match anything"
+ end
+
+ it "should not run the example" do
+ example_group.run(options)
+ 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(ExampleGroupDouble) 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.parse_example "should be run"
+ end
+
+ it "should run only the example" do
+ example_group.run(options)
+ examples_that_were_run.should == ["should be run"]
+ end
+ end
+ end
+
+ describe ExampleGroup, "#run with success" do
+ before do
+ @special_example_group = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.register(:special, @special_example_group)
+ @not_special_example_group = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.register(:not_special, @not_special_example_group)
+ end
+
+ after do
+ ExampleGroupFactory.reset
+ end
+
+ it "should send reporter example_group_started" do
+ reporter.should_receive(:example_group_started)
+ example_group.run(options)
+ end
+
+ it "should run example on run" do
+ example_ran = false
+ example_group.it("should") {example_ran = true}
+ example_group.run(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(ExampleGroupDouble) do
+ describe("I'm not special", :type => :not_special)
+ it "does nothing"
+ end
+ example_group.run(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+
+ example_group.included_modules.should include(mod1)
+ example_group.included_modules.should include(mod2)
+ example_group.included_modules.should_not include(mod3)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ after_all_ran.should be_true
+ end
+
+ it "should supply before(:all) as description" do
+ @reporter.should_receive(:example_failed) 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options)
+ 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(options).should be_false
+ end
+ end
+ end
+ end
+
+ describe ExampleGroup, "subclasses" do
+ it "should have access to the described_type" do
+ example_group = Class.new(ExampleGroupDouble).describe(Array)
+ example_group.__send__(:described_type).should == Array
+ end
+
+ it "should concat descriptions when nested" do
+ example_group = Class.new(ExampleGroupDouble).describe(Array)
+ nested_group = example_group.describe("when empty") do; end
+ nested_group.description.to_s.should == "Array when empty"
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_matcher_spec.rb
new file mode 100644
index 000000000..d82224f7a
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_matcher_spec.rb
@@ -0,0 +1,85 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ describe ExampleMatcher, "#matches?" do
+
+ Spec::Matchers.define :match_examples do |examples|
+ match do |actual|
+ actual.matches?(examples)
+ end
+ end
+
+ it "should match correct example_group and example" do
+ matcher = ExampleMatcher.new("example_group", "example")
+ matcher.should match_examples(["example_group example"])
+ end
+
+ it "should not match wrong example" do
+ matcher = ExampleMatcher.new("example_group", "other example")
+ matcher.should_not match_examples(["example_group example"])
+ end
+
+ it "should not match wrong example_group" do
+ matcher = ExampleMatcher.new("other example_group", "example")
+ matcher.should_not match_examples(["example_group example"])
+ end
+
+ it "should match example only" do
+ matcher = ExampleMatcher.new("example_group", "example")
+ matcher.should match_examples(["example"])
+ end
+
+ it "should match example_group only" do
+ matcher = ExampleMatcher.new("example_group", "example")
+ matcher.should match_examples(["example_group"])
+ end
+
+ it "should match example_group ending with before(:all)" do
+ matcher = ExampleMatcher.new("example_group", "example")
+ matcher.should match_examples(["example_group before(:all)"])
+ end
+
+ it "should escape regexp chars" do
+ matcher = ExampleMatcher.new("(con|text)", "[example]")
+ matcher.should_not match_examples(["con p"])
+ end
+
+ it "should match when example_group is modularized" do
+ matcher = ExampleMatcher.new("MyModule::MyClass", "example")
+ matcher.should match_examples(["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
+
+ describe ExampleMatcher, "called with nil example" do
+ it "does not puke" do
+ matcher = ExampleMatcher.new("Foo::Bar", nil)
+ matcher.matches?(["anything"]).should == false
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_methods_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_methods_spec.rb
new file mode 100644
index 000000000..9a6810952
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_methods_spec.rb
@@ -0,0 +1,162 @@
+require 'spec_helper'
+
+class Thing
+ attr_reader :arg
+ def initialize(arg=nil)
+ @arg = arg || :default
+ end
+ def ==(other)
+ @arg == other.arg
+ end
+ def eql?(other)
+ @arg == other.arg
+ end
+end
+
+module Spec
+ module Example
+ describe ExampleMethods do
+ module ModuleThatIsReopened; end
+
+ module Spec::Example::ExampleMethods
+ include ModuleThatIsReopened
+ end
+
+ module ModuleThatIsReopened
+ def module_that_is_reopened_method; end
+ end
+
+ describe "with an included module that is reopened" do
+ it "should have reopened methods" do
+ method(:module_that_is_reopened_method).should_not be_nil
+ end
+ end
+
+ describe "#should" do
+ before(:each) do
+ @example_group = Class.new(ExampleGroupDouble)
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ end
+
+ context "in an ExampleGroup with an implicit subject" do
+ it "delegates matcher to the implied subject" do
+ @example_group.describe(::Thing)
+ @example_group.example { should == ::Thing.new(:default) }
+ @example_group.example { should eql(::Thing.new(:default)) }
+ @example_group.run(@options).should be_true
+ end
+ end
+
+ context "in an ExampleGroup using an explicit subject" do
+ it "delegates matcher to the declared subject" do
+ @example_group.describe(::Thing)
+ @example_group.subject { ::Thing.new(:other) }
+ @example_group.example { should == ::Thing.new(:other) }
+ @example_group.example { should eql(::Thing.new(:other)) }
+ @example_group.run(@options).should be_true
+ end
+ end
+
+ context "in an ExampleGroup using 'self' as an explicit subject" do
+ it "delegates matcher to the ExampleGroup" do
+ @example_group.describe(::Thing)
+ @example_group.subject { self }
+ @example_group.example { should == self }
+ @example_group.example { should eql(self) }
+ @example_group.example do
+ self.instance_eval("def method_ok?; true end")
+ should be_method_ok
+ end
+ @example_group.run(@options).should be_true
+ end
+ end
+ end
+
+ describe "#should_not" do
+ before(:each) do
+ @example_group = Class.new(ExampleGroupDouble)
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ end
+
+ context "in an ExampleGroup with an implicit subject" do
+ it "delegates matcher to the implied subject" do
+ @example_group.describe(::Thing)
+ @example_group.example { should_not == ::Thing.new(:other) }
+ @example_group.example { should_not eql(::Thing.new(:other)) }
+ @example_group.run(@options).should be_true
+ end
+ end
+
+ context "in an ExampleGroup using an explicit subject" do
+ it "delegates matcher to the declared subject" do
+ @example_group.describe(::Thing)
+ @example_group.subject { ::Thing.new(:other) }
+ @example_group.example { should_not == ::Thing.new(:default) }
+ @example_group.example { should_not eql(::Thing.new(:default)) }
+ @example_group.run(@options).should be_true
+ end
+ end
+
+ context "in an ExampleGroup using 'self' as an explicit subject" do
+ it "delegates matcher to the ExampleGroup" do
+ @example_group.describe(::Thing)
+ @example_group.subject { self }
+ @example_group.example { should_not == ::Thing.new(:default) }
+ @example_group.example { should_not eql(::Thing.new(:default)) }
+ @example_group.example do
+ self.instance_eval("def method_ok?; false end")
+ should_not be_method_ok
+ end
+ @example_group.run(@options).should be_true
+ end
+ end
+ end
+ end
+
+ describe "#options" do
+ it "should expose the options hash" do
+ example = ExampleGroupDouble.new ExampleProxy.new("name", :this => 'that') do; end
+ example.options[:this].should == 'that'
+ end
+ end
+
+ describe "#set_instance_variables_from_hash" do
+ it "preserves the options" do
+ example = ExampleGroupDouble.new ExampleProxy.new("name", :this => 'that') do; end
+ example.set_instance_variables_from_hash({:@_options => {}})
+ example.options[:this].should == 'that'
+ end
+ end
+
+ describe "#description" do
+ it "returns the supplied description" do
+ example = ExampleGroupDouble.new ExampleProxy.new("name") do; end
+ example.description.should == "name"
+ end
+ it "returns the generated description if there is no description supplied" do
+ example = ExampleGroupDouble.new ExampleProxy.new do; end
+ Spec::Matchers.stub!(:generated_description).and_return('this message')
+ example.description.should == "this message"
+ end
+ it "warns if there is no supplied or generated description" do
+ example = ExampleGroupDouble.new ExampleProxy.new(nil, {}, "this backtrace") do; end
+ Spec::Matchers.stub!(:generated_description).and_return(nil)
+ Spec.should_receive(:warn).with("No description supplied for example declared on this backtrace")
+ example.description
+ end
+ end
+
+ describe "#expect" do
+ it "aliases #should with #to on the proc" do
+ a = 3
+ expect { a += 1 }.to change{a}.from(3).to(4)
+ end
+
+ it "aliases #should_not with #to_not on the proc" do
+ a = 3
+ expect { nil }.to_not change{a}
+ end
+ end
+
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/example_proxy_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/example_proxy_spec.rb
new file mode 100644
index 000000000..de845c9e2
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/example_proxy_spec.rb
@@ -0,0 +1,57 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+
+ describe ExampleProxy do
+
+ describe "#description" do
+ it "provides the submitted description" do
+ proxy = ExampleProxy.new("the description")
+ proxy.description.should == "the description"
+ end
+ end
+
+ describe "#update" do
+ it "updates the description" do
+ proxy = ExampleProxy.new("old description")
+ proxy.update("new description")
+ proxy.description.should == "new description"
+ end
+ end
+
+ describe "#options" do
+ it "provides the submitted options" do
+ proxy = ExampleProxy.new(:ignore, {:these => :options})
+ proxy.options.should == {:these => :options}
+ end
+ end
+
+ describe "#backtrace (DEPRECATED - use #location)" do
+ before(:each) do
+ Spec.stub!(:deprecate)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ proxy = ExampleProxy.new(:ignore, {}, "path/to/location:37")
+ proxy.backtrace
+ end
+
+ it "provides the location of the declaration of this group" do
+ proxy = ExampleProxy.new(:ignore, {}, "path/to/location:37")
+ proxy.backtrace.should == "path/to/location:37"
+ end
+ end
+
+ describe "#location" do
+ it "provides the location of the declaration of this group" do
+ proxy = ExampleProxy.new(:ignore, {}, "path/to/location:37")
+ proxy.location.should == "path/to/location:37"
+ end
+ end
+
+ end
+
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/helper_method_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/helper_method_spec.rb
new file mode 100644
index 000000000..3653aec71
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/helper_method_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+# This was added to prove that http://rspec.lighthouseapp.com/projects/5645/tickets/211
+# was fixed in ruby 1.9.1
+
+module HelperMethodExample
+ describe "a helper method" do
+ def helper_method
+ "received call"
+ end
+
+ it "is available to examples in the same group" do
+ helper_method.should == "received call"
+ end
+
+ describe "from a nested group" do
+ it "is available to examples in a nested group" do
+ helper_method.should == "received call"
+ end
+ end
+
+ end
+end
+
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/nested_example_group_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/nested_example_group_spec.rb
new file mode 100644
index 000000000..83e4a9d7c
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/nested_example_group_spec.rb
@@ -0,0 +1,71 @@
+require '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
+
+ describe "Nested Example Groups" do
+ describe "description options", :other_options => "other options" do
+ it "includes :location" do
+ self.class.options[:location].should match(/#{__FILE__}/)
+ end
+
+ it "includes any other options" do
+ self.class.options[:other_options].should == "other options"
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/pending_module_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/pending_module_spec.rb
new file mode 100644
index 000000000..275abc7d6
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/pending_module_spec.rb
@@ -0,0 +1,58 @@
+module Spec
+ module Example
+ describe Pending do
+
+ context "when no block is supplied" do
+ it "raises an ExamplePendingError if no block is supplied" do
+ lambda {
+ pending "TODO"
+ }.should raise_error(ExamplePendingError, /TODO/)
+ end
+ end
+
+ context "when the supplied block fails" do
+ it "raises an ExamplePendingError if a supplied block fails as expected" do
+ lambda {
+ pending "TODO" do
+ raise "oops"
+ end
+ }.should raise_error(ExamplePendingError, /TODO/)
+ end
+ end
+
+ context "when the supplied block fails with a mock" do
+ it "raises an ExamplePendingError if a supplied block fails as expected with a mock" do
+ lambda {
+ pending "TODO" do
+ m = mock("thing")
+ m.should_receive(:foo)
+ m.rspec_verify
+ end
+ }.should raise_error(ExamplePendingError, /TODO/)
+ end
+ end
+
+ context "when the supplied block passes" do
+ it "raises a PendingExampleFixedError" do
+ lambda {
+ pending "TODO" do
+ # success!
+ end
+ }.should raise_error(PendingExampleFixedError, /TODO/)
+ end
+ end
+ end
+
+ describe ExamplePendingError do
+ it "should have the message provided" do
+ ExamplePendingError.new("a message").message.should == "a message"
+ end
+ end
+
+ describe NotYetImplementedError do
+ it "should have the message 'Not Yet Implemented'" do
+ NotYetImplementedError.new.message.should == "Not Yet Implemented"
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/predicate_matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/predicate_matcher_spec.rb
new file mode 100644
index 000000000..a01858502
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/predicate_matcher_spec.rb
@@ -0,0 +1,41 @@
+require '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
+ before(:each) do
+ Spec.stub!(:deprecate)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ group = ExampleGroupDouble.describe("foo") do
+ predicate_matchers[:swim] = :can_swim?
+ end
+ group.run(Spec::Runner::Options.new(StringIO.new, StringIO.new))
+ end
+
+ it "should match matcher_method if method_on_object returns true" do
+ group = ExampleGroupDouble.describe(Fish) do
+ predicate_matchers[:swim] = :can_swim?
+ it { should swim(100) }
+ end
+ group.run(Spec::Runner::Options.new(StringIO.new, StringIO.new))
+ end
+
+ it "should not match matcher_method if method_on_object returns false" do
+ group = ExampleGroupDouble.describe(Fish) do
+ predicate_matchers[:swim] = :can_swim?
+ it { should_not swim(1000) }
+ end
+ group.run(Spec::Runner::Options.new(StringIO.new, StringIO.new))
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/shared_example_group_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/shared_example_group_spec.rb
new file mode 100644
index 000000000..bbebbf15c
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/shared_example_group_spec.rb
@@ -0,0 +1,257 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ describe ExampleGroup, "with :shared => true" do
+ with_sandboxed_options do
+ attr_reader :formatter, :example_group
+ before(:each) do
+ @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
+ options.formatters << formatter
+ @example_group = Class.new(ExampleGroupDouble).describe("example_group")
+ class << example_group
+ public :include
+ end
+ end
+
+ after(:each) do
+ @formatter.rspec_verify
+ @example_group = nil
+ Spec::Example::SharedExampleGroup.clear
+ end
+
+ describe "#register" do
+ it "creates a new shared example group with the submitted args" do
+ block = lambda {|a|}
+ group = SharedExampleGroup.new("shared group") do end
+ Spec::Example::SharedExampleGroup.should_receive(:new).with("share me", &block).and_return(group)
+ Spec::Example::SharedExampleGroup.register("share me", &block)
+ end
+
+ it "registers the shared example group" do
+ lambda do
+ Spec::Example::SharedExampleGroup.register "share me" do end
+ end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
+ end
+ end
+
+ it "complains 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 "does NOT add the same group twice" do
+ lambda do
+ 2.times do
+ describe "shared example_group which gets loaded twice", :shared => true do
+ end
+ end
+ end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
+ end
+
+ it "does 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 "does NOT complain when adding the same shared example_group in same file with different absolute path" do
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/a/../shared.rb"
+ )
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/b/../shared.rb"
+ )
+ end
+
+ it "complains when adding a different shared example_group with the same name in a different file with the same basename" do
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/a/shared.rb"
+ )
+ lambda do
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/b/shared.rb"
+ )
+ end.should raise_error(ArgumentError, /already exists/)
+ end
+
+ it "adds examples to current example_group using it_should_behave_like" do
+ shared_example_group = SharedExampleGroup.register("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 "adds examples to from two shared groups" do
+ shared_example_group_1 = SharedExampleGroup.register("shared example_group 1") do
+ it("shared example 1") {}
+ end
+
+ shared_example_group_1 = SharedExampleGroup.register("shared example_group 2") do
+ 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 1", "shared example_group 2")
+ example_group.number_of_examples.should == 3
+ end
+
+ it "adds 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 "adds 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 "runs shared examples" do
+ shared_example_ran = false
+ shared_example_group = SharedExampleGroup.register("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(options)
+ example_ran.should be_true
+ shared_example_ran.should be_true
+ end
+
+ it "runs before(:each) and after(:each) from shared example_group" do
+ shared_setup_ran = false
+ shared_teardown_ran = false
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
+ before(:each) { shared_setup_ran = true }
+ after(:each) { 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(options)
+ 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 = SharedExampleGroup.register("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(options)
+ 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 = SharedExampleGroup.register("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.__send__ :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(options)
+ 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 = SharedExampleGroup.register("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(options)
+ 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
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/example/subclassing_example_group_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/subclassing_example_group_spec.rb
new file mode 100644
index 000000000..969014a73
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/subclassing_example_group_spec.rb
@@ -0,0 +1,25 @@
+require '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-1.3.1/spec/spec/example/subject_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/example/subject_spec.rb
new file mode 100644
index 000000000..e1889cb36
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/example/subject_spec.rb
@@ -0,0 +1,110 @@
+require 'spec_helper'
+
+module Spec
+ module Example
+ describe "implicit subject" do
+ describe "with a class" do
+ it "returns an instance of the class" do
+ group = Class.new(ExampleGroupDouble).describe(Array)
+ example = group.new(ExampleProxy.new)
+ example.subject.should == []
+ end
+ end
+
+ describe "with a Module" do
+ it "returns the Module" do
+ group = Class.new(ExampleGroupDouble).describe(Enumerable)
+ example = group.new(ExampleProxy.new)
+ example.subject.should == Enumerable
+ end
+ end
+
+ describe "with a string" do
+ it "return the string" do
+ group = Class.new(ExampleGroupDouble).describe('foo')
+ example = group.new(ExampleProxy.new)
+ example.subject.should == 'foo'
+ end
+ end
+
+ describe "with a number" do
+ it "returns the number" do
+ group = Class.new(ExampleGroupDouble).describe(15)
+ example = group.new(ExampleProxy.new)
+ example.subject.should == 15
+ end
+ end
+
+ end
+
+ describe "explicit subject" do
+ describe "defined in a top level group" do
+ it "replaces the implicit subject in that group" do
+ group = Class.new(ExampleGroupDouble).describe(Array)
+ group.subject { [1,2,3] }
+ example = group.new(ExampleProxy.new)
+ example.subject.should == [1,2,3]
+ end
+ end
+
+ describe "defined in a top level group" do
+ before(:each) do
+ @group = Class.new do
+ extend Spec::Example::Subject::ExampleGroupMethods
+ include Spec::Example::Subject::ExampleMethods
+ class << self
+ def described_class
+ Array
+ end
+ end
+ def described_class
+ self.class.described_class
+ end
+
+ subject {
+ [1,2,3]
+ }
+ end
+ end
+
+ it "is available in a nested group (subclass)" do
+ nested_group = Class.new(@group)
+
+ example = nested_group.new
+ example.subject.should == [1,2,3]
+ end
+
+ it "is available in a doubly nested group (subclass)" do
+ nested_group = Class.new(@group)
+ doubly_nested_group = Class.new(nested_group)
+
+ example = doubly_nested_group.new
+ example.subject.should == [1,2,3]
+ end
+ end
+ end
+
+ describe ".its (to access subject's attributes)" do
+ with_sandboxed_options do
+ it "allows before(:each) blocks on subjects in outer scope" do
+ group = Class.new(ExampleGroupDouble).describe(Array)
+ group.before(:each) { subject << 1 }
+ child = group.its(:length) { should == 1 }
+ child.run(options).should == true
+ end
+
+ it "passes when expectation should pass" do
+ group = Class.new(ExampleGroupDouble).describe(Array)
+ child = group.its(:length) { should == 0 }
+ child.run(options).should == true
+ end
+
+ it "fails when expectation should fail" do
+ group = Class.new(ExampleGroupDouble).describe(Array)
+ child = group.its(:length) { should == 1 }
+ child.run(options).should == false
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/expectations/differs/default_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/expectations/differs/default_spec.rb
new file mode 100644
index 000000000..3bc3c45ab
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/expectations/differs/default_spec.rb
@@ -0,0 +1,194 @@
+require 'spec_helper'
+
+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= <<'EOD'
+
+
+@@ -1,6 +1,6 @@
+ foo
+-zap
+ bar
++zap
+ this
+ is
+ soo
+@@ -9,6 +9,5 @@
+ equal
+ insert
+ a
+-another
+ line
+EOD
+
+ 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,
+- "tango",
++ "charlie",
+ :width,
+- "very wide"]
++ "quite wide"]
+EOD
+
+
+ diff = @differ.diff_as_object(expected,actual)
+ diff.should == expected_diff
+ end
+
+ it "should output a friendly message if comparing simple hashes" do
+ expected = { "foo" => "bar" }
+ actual = { "foo" => "baz" }
+
+ expected_diff = <<'EOD'
+
+Expected the key "foo" to be "bar", but was "baz"
+
+EOD
+
+
+ diff = @differ.diff_as_hash(actual, expected)
+ diff.should == expected_diff
+ end
+
+
+ it "should output a friendly message if comparing simple hashes that contain different keys" do
+ expected = { "bar" => "foo" }
+ actual = { "foo" => "baz" }
+
+ expected_diff = <<'EOD'
+
+Expected hash contains keys that target hash does not: ["bar"]
+Target hash contains keys that expected hash does not: ["foo"]
+Expected the key "bar" to be "foo", but was nil
+
+EOD
+
+
+ diff = @differ.diff_as_hash(actual, expected)
+ diff.should == expected_diff
+ end
+
+ it "should output diff message if the hash is complex (containing Array or Hash)" do
+ expected = { "foo" => "bar", "fizz" => [1, 2, 3] }
+ actual = { "foo" => "baz", "fizz" => [1, 2] }
+
+ # UGH - 1.8.7 seems to order hash keys differently than the others
+ if RUBY_VERSION =~ /^1.8.7/
+ expected_diff = <<'EOD'
+
+Expected the key "fizz" to be [1, 2, 3], but was [1, 2]
+Expected the key "foo" to be "bar", but was "baz"
+
+
+@@ -1,2 +1,2 @@
+-{"fizz"=>[1, 2, 3], "foo"=>"bar"}
++{"fizz"=>[1, 2], "foo"=>"baz"}
+EOD
+ else
+ expected_diff = <<'EOD'
+
+Expected the key "fizz" to be [1, 2, 3], but was [1, 2]
+Expected the key "foo" to be "bar", but was "baz"
+
+
+@@ -1,2 +1,2 @@
+-{"foo"=>"bar", "fizz"=>[1, 2, 3]}
++{"foo"=>"baz", "fizz"=>[1, 2]}
+EOD
+ end
+
+ diff = @differ.diff_as_hash(actual, expected)
+ 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=tortoise
++ species=giraffe
+ >
+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=tortoise
+ >
+--- 1,5 ----
+ <Animal
+ name=bob,
+! species=giraffe
+ >
+EOD
+
+ diff = @differ.diff_as_object(expected,actual)
+ diff.should == expected_diff
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/expectations/extensions/kernel_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/expectations/extensions/kernel_spec.rb
new file mode 100644
index 000000000..9a0ed3ce5
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/expectations/extensions/kernel_spec.rb
@@ -0,0 +1,45 @@
+require 'spec_helper'
+
+describe Object, "#should" do
+ before(:each) do
+ @target = "target"
+ @matcher = mock("matcher")
+ @matcher.stub!(:matches?).and_return(true)
+ @matcher.stub!(:failure_message_for_should)
+ end
+
+ it "accepts and interacts with a matcher" do
+ @matcher.should_receive(:matches?).with(@target).and_return(true)
+ @target.should @matcher
+ end
+
+ it "asks for a failure_message_for_should when matches? returns false" do
+ @matcher.should_receive(:matches?).with(@target).and_return(false)
+ @matcher.should_receive(:failure_message_for_should).and_return("the failure message")
+ lambda {
+ @target.should @matcher
+ }.should fail_with("the failure message")
+ end
+end
+
+describe Object, "#should_not" do
+ before(:each) do
+ @target = "target"
+ @matcher = mock("matcher")
+ end
+
+ it "accepts and interacts with a matcher" do
+ @matcher.should_receive(:matches?).with(@target).and_return(false)
+ @matcher.stub!(:failure_message_for_should_not)
+
+ @target.should_not @matcher
+ end
+
+ it "asks for a failure_message_for_should_not when matches? returns true" do
+ @matcher.should_receive(:matches?).with(@target).and_return(true)
+ @matcher.should_receive(:failure_message_for_should_not).and_return("the failure message for should not")
+ lambda {
+ @target.should_not @matcher
+ }.should fail_with("the failure message for should not")
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/expectations/fail_with_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/expectations/fail_with_spec.rb
new file mode 100644
index 000000000..639b7f950
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/expectations/fail_with_spec.rb
@@ -0,0 +1,96 @@
+require 'spec_helper'
+
+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
+
+ after(:each) do
+ Spec::Expectations.differ = @old_differ
+ end
+end
+
+describe Spec::Expectations, "#fail_with with Array" do
+ before(:each) do
+ Spec.stub!(:warn)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:warn)
+ lambda {
+ Spec::Expectations.fail_with ["message", "expected", "actual"]
+ }.should raise_error
+ 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\n\n Diff: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\n\n Diff:diff")
+ end
+
+ it "should call differ if expected/actual are both hashes" do
+ @differ.should_receive(:diff_as_hash).and_return("diff")
+ lambda {
+ Spec::Expectations.fail_with "the message", {:a => :b}, {:a => 'b'}
+ }.should fail_with("the message\n\n Diff: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)
+ @differ.should_not_receive(:diff_as_hash)
+ lambda {
+ Spec::Expectations.fail_with "the message", lambda {}, lambda {}
+ }.should fail_with("the message")
+ end
+
+ after(:each) do
+ Spec::Expectations.differ = @old_differ
+ end
+end
+
+describe Spec::Expectations, "#fail_with with a nil message" 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 nil
+ }.should raise_error(ArgumentError, /Failure message is nil\. Does your matcher define the appropriate failure_message_for_\* method to return a string\?/)
+ end
+
+ after(:each) do
+ Spec::Expectations.differ = @old_differ
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/expectations/handler_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/expectations/handler_spec.rb
new file mode 100644
index 000000000..e7d6a6ed1
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/expectations/handler_spec.rb
@@ -0,0 +1,206 @@
+require 'spec_helper'
+
+module ExampleExpectations
+
+ class ArbitraryMatcher
+ def initialize(*args, &block)
+ if args.last.is_a? Hash
+ @expected = args.last[:expected]
+ end
+ @expected = block.call if block
+ @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 PositiveExpectationHandler do
+ describe "#handle_matcher" do
+ it "asks the matcher if it matches" do
+ matcher = mock("matcher")
+ actual = Object.new
+ matcher.should_receive(:matches?).with(actual).and_return(true)
+ Spec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
+ end
+
+ it "returns the match value" do
+ matcher = mock("matcher")
+ actual = Object.new
+ matcher.should_receive(:matches?).with(actual).and_return(:this_value)
+ Spec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher).should == :this_value
+ end
+
+ it "calls failure_message_for_should if the matcher implements it" do
+ matcher = mock("matcher", :failure_message_for_should => "message", :matches? => false)
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("message")
+
+ Spec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
+ end
+
+ it "calls fail if matcher.diffable?" do
+ matcher = mock("matcher",
+ :diffable? => true,
+ :failure_message_for_should => "message",
+ :matches? => false,
+ :expected => [1],
+ :actual => 2
+ )
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("message", 1, 2)
+
+ Spec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
+ end
+
+ it "calls failure_message if the matcher does not implement failure_message_for_should" do
+ matcher = mock("matcher", :failure_message => "message", :matches? => false)
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("message")
+
+ Spec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher)
+
+ end
+
+ it "appends the :or message in the options hash passed to should" do
+ matcher = mock("matcher", :failure_message_for_should => "message", :matches? => false)
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("custom")
+
+ Spec::Expectations::PositiveExpectationHandler.handle_matcher(actual, matcher, "custom")
+ end
+ end
+ end
+
+ describe NegativeExpectationHandler do
+ describe "#handle_matcher" do
+ it "asks the matcher if it doesn't match when the matcher responds to #does_not_match?" do
+ matcher = mock("matcher", :does_not_match? => true, :negative_failure_message => nil)
+ actual = Object.new
+ matcher.should_receive(:does_not_match?).with(actual).and_return(true)
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
+ end
+
+ it "asks the matcher if it matches when the matcher doesn't respond to #does_not_match?" do
+ matcher = mock("matcher")
+ actual = Object.new
+ matcher.stub!(:negative_failure_message)
+ matcher.should_receive(:matches?).with(actual).and_return(false)
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
+ end
+
+ it "returns the match value" do
+ matcher = mock("matcher")
+ actual = Object.new
+ matcher.should_receive(:matches?).with(actual).and_return(false)
+ matcher.stub!(:negative_failure_message).and_return("ignore")
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher).should be_false
+ end
+
+
+ it "calls failure_message_for_should_not if the matcher implements it" do
+ matcher = mock("matcher", :failure_message_for_should_not => "message", :matches? => true)
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("message")
+
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
+
+ end
+
+ it "calls negative_failure_message if the matcher does not implement failure_message_for_should_not" do
+ matcher = mock("matcher", :negative_failure_message => "message", :matches? => true)
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("message")
+
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
+
+ end
+
+
+ it "calls fail if matcher.diffable?" do
+ matcher = mock("matcher",
+ :diffable? => true,
+ :failure_message_for_should_not => "message",
+ :matches? => true,
+ :expected => [1],
+ :actual => 2
+ )
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("message", 1, 2)
+
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher)
+ end
+
+ it "appends the :or message in the options hash passed to should" do
+ matcher = mock("matcher", :failure_message_for_should_not => "message", :matches? => true)
+ actual = Object.new
+
+ ::Spec::Expectations.should_receive(:fail_with).with("custom")
+
+ Spec::Expectations::NegativeExpectationHandler.handle_matcher(actual, matcher, "custom")
+ end
+
+ end
+ end
+
+ describe PositiveExpectationHandler 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
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/expectations/wrap_expectation_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/expectations/wrap_expectation_spec.rb
new file mode 100644
index 000000000..bcd0d53c9
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/expectations/wrap_expectation_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ describe "wrap_expectation" do
+ before { Spec.stub(:deprecate) }
+
+ def stub_matcher
+ @_stub_matcher ||= simple_matcher do
+ end
+ end
+
+ def failing_matcher
+ @_failing_matcher ||= simple_matcher do
+ 1.should == 2
+ end
+ end
+
+ it "should return true if there is no error" do
+ wrap_expectation stub_matcher do
+ end.should be_true
+ end
+
+ it "should return false if there is an error" do
+ wrap_expectation failing_matcher do
+ raise "error"
+ end.should be_false
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_that_fails.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_that_fails.rb
new file mode 100644
index 000000000..b2c484109
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/resources/spec_that_passes.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_that_passes.rb
new file mode 100644
index 000000000..4203af3a5
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/resources/spec_with_errors.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_with_errors.rb
new file mode 100644
index 000000000..a18ce72f7
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb
new file mode 100644
index 000000000..7dc344bdd
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb
@@ -0,0 +1,13 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'spec/autorun'
+require 'spec/test/unit'
+
+describe "options hash" do
+ describe "#options" do
+ it "should expose the options hash" do
+ group = describe("group", :this => 'hash') {}
+ group.options[:this].should == 'hash'
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_that_fails.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
new file mode 100644
index 000000000..0a977cb15
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/resources/test_case_that_passes.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
new file mode 100644
index 000000000..078a5f778
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_errors.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
new file mode 100644
index 000000000..dc5f52e47
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb
new file mode 100644
index 000000000..186db49d5
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb
@@ -0,0 +1,22 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'spec/autorun'
+require 'spec/test/unit'
+
+class TestCaseThatPasses < Test::Unit::TestCase
+ def test_should_allow_underscore
+ assert true
+ end
+
+ def testShouldAllowUppercaseLetter
+ assert true
+ end
+
+ def testshouldallowlowercaseletter
+ assert true
+ end
+
+ define_method :"test: should allow punctuation" do
+ assert true
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
new file mode 100644
index 000000000..5182b8203
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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 'spec/autorun'
+require 'spec/test/unit'
+
+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-1.3.1/spec/spec/interop/test/unit/spec_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/spec_spec.rb
new file mode 100644
index 000000000..d4d3d2c65
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/spec_spec.rb
@@ -0,0 +1,48 @@
+require 'spec/interop/test/unit/test_unit_spec_helper'
+
+describe "ExampleGroup with test/unit/interop" do
+ include TestUnitSpecHelper
+
+ describe "with passing examples" do
+ it "should output 0 failures" do
+ output = ruby("'#{resources}/spec_that_passes.rb'")
+ output.should include("1 example, 0 failures")
+ end
+
+ it "should return an exit code of 0" do
+ ruby("'#{resources}/spec_that_passes.rb'")
+ $?.should == 0
+ end
+ end
+
+ describe "with failing examples" do
+ it "should output 1 failure" do
+ output = ruby("'#{resources}/spec_that_fails.rb'")
+ output.should include("1 example, 1 failure")
+ end
+
+ it "should return an exit code of 256" do
+ ruby("'#{resources}/spec_that_fails.rb'")
+ $?.should == 256
+ end
+ end
+
+ describe "with example that raises an error" do
+ it "should output 1 failure" do
+ output = ruby("'#{resources}/spec_with_errors.rb'")
+ output.should include("1 example, 1 failure")
+ end
+
+ it "should return an exit code of 256" do
+ ruby("'#{resources}/spec_with_errors.rb'")
+ $?.should == 256
+ end
+ end
+
+ describe "options hash" do
+ it "should be exposed" do
+ output = ruby("'#{resources}/spec_with_options_hash.rb'")
+ output.should include("1 example, 0 failures")
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/test_unit_spec_helper.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/test_unit_spec_helper.rb
new file mode 100644
index 000000000..1f6c223eb
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/test_unit_spec_helper.rb
@@ -0,0 +1,18 @@
+require 'spec_helper'
+require 'ruby_forker'
+
+module TestUnitSpecHelper
+ include RubyForker
+
+ def resources
+ File.dirname(__FILE__) + "/resources"
+ end
+
+ 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-1.3.1/spec/spec/interop/test/unit/testcase_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testcase_spec.rb
new file mode 100644
index 000000000..1ab57a37a
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testcase_spec.rb
@@ -0,0 +1,50 @@
+require 'spec/interop/test/unit/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
+
+ it "should find all Test::Unit test methods" do
+ output = ruby("'#{@dir}/test_case_with_various_names.rb'")
+ output.should include("4 examples, 0 failures")
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testsuite_adapter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
new file mode 100644
index 000000000..57af21e8f
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
@@ -0,0 +1,9 @@
+require 'spec/interop/test/unit/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-1.3.1/spec/spec/matchers/be_close_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_close_spec.rb
new file mode 100644
index 000000000..cc0e5bd44
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_close_spec.rb
@@ -0,0 +1,50 @@
+require 'spec_helper'
+module Spec
+ module Matchers
+ describe "[actual.should] be_close(expected, delta)" do
+ it "matches when actual == expected" do
+ be_close(5.0, 0.5).matches?(5.0).should be_true
+ end
+ it "matches when actual < (expected + delta)" do
+ be_close(5.0, 0.5).matches?(5.49).should be_true
+ end
+ it "matches when actual > (expected - delta)" do
+ be_close(5.0, 0.5).matches?(4.51).should be_true
+ end
+ it "does not match when actual == (expected - delta)" do
+ be_close(5.0, 0.5).matches?(4.5).should be_false
+ end
+ it "does not match when actual < (expected - delta)" do
+ be_close(5.0, 0.5).matches?(4.49).should be_false
+ end
+ it "does not match when actual == (expected + delta)" do
+ be_close(5.0, 0.5).matches?(5.5).should be_false
+ end
+ it "does not match when actual > (expected + delta)" do
+ be_close(5.0, 0.5).matches?(5.51).should be_false
+ end
+ it "provides a failure message for should" do
+ #given
+ matcher = be_close(5.0, 0.5)
+ #when
+ matcher.matches?(5.51)
+ #then
+ matcher.failure_message_for_should.should == "expected 5.0 +/- (< 0.5), got 5.51"
+ end
+
+ it "provides a failure message for should tno" do
+ #given
+ matcher = be_close(5.0, 0.5)
+ #when
+ matcher.matches?(5.49)
+ #then
+ matcher.failure_message_for_should_not.should == "expected 5.0 +/- (< 0.5), got 5.49"
+ end
+ it "provides a description" do
+ matcher = be_close(5.0, 0.5)
+ matcher.matches?(5.1)
+ matcher.description.should == "be close to 5.0 (within +- 0.5)"
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_instance_of_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_instance_of_spec.rb
new file mode 100644
index 000000000..e6abd0b16
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_instance_of_spec.rb
@@ -0,0 +1,36 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ [:be_an_instance_of, :be_instance_of].each do |method|
+ describe "actual.should #{method}(expected)" do
+ it "passes if actual is instance of expected class" do
+ 5.should send(method, Fixnum)
+ end
+
+ it "fails if actual is instance of subclass of expected class" do
+ lambda { 5.should send(method, Numeric) }.should fail_with(%Q{expected 5 to be an instance of Numeric})
+ end
+
+ it "fails with failure message for should unless actual is instance of expected class" do
+ lambda { "foo".should send(method, Array) }.should fail_with(%Q{expected "foo" to be an instance of Array})
+ end
+
+ it "provides a description" do
+ matcher = be_an_instance_of(Fixnum)
+ matcher.matches?(Numeric)
+ matcher.description.should == "be an instance of Fixnum"
+ end
+ end
+
+ describe "actual.should_not #{method}(expected)" do
+
+ it "fails with failure message for should_not if actual is instance of expected class" do
+ lambda { "foo".should_not send(method, String) }.should fail_with(%Q{expected "foo" not to be an instance of String})
+ end
+
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_kind_of_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_kind_of_spec.rb
new file mode 100644
index 000000000..d3f05e806
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_kind_of_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ [:be_a_kind_of, :be_kind_of].each do |method|
+ describe "actual.should #{method}(expected)" do
+ it "passes if actual is instance of expected class" do
+ 5.should send(method, Fixnum)
+ end
+
+ it "passes if actual is instance of subclass of expected class" do
+ 5.should send(method, Numeric)
+ end
+
+ it "fails with failure message for should unless actual is kind of expected class" do
+ lambda { "foo".should send(method, Array) }.should fail_with(%Q{expected "foo" to be a kind of Array})
+ end
+
+ it "provides a description" do
+ matcher = be_a_kind_of(String)
+ matcher.matches?("this")
+ matcher.description.should == "be a kind of String"
+ end
+ end
+
+ describe "actual.should_not #{method}(expected)" do
+ it "fails with failure message for should_not if actual is kind of expected class" do
+ lambda { "foo".should_not send(method, String) }.should fail_with(%Q{expected "foo" not to be a kind of String})
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_spec.rb
new file mode 100644
index 000000000..e1d10b854
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/be_spec.rb
@@ -0,0 +1,460 @@
+require 'spec_helper'
+
+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, :exist? => 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 returns false for :predicate?" do
+ actual = stub("actual", :happy? => nil)
+ lambda {
+ actual.should be_happy
+ }.should fail_with("expected happy? to return true, got nil")
+ end
+
+ it "should fail when actual does not respond to :predicate?" do
+ lambda {
+ Object.new.should be_happy
+ }.should raise_error(NameError, /happy\?/)
+ end
+
+ it "should fail on error other than NameError" do
+ actual = stub("actual")
+ actual.should_receive(:foo?).and_raise("aaaah")
+ lambda {
+ actual.should be_foo
+ }.should raise_error(/aaaah/)
+ end
+
+ it "should fail on error other than NameError (with the present tense predicate)" do
+ actual = Object.new
+ actual.should_receive(:foos?).and_raise("aaaah")
+ lambda {
+ actual.should be_foo
+ }.should raise_error(/aaaah/)
+ 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 pass when actual returns nil for :sym?" do
+ actual = stub("actual", :happy? => nil)
+ 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_predicate(&block)" do
+ it "should pass when actual returns true for :predicate?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:happy?).and_yield
+ delegate.should_receive(:check_happy).and_return(true)
+ actual.should be_happy { delegate.check_happy }
+ end
+
+ it "should fail when actual returns false for :predicate?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:happy?).and_yield
+ delegate.should_receive(:check_happy).and_return(false)
+ lambda {
+ actual.should be_happy { delegate.check_happy }
+ }.should fail_with("expected happy? to return true, got false")
+ end
+
+ it "should fail when actual does not respond to :predicate?" do
+ delegate = mock("delegate", :check_happy => true)
+ lambda {
+ Object.new.should be_happy { delegate.check_happy }
+ }.should raise_error(NameError)
+ end
+end
+
+describe "should_not be_predicate(&block)" do
+ it "should pass when actual returns false for :predicate?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:happy?).and_yield
+ delegate.should_receive(:check_happy).and_return(false)
+ actual.should_not be_happy { delegate.check_happy }
+ end
+
+ it "should fail when actual returns true for :predicate?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:happy?).and_yield
+ delegate.should_receive(:check_happy).and_return(true)
+ lambda {
+ actual.should_not be_happy { delegate.check_happy }
+ }.should fail_with("expected happy? to return false, got true")
+ end
+
+ it "should fail when actual does not respond to :predicate?" do
+ delegate = mock("delegate", :check_happy => true)
+ lambda {
+ Object.new.should_not be_happy { delegate.check_happy }
+ }.should raise_error(NameError)
+ end
+end
+
+describe "should be_predicate(*args, &block)" do
+ it "should pass when actual returns true for :predicate?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:older_than?).with(3).and_yield(3)
+ delegate.should_receive(:check_older_than).with(3).and_return(true)
+ actual.should be_older_than(3) { |age| delegate.check_older_than(age) }
+ end
+
+ it "should fail when actual returns false for :predicate?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:older_than?).with(3).and_yield(3)
+ delegate.should_receive(:check_older_than).with(3).and_return(false)
+ lambda {
+ actual.should be_older_than(3) { |age| delegate.check_older_than(age) }
+ }.should fail_with("expected older_than?(3) to return true, got false")
+ end
+
+ it "should fail when actual does not respond to :predicate?" do
+ delegate = mock("delegate", :check_older_than => true)
+ lambda {
+ Object.new.should be_older_than(3) { |age| delegate.check_older_than(age) }
+ }.should raise_error(NameError)
+ end
+end
+
+describe "should_not be_predicate(*args, &block)" do
+ it "should pass when actual returns false for :predicate?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:older_than?).with(3).and_yield(3)
+ delegate.should_receive(:check_older_than).with(3).and_return(false)
+ actual.should_not be_older_than(3) { |age| delegate.check_older_than(age) }
+ end
+
+ it "should fail when actual returns true for :predicate?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:older_than?).with(3).and_yield(3)
+ delegate.should_receive(:check_older_than).with(3).and_return(true)
+ lambda {
+ actual.should_not be_older_than(3) { |age| delegate.check_older_than(age) }
+ }.should fail_with("expected older_than?(3) to return false, got true")
+ end
+
+ it "should fail when actual does not respond to :predicate?" do
+ delegate = mock("delegate", :check_older_than => true)
+ lambda {
+ Object.new.should_not be_older_than(3) { |age| delegate.check_older_than(age) }
+ }.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 pass when actual is 1" do
+ 1.should be_true
+ end
+
+ it "should fail when actual equal?(false)" do
+ lambda {
+ false.should be_true
+ }.should fail_with("expected false to be true")
+ end
+end
+
+describe "should be_false" do
+ it "should pass when actual equal?(false)" do
+ false.should be_false
+ end
+
+ it "should pass when actual equal?(nil)" do
+ nil.should be_false
+ end
+
+ it "should fail when actual equal?(true)" do
+ lambda {
+ true.should be_false
+ }.should fail_with("expected true to be false")
+ 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
+
+ it "should describe itself" do
+ be.<(4).description.should == "be < 4"
+ 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_not with operators" do
+ it "should coach user to stop using operators with should_not" do
+ lambda {
+ 5.should_not be < 6
+ }.should raise_error(/not only FAILED,\nit is a bit confusing./m)
+ end
+end
+
+describe "should be" do
+ it "should pass if actual is truthy" do
+ true.should be
+ 1.should be
+ end
+
+ it "should fail if actual is false" do
+ lambda {false.should be}.should fail_with("expected false to evaluate to true")
+ end
+
+ it "should fail if actual is nil" do
+ lambda {nil.should be}.should fail_with("expected nil to evaluate to true")
+ end
+
+ it "should describe itself" do
+ be.description.should == "be"
+ end
+end
+
+describe "should_not be" do
+ it "should pass if actual is falsy" do
+ false.should_not be
+ nil.should_not be
+ end
+
+ it "should fail on true" do
+ lambda {true.should_not be}.should fail_with("expected true to evaluate to false")
+ 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
+
+ it "should describe itself" do
+ be(5).description.should == "be 5"
+ end
+end
+
+describe "should_not be(value)" do
+ it "should pass if !actual.equal?(value)" do
+ 5.should_not be(6)
+ end
+ it "should fail if !actual.equal?(value)" do
+ lambda { 5.should_not be(5) }.should fail_with("expected not 5, got 5")
+ end
+end
+
+describe "'should be' with operator" do
+ it "should include 'be' in the description" do
+ (be > 6).description.should =~ /be > 6/
+ (be >= 6).description.should =~ /be >= 6/
+ (be <= 6).description.should =~ /be <= 6/
+ (be < 6).description.should =~ /be < 6/
+ end
+end
+
+
+describe "arbitrary predicate with DelegateClass" do
+ it "should access methods defined in the delegating class (LH[#48])" do
+ require 'delegate'
+ class ArrayDelegate < DelegateClass(Array)
+ def initialize(array)
+ @internal_array = array
+ super(@internal_array)
+ end
+
+ def large?
+ @internal_array.size >= 5
+ end
+ end
+
+ delegate = ArrayDelegate.new([1,2,3,4,5,6])
+ delegate.should be_large
+ end
+end
+
+describe "be_a, be_an" do
+ it "should pass when class matches" do
+ "foobar".should be_a(String)
+ [1,2,3].should be_an(Array)
+ end
+
+ it "should fail when class does not match" do
+ "foobar".should_not be_a(Hash)
+ [1,2,3].should_not be_an(Integer)
+ end
+end
+
+describe "be_an_instance_of" do
+ it "passes when direct class matches" do
+ 5.should be_an_instance_of(Fixnum)
+ end
+
+ it "fails when class is higher up hierarchy" do
+ 5.should_not be_an_instance_of(Numeric)
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/change_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/change_spec.rb
new file mode 100644
index 000000000..e70daf37d
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/change_spec.rb
@@ -0,0 +1,349 @@
+#Based on patch from Wilson Bilkovich
+
+require 'spec_helper'
+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
+ expect {@instance.some_value = 6}.to change(@instance, :some_value)
+ end
+
+ it "should fail when actual is not modified by the block" do
+ expect do
+ expect {}.to change(@instance, :some_value)
+ end.to fail_with("some_value should have changed, but is still 5")
+ end
+
+ it "provides a #description" do
+ change(@instance, :some_value).description.should == "change #some_value"
+ 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
+ expect { }.to_not change(@instance, :some_value)
+ end
+
+ it "should fail when actual is not modified by the block" do
+ expect do
+ expect {@instance.some_value = 6}.to_not change(@instance, :some_value)
+ end.to 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
+ expect {@instance.some_value = 6}.to change { @instance.some_value }
+ end
+
+ it "should fail when actual is not modified by the block" do
+ expect do
+ expect {}.to change{ @instance.some_value }
+ end.to fail_with("result should have changed, but is still 5")
+ end
+
+ it "should warn if passed a block using do/end instead of {}" do
+ expect do
+ expect {}.to change do; end
+ end.to raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
+ end
+
+ it "provides a #description" do
+ change { @instance.some_value }.description.should == "change #result"
+ 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
+ expect {}.to_not change{ @instance.some_value }
+ end
+
+ it "should fail when actual is not modified by the block" do
+ expect do
+ expect {@instance.some_value = 6}.to_not change { @instance.some_value }
+ end.to 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 instead of {}" do
+ expect do
+ expect {}.to_not change do; end
+ end.to 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
+ expect { @instance.some_value += 1 }.to change(@instance, :some_value).by(1)
+ end
+
+ it "should fail when the attribute is changed by unexpected amount" do
+ expect do
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by(1)
+ end.to 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
+ expect do
+ expect { @instance.some_value -= 1 }.to change(@instance, :some_value).by(1)
+ end.to 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
+ expect { @instance.some_value += 1 }.to change{@instance.some_value}.by(1)
+ end
+
+ it "should fail when the attribute is changed by unexpected amount" do
+ expect do
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by(1)
+ end.to 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
+ expect do
+ expect { @instance.some_value -= 1 }.to change{@instance.some_value}.by(1)
+ end.to 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
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_least(1)
+ end
+
+ it "should pass when attribute is changed by the expected amount" do
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_least(2)
+ end
+
+ it "should fail when the attribute is changed by less than the expected amount" do
+ expect do
+ expect { @instance.some_value += 1 }.to change(@instance, :some_value).by_at_least(2)
+ end.to 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
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_least(1)
+ end
+
+ it "should pass when attribute is changed by the expected amount" do
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_least(2)
+ end
+
+ it "should fail when the attribute is changed by less than the unexpected amount" do
+ expect do
+ expect { @instance.some_value += 1 }.to change{@instance.some_value}.by_at_least(2)
+ end.to 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
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(3)
+ end
+
+ it "should pass when attribute is changed by the expected amount" do
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(2)
+ end
+
+ it "should fail when the attribute is changed by greater than the expected amount" do
+ expect do
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(1)
+ end.to 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
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(3)
+ end
+
+ it "should pass when attribute is changed by the expected amount" do
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(2)
+ end
+
+ it "should fail when the attribute is changed by greater than the unexpected amount" do
+ expect do
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(1)
+ end.to 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
+ expect { @instance.some_value = "astring" }.to change(@instance, :some_value).from("string")
+ end
+
+ it "should fail when attribute is not == to expected value before executing block" do
+ expect do
+ expect { @instance.some_value = "knot" }.to change(@instance, :some_value).from("cat")
+ end.to 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
+ expect { @instance.some_value = "astring" }.to change{@instance.some_value}.from("string")
+ end
+
+ it "should fail when attribute is not == to expected value before executing block" do
+ expect do
+ expect { @instance.some_value = "knot" }.to change{@instance.some_value}.from("cat")
+ end.to 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
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).to("cat")
+ end
+
+ it "should fail when attribute is not == to expected value after executing block" do
+ expect do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("dog")
+ end.to 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
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.to("cat")
+ end
+
+ it "should fail when attribute is not == to expected value after executing block" do
+ expect do
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.from("string").to("dog")
+ end.to 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
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).to("cat").from("string")
+ end
+
+ it "should pass when #from comes before #to" do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("cat")
+ end
+
+ it "should show the correct messaging when #after and #to are different" do
+ expect do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("dog")
+ end.to fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
+ end
+
+ it "should show the correct messaging when #before and #from are different" do
+ expect do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("not_string").to("cat")
+ end.to fail_with("some_value should have initially been \"not_string\", but was \"string\"")
+ 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
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.to("cat").from("string")
+ end
+
+ it "should pass when #from comes before #to" do
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.from("string").to("cat")
+ end
+end
+
+describe Spec::Matchers::Change do
+ it "should work when the receiver has implemented #send" do
+ @instance = SomethingExpected.new
+ @instance.some_value = "string"
+ def @instance.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+
+ expect {
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value)
+ }.to_not raise_error
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/compatibility_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/compatibility_spec.rb
new file mode 100644
index 000000000..3987e590f
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/compatibility_spec.rb
@@ -0,0 +1,28 @@
+require 'spec_helper'
+
+Spec::Matchers.define :have_public_instance_method do |method|
+ match do |klass|
+ klass.public_instance_methods.any? {|m| [method, method.to_sym].include?(m)}
+ end
+end
+
+(Spec::Matchers.constants.sort).each do |c|
+ if (Class === (klass = Spec::Matchers.const_get(c)))
+ describe klass do
+ if klass.public_instance_methods.any? {|m| ['failure_message_for_should',:failure_message_for_should].include?(m)}
+ describe "called with should" do
+ subject { klass }
+ it { should have_public_instance_method('failure_message_for_should')}
+ it { should have_public_instance_method('failure_message')}
+ end
+ end
+ if klass.public_instance_methods.any? {|m| ['failure_message_for_should_not',:failure_message_for_should_not].include?(m)}
+ describe "called with should not" do
+ subject { klass }
+ it { should have_public_instance_method('failure_message_for_should_not')}
+ it { should have_public_instance_method('negative_failure_message')}
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/description_generation_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/description_generation_spec.rb
new file mode 100644
index 000000000..51b483c74
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/description_generation_spec.rb
@@ -0,0 +1,160 @@
+require 'spec_helper'
+
+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 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 "array.should =~ [1,2,3]" do
+ [1,2,3].should =~ [1,2,3]
+ Spec::Matchers.generated_description.should == "should contain exactly 1, 2 and 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
+
+describe "a Matcher with no description" do
+ def matcher
+ Class.new do
+ def matches?(ignore); true; end
+ def failure_message; ""; end
+ end.new
+ end
+
+ it "should provide a helpful message when used in a string-less example block" do
+ 5.should matcher
+ Spec::Matchers.generated_description.should =~ /When you call.*description method/m
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/dsl_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/dsl_spec.rb
new file mode 100644
index 000000000..9c280e5ae
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/dsl_spec.rb
@@ -0,0 +1,34 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ module DSL
+ describe "#create" do
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ mod = Module.new
+ mod.extend Spec::Matchers::DSL
+ mod.create(:foo)
+ end
+ end
+
+ describe "#define" do
+ it "creates a method that initializes a new matcher with the submitted name and expected arg" do
+ # FIXME - this expects new to be called, but we need something
+ # more robust - that expects new to be called with a specific
+ # block (lambda, proc, whatever)
+ mod = Module.new
+ mod.extend Spec::Matchers::DSL
+ mod.define(:foo)
+
+ obj = Object.new
+ obj.extend mod
+
+ Spec::Matchers::Matcher.should_receive(:new).with(:foo, 3)
+
+ obj.foo(3)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/eql_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/eql_spec.rb
new file mode 100644
index 000000000..5cdf541eb
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/eql_spec.rb
@@ -0,0 +1,33 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ describe "eql" do
+ it "should match when actual.eql?(expected)" do
+ 1.should eql(1)
+ end
+
+ it "should not match when !actual.eql?(expected)" do
+ 1.should_not eql(2)
+ end
+
+ it "should describe itself" do
+ matcher = eql(1)
+ matcher.matches?(1)
+ matcher.description.should == "eql 1"
+ end
+
+ it "should provide message, expected and actual on #failure_message" do
+ matcher = eql("1")
+ matcher.matches?(1)
+ matcher.failure_message_for_should.should == "\nexpected \"1\"\n got 1\n\n(compared using eql?)\n"
+ end
+
+ it "should provide message, expected and actual on #negative_failure_message" do
+ matcher = eql(1)
+ matcher.matches?(1)
+ matcher.failure_message_for_should_not.should == "\nexpected 1 not to equal 1\n\n(compared using eql?)\n"
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/equal_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/equal_spec.rb
new file mode 100644
index 000000000..cb2fc1e51
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/equal_spec.rb
@@ -0,0 +1,57 @@
+require 'spec_helper'
+module Spec
+ module Matchers
+ describe "equal" do
+
+ def inspect_object(o)
+ "#<#{o.class}:#{o.object_id}> => #{o.inspect}"
+ end
+
+ it "should match when actual.equal?(expected)" do
+ 1.should equal(1)
+ end
+
+ it "should not match when !actual.equal?(expected)" do
+ 1.should_not equal("1")
+ end
+
+ it "should describe itself" do
+ matcher = equal(1)
+ matcher.matches?(1)
+ matcher.description.should == "equal 1"
+ end
+
+ it "should provide message on #failure_message" do
+ expected, actual = "1", "1"
+ matcher = equal(expected)
+ matcher.matches?(actual)
+
+ matcher.failure_message_for_should.should == <<-MESSAGE
+
+expected #{inspect_object(expected)}
+ got #{inspect_object(actual)}
+
+Compared using equal?, which compares object identity,
+but expected and actual are not the same object. Use
+'actual.should == expected' if you don't care about
+object identity in this example.
+
+MESSAGE
+ end
+
+ it "should provide message on #negative_failure_message" do
+ expected = actual = "1"
+ matcher = equal(expected)
+ matcher.matches?(actual)
+ matcher.failure_message_for_should_not.should == <<-MESSAGE
+
+expected not #{inspect_object(expected)}
+ got #{inspect_object(actual)}
+
+Compared using equal?, which compares object identity.
+
+MESSAGE
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/exist_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/exist_spec.rb
new file mode 100644
index 000000000..f95c86ff8
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/exist_spec.rb
@@ -0,0 +1,65 @@
+require 'spec_helper'
+
+class Substance
+ def initialize exists, description
+ @exists = exists
+ @description = description
+ end
+ def exist?(arg=nil)
+ @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 "passes if target exists" do
+ @real.should exist
+ end
+
+ it "passes if target exists with args" do
+ @real.should exist('this arg')
+ end
+
+ it "fails if target does not exist" do
+ lambda { @imaginary.should exist }.should fail
+ end
+
+ it "describes itself" do
+ exist.description.should == "exist"
+ end
+
+ it "passes should_not exist 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-1.3.1/spec/spec/matchers/has_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/has_spec.rb
new file mode 100644
index 000000000..f77e70274
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/has_spec.rb
@@ -0,0 +1,190 @@
+require 'spec_helper'
+
+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 #has_sym?(*args) returns nil" do
+ klass = Class.new do
+ def has_foo?
+ end
+ end
+ lambda {
+ klass.new.should have_foo
+ }.should fail_with("expected #has_foo?(nil) 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
+
+ it "should reraise an exception thrown in #has_sym?(*args)" do
+ o = Object.new
+ def o.has_sym?(*args)
+ raise "Funky exception"
+ end
+ lambda { o.should have_sym(:foo) }.should raise_error("Funky exception")
+ 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 pass if #has_sym?(*args) returns nil" do
+ klass = Class.new do
+ def has_foo?
+ end
+ end
+ klass.new.should_not have_foo
+ 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
+
+ it "should reraise an exception thrown in #has_sym?(*args)" do
+ o = Object.new
+ def o.has_sym?(*args)
+ raise "Funky exception"
+ end
+ lambda { o.should_not have_sym(:foo) }.should raise_error("Funky exception")
+ end
+end
+
+describe "should have_sym(&block)" do
+ it "should pass when actual returns true for :has_sym?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).and_yield
+ delegate.should_receive(:check_has_foo).and_return(true)
+ actual.should have_foo { delegate.check_has_foo }
+ end
+
+ it "should fail when actual returns false for :has_sym?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).and_yield
+ delegate.should_receive(:check_has_foo).and_return(false)
+ lambda {
+ actual.should have_foo { delegate.check_has_foo }
+ }.should fail_with("expected #has_foo?(nil) to return true, got false")
+ end
+
+ it "should fail when actual does not respond to :has_sym?" do
+ delegate = mock("delegate", :check_has_foo => true)
+ lambda {
+ Object.new.should have_foo { delegate.check_has_foo }
+ }.should raise_error(NameError)
+ end
+end
+
+describe "should_not have_sym(&block)" do
+ it "should pass when actual returns false for :has_sym?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).and_yield
+ delegate.should_receive(:check_has_foo).and_return(false)
+ actual.should_not have_foo { delegate.check_has_foo }
+ end
+
+ it "should fail when actual returns true for :has_sym?(&block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).and_yield
+ delegate.should_receive(:check_has_foo).and_return(true)
+ lambda {
+ actual.should_not have_foo { delegate.check_has_foo }
+ }.should fail_with("expected #has_foo?(nil) to return false, got true")
+ end
+
+ it "should fail when actual does not respond to :has_sym?" do
+ delegate = mock("delegate", :check_has_foo => true)
+ lambda {
+ Object.new.should_not have_foo { delegate.check_has_foo }
+ }.should raise_error(NameError)
+ end
+end
+
+describe "should have_sym(*args, &block)" do
+ it "should pass when actual returns true for :has_sym?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).with(:a).and_yield(:a)
+ delegate.should_receive(:check_has_foo).with(:a).and_return(true)
+ actual.should have_foo(:a) { |foo| delegate.check_has_foo(foo) }
+ end
+
+ it "should fail when actual returns false for :has_sym?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).with(:a).and_yield(:a)
+ delegate.should_receive(:check_has_foo).with(:a).and_return(false)
+ lambda {
+ actual.should have_foo(:a) { |foo| delegate.check_has_foo(foo) }
+ }.should fail_with("expected #has_foo?(:a) to return true, got false")
+ end
+
+ it "should fail when actual does not respond to :has_sym?" do
+ delegate = mock("delegate", :check_has_foo => true)
+ lambda {
+ Object.new.should have_foo(:a) { |foo| delegate.check_has_foo(foo) }
+ }.should raise_error(NameError)
+ end
+end
+
+describe "should_not have_sym(*args, &block)" do
+ it "should pass when actual returns false for :has_sym?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).with(:a).and_yield(:a)
+ delegate.should_receive(:check_has_foo).with(:a).and_return(false)
+ actual.should_not have_foo(:a) { |foo| delegate.check_has_foo(foo) }
+ end
+
+ it "should fail when actual returns true for :has_sym?(*args, &block)" do
+ actual = mock("actual")
+ delegate = mock("delegate")
+ actual.should_receive(:has_foo?).with(:a).and_yield(:a)
+ delegate.should_receive(:check_has_foo).with(:a).and_return(true)
+ lambda {
+ actual.should_not have_foo(:a) { |foo| delegate.check_has_foo(foo) }
+ }.should fail_with("expected #has_foo?(:a) to return false, got true")
+ end
+
+ it "should fail when actual does not respond to :has_sym?" do
+ delegate = mock("delegate", :check_has_foo => true)
+ lambda {
+ Object.new.should_not have_foo(:a) { |foo| delegate.check_has_foo(foo) }
+ }.should raise_error(NameError)
+ end
+end
+
+
+describe "has" do
+ it "should work when the target implements #send" do
+ o = {:a => "A"}
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ lambda {
+ o.should have_key(:a)
+ }.should_not raise_error
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/have_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/have_spec.rb
new file mode 100644
index 000000000..e514acabe
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/have_spec.rb
@@ -0,0 +1,381 @@
+require 'spec_helper'
+
+describe "have matcher" do
+
+ def create_collection_owner_with(n)
+ owner = Spec::Expectations::Helper::CollectionOwner.new
+ (1..n).each do |number|
+ owner.add_to_collection_with_length_method(number)
+ owner.add_to_collection_with_size_method(number)
+ end
+ owner
+ end
+
+ before(:each) do
+ if defined?(::ActiveSupport::Inflector)
+ @active_support_was_defined = true
+ else
+ @active_support_was_defined = false
+ module ::ActiveSupport
+ class Inflector
+ def self.pluralize(string)
+ string.to_s + 's'
+ end
+ end
+ end
+ end
+ end
+
+ describe "should have(n).items" do
+ 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 ActiveSupport::Inflector is defined' do
+ it 'should pluralize the collection name' do
+ owner = create_collection_owner_with(1)
+ owner.should have(1).item
+ end
+
+ after(:each) do
+ unless @active_support_was_defined
+ Object.__send__ :remove_const, :ActiveSupport
+ end
+ end
+ end
+
+ describe 'should have(1).item when Inflector is defined' do
+ before(:each) do
+ if defined?(Inflector)
+ @inflector_was_defined = true
+ else
+ @inflector_was_defined = false
+ 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
+
+ after(:each) do
+ unless @inflector_was_defined
+ Object.__send__ :remove_const, :Inflector
+ end
+ 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
+ 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
+ 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
+ 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.failure_message_for_should_not.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.failure_message_for_should_not.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
+ 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.failure_message_for_should_not.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.failure_message_for_should_not.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
+
+ describe Spec::Matchers::Have, "for a collection owner that implements #send" do
+ before(:each) do
+ @collection = Object.new
+ def @collection.floozles; [1,2] end
+ def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ end
+
+ it "should work in the straightforward case" do
+ lambda {
+ @collection.should have(2).floozles
+ }.should_not raise_error
+ end
+
+ it "should work when doing automatic pluralization" do
+ lambda {
+ @collection.should have_at_least(1).floozle
+ }.should_not raise_error
+ end
+
+ it "should blow up when the owner doesn't respond to that method" do
+ lambda {
+ @collection.should have(99).problems
+ }.should raise_error(NoMethodError, /problems/)
+ end
+ end
+
+ module Spec
+ module Matchers
+ describe Have do
+ treats_method_missing_as_private :noop => false
+
+ describe "respond_to?" do
+ before :each do
+ @have = Have.new(:foo)
+ @a_method_which_have_defines = Have.instance_methods.first
+ @a_method_which_object_defines = Object.instance_methods.first
+ end
+
+ it "should be true for a method which Have defines" do
+ @have.should respond_to(@a_method_which_have_defines)
+ end
+
+ it "should be true for a method that it's superclass (Object) defines" do
+ @have.should respond_to(@a_method_which_object_defines)
+ end
+
+ it "should be false for a method which neither Object nor nor Have defines" do
+ @have.should_not respond_to(:foo_bar_baz)
+ end
+
+ it "should be false if the owner doesn't respond to the method" do
+ have = Have.new(99)
+ have.should_not respond_to(:problems)
+ end
+
+ it "should be true if the owner responds to the method" do
+ have = Have.new(:a_symbol)
+ have.should respond_to(:to_sym)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/include_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/include_spec.rb
new file mode 100644
index 000000000..2b959b589
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/include_spec.rb
@@ -0,0 +1,88 @@
+require 'spec_helper'
+
+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 pass if target is a Hash and has the expected as a key' do
+ {:key => 'value'}.should include(:key)
+ 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\"")
+ lambda {
+ {:key => 'value'}.should include(:other)
+ }.should fail_with(%Q|expected {:key=>"value"} to include :other|)
+ 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 pass if target is a Hash including all items as keys' do
+ {:key => 'value', :other => 'value'}.should include(:key, :other)
+ 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
+
+ it 'should pass if target is a Hash missing any item as a key' do
+ lambda {
+ {:key => 'value'}.should include(:key, :other)
+ }.should fail_with(%Q|expected {:key=>"value"} to include :key and :other|)
+ 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 pass if target is a Hash and does not have the expected as a key' do
+ {:other => 'value'}.should_not include(:key)
+ 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\"")
+ lambda {
+ {:key => 'value'}.should_not include(:key)
+ }.should fail_with(%Q|expected {:key=>"value"} not to include :key|)
+ end
+end
+
+describe "should include(:key => value)" do
+ it "should pass if target is a Hash and includes the key/value pair" do
+ {:key => 'value'}.should include(:key => 'value')
+ end
+ it "should pass if target is a Hash and includes the key/value pair among others" do
+ {:key => 'value', :other => 'different'}.should include(:key => 'value')
+ end
+ it "should fail if target is a Hash and has a different value for key" do
+ lambda {
+ {:key => 'different'}.should include(:key => 'value')
+ }.should fail_with(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
+ end
+ it "should fail if target is a Hash and has a different key" do
+ lambda {
+ {:other => 'value'}.should include(:key => 'value')
+ }.should fail_with(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/match_array_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/match_array_spec.rb
new file mode 100644
index 000000000..313acf46e
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/match_array_spec.rb
@@ -0,0 +1,115 @@
+require 'spec_helper'
+
+class UnsortableObject
+ def initialize(id)
+ @id = id
+ end
+
+ def inspect
+ @id.to_s
+ end
+
+ def ==(other)
+ false
+ end
+end
+
+describe "array.should =~ other_array" do
+ it "should pass if target contains all items" do
+ [1,2,3].should =~ [1,2,3]
+ end
+
+ it "should pass if target contains all items out of order" do
+ [1,3,2].should =~ [1,2,3]
+ end
+
+ it "should fail if target includes extra items" do
+ lambda {
+ [1,2,3,4].should =~ [1,2,3]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [1, 2, 3]
+actual collection contained: [1, 2, 3, 4]
+the extra elements were: [4]
+MESSAGE
+ end
+
+ it "should fail if target is missing items" do
+ lambda {
+ [1,2].should =~ [1,2,3]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [1, 2, 3]
+actual collection contained: [1, 2]
+the missing elements were: [3]
+MESSAGE
+ end
+
+ it "should fail if target is missing items and has extra items" do
+
+ lambda {
+ [1,2,4].should =~ [1,2,3]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [1, 2, 3]
+actual collection contained: [1, 2, 4]
+the missing elements were: [3]
+the extra elements were: [4]
+MESSAGE
+ end
+
+ it "should sort items in the error message if they all respond to <=>" do
+ lambda {
+ [6,2,1,5].should =~ [4,1,2,3]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [1, 2, 3, 4]
+actual collection contained: [1, 2, 5, 6]
+the missing elements were: [3, 4]
+the extra elements were: [5, 6]
+MESSAGE
+ end
+
+ it "should not sort items in the error message if they don't all respond to <=>" do
+ with_ruby 1.8 do
+ lambda {
+ [UnsortableObject.new(2), UnsortableObject.new(1)].should =~ [UnsortableObject.new(4), UnsortableObject.new(3)]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [4, 3]
+actual collection contained: [2, 1]
+the missing elements were: [4, 3]
+the extra elements were: [2, 1]
+MESSAGE
+ end
+ end
+
+ it "should accurately report extra elements when there are duplicates" do
+ lambda {
+ [1,1,1,5].should =~ [1,5]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [1, 5]
+actual collection contained: [1, 1, 1, 5]
+the extra elements were: [1, 1]
+MESSAGE
+ end
+
+ it "should accurately report missing elements when there are duplicates" do
+ lambda {
+ [1,5].should =~ [1,1,5]
+ }.should fail_with(<<-MESSAGE)
+expected collection contained: [1, 1, 5]
+actual collection contained: [1, 5]
+the missing elements were: [1]
+MESSAGE
+ end
+
+ it "should work with subclasses of Array" do
+ class SuperArray < Array; end
+ SuperArray.new([1,2,3]).should =~ SuperArray.new([3,2,1])
+ end
+
+end
+
+describe "should_not =~ [:with, :multiple, :args]" do
+ it "should not be supported" do
+ lambda {
+ [1,2,3].should_not =~ [1,2,3]
+ }.should fail_with(/Matcher does not support should_not/)
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/match_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/match_spec.rb
new file mode 100644
index 000000000..e5dc800a6
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/match_spec.rb
@@ -0,0 +1,57 @@
+require 'spec_helper'
+
+describe "should match(expected)" do
+ it "should pass when target (String) matches expected (Regexp)" do
+ "string".should match(/tri/)
+ end
+
+ it "should pass when target (String) matches expected (String)" 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 fail when target (String) does not match expected (String)" 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_for_should.should == "expected \"string\" to match /rings/"
+ 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 pass when target (String) matches does not match (String)" 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 fail when target (String) matches expected (String)" 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.failure_message_for_should_not.should == "expected \"string\" not to match /tri/"
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/matcher_spec.rb
new file mode 100644
index 000000000..b933cfc90
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/matcher_spec.rb
@@ -0,0 +1,289 @@
+require 'spec_helper'
+
+class UnexpectedError < StandardError; end
+
+module Spec
+ module Matchers
+ describe Matcher do
+ context "without overrides" do
+ before(:each) do
+ @matcher = Spec::Matchers::Matcher.new(:be_a_multiple_of, 3) do |multiple|
+ match do |actual|
+ actual % multiple == 0
+ end
+ end
+ end
+
+ it "provides a default description" do
+ @matcher.description.should == "be a multiple of 3"
+ end
+
+ it "provides a default failure message for #should" do
+ @matcher.matches?(8)
+ @matcher.failure_message_for_should.should == "expected 8 to be a multiple of 3"
+ end
+
+ it "provides a default failure message for #should_not" do
+ @matcher.matches?(9)
+ @matcher.failure_message_for_should_not.should == "expected 9 not to be a multiple of 3"
+ end
+ end
+
+ it "is not diffable by default" do
+ matcher = Spec::Matchers::Matcher.new(:name) {}
+ matcher.should_not be_diffable
+ end
+
+ it "is diffable when told to be" do
+ matcher = Spec::Matchers::Matcher.new(:name) { diffable }
+ matcher.should be_diffable
+ end
+
+ it "provides expected" do
+ matcher = Spec::Matchers::Matcher.new(:name, 'expected string') {}
+ matcher.expected.should == ['expected string']
+ end
+
+ it "provides actual" do
+ matcher = Spec::Matchers::Matcher.new(:name, 'expected string') do
+ match {|actual|}
+ end
+
+ matcher.matches?('actual string')
+
+ matcher.actual.should == 'actual string'
+ end
+
+ context "wrapping another expectation (should == ...)" do
+ it "returns true if the wrapped expectation passes" do
+ matcher = Spec::Matchers::Matcher.new(:name, 'value') do |expected|
+ match do |actual|
+ actual.should == expected
+ end
+ end
+ matcher.matches?('value').should be_true
+ end
+
+ it "returns false if the wrapped expectation fails" do
+ matcher = Spec::Matchers::Matcher.new(:name, 'value') do |expected|
+ match do |actual|
+ actual.should == expected
+ end
+ end
+ matcher.matches?('other value').should be_false
+ end
+ end
+
+ context "with overrides" do
+ before(:each) do
+ @matcher = Spec::Matchers::Matcher.new(:be_boolean, true) do |boolean|
+ match do |actual|
+ actual
+ end
+ description do
+ "be the boolean #{boolean}"
+ end
+ failure_message_for_should do |actual|
+ "expected #{actual} to be the boolean #{boolean}"
+ end
+ failure_message_for_should_not do |actual|
+ "expected #{actual} not to be the boolean #{boolean}"
+ end
+ end
+ end
+
+ it "does not hide result of match block when true" do
+ @matcher.matches?(true).should be_true
+ end
+
+ it "does not hide result of match block when false" do
+ @matcher.matches?(false).should be_false
+ end
+
+ it "overrides the description" do
+ @matcher.description.should == "be the boolean true"
+ end
+
+ it "overrides the failure message for #should" do
+ @matcher.matches?(false)
+ @matcher.failure_message_for_should.should == "expected false to be the boolean true"
+ end
+
+ it "overrides the failure message for #should_not" do
+ @matcher.matches?(true)
+ @matcher.failure_message_for_should_not.should == "expected true not to be the boolean true"
+ end
+ end
+
+ context "#new" do
+ it "passes matches? arg to match block" do
+ matcher = Spec::Matchers::Matcher.new(:ignore) do
+ match do |actual|
+ actual == 5
+ end
+ end
+ matcher.matches?(5).should be_true
+ end
+
+ it "exposes arg submitted through #new to matcher block" do
+ matcher = Spec::Matchers::Matcher.new(:ignore, 4) do |expected|
+ match do |actual|
+ actual > expected
+ end
+ end
+ matcher.matches?(5).should be_true
+ end
+ end
+
+ context "with no args" do
+ before(:each) do
+ @matcher = Spec::Matchers::Matcher.new(:matcher_name) do
+ match do |actual|
+ actual == 5
+ end
+ end
+ end
+
+ it "matches" do
+ @matcher.matches?(5).should be_true
+ end
+
+ it "describes" do
+ @matcher.description.should == "matcher name"
+ end
+ end
+
+ context "with 1 arg" do
+ before(:each) do
+ @matcher = Spec::Matchers::Matcher.new(:matcher_name, 1) do |expected|
+ match do |actual|
+ actual == 5 && expected == 1
+ end
+ end
+ end
+
+ it "matches" do
+ @matcher.matches?(5).should be_true
+ end
+
+ it "describes" do
+ @matcher.description.should == "matcher name 1"
+ end
+ end
+
+ context "with multiple args" do
+ before(:each) do
+ @matcher = Spec::Matchers::Matcher.new(:matcher_name, 1, 2, 3, 4) do |a,b,c,d|
+ match do |sum|
+ a + b + c + d == sum
+ end
+ end
+ end
+
+ it "matches" do
+ @matcher.matches?(10).should be_true
+ end
+
+ it "describes" do
+ @matcher.description.should == "matcher name 1, 2, 3, and 4"
+ end
+ end
+
+ it "supports helper methods" do
+ matcher = Spec::Matchers::Matcher.new(:be_similar_to, [1,2,3]) do |sample|
+ match do |actual|
+ similar?(sample, actual)
+ end
+
+ def similar?(a, b)
+ a.sort == b.sort
+ end
+ end
+
+ matcher.matches?([2,3,1]).should be_true
+ end
+
+ it "supports fluent interface" do
+ matcher = Spec::Matchers::Matcher.new(:first_word) do
+ def second_word
+ self
+ end
+ end
+
+ matcher.second_word.should == matcher
+ end
+
+ it "treats method missing normally for undeclared methods" do
+ matcher = Spec::Matchers::Matcher.new(:ignore) { }
+ expect { matcher.non_existent_method }.to raise_error(NoMethodError)
+ end
+
+ it "has access to other matchers" do
+ matcher = Spec::Matchers::Matcher.new(:ignore, 3) do |expected|
+ match do |actual|
+ extend Spec::Matchers
+ actual.should eql(5 + expected)
+ end
+ end
+
+ matcher.matches?(8).should be_true
+ end
+
+ describe "#match_unless_raises" do
+ context "with a passing assertion" do
+ let(:mod) do
+ Module.new do
+ def assert_equal(a,b)
+ a == b ? nil : (raise UnexpectedError.new("#{a} does not equal #{b}"))
+ end
+ end
+ end
+ let(:matcher) do
+ m = mod
+ Spec::Matchers::Matcher.new :equal, 4 do |expected|
+ extend m
+ match_unless_raises UnexpectedError do
+ assert_equal expected, actual
+ end
+ end
+ end
+ it "passes as you would expect" do
+ matcher.matches?(4).should be_true
+ end
+ it "fails as you would expect" do
+ matcher.matches?(5).should be_false
+ end
+ end
+
+ context "with an unexpected error" do
+ let(:matcher) do
+ Spec::Matchers::Matcher.new :foo, :bar do |expected|
+ match_unless_raises SyntaxError do |actual|
+ raise "unexpected exception"
+ end
+ end
+ end
+
+ it "raises the error" do
+ expect do
+ matcher.matches?(:bar)
+ end.to raise_error("unexpected exception")
+ end
+ end
+
+ end
+
+ it "can define chainable methods" do
+ matcher = Spec::Matchers::Matcher.new(:name) do
+ chain(:expecting) do |expected_value|
+ @expected_value = expected_value
+ end
+ match { |actual| actual == @expected_value }
+ end
+
+ matcher.expecting('value').matches?('value').should be_true
+ matcher.expecting('value').matches?('other value').should be_false
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/matchers_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/matchers_spec.rb
new file mode 100644
index 000000000..51f5efc44
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/matchers_spec.rb
@@ -0,0 +1,2 @@
+require 'spec_helper'
+
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/operator_matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/operator_matcher_spec.rb
new file mode 100644
index 000000000..86e637e0f
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/operator_matcher_spec.rb
@@ -0,0 +1,191 @@
+require 'spec_helper'
+
+require 'spec/runner/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 return true on success" do
+ subject = "apple"
+ (subject.should == "apple").should be_true
+ 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 return true on success" do
+ subject = "apple"
+ (subject.should_not == "orange").should be_false
+ 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
+
+describe Spec::Matchers::PositiveOperatorMatcher do
+
+ it "should work when the target has implemented #send" do
+ o = Object.new
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ lambda {
+ o.should == o
+ }.should_not raise_error
+ end
+
+end
+
+describe Spec::Matchers::NegativeOperatorMatcher do
+
+ it "should work when the target has implemented #send" do
+ o = Object.new
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ lambda {
+ o.should_not == :foo
+ }.should_not raise_error
+ end
+
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/raise_exception_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/raise_exception_spec.rb
new file mode 100644
index 000000000..26888926e
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/raise_exception_spec.rb
@@ -0,0 +1,345 @@
+require 'spec_helper'
+
+describe "should raise_exception" do
+ it "should pass if anything is raised" do
+ lambda {raise}.should raise_exception
+ end
+
+ it "should fail if nothing is raised" do
+ lambda {
+ lambda {}.should raise_exception
+ }.should fail_with("expected Exception but nothing was raised")
+ end
+end
+
+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 raise_exception {|e| ... }" do
+ it "passes if there is an exception" do
+ ran = false
+ lambda { non_existent_method }.should raise_exception {|e|
+ ran = true
+ }
+ ran.should be_true
+ end
+
+ it "passes the exception to the block" do
+ exception = nil
+ lambda { non_existent_method }.should raise_exception {|e|
+ exception = e
+ }
+ exception.should be_kind_of(NameError)
+ end
+end
+
+describe "should_not raise_exception" do
+ it "should pass if nothing is raised" do
+ lambda {}.should_not raise_exception
+ end
+
+ it "should fail if anything is raised" do
+ lambda {
+ lambda {raise}.should_not raise_exception
+ }.should fail_with("expected no Exception, got RuntimeError")
+ end
+end
+
+describe "should raise_exception(message)" do
+ it "should pass if RuntimeError is raised with the right message" do
+ lambda {raise 'blah'}.should raise_exception('blah')
+ end
+ it "should pass if RuntimeError is raised with a matching message" do
+ lambda {raise 'blah'}.should raise_exception(/blah/)
+ end
+ it "should pass if any other exception is raised with the right message" do
+ lambda {raise NameError.new('blah')}.should raise_exception('blah')
+ end
+ it "should fail if RuntimeError exception is raised with the wrong message" do
+ lambda do
+ lambda {raise 'blarg'}.should raise_exception('blah')
+ end.should fail_with("expected Exception with \"blah\", got #<RuntimeError: blarg>")
+ end
+ it "should fail if any other exception is raised with the wrong message" do
+ lambda do
+ lambda {raise NameError.new('blarg')}.should raise_exception('blah')
+ end.should fail_with("expected Exception with \"blah\", got #<NameError: blarg>")
+ end
+end
+
+describe "should_not raise_exception(message)" do
+ it "should pass if RuntimeError exception is raised with the different message" do
+ lambda {raise 'blarg'}.should_not raise_exception('blah')
+ end
+ it "should pass if any other exception is raised with the wrong message" do
+ lambda {raise NameError.new('blarg')}.should_not raise_exception('blah')
+ end
+ it "should fail if RuntimeError is raised with message" do
+ lambda do
+ lambda {raise 'blah'}.should_not raise_exception('blah')
+ end.should fail_with(%Q|expected no Exception with "blah", got #<RuntimeError: blah>|)
+ end
+ it "should fail if any other exception is raised with message" do
+ lambda do
+ lambda {raise NameError.new('blah')}.should_not raise_exception('blah')
+ end.should fail_with(%Q|expected no Exception with "blah", got #<NameError: blah>|)
+ end
+end
+
+describe "should raise_exception(NamedError)" do
+ it "should pass if named exception is raised" do
+ lambda { non_existent_method }.should raise_exception(NameError)
+ end
+
+ it "should fail if nothing is raised" do
+ lambda {
+ lambda { }.should raise_exception(NameError)
+ }.should fail_with("expected NameError but nothing was raised")
+ end
+
+ it "should fail if another exception is raised (NameError)" do
+ lambda {
+ lambda { raise }.should raise_exception(NameError)
+ }.should fail_with("expected NameError, got RuntimeError")
+ end
+
+ it "should fail if another exception is raised (NameError)" do
+ lambda {
+ lambda { load "non/existent/file" }.should raise_exception(NameError)
+ }.should fail_with(/expected NameError, got #<LoadError/)
+ end
+end
+
+describe "should_not raise_exception(NamedError)" do
+ it "should pass if nothing is raised" do
+ lambda { }.should_not raise_exception(NameError)
+ end
+
+ it "should pass if another exception is raised" do
+ lambda { raise }.should_not raise_exception(NameError)
+ end
+
+ it "should fail if named exception is raised" do
+ lambda {
+ lambda { 1 + 'b' }.should_not raise_exception(TypeError)
+ }.should fail_with(/expected no TypeError, got #<TypeError: String can't be/)
+ end
+end
+
+describe "should raise_exception(NamedError, exception_message) with String" do
+ it "should pass if named exception is raised with same message" do
+ lambda { raise "example message" }.should raise_exception(RuntimeError, "example message")
+ end
+
+ it "should fail if nothing is raised" do
+ lambda {
+ lambda {}.should raise_exception(RuntimeError, "example message")
+ }.should fail_with("expected RuntimeError with \"example message\" but nothing was raised")
+ end
+
+ it "should fail if incorrect exception is raised" do
+ lambda {
+ lambda { raise }.should raise_exception(NameError, "example message")
+ }.should fail_with("expected NameError with \"example message\", got RuntimeError")
+ end
+
+ it "should fail if correct exception is raised with incorrect message" do
+ lambda {
+ lambda { raise RuntimeError.new("not the example message") }.should raise_exception(RuntimeError, "example message")
+ }.should fail_with(/expected RuntimeError with \"example message\", got #<RuntimeError: not the example message/)
+ end
+end
+
+describe "should raise_exception(NamedError, exception_message) { |err| ... }" do
+ it "should yield exception if named exception is raised with same message" do
+ ran = false
+
+ lambda {
+ raise "example message"
+ }.should raise_exception(RuntimeError, "example message") { |err|
+ ran = true
+ err.class.should == RuntimeError
+ err.message.should == "example message"
+ }
+
+ ran.should == true
+ end
+
+ it "yielded block should be able to fail on it's own right" do
+ ran, passed = false, false
+
+ lambda {
+ lambda {
+ raise "example message"
+ }.should raise_exception(RuntimeError, "example message") { |err|
+ ran = true
+ 5.should == 4
+ passed = true
+ }
+ }.should fail_with(/expected: 4/m)
+
+ ran.should == true
+ passed.should == false
+ end
+
+ it "should NOT yield exception if no exception was thrown" do
+ ran = false
+
+ lambda {
+ lambda {}.should raise_exception(RuntimeError, "example message") { |err|
+ ran = true
+ }
+ }.should fail_with("expected RuntimeError with \"example message\" but nothing was raised")
+
+ ran.should == false
+ end
+
+ it "should not yield exception if exception class is not matched" do
+ ran = false
+
+ lambda {
+ lambda {
+ raise "example message"
+ }.should raise_exception(SyntaxError, "example message") { |err|
+ ran = true
+ }
+ }.should fail_with("expected SyntaxError with \"example message\", got #<RuntimeError: example message>")
+
+ ran.should == false
+ end
+
+ it "should NOT yield exception if exception message is not matched" do
+ ran = false
+
+ lambda {
+ lambda {
+ raise "example message"
+ }.should raise_exception(RuntimeError, "different message") { |err|
+ ran = true
+ }
+ }.should fail_with("expected RuntimeError with \"different message\", got #<RuntimeError: example message>")
+
+ ran.should == false
+ end
+end
+
+describe "should_not raise_exception(NamedError, exception_message) { |err| ... }" do
+ it "should pass if nothing is raised" do
+ ran = false
+
+ lambda {}.should_not raise_exception(RuntimeError, "example message") { |err|
+ ran = true
+ }
+
+ ran.should == false
+ end
+
+ it "should pass if a different exception is raised" do
+ ran = false
+
+ lambda { raise }.should_not raise_exception(NameError, "example message") { |err|
+ ran = true
+ }
+
+ ran.should == false
+ end
+
+ it "should pass if same exception is raised with different message" do
+ ran = false
+
+ lambda {
+ raise RuntimeError.new("not the example message")
+ }.should_not raise_exception(RuntimeError, "example message") { |err|
+ ran = true
+ }
+
+ ran.should == false
+ end
+
+ it "should fail if named exception is raised with same message" do
+ ran = false
+
+ lambda {
+ lambda {
+ raise "example message"
+ }.should_not raise_exception(RuntimeError, "example message") { |err|
+ ran = true
+ }
+ }.should fail_with("expected no RuntimeError with \"example message\", got #<RuntimeError: example message>")
+
+ ran.should == false
+ end
+end
+
+describe "should_not raise_exception(NamedError, exception_message) with String" do
+ it "should pass if nothing is raised" do
+ lambda {}.should_not raise_exception(RuntimeError, "example message")
+ end
+
+ it "should pass if a different exception is raised" do
+ lambda { raise }.should_not raise_exception(NameError, "example message")
+ end
+
+ it "should pass if same exception is raised with different message" do
+ lambda { raise RuntimeError.new("not the example message") }.should_not raise_exception(RuntimeError, "example message")
+ end
+
+ it "should fail if named exception is raised with same message" do
+ lambda {
+ lambda { raise "example message" }.should_not raise_exception(RuntimeError, "example message")
+ }.should fail_with("expected no RuntimeError with \"example message\", got #<RuntimeError: example message>")
+ end
+end
+
+describe "should raise_exception(NamedError, exception_message) with Regexp" do
+ it "should pass if named exception is raised with matching message" do
+ lambda { raise "example message" }.should raise_exception(RuntimeError, /ample mess/)
+ end
+
+ it "should fail if nothing is raised" do
+ lambda {
+ lambda {}.should raise_exception(RuntimeError, /ample mess/)
+ }.should fail_with("expected RuntimeError with message matching /ample mess/ but nothing was raised")
+ end
+
+ it "should fail if incorrect exception is raised" do
+ lambda {
+ lambda { raise }.should raise_exception(NameError, /ample mess/)
+ }.should fail_with("expected NameError with message matching /ample mess/, got RuntimeError")
+ end
+
+ it "should fail if correct exception is raised with incorrect message" do
+ lambda {
+ lambda { raise RuntimeError.new("not the example message") }.should raise_exception(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_exception(NamedError, exception_message) with Regexp" do
+ it "should pass if nothing is raised" do
+ lambda {}.should_not raise_exception(RuntimeError, /ample mess/)
+ end
+
+ it "should pass if a different exception is raised" do
+ lambda { raise }.should_not raise_exception(NameError, /ample mess/)
+ end
+
+ it "should pass if same exception is raised with non-matching message" do
+ lambda { raise RuntimeError.new("non matching message") }.should_not raise_exception(RuntimeError, /ample mess/)
+ end
+
+ it "should fail if named exception is raised with matching message" do
+ lambda {
+ lambda { raise "example message" }.should_not raise_exception(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-1.3.1/spec/spec/matchers/respond_to_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/respond_to_spec.rb
new file mode 100644
index 000000000..8d8f3c1ac
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/respond_to_spec.rb
@@ -0,0 +1,116 @@
+require 'spec_helper'
+
+describe "should respond_to(:sym)" do
+
+ it "passes if target responds to :sym" do
+ Object.new.should respond_to(:methods)
+ end
+
+ it "fails if target does not respond to :sym" do
+ lambda {
+ "this string".should respond_to(:some_method)
+ }.should fail_with(%q|expected "this string" to respond to :some_method|)
+ end
+
+end
+
+describe "should respond_to(:sym).with(1).argument" do
+ it "passes if target responds to :sym with 1 arg" do
+ obj = Object.new
+ def obj.foo(arg); end
+ obj.should respond_to(:foo).with(1).argument
+ end
+
+ it "fails if target does not respond to :sym" do
+ obj = Object.new
+ lambda {
+ obj.should respond_to(:some_method).with(1).argument
+ }.should fail_with(/expected .* to respond to :some_method/)
+ end
+
+ it "fails if :sym expects 0 args" do
+ obj = Object.new
+ def obj.foo; end
+ lambda {
+ obj.should respond_to(:foo).with(1).argument
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 1 argument/)
+ end
+
+ it "fails if :sym expects 2 args" do
+ obj = Object.new
+ def obj.foo(arg, arg2); end
+ lambda {
+ obj.should respond_to(:foo).with(1).argument
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 1 argument/)
+ end
+end
+
+describe "should respond_to(message1, message2)" do
+
+ it "passes if target responds to both messages" do
+ Object.new.should respond_to('methods', 'inspect')
+ end
+
+ it "fails if target does not respond to first message" do
+ lambda {
+ Object.new.should respond_to('method_one', 'inspect')
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
+ end
+
+ it "fails if target does not respond to second message" do
+ lambda {
+ Object.new.should respond_to('inspect', 'method_one')
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
+ end
+
+ it "fails if target does not respond to either message" do
+ lambda {
+ Object.new.should respond_to('method_one', 'method_two')
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one", "method_two"/)
+ end
+end
+
+describe "should respond_to(:sym).with(2).arguments" do
+ it "passes if target responds to :sym with 2 args" do
+ obj = Object.new
+ def obj.foo(a1, a2); end
+ obj.should respond_to(:foo).with(2).arguments
+ end
+
+ it "fails if target does not respond to :sym" do
+ obj = Object.new
+ lambda {
+ obj.should respond_to(:some_method).with(2).arguments
+ }.should fail_with(/expected .* to respond to :some_method/)
+ end
+
+ it "fails if :sym expects 0 args" do
+ obj = Object.new
+ def obj.foo; end
+ lambda {
+ obj.should respond_to(:foo).with(2).arguments
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 2 arguments/)
+ end
+
+ it "fails if :sym expects 2 args" do
+ obj = Object.new
+ def obj.foo(arg); end
+ lambda {
+ obj.should respond_to(:foo).with(2).arguments
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 2 arguments/)
+ end
+end
+
+describe "should_not respond_to(:sym)" do
+
+ it "passes if target does not respond to :sym" do
+ Object.new.should_not respond_to(:some_method)
+ end
+
+ it "fails if target responds to :sym" do
+ lambda {
+ Object.new.should_not respond_to(:methods)
+ }.should fail_with(/expected #<Object:.*> not to respond to :methods/)
+ end
+
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/satisfy_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/satisfy_spec.rb
new file mode 100644
index 000000000..e50c395a6
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/satisfy_spec.rb
@@ -0,0 +1,36 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/matchers/simple_matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/simple_matcher_spec.rb
new file mode 100644
index 000000000..7d38862b2
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/simple_matcher_spec.rb
@@ -0,0 +1,100 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ describe SimpleMatcher do
+ before { Spec.stub(:deprecate) }
+
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ simple_matcher("foo") {}
+ end
+
+ it "should 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 the given description" do
+ matcher = simple_matcher("thing") do end
+ matcher.description.should =="thing"
+ end
+
+ it "should fail if a wrapped 'should' fails" do
+ matcher = simple_matcher("should fail") do
+ 2.should == 3
+ end
+ lambda do
+ matcher.matches?("anything").should be_true
+ end.should fail_with(/expected: 3/)
+ end
+
+ describe "with arity of 2" do
+ it "should provide the matcher so you can access its messages" do
+ provided_matcher = nil
+ matcher = simple_matcher("thing") do |given, matcher|
+ provided_matcher = matcher
+ end
+ matcher.matches?("anything")
+ provided_matcher.should equal(matcher)
+ end
+
+ it "should support a custom failure message" do
+ matcher = simple_matcher("thing") do |given, matcher|
+ matcher.failure_message = "custom message"
+ end
+ matcher.matches?("other")
+ matcher.failure_message.should == "custom message"
+ end
+
+ it "should complain when asked for a failure message if you don't give it a description or a message" do
+ matcher = simple_matcher do |given, matcher| end
+ matcher.matches?("other")
+ matcher.failure_message.should =~ /No description provided/
+ end
+
+ it "should support a custom negative failure message" do
+ matcher = simple_matcher("thing") do |given, matcher|
+ matcher.negative_failure_message = "custom message"
+ end
+ matcher.matches?("other")
+ matcher.negative_failure_message.should == "custom message"
+ end
+
+ it "should complain when asked for a negative failure message if you don't give it a description or a message" do
+ matcher = simple_matcher do |given, matcher| end
+ matcher.matches?("other")
+ matcher.negative_failure_message.should =~ /No description provided/
+ end
+
+ it "should support a custom description" do
+ matcher = simple_matcher("thing") do |given, matcher|
+ matcher.description = "custom message"
+ end
+ matcher.matches?("description")
+ matcher.description.should == "custom message"
+ end
+
+ it "should tell you no description was provided when it doesn't receive one" do
+ matcher = simple_matcher do end
+ matcher.description.should =~ /No description provided/
+ end
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/matchers/throw_symbol_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/matchers/throw_symbol_spec.rb
new file mode 100644
index 000000000..e6aa008e0
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/matchers/throw_symbol_spec.rb
@@ -0,0 +1,121 @@
+require 'spec_helper'
+
+module Spec
+ module Matchers
+ describe ThrowSymbol do
+ describe "with no args" do
+ let(:matcher) { throw_symbol }
+
+ it "matches if any Symbol is thrown" do
+ matcher.matches?(lambda{ throw :sym }).should be_true
+ end
+
+ it "matches if any Symbol is thrown with an arg" do
+ matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
+ end
+
+ it "does not match if no Symbol is thrown" do
+ matcher.matches?(lambda{ }).should be_false
+ end
+
+ it "provides a failure message" do
+ matcher.matches?(lambda{})
+ matcher.failure_message_for_should.should == "expected a Symbol but nothing was thrown"
+ end
+
+ it "provides a negative failure message" do
+ matcher.matches?(lambda{ throw :sym})
+ matcher.failure_message_for_should_not.should == "expected no Symbol, got :sym"
+ end
+ end
+
+ describe "with a symbol" do
+ let(:matcher) { throw_symbol(:sym) }
+
+ it "matches if correct Symbol is thrown" do
+ matcher.matches?(lambda{ throw :sym }).should be_true
+ end
+
+ it "matches if correct Symbol is thrown with an arg" do
+ matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
+ end
+
+ it "does not match if no Symbol is thrown" do
+ matcher.matches?(lambda{ }).should be_false
+ end
+
+ it "does not match if correct Symbol is thrown" do
+ matcher.matches?(lambda{ throw :other_sym }).should be_false
+ end
+
+ it "provides a failure message when no Symbol is thrown" do
+ matcher.matches?(lambda{})
+ matcher.failure_message_for_should.should == "expected :sym but nothing was thrown"
+ end
+
+ it "provides a failure message when wrong Symbol is thrown" do
+ matcher.matches?(lambda{ throw :other_sym })
+ matcher.failure_message_for_should.should == "expected :sym, got :other_sym"
+ end
+
+ it "provides a negative failure message" do
+ matcher.matches?(lambda{ throw :sym })
+ matcher.failure_message_for_should_not.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
+
+ it "bubbles up errors other than NameError" do
+ lambda do
+ matcher.matches?(lambda{ raise 'foo' })
+ end.should raise_error('foo')
+ end
+ end
+
+ describe "with a symbol and an arg" do
+ let(:matcher) { throw_symbol(:sym, "a") }
+
+ it "matches if correct Symbol and args are thrown" do
+ matcher.matches?(lambda{ throw :sym, "a" }).should be_true
+ end
+
+ it "does not match if nothing is thrown" do
+ matcher.matches?(lambda{ }).should be_false
+ end
+
+ it "does not match if other Symbol is thrown" do
+ matcher.matches?(lambda{ throw :other_sym, "a" }).should be_false
+ end
+
+ it "does not match if no arg is thrown" do
+ matcher.matches?(lambda{ throw :sym }).should be_false
+ end
+
+ it "does not match if wrong arg is thrown" do
+ matcher.matches?(lambda{ throw :sym, "b" }).should be_false
+ end
+
+ it "provides a failure message when no Symbol is thrown" do
+ matcher.matches?(lambda{})
+ matcher.failure_message_for_should.should == %q[expected :sym with "a" but nothing was thrown]
+ end
+
+ it "provides a failure message when wrong Symbol is thrown" do
+ matcher.matches?(lambda{ throw :other_sym })
+ matcher.failure_message_for_should.should == %q[expected :sym with "a", got :other_sym]
+ end
+
+ it "provides a negative failure message" do
+ matcher.matches?(lambda{ throw :sym })
+ matcher.failure_message_for_should_not.should == %q[expected :sym with "a" not to be thrown]
+ end
+
+ it "only matches NameErrors raised by uncaught throws" do
+ matcher.matches?(lambda{ :sym }).should be_false
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/and_yield_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/and_yield_spec.rb
new file mode 100644
index 000000000..39a07a212
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/and_yield_spec.rb
@@ -0,0 +1,117 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe Mock do
+ describe "#and_yield" do
+
+ context "with eval context as block argument" do
+ let(:obj) { double }
+
+ it "evaluates the supplied block as it is read" do
+ evaluated = false
+ obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
+ evaluated = true
+ end
+ evaluated.should be_true
+ end
+
+ it "passes an eval context object to the supplied block" do
+ obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
+ eval_context.should_not be_nil
+ end
+ end
+
+ it "evaluates the block passed to the stubbed method in the context of the supplied eval context" do
+ expected_eval_context = nil
+ actual_eval_context = nil
+
+ obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
+ expected_eval_context = eval_context
+ end
+
+ obj.method_that_accepts_a_block do
+ actual_eval_context = self
+ end
+
+ actual_eval_context.should equal(expected_eval_context)
+ end
+
+ context "and no yielded arguments" do
+
+ it "passes when expectations set on the eval context are met" do
+ configured_eval_context = nil
+ obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
+ configured_eval_context = eval_context
+ configured_eval_context.should_receive(:foo)
+ end
+
+ obj.method_that_accepts_a_block do
+ foo
+ end
+
+ configured_eval_context.rspec_verify
+ end
+
+ it "fails when expectations set on the eval context are not met" do
+ configured_eval_context = nil
+ obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
+ configured_eval_context = eval_context
+ configured_eval_context.should_receive(:foo)
+ end
+
+ obj.method_that_accepts_a_block do
+ # foo is not called here
+ end
+
+ lambda {configured_eval_context.rspec_verify}.should raise_error(MockExpectationError)
+ end
+
+ end
+
+ context "and yielded arguments" do
+
+ it "passes when expectations set on the eval context and yielded arguments are met" do
+ configured_eval_context = nil
+ yielded_arg = Object.new
+ obj.stub(:method_that_accepts_a_block).and_yield(yielded_arg) do |eval_context|
+ configured_eval_context = eval_context
+ configured_eval_context.should_receive(:foo)
+ yielded_arg.should_receive(:bar)
+ end
+
+ obj.method_that_accepts_a_block do |obj|
+ obj.bar
+ foo
+ end
+
+ configured_eval_context.rspec_verify
+ yielded_arg.rspec_verify
+ end
+
+ it "fails when expectations set on the eval context and yielded arguments are not met" do
+ configured_eval_context = nil
+ yielded_arg = Object.new
+ obj.stub(:method_that_accepts_a_block).and_yield(yielded_arg) do |eval_context|
+ configured_eval_context = eval_context
+ configured_eval_context.should_receive(:foo)
+ yielded_arg.should_receive(:bar)
+ end
+
+ obj.method_that_accepts_a_block do |obj|
+ # obj.bar is not called here
+ # foo is not called here
+ end
+
+ lambda {configured_eval_context.rspec_verify}.should raise_error(MockExpectationError)
+ lambda {yielded_arg.rspec_verify}.should raise_error(MockExpectationError)
+ end
+
+ end
+
+ end
+ end
+ end
+ end
+end
+
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/any_number_of_times_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/any_number_of_times_spec.rb
new file mode 100644
index 000000000..9a3f6edaf
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/any_number_of_times_spec.rb
@@ -0,0 +1,36 @@
+require 'spec_helper'
+
+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
+
+ it "should return the mocked value when called after a similar stub" do
+ @mock.stub!(:message).and_return :stub_value
+ @mock.should_receive(:message).any_number_of_times.and_return(:mock_value)
+ @mock.message.should == :mock_value
+ @mock.message.should == :mock_value
+ end
+ end
+
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_expectation_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_expectation_spec.rb
new file mode 100644
index 000000000..496f7507c
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_expectation_spec.rb
@@ -0,0 +1,23 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/argument_matchers_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_matchers_spec.rb
new file mode 100644
index 000000000..fc8165583
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/argument_matchers_spec.rb
@@ -0,0 +1,19 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ module ArgumentMatchers
+ describe AnyArgsMatcher do
+ it "represents itself nicely for failure messages" do
+ AnyArgsMatcher.new.description.should == "any args"
+ end
+ end
+
+ describe AnyArgMatcher do
+ it "represents itself nicely for failure messages" do
+ AnyArgMatcher.new(nil).description.should == "anything"
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/at_least_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/at_least_spec.rb
new file mode 100644
index 000000000..0b76d3213
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/at_least_spec.rb
@@ -0,0 +1,97 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/at_most_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/at_most_spec.rb
new file mode 100644
index 000000000..744c9ff1b
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/at_most_spec.rb
@@ -0,0 +1,93 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/bug_report_10260_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_10260_spec.rb
new file mode 100644
index 000000000..783782f64
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_10260_spec.rb
@@ -0,0 +1,8 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/bug_report_10263_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_10263_spec.rb
new file mode 100644
index 000000000..8a0bc505f
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_10263_spec.rb
@@ -0,0 +1,27 @@
+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
+ begin
+ @mock.msg(false)
+ rescue Exception
+ end
+ 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-1.3.1/spec/spec/mocks/bug_report_11545_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_11545_spec.rb
new file mode 100644
index 000000000..7eb7c6e45
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_11545_spec.rb
@@ -0,0 +1,32 @@
+require 'spec_helper'
+
+class LiarLiarPantsOnFire
+ def respond_to?(sym, incl_private=false)
+ true
+ end
+
+ def self.respond_to?(sym, incl_private=false)
+ 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
+ (class << LiarLiarPantsOnFire; self; end).instance_methods.should_not include("something")
+ end
+end
+
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_15719_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_15719_spec.rb
new file mode 100644
index 000000000..efd7a7824
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_15719_spec.rb
@@ -0,0 +1,30 @@
+require 'spec_helper'
+
+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" received :bar with unexpected arguments\n expected: ("message")\n got: ("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" received :bar with unexpected arguments\n expected: ("message")\n got: ("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-1.3.1/spec/spec/mocks/bug_report_496_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_496_spec.rb
new file mode 100644
index 000000000..d9edd7994
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_496_spec.rb
@@ -0,0 +1,17 @@
+require 'spec_helper'
+
+module BugReport496
+ class BaseClass
+ end
+
+ class SubClass < BaseClass
+ end
+
+ describe "a message expectation on a base class object" do
+ it "should correctly pick up message sent to it subclass" do
+ BaseClass.should_receive(:new).once
+ SubClass.new
+ end
+ end
+end
+
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_600_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_600_spec.rb
new file mode 100644
index 000000000..c5c50d5a4
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_600_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+module BugReport600
+ class ExampleClass
+ def self.method_that_uses_define_method
+ define_method "defined_method" do |attributes|
+ load_address(address, attributes)
+ end
+ end
+ end
+
+ describe "stubbing a class method" do
+ it "should work" do
+ ExampleClass.should_receive(:define_method).with("defined_method")
+ ExampleClass.method_that_uses_define_method
+ end
+
+ it "should restore the original method" do
+ ExampleClass.method_that_uses_define_method
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7611_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7611_spec.rb
new file mode 100644
index 000000000..ff1ef8795
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7611_spec.rb
@@ -0,0 +1,19 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/bug_report_7805_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7805_spec.rb
new file mode 100644
index 000000000..9a3d493d9
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_7805_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/bug_report_8165_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_8165_spec.rb
new file mode 100644
index 000000000..8d8d01772
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_8165_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/bug_report_8302_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_8302_spec.rb
new file mode 100644
index 000000000..55d8d3acd
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_8302_spec.rb
@@ -0,0 +1,26 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/bug_report_830_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_830_spec.rb
new file mode 100644
index 000000000..ed16f419a
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/bug_report_830_spec.rb
@@ -0,0 +1,21 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe 'Calling a method that catches StandardError' do
+ class Foo
+ def self.foo
+ bar
+ rescue StandardError
+ end
+ end
+
+ it 'still reports mock failures' do
+ Foo.should_not_receive :bar
+ lambda do
+ Foo.foo
+ end.should raise_error(MockExpectationError)
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/double_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/double_spec.rb
new file mode 100644
index 000000000..0d6ee982d
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/double_spec.rb
@@ -0,0 +1,12 @@
+require 'spec_helper'
+
+describe "double" do
+ it "is an alias for stub and mock" do
+ double().should be_a(Spec::Mocks::Mock)
+ end
+
+ it "uses 'Double' in failure messages" do
+ double = double('name')
+ expect {double.foo}.to raise_error(/Double "name" received/)
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/failing_argument_matchers_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/failing_argument_matchers_spec.rb
new file mode 100644
index 000000000..30742157d
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/failing_argument_matchers_spec.rb
@@ -0,0 +1,95 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe "failing MockArgumentMatchers" 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" received :random_call with unexpected arguments\n expected: \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\)\n got: \(\{(: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" received :random_call with unexpected arguments\n expected: \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\)\n got: \(\{(\"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\" received :msg with unexpected arguments\n expected: (equal 3)\n got: (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\" received :msg with unexpected arguments\n expected: (no args)\n got: (37)")
+ end
+
+ it "should fail hash_including with missing key" do
+ lambda do
+ @mock.should_receive(:msg).with(hash_including(:a => 1))
+ @mock.msg({})
+ end.should raise_error(MockExpectationError, "Mock \"test mock\" received :msg with unexpected arguments\n expected: (hash_including(:a=>1))\n got: ({})")
+ end
+
+ it "should fail with block matchers" do
+ lambda do
+ @mock.should_receive(:msg).with {|arg| arg.should == :received }
+ @mock.msg :no_msg_for_you
+ end.should raise_error(Spec::Expectations::ExpectationNotMetError, /expected: :received.*\s*.*got: :no_msg_for_you/)
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_including_matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_including_matcher_spec.rb
new file mode 100644
index 000000000..d757f619a
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_including_matcher_spec.rb
@@ -0,0 +1,90 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ module ArgumentMatchers
+ describe HashIncludingMatcher do
+
+ it "should describe itself properly" do
+ HashIncludingMatcher.new(:a => 1).description.should == "hash_including(:a=>1)"
+ end
+
+ describe "passing" do
+ it "should match the same hash" do
+ hash_including(:a => 1).should == {:a => 1}
+ end
+
+ it "should match a hash with extra stuff" do
+ hash_including(:a => 1).should == {:a => 1, :b => 2}
+ end
+
+ describe "when matching against other matchers" do
+ it "should match an int against anything()" do
+ hash_including(:a => anything, :b => 2).should == {:a => 1, :b => 2}
+ end
+
+ it "should match a string against anything()" do
+ hash_including(:a => anything, :b => 2).should == {:a => "1", :b => 2}
+ end
+ end
+
+ describe "when passed only keys or keys mixed with key/value pairs" do
+ it "should match if the key is present" do
+ hash_including(:a).should == {:a => 1, :b => 2}
+ end
+
+ it "should match if more keys are present" do
+ hash_including(:a, :b).should == {:a => 1, :b => 2, :c => 3}
+ end
+
+ it "should match a string against a given key" do
+ hash_including(:a).should == {:a => "1", :b => 2}
+ end
+
+ it "should match if passed one key and one key/value pair" do
+ hash_including(:a, :b => 2).should == {:a => 1, :b => 2}
+ end
+
+ it "should match if passed many keys and one key/value pair" do
+ hash_including(:a, :b, :c => 3).should == {:a => 1, :b => 2, :c => 3, :d => 4}
+ end
+
+ it "should match if passed many keys and many key/value pairs" do
+ hash_including(:a, :b, :c => 3, :e => 5).should == {:a => 1, :b => 2, :c => 3, :d => 4, :e => 5}
+ end
+ end
+ end
+
+ describe "failing" do
+ it "should not match a non-hash" do
+ hash_including(:a => 1).should_not == 1
+ end
+
+ it "should not match a hash with a missing key" do
+ hash_including(:a => 1).should_not == {:b => 2}
+ end
+
+ it "should not match a hash with a missing key" do
+ hash_including(:a).should_not == {:b => 2}
+ end
+
+ it "should not match an empty hash with a given key" do
+ hash_including(:a).should_not == {}
+ end
+
+ it "should not match a hash with a missing key when one pair is matching" do
+ hash_including(:a, :b => 2).should_not == {:b => 2}
+ end
+
+ it "should not match a hash with an incorrect value" do
+ hash_including(:a => 1, :b => 2).should_not == {:a => 1, :b => 3}
+ end
+
+ it "should not match when values are nil but keys are different" do
+ hash_including(:a => nil).should_not == {:b => nil}
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_not_including_matcher_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_not_including_matcher_spec.rb
new file mode 100644
index 000000000..9df69fe6c
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/hash_not_including_matcher_spec.rb
@@ -0,0 +1,67 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ module ArgumentMatchers
+ describe HashNotIncludingMatcher do
+
+ it "should describe itself properly" do
+ HashNotIncludingMatcher.new(:a => 5).description.should == "hash_not_including(:a=>5)"
+ end
+
+ describe "passing" do
+ it "should match a hash without the specified key" do
+ hash_not_including(:c).should == {:a => 1, :b => 2}
+ end
+
+ it "should match a hash with the specified key, but different value" do
+ hash_not_including(:b => 3).should == {:a => 1, :b => 2}
+ end
+
+ it "should match a hash without the specified key, given as anything()" do
+ hash_not_including(:c => anything).should == {:a => 1, :b => 2}
+ end
+
+ it "should match an empty hash" do
+ hash_not_including(:a).should == {}
+ end
+
+ it "should match a hash without any of the specified keys" do
+ hash_not_including(:a, :b, :c).should == { :d => 7}
+ end
+
+ end
+
+ describe "failing" do
+ it "should not match a non-hash" do
+ hash_not_including(:a => 1).should_not == 1
+ end
+
+ it "should not match a hash with a specified key" do
+ hash_not_including(:b).should_not == {:b => 2}
+ end
+
+ it "should not match a hash with the specified key/value pair" do
+ hash_not_including(:b => 2).should_not == {:a => 1, :b => 2}
+ end
+
+ it "should not match a hash with the specified key" do
+ hash_not_including(:a, :b => 3).should_not == {:a => 1, :b => 2}
+ end
+
+ it "should not match a hash with one of the specified keys" do
+ hash_not_including(:a, :b).should_not == {:b => 2}
+ end
+
+ it "should not match a hash with some of the specified keys" do
+ hash_not_including(:a, :b, :c).should_not == {:a => 1, :b => 2}
+ end
+
+ it "should not match a hash with one key/value pair included" do
+ hash_not_including(:a, :b, :c, :d => 7).should_not == { :d => 7}
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_ordering_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_ordering_spec.rb
new file mode 100644
index 000000000..4bd15478f
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_ordering_spec.rb
@@ -0,0 +1,94 @@
+require '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
+
+ it "should pass when duplicates exist" do
+ @mock.should_receive(:a).ordered
+ @mock.should_receive(:b).ordered
+ @mock.should_receive(:a).ordered
+
+ @mock.a
+ @mock.b
+ @mock.a
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_space_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_space_spec.rb
new file mode 100644
index 000000000..878239307
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_space_spec.rb
@@ -0,0 +1,54 @@
+require 'spec_helper'
+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-1.3.1/spec/spec/mocks/mock_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_spec.rb
new file mode 100644
index 000000000..d86b75458
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/mock_spec.rb
@@ -0,0 +1,594 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe Mock do
+ treats_method_missing_as_private :subject => Mock.new, :noop => false
+
+ before(:each) do
+ @mock = mock("test mock")
+ end
+
+ after(:each) do
+ @mock.rspec_reset
+ end
+
+ describe "deprecated #stub_everything method" do
+ before(:each) do
+ Kernel.stub!(:warn)
+ end
+
+ it "creates a mock that behaves as a null object" do
+ stub_everything.should be_null_object
+ end
+
+ it "provides deprecation warning" do
+ Kernel.should_receive(:warn).with(/DEPRECATION: stub_everything.* is deprecated./)
+ stub_everything
+ end
+ 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 report line number of expectation of unreceived message after #should_receive after similar stub" do
+ @mock.stub!(:wont_happen)
+ 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)
+ lambda {
+ @mock.not_expected
+ violated
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no 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")
+ lambda {
+ @mock.not_expected("unexpected text")
+ 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 don't 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\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
+ end
+
+ it "should raise exception if args don't match when method called even when the method is stubbed" do
+ @mock.stub!(:something)
+ @mock.should_receive(:something).with("a","b","c")
+ lambda {
+ @mock.something("a","d","c")
+ @mock.rspec_verify
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
+ end
+
+ it "should raise exception if args don't match when method called even when using null_object" do
+ @mock = mock("test mock", :null_object => true)
+ @mock.should_receive(:something).with("a","b","c")
+ lambda {
+ @mock.something("a","d","c")
+ @mock.rspec_verify
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"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 false to be true/)
+ end
+
+ it "should fail right away when method defined as never is received" do
+ @mock.should_receive(:not_expected).never
+ lambda {
+ @mock.not_expected
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
+ end
+
+ it "should eventually fail when method defined as never is received" do
+ @mock.should_receive(:not_expected).never
+ lambda {
+ @mock.not_expected
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no 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\" received :something with unexpected arguments\n expected: (no args)\n got: (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\" received :something with unexpected arguments\n expected: (1)\n got: (no args)")
+ end
+
+ it "should return value from block by default" do
+ @mock.stub!(:method_that_yields).and_yield
+ @mock.method_that_yields { :returned_obj }.should == :returned_obj
+ @mock.rspec_verify
+ 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 {|*x| a = x}
+ 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 {|*x| a = x}
+ 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 {|*x| a = x}
+ 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 {|x| a = x}
+ 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 {|x,y| a=x; b=y}
+ 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 not require a different signature to replace a method stub" do
+ @mock.stub!(:msg).and_return(:stub_value)
+ @mock.should_receive(:msg).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 raise an error when a previously stubbed method has a negative expectation" do
+ @mock.stub!(:msg).and_return(:stub_value)
+ @mock.should_not_receive(:msg).and_return(:mock_value)
+ lambda {@mock.msg(:arg)}.should raise_error(MockExpectationError)
+ 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 return the stubbed value when no new value specified" do
+ @mock.stub!(:msg).and_return(:stub_value)
+ @mock.should_receive(:msg)
+ @mock.msg.should equal(:stub_value)
+ @mock.rspec_verify
+ end
+
+ it "should not mess with the stub's yielded values when also mocked" do
+ @mock.stub!(:yield_back).and_yield(:stub_value)
+ @mock.should_receive(:yield_back).and_yield(:mock_value)
+ @mock.yield_back{|v| v.should == :mock_value }
+ @mock.yield_back{|v| v.should == :stub_value }
+ @mock.rspec_verify
+ end
+
+ it "should yield multiple values after a similar stub" do
+ File.stub!(:open).and_yield(:stub_value)
+ File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
+ yielded_args = []
+ File.open {|v| yielded_args << v }
+ yielded_args.should == [:first_call, :second_call]
+ File.open {|v| v.should == :stub_value }
+ File.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 #should_receive after a similar stub" do
+ @mock.stub!(:foo).and_return(:bar)
+ @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 #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
+
+ describe 'string representation generated by #to_s' do
+ it 'should not contain < because that might lead to invalid HTML in some situations' do
+ mock = mock("Dog")
+ valid_html_str = "#{mock}"
+ valid_html_str.should_not include('<')
+ end
+ end
+
+ describe "mock created with no name" do
+ it "should not use a name in a failure message" do
+ mock = mock()
+ expect {mock.foo}.to raise_error(/Mock received/)
+ end
+
+ it "should respond to initially stubbed methods" do
+ mock = mock(:foo => "woo", :bar => "car")
+ mock.foo.should == "woo"
+ mock.bar.should == "car"
+ end
+ end
+
+ describe "==" do
+ it "sends '== self' to the comparison object" do
+ first = mock('first')
+ second = mock('second')
+
+ first.should_receive(:==).with(second)
+ second == first
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/multiple_return_value_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/multiple_return_value_spec.rb
new file mode 100644
index 000000000..08a6b066c
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/multiple_return_value_spec.rb
@@ -0,0 +1,113 @@
+require '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-1.3.1/spec/spec/mocks/nil_expectation_warning_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/nil_expectation_warning_spec.rb
new file mode 100644
index 000000000..f8f72baff
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/nil_expectation_warning_spec.rb
@@ -0,0 +1,53 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+
+ describe "an expectation set on nil" do
+
+ it "should issue a warning with file and line number information" do
+ expected_warning = %r%An expectation of :foo was set on nil. Called from #{__FILE__}:#{__LINE__+3}(:in `block \(2 levels\) in <module:Mocks>')?. Use allow_message_expectations_on_nil to disable warnings.%
+ Kernel.should_receive(:warn).with(expected_warning)
+
+ nil.should_receive(:foo)
+ nil.foo
+ end
+
+ it "should issue a warning when the expectation is negative" do
+ Kernel.should_receive(:warn)
+
+ nil.should_not_receive(:foo)
+ end
+
+ it "should not issue a warning when expectations are set to be allowed" do
+ allow_message_expectations_on_nil
+ Kernel.should_not_receive(:warn)
+
+ nil.should_receive(:foo)
+ nil.should_not_receive(:bar)
+ nil.foo
+ end
+
+ end
+
+ describe "#allow_message_expectations_on_nil" do
+
+ it "should not effect subsequent examples" do
+ example_group = Class.new(::Spec::Example::ExampleGroupDouble)
+ example_group.it("when called in one example that doesn't end up setting an expectation on nil") do
+ allow_message_expectations_on_nil
+ end
+ example_group.it("should not effect the next exapmle ran") do
+ Kernel.should_receive(:warn)
+ nil.should_receive(:foo)
+ nil.foo
+ end
+
+ example_group.run(Spec::Runner.options).should be_true
+
+ end
+
+ end
+
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/null_object_mock_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/null_object_mock_spec.rb
new file mode 100644
index 000000000..8af6b49d7
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/null_object_mock_spec.rb
@@ -0,0 +1,54 @@
+require 'spec_helper'
+
+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
+
+ describe "#null_object?" do
+ it "should default to false" do
+ obj = mock('anything')
+ obj.should_not be_null_object
+ end
+ end
+
+ describe "#as_null_object" do
+ it "should set the object to null_object" do
+ obj = mock('anything').as_null_object
+ obj.should be_null_object
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/once_counts_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/once_counts_spec.rb
new file mode 100644
index 000000000..951298321
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/once_counts_spec.rb
@@ -0,0 +1,53 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/options_hash_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/options_hash_spec.rb
new file mode 100644
index 000000000..f82757827
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/options_hash_spec.rb
@@ -0,0 +1,35 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe "calling :should_receive with an options hash" do
+ it "should report the file and line submitted with :expected_from" do
+ begin
+ mock = Spec::Mocks::Mock.new("a mock")
+ mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
+ mock.rspec_verify
+ rescue Exception => e
+ ensure
+ e.backtrace.to_s.should =~ /\/path\/to\/blah.ext:37/m
+ end
+ end
+
+ it "should use the message supplied with :message" do
+ lambda {
+ m = Spec::Mocks::Mock.new("a mock")
+ m.should_receive(:message, :message => "recebi nada")
+ m.rspec_verify
+ }.should raise_error("recebi nada")
+ end
+
+ it "should use the message supplied with :message after a similar stub" do
+ lambda {
+ m = Spec::Mocks::Mock.new("a mock")
+ m.stub!(:message)
+ m.should_receive(:message, :message => "from mock")
+ m.rspec_verify
+ }.should raise_error("from mock")
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_spec.rb
new file mode 100644
index 000000000..c19ecd304
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_spec.rb
@@ -0,0 +1,164 @@
+require 'spec_helper'
+
+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:.*> expected/)
+ end
+
+ it "should name the class in the failure message when expectation is on class" do
+ Object.should_receive(:foo)
+ lambda do
+ Object.rspec_verify
+ end.should raise_error(Spec::Mocks::MockExpectationError, /<Object \(class\)>/)
+ 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)
+ lambda do
+ @object.fuhbar
+ end.should raise_error(MockExpectationError, /<Object:.*> expected :fuhbar with \(no args\) 0 times/)
+ 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')
+ lambda do
+ @object.foobar
+ end.should raise_error(Spec::Mocks::MockExpectationError)
+ end
+
+ it "should use report nil in the error message" do
+ allow_message_expectations_on_nil
+
+ @this_will_resolve_to_nil.should_receive(:foobar)
+ lambda do
+ @this_will_resolve_to_nil.rspec_verify
+ end.should raise_error(Spec::Mocks::MockExpectationError, /nil 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
+
+ describe "Method visibility when using partial mocks" do
+ class MockableClass
+ def public_method
+ private_method
+ protected_method
+ end
+ protected
+ def protected_method; end
+ private
+ def private_method; end
+ end
+
+ before(:each) do
+ @object = MockableClass.new
+ end
+
+ it 'should keep public methods public' do
+ @object.should_receive(:public_method)
+ with_ruby('1.9') do
+ @object.public_methods.should include(:public_method)
+ end
+ with_ruby('1.8') do
+ @object.public_methods.should include('public_method')
+ end
+ @object.public_method
+ end
+
+ it 'should keep private methods private' do
+ @object.should_receive(:private_method)
+ with_ruby('1.9') do
+ @object.private_methods.should include(:private_method)
+ end
+ with_ruby('1.8') do
+ @object.private_methods.should include('private_method')
+ end
+ @object.public_method
+ end
+
+ it 'should keep protected methods protected' do
+ @object.should_receive(:protected_method)
+ with_ruby('1.9') do
+ @object.protected_methods.should include(:protected_method)
+ end
+ with_ruby('1.8') do
+ @object.protected_methods.should include('protected_method')
+ end
+ @object.public_method
+ end
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
new file mode 100644
index 000000000..a69aa6ac0
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
@@ -0,0 +1,66 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/passing_argument_matchers_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/passing_argument_matchers_spec.rb
new file mode 100644
index 000000000..a364df0ae
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/passing_argument_matchers_spec.rb
@@ -0,0 +1,145 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe "mock argument matchers", :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 matchers" do
+ it_should_behave_like "mock argument matchers"
+
+ 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 kind_of(Numeric)" do
+ @mock.should_receive(:random_call).with(kind_of(Numeric))
+ @mock.random_call(1)
+ end
+
+ it "should accept float as an_instance_of(Numeric)" do
+ @mock.should_receive(:random_call).with(kind_of(Numeric))
+ @mock.random_call(1.5)
+ end
+
+ it "accepts fixnum as instance_of(Fixnum)" do
+ @mock.should_receive(:random_call).with(instance_of(Fixnum))
+ @mock.random_call(1)
+ end
+
+ it "should NOT accept fixnum as instance_of(Numeric)" do
+ @mock.should_not_receive(:random_call).with(instance_of(Numeric))
+ @mock.random_call(1)
+ end
+
+ it "should NOT accept float as instance_of(Numeric)" do
+ @mock.should_not_receive(:random_call).with(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
+
+ it "should match hash with hash_including same hash" do
+ @mock.should_receive(:random_call).with(hash_including(:a => 1))
+ @mock.random_call(:a => 1)
+ end
+
+ end
+
+ describe Methods, "handling block matchers" do
+ it_should_behave_like "mock argument matchers"
+
+ it "should match arguments against RSpec expectations" do
+ @mock.should_receive(:random_call).with {|arg1, arg2, arr, *rest|
+ arg1.should == 5
+ arg2.should have_at_least(3).characters
+ arg2.should have_at_most(10).characters
+ arr.map {|i| i * 2}.should == [2,4,6]
+ rest.should == [:fee, "fi", 4]
+ }
+ @mock.random_call 5, "hello", [1,2,3], :fee, "fi", 4
+ end
+ end
+
+ describe Methods, "handling non-matcher arguments" do
+
+ before(:each) do
+ @mock = Mock.new("test mock")
+ end
+
+ 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
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/precise_counts_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/precise_counts_spec.rb
new file mode 100644
index 000000000..5b64ef281
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/precise_counts_spec.rb
@@ -0,0 +1,52 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/record_messages_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/record_messages_spec.rb
new file mode 100644
index 000000000..bed2fbff6
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/record_messages_spec.rb
@@ -0,0 +1,26 @@
+require '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-1.3.1/spec/spec/mocks/stub_chain_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_chain_spec.rb
new file mode 100644
index 000000000..3536e1761
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_chain_spec.rb
@@ -0,0 +1,42 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe "A chained method stub" do
+ before(:each) do
+ @subject = Object.new
+ end
+
+ it "returns expected value from chaining only one method call" do
+ @subject.stub_chain(:msg1).and_return(:return_value)
+ @subject.msg1.should equal(:return_value)
+ end
+
+ it "returns expected value from chaining two method calls" do
+ @subject.stub_chain(:msg1, :msg2).and_return(:return_value)
+ @subject.msg1.msg2.should equal(:return_value)
+ end
+
+ it "returns expected value from chaining four method calls" do
+ @subject.stub_chain(:msg1, :msg2, :msg3, :msg4).and_return(:return_value)
+ @subject.msg1.msg2.msg3.msg4.should equal(:return_value)
+ end
+
+ it "returns expected value from two chains with shared messages at the end" do
+ @subject.stub_chain(:msg1, :msg2, :msg3, :msg4).and_return(:first)
+ @subject.stub_chain(:msg5, :msg2, :msg3, :msg4).and_return(:second)
+
+ @subject.msg1.msg2.msg3.msg4.should equal(:first)
+ @subject.msg5.msg2.msg3.msg4.should equal(:second)
+ end
+
+ it "returns expected value from two chains with shared messages at the beginning" do
+ @subject.stub_chain(:msg1, :msg2, :msg3, :msg4).and_return(:first)
+ @subject.stub_chain(:msg1, :msg2, :msg3, :msg5).and_return(:second)
+
+ @subject.msg1.msg2.msg3.msg4.should equal(:first)
+ @subject.msg1.msg2.msg3.msg5.should equal(:second)
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_implementation_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_implementation_spec.rb
new file mode 100644
index 000000000..1487277fc
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_implementation_spec.rb
@@ -0,0 +1,31 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe "stub implementation" do
+ context "with no args" do
+ it "execs the block when called" do
+ obj = stub()
+ obj.stub(:foo) { :bar }
+ obj.foo.should == :bar
+ end
+ end
+
+ context "with one arg" do
+ it "execs the block with that arg when called" do
+ obj = stub()
+ obj.stub(:foo) {|given| given}
+ obj.foo(:bar).should == :bar
+ end
+ end
+
+ context "with variable args" do
+ it "execs the block when called" do
+ obj = stub()
+ obj.stub(:foo) {|*given| given.first}
+ obj.foo(:bar).should == :bar
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_spec.rb
new file mode 100644
index 000000000..e0b7b2640
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stub_spec.rb
@@ -0,0 +1,203 @@
+require 'spec_helper'
+
+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
+ @stub = Object.new
+ end
+
+ [:stub!, :stub].each do |method|
+ context "using #{method}" do
+ it "should return expected value when expected message is received" do
+ @instance.send(method, :msg).and_return(:return_value)
+ @instance.msg.should equal(:return_value)
+ @instance.rspec_verify
+ end
+ end
+ 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 handle multiple stubbed methods" do
+ @instance.stub!(:msg1 => 1, :msg2 => 2)
+ @instance.msg1.should == 1
+ @instance.msg2.should == 2
+ 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
+
+ it "calculates return value by executing block passed to #and_return" do
+ @mock.stub!(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
+ @mock.something("a","b","c").should == "cba"
+ @mock.rspec_verify
+ 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
+
+ it "should use 'Stub' in the failure message" do
+ stub = stub('name')
+ expect {stub.foo}.to raise_error(/Stub "name" received/)
+ end
+ end
+
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/stubbed_message_expectations_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stubbed_message_expectations_spec.rb
new file mode 100644
index 000000000..03c8fecdc
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/stubbed_message_expectations_spec.rb
@@ -0,0 +1,26 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe "Example with stubbed and then called message" do
+ it "fails if the message is expected and then subsequently not called again" do
+ mock_obj = mock("mock", :msg => nil)
+ mock_obj.msg
+ mock_obj.should_receive(:msg)
+ lambda { mock_obj.rspec_verify }.should raise_error(Spec::Mocks::MockExpectationError)
+ end
+
+ it "outputs arguments of all similar calls" do
+ m = mock('mock', :foo => true)
+ m.should_receive(:foo).with('first')
+ m.foo('second')
+ m.foo('third')
+ lambda do
+ m.rspec_verify
+ end.should raise_error(%Q|Mock "mock" received :foo with unexpected arguments\n expected: ("first")\n got: (["second"], ["third"])|)
+ m.rspec_reset
+ end
+ end
+
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/mocks/twice_counts_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/twice_counts_spec.rb
new file mode 100644
index 000000000..4538eb8f9
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/twice_counts_spec.rb
@@ -0,0 +1,67 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/mocks/unstub_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/mocks/unstub_spec.rb
new file mode 100644
index 000000000..89e5ac381
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/mocks/unstub_spec.rb
@@ -0,0 +1,127 @@
+require 'spec_helper'
+
+module Spec
+ module Mocks
+ describe Mock do
+ context "unstubbing a mock object with a stub" do
+ it "should remove the stub" do
+ a_mock = mock 'an object', :foo => :bar
+
+ a_mock.unstub! :foo
+ a_mock.should_not respond_to(:foo)
+ end
+ end
+
+ context "unstubbing a real object with a stub" do
+ before do
+ @obj = Object.new
+ end
+
+ it "should raise a NoMethodError if the message is called after unstubbing" do
+ @obj.stub!(:foo).and_return :bar
+ @obj.unstub!(:foo)
+
+ lambda {
+ @obj.foo
+ }.should raise_error(NoMethodError)
+ end
+
+ it "should only clear the stub specified" do
+ @obj.stub!(:foo).and_return :bar
+ @obj.stub!(:other).and_return :baz
+
+ @obj.unstub!(:foo)
+
+ @obj.other.should == :baz
+ end
+
+ it "should no longer respond_to? the method" do
+ @obj.stub!(:foo).and_return :bar
+ @obj.unstub!(:foo)
+
+ @obj.should_not respond_to(:foo)
+ end
+
+ it "should unstub using a string (should convert the string to a symbol)" do
+ @obj.stub!(:foo)
+
+ @obj.unstub!("foo")
+
+ @obj.should_not respond_to(:foo)
+ end
+
+ it "should restore a previous method definition" do
+ def @obj.foo
+ :a_result
+ end
+
+ @obj.stub!(:foo).and_return :stubbed_result
+ @obj.unstub!(:foo)
+
+ @obj.foo.should == :a_result
+ end
+
+ it "should have unstub as an alias of unstub!" do
+ @obj.stub!(:foo).and_return :bar
+
+ @obj.unstub(:foo)
+
+ lambda {
+ @obj.foo
+ }.should raise_error(NoMethodError)
+ end
+
+ it "should raise a MockExpectationError if it is not stubbed" do
+ lambda {
+ @obj.unstub!(:foo)
+ }.should raise_error(MockExpectationError, "The method `foo` was not stubbed or was already unstubbed")
+ end
+
+ it "should raise a MockExpectationError if it was already unstubbed" do
+ @obj.stub!(:foo)
+ @obj.unstub!(:foo)
+
+ lambda {
+ @obj.unstub!(:foo)
+ }.should raise_error(MockExpectationError, "The method `foo` was not stubbed or was already unstubbed")
+ end
+
+ it "should use the correct message name in the error" do
+ @obj.stub!(:bar)
+ @obj.unstub!(:bar)
+
+ lambda {
+ @obj.unstub!(:bar)
+ }.should raise_error(MockExpectationError, "The method `bar` was not stubbed or was already unstubbed")
+ end
+
+ it "should raise a MockExpectationError if the method is defined, but not stubbed" do
+ def @obj.meth; end
+
+ lambda {
+ @obj.unstub!(:meth)
+ }.should raise_error(MockExpectationError)
+ end
+
+ it "should be able to restub a after unstubbing" do
+ @obj.stub!(:foo).and_return :bar
+
+ @obj.unstub!(:foo)
+
+ @obj.stub!(:foo).and_return :baz
+
+ @obj.foo.should == :baz
+ end
+
+ it "should remove only the first stub if multiple stubs have been defined" do
+ @obj.stub!(:foo).and_return :first
+ @obj.stub!(:foo).and_return :second
+
+ @obj.unstub!(:foo)
+
+ @obj.foo.should == :first
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/package/bin_spec_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/package/bin_spec_spec.rb
new file mode 100644
index 000000000..6628fad72
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/package/bin_spec_spec.rb
@@ -0,0 +1,16 @@
+require 'spec_helper'
+require 'ruby_forker'
+
+describe "The bin/spec script" do
+ include RubyForker
+
+ it "should have no warnings" do
+ output = ruby "-w -Ilib bin/spec --help"
+ output.should_not =~ /warning/n
+ end
+
+ it "should show the help w/ no args" do
+ output = ruby "-w -Ilib bin/spec"
+ output.should =~ /^Usage: spec/
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/rake/spectask_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/rake/spectask_spec.rb
new file mode 100644
index 000000000..ea834bad4
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/rake/spectask_spec.rb
@@ -0,0 +1,150 @@
+require 'spec_helper'
+require 'spec/rake/spectask'
+
+module Spec
+ module Rake
+
+ class MockTask
+ class << self
+ attr_accessor :last_instance, :last_cmd
+ end
+
+ def self.tasks
+ @tasks ||= {}
+ end
+
+ def self.reset_tasks
+ @tasks = {}
+ end
+
+ def self.task(name)
+ tasks[name]
+ end
+
+ def self.register_task(name, block)
+ tasks[name] = block
+ end
+
+ def initialize(name, &block)
+ MockTask.register_task(name, block)
+ MockTask.last_instance = block
+ end
+
+ def self.create_task(name, &block)
+ new(name, &block)
+ end
+ end
+
+ class SpecTask
+ def task(name, &block)
+ MockTask.create_task(name, &block)
+ end
+
+ def system(cmd)
+ MockTask.last_cmd = cmd
+ true
+ end
+
+ def default_ruby_path
+ RUBY
+ end
+ end
+
+ describe SpecTask do
+
+ before(:each) do
+ MockTask.reset_tasks
+ end
+
+ it "should execute rake's ruby path by default" do
+ task = SpecTask.new
+ MockTask.last_instance.call
+ MockTask.last_cmd.should match(/^#{task.default_ruby_path} /)
+ end
+
+ it "should execute the command with system if ruby_cmd is specified" do
+ task = SpecTask.new {|t| t.ruby_cmd = "path_to_multiruby"}
+ task.should_receive(:system).and_return(true)
+ MockTask.last_instance.call
+ end
+
+ it "should execute the ruby_cmd path if specified" do
+ SpecTask.new {|t| t.ruby_cmd = "path_to_multiruby"}
+ MockTask.last_instance.call
+ MockTask.last_cmd.should match(/^path_to_multiruby /)
+ end
+
+ it "should produce a deprecation warning if the out option is used" do
+ SpecTask.new {|t| t.out = "somewhere_over_the_rainbow"}
+ STDERR.should_receive(:puts).with("The Spec::Rake::SpecTask#out attribute is DEPRECATED and will be removed in a future version. Use --format FORMAT:WHERE instead.")
+ MockTask.last_instance.call
+ end
+
+ it "should produce an error if failure_message is set and the command fails" do
+ task = SpecTask.new {|t| t.failure_message = "oops"; t.fail_on_error = false}
+ STDERR.should_receive(:puts).with("oops")
+ task.stub(:system).and_return(false)
+ MockTask.last_instance.call
+ end
+
+ it "should raise if fail_on_error is set and the command fails" do
+ task = SpecTask.new
+ task.stub(:system).and_return(false)
+ lambda {MockTask.last_instance.call}.should raise_error
+ end
+
+ it "should not raise if fail_on_error is not set and the command fails" do
+ task = SpecTask.new {|t| t.fail_on_error = false}
+ task.stub(:system).and_return(false)
+ lambda {MockTask.last_instance.call}.should_not raise_error
+ end
+
+ context "with ENV['SPEC'] set" do
+ before(:each) do
+ @orig_env_spec = ENV['SPEC']
+ ENV['SPEC'] = 'foo.rb'
+ end
+ after(:each) do
+ ENV['SPEC'] = @orig_env_spec
+ end
+ it "should use the provided file list" do
+ task = SpecTask.new
+ task.spec_file_list.should == ["foo.rb"]
+ end
+ end
+
+ context "with the rcov option" do
+
+ it "should create a clobber_rcov task" do
+ MockTask.stub!(:create_task)
+ MockTask.should_receive(:create_task).with(:clobber_rcov)
+ SpecTask.new(:rcov) {|t| t.rcov = true}
+ end
+
+ it "should setup the clobber_rcov task to remove the rcov directory" do
+ task = SpecTask.new(:rcov) {|t| t.rcov = true; t.rcov_dir = "path_to_rcov_directory"}
+ task.should_receive(:rm_r).with("path_to_rcov_directory")
+ MockTask.task(:clobber_rcov).call
+ end
+
+ it "should make the clobber task depend on clobber_rcov" do
+ MockTask.stub!(:create_task)
+ MockTask.should_receive(:create_task).with(:clobber => [:clobber_rcov])
+ SpecTask.new(:rcov) {|t| t.rcov = true}
+ end
+
+ it "should make the rcov task depend on clobber_rcov" do
+ MockTask.stub!(:create_task)
+ MockTask.should_receive(:create_task).with(:rcov => :clobber_rcov)
+ SpecTask.new(:rcov) {|t| t.rcov = true}
+ end
+
+ it "creates an rcov options list" do
+ MockTask.stub!(:create_task)
+ task = SpecTask.new(:rcov) {|t| t.rcov = true, t.rcov_opts = ['a','b']}
+ task.rcov_option_list.should == "a b"
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/class_and_argument_parser_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/class_and_argument_parser_spec.rb
new file mode 100644
index 000000000..1168818f0
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/class_and_argument_parser_spec.rb
@@ -0,0 +1,23 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/runner/command_line_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/command_line_spec.rb
new file mode 100644
index 000000000..bc64e5aef
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/command_line_spec.rb
@@ -0,0 +1,162 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ describe CommandLine, ".run" do
+ with_sandboxed_options do
+ attr_reader :err, :out
+ before do
+ @err = options.error_stream
+ @out = options.output_stream
+ end
+
+ it "should run directory" do
+ file = File.dirname(__FILE__) + '/../../../examples/passing'
+ run_with(OptionParser.parse([file,"-p","**/*_spec.rb,**/*_example.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__) + '/../../../examples/failing/predicate_example.rb'
+ run_with(OptionParser.parse([file], @err, @out))
+
+ @out.rewind
+ @out.read.should =~ /3 examples, 2 failures/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 exit if Interrupt exception occurrs during the spec" 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.add_example_group(example_group)
+
+ expect {
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
+ }.to raise_error(SystemExit)
+ end
+
+ it "should exit if Interrupt exception occurrs during an after(:each)" do
+ example_group = Class.new(::Spec::Example::ExampleGroup) do
+ describe("example_group")
+ it "no error" do
+ end
+
+ after 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.add_example_group(example_group)
+
+ expect {
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
+ }.to raise_error(SystemExit)
+ 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 = 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(Spec::Example::ExampleGroupProxy.new(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 expected example"
+ expected_example_was_run = false
+ unexpected_example_was_run = false
+ example_group = describe("example group") do
+ it "expected example" do
+ expected_example_was_run = true
+ end
+ it "unexpected example" do
+ unexpected_example_was_run = true
+ end
+ end
+
+ options.reporter.should_receive(:add_example_group).with(Spec::Example::ExampleGroupProxy.new(example_group))
+
+ options.add_example_group example_group
+ run_with(options)
+
+ expected_example_was_run.should be_true
+ unexpected_example_was_run.should be_false
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/configuration_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/configuration_spec.rb
new file mode 100644
index 000000000..ea545d641
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/configuration_spec.rb
@@ -0,0 +1,320 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ describe Configuration do
+ with_sandboxed_options do
+ with_sandboxed_config do
+
+ describe "#mock_with" do
+ it "should default mock framework to rspec" do
+ config.mock_framework.should =~ /^spec\/adapters\/mock_frameworks\/rspec$/
+ end
+
+ it "should set rspec mocking explicitly" do
+ config.mock_with(:rspec)
+ config.mock_framework.should =~ /^spec\/adapters\/mock_frameworks\/rspec$/
+ end
+
+ it "should set mocha" do
+ config.mock_with(:mocha)
+ config.mock_framework.should =~ /^spec\/adapters\/mock_frameworks\/mocha$/
+ end
+
+ it "should set flexmock" do
+ config.mock_with(:flexmock)
+ config.mock_framework.should =~ /^spec\/adapters\/mock_frameworks\/flexmock$/
+ end
+
+ it "should set rr" do
+ config.mock_with(:rr)
+ config.mock_framework.should =~ /^spec\/adapters\/mock_frameworks\/rr$/
+ end
+
+ it "should set an arbitrary adapter module" do
+ adapter = Module.new
+ config.mock_with(adapter)
+ config.mock_framework.should == adapter
+ end
+ end
+
+ describe "#include" do
+
+ before(:each) do
+ @example_group_class = Class.new(::Spec::Example::ExampleGroupDouble) {}
+ Spec::Example::ExampleGroupFactory.register(:foobar, @example_group_class)
+ 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 scope 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(::Spec::Example::ExampleGroupDouble)
+ Spec::Example::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
+
+ it "accepts an Array of types" do
+ mod = Module.new
+ @other_example_group_class = Class.new(::Spec::Example::ExampleGroupDouble)
+ Spec::Example::ExampleGroupFactory.register(:baz, @other_example_group_class)
+
+ config.include mod, :type => [:foobar, :baz]
+
+ Class.new(@example_group_class).included_modules.should include(mod)
+ Class.new(@other_example_group_class).included_modules.should include(mod)
+ end
+
+ end
+
+ describe "#extend" do
+
+ before(:each) do
+ @example_group_class = Class.new(::Spec::Example::ExampleGroupDouble) {}
+ Spec::Example::ExampleGroupFactory.register(:foobar, @example_group_class)
+ end
+
+ it "should extend all groups" do
+ mod = Module.new
+ ExampleGroup.should_receive(:extend).with(mod)
+ Spec::Runner.configuration.extend mod
+ end
+
+ it "should extend specified groups" do
+ mod = Module.new
+ @example_group_class.should_receive(:extend).with(mod)
+ Spec::Runner.configuration.extend mod, :type => :foobar
+ end
+
+ it "should not extend non-specified groups" do
+ @other_example_group_class = Class.new(::Spec::Example::ExampleGroupDouble)
+ Spec::Example::ExampleGroupFactory.register(:baz, @other_example_group_class)
+
+ mod = Module.new
+ @other_example_group_class.should_not_receive(:extend)
+
+ Spec::Runner.configuration.extend mod, :type => :foobar
+ end
+
+ end
+ end
+
+ describe "ordering methods: " do
+
+ before(:each) do
+ @special_example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe("special_example_group")
+ @special_child_example_group = Class.new(@special_example_group).describe("special_child_example_group")
+ @nonspecial_example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe("nonspecial_example_group")
+ Spec::Example::ExampleGroupFactory.register(:special, @special_example_group)
+ Spec::Example::ExampleGroupFactory.register(:special_child, @special_child_example_group)
+ Spec::Example::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
+
+ 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(options)
+ 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 do # default is :each
+ 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(options)
+ 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(options)
+ 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(options)
+ 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
+
+ describe "#ignore_backtrace_patterns" do
+ it "adds patterns to ignore in backtrace" do
+ config.ignore_backtrace_patterns /custom_pattern/, /shoulda/, /spork/
+ config.ignored_backtrace_patterns.should include(/custom_pattern/)
+ config.ignored_backtrace_patterns.should include(/shoulda/)
+ config.ignored_backtrace_patterns.should include(/spork/)
+ end
+ end
+
+ describe "#predicate_matchers (DEPRECATED)" do
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ config.predicate_matchers[:foo] = :bar?
+ end
+ end
+
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/drb_command_line_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/drb_command_line_spec.rb
new file mode 100644
index 000000000..4071956ab
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/drb_command_line_spec.rb
@@ -0,0 +1,146 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ unless jruby?
+ describe DrbCommandLine do
+
+ context "without server running" do
+ it "prints error" do
+ err = out = StringIO.new
+ DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
+
+ err.rewind
+ err.read.should =~ /No server is running/
+ end
+
+ it "returns nil" do
+ err = out = StringIO.new
+ result = DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
+ result.should be_false
+ end
+ end
+
+ context "with server running" do
+ class ::CommandLineForDrbSpec
+ def self.run(argv, stderr, stdout)
+ orig_options = Spec::Runner.options
+ tmp_options = Spec::Runner::OptionParser.parse(argv, stderr, stdout)
+ Spec::Runner.use tmp_options
+ Spec::Runner::CommandLine.run(tmp_options)
+ ensure
+ Spec::Runner.use orig_options
+ end
+ end
+
+ before(:all) do
+ DRb.start_service("druby://127.0.0.1:8989", ::CommandLineForDrbSpec)
+ @@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 "returns true" do
+ err = out = StringIO.new
+ result = DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
+ result.should be_true
+ end
+
+ it "should run against local server" do
+ out = run_spec_via_druby(['--version'])
+ out.should =~ /rspec \d+\.\d+\.\d+.*/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
+
+ context "#port" do
+ before do
+ @options = stub("options", :drb_port => nil)
+ end
+
+ context "with no additional configuration" do
+ it "defaults to 8989" do
+ Spec::Runner::DrbCommandLine.port(@options).should == 8989
+ end
+ end
+
+ context "with RSPEC_DRB environment variable set" do
+ def with_RSPEC_DRB_set_to(val)
+ original = ENV['RSPEC_DRB']
+ begin
+ ENV['RSPEC_DRB'] = val
+ yield
+ ensure
+ ENV['RSPEC_DRB'] = original
+ end
+ end
+
+ it "uses RSPEC_DRB value" do
+ with_RSPEC_DRB_set_to('9000') do
+ Spec::Runner::DrbCommandLine.port(@options).should == 9000
+ end
+ end
+
+ context "and config variable set" do
+ it "uses configured value" do
+ @options.stub(:drb_port => '5000')
+ with_RSPEC_DRB_set_to('9000') do
+ Spec::Runner::DrbCommandLine.port(@options).should == 5000
+ end
+ end
+ end
+
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/empty_file.txt b/vendor/gems/rspec-1.3.1/spec/spec/runner/empty_file.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/empty_file.txt
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/example_group_runner_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/example_group_runner_spec.rb
new file mode 100644
index 000000000..2b1601aca
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/example_group_runner_spec.rb
@@ -0,0 +1,26 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ describe ExampleGroupRunner do
+ before(:each) do
+ err = StringIO.new('')
+ out = StringIO.new('')
+ @options = Options.new(err, out)
+ @runner = Spec::Runner::ExampleGroupRunner.new(@options)
+ end
+
+ after(:each) do
+ Spec::Expectations.differ = nil
+ end
+
+ describe "#load_files" do
+ it "should load UTF-8 encoded files" do
+ file = File.expand_path(File.dirname(__FILE__) + "/resources/utf8_encoded.rb")
+ @options.files << file
+ @runner.load_files(@options.files_to_load).should == @options.files_to_load
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/examples.txt b/vendor/gems/rspec-1.3.1/spec/spec/runner/examples.txt
new file mode 100644
index 000000000..2fcbd355d
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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-1.3.1/spec/spec/runner/failed.txt b/vendor/gems/rspec-1.3.1/spec/spec/runner/failed.txt
new file mode 100644
index 000000000..07c5442cf
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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-1.3.1/spec/spec/runner/formatter/base_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_formatter_spec.rb
new file mode 100644
index 000000000..a904bf380
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_formatter_spec.rb
@@ -0,0 +1,30 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ module Formatter
+ describe BaseFormatter do
+ subject { BaseFormatter.new(nil,nil) }
+ it {should respond_to(:start ).with(1).argument }
+ it {should respond_to(:example_group_started).with(1).argument }
+ it {should respond_to(:example_started ).with(1).argument }
+ # -3 indicates that one of the arguments is optional, with a default
+ # value assigned. This is due to deprecated_pending_location. Once
+ # that is removed, this should be changed to 2.
+ it {should respond_to(:example_pending ).with(-3).arguments}
+ it {should respond_to(:example_passed ).with(1).argument }
+ it {should respond_to(:example_failed ).with(3).arguments}
+ it {should respond_to(:start_dump ).with(0).arguments}
+ it {should respond_to(:dump_failure ).with(2).arguments}
+ it {should respond_to(:dump_summary ).with(4).arguments}
+ it {should respond_to(:dump_pending ).with(0).arguments}
+ it {should respond_to(:close ).with(0).arguments}
+
+ it "deprecates add_example_group" do
+ Spec.should_receive(:deprecate)
+ subject.add_example_group(stub('example group'))
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_text_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_text_formatter_spec.rb
new file mode 100644
index 000000000..e3677ad47
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/base_text_formatter_spec.rb
@@ -0,0 +1,113 @@
+require 'spec_helper'
+require 'spec/runner/formatter/base_text_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe BaseTextFormatter do
+
+ before :all do
+ @sandbox = "spec/sandbox"
+ end
+
+ it "should create the directory contained in WHERE if it does not exist" do
+ FileUtils.should_receive(:mkdir_p).with(@sandbox)
+ File.stub!(:open)
+ BaseTextFormatter.new({},"#{@sandbox}/temp.rb")
+ end
+
+ context "(deprecations)" do
+ before(:each) do
+ Kernel.stub!(:warn)
+ @io = StringIO.new
+ @options = mock('options')
+ @options.stub!(:dry_run).and_return(false)
+ @options.stub!(:colour).and_return(false)
+ @options.stub!(:autospec).and_return(false)
+ @formatter = Class.new(BaseTextFormatter) do
+ def method_that_class_magenta(message)
+ magenta(message)
+ end
+ def method_that_class_colourise(message, failure)
+ colourise(message, failure)
+ end
+ end.new(@options, @io)
+ @failure = stub('failure', :pending_fixed? => false)
+ end
+
+ context "#colourise" do
+ it "warns when subclasses call colourise" do
+ Spec.should_receive(:deprecate)
+ @formatter.method_that_class_colourise('this message', @failure)
+ end
+
+ it "delegates to colorize_failure" do
+ @formatter.should_receive(:colorize_failure).with('this message', @failure)
+ @formatter.colourise('this message', @failure)
+ end
+ end
+
+ context "#magenta" do
+ it "warns when subclasses call magenta" do
+ Spec.should_receive(:deprecate).with(/#magenta/)
+ @formatter.method_that_class_magenta('this message')
+ end
+
+ it "delegates to red" do
+ @formatter.should_receive(:red).with('this message')
+ @formatter.method_that_class_magenta('this message')
+ end
+ end
+
+ end
+
+ describe "#colour (protected)" do
+ before(:each) do
+ @original_RSPEC_COLOR = ENV['RSPEC_COLOR']
+ end
+
+ it "does not colorize when output_to_file? returns true" do
+ out = StringIO.new
+ options = stub('options', :colour => true, :autospec => false)
+ formatter = BaseTextFormatter.new(options,out)
+ formatter.stub!(:output_to_tty?).and_return(true)
+ formatter.stub!(:output_to_file?).and_return(true)
+ formatter.__send__(:colour, 'foo', "\e[32m").should == "foo"
+ end
+
+ it "colorizes when colour? and output_to_tty? return true" do
+ out = StringIO.new
+ options = stub('options', :colour => true, :autospec => false)
+ formatter = BaseTextFormatter.new(options,out)
+ formatter.stub!(:output_to_tty?).and_return(true)
+ formatter.__send__(:colour, 'foo', "\e[32m").should == "\e[32mfoo\e[0m"
+ end
+
+ it "colorizes when ENV['RSPEC_COLOR'] is set even if colour? and output_to_tty? return false" do
+ out = StringIO.new
+ options = stub('options', :colour => false)
+ formatter = BaseTextFormatter.new(options,out)
+ formatter.stub!(:output_to_tty?).and_return(false)
+
+ ENV['RSPEC_COLOR'] = 'true'
+
+ formatter.__send__(:colour, 'foo', "\e[32m").should == "\e[32mfoo\e[0m"
+ end
+
+ it "colorizes when autospec? is true even if colour? and output_to_tty? return false" do
+ out = StringIO.new
+ options = stub('options', :colour => true, :autospec => true)
+ formatter = BaseTextFormatter.new(options,out)
+ formatter.stub!(:output_to_tty?).and_return(false)
+
+ formatter.__send__(:colour, 'foo', "\e[32m").should == "\e[32mfoo\e[0m"
+ end
+
+ after(:each) do
+ ENV['RSPEC_COLOR'] = @original_RSPEC_COLOR
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
new file mode 100644
index 000000000..b390131ad
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
@@ -0,0 +1,45 @@
+require '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.example_group_started(Spec::Example::ExampleGroupProxy.new(Class.new(::Spec::Example::ExampleGroupDouble).describe("b 1")))
+ formatter.example_failed("e 1", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(Class.new(::Spec::Example::ExampleGroupDouble).describe("b 2")))
+ formatter.example_failed("e 2", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ formatter.example_failed("e 3", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ io.string.should include("b 1")
+ io.string.should include("b 2")
+ 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.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ formatter.example_failed("failure", nil, ::Spec::Runner::Reporter::Failure.new("g", 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.example_group_started(Spec::Example::ExampleGroupProxy.new(Class.new(::Spec::Example::ExampleGroupDouble).describe("something something (druby://99.99.99.99:99)")))
+ @formatter.example_failed("e 1", nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ io.string.should == "something something\n"
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
new file mode 100644
index 000000000..76d03fa39
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
@@ -0,0 +1,33 @@
+require '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(::Spec::Example::ExampleGroupDouble).describe("A")
+ example_group_2 = Class.new(example_group_1).describe("B")
+
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group_1))
+ @formatter.example_failed(example_group_1.it("a1"){}, nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group_2))
+ @formatter.example_failed(example_group_2.it("b2"){}, nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ @formatter.example_failed(example_group_2.it("b3"){}, nil, ::Spec::Runner::Reporter::Failure.new("g", 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-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
new file mode 100644
index 000000000..029cee62e
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
@@ -0,0 +1,377 @@
+<?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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:11:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:20:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:27:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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>examples/failing/mocking_example.rb:31:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre>examples/failing/diffing_spec.rb:13:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre>examples/failing/diffing_spec.rb:34:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</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-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6.html
new file mode 100644
index 000000000..1461d03e4
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.6.html
@@ -0,0 +1,377 @@
+<?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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:11:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:20:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:27:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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>./examples/failing/mocking_example.rb:31:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:13:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:34:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</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-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.7.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.7.html
new file mode 100644
index 000000000..5e489bba5
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.8.7.html
@@ -0,0 +1,377 @@
+<?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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:11:
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:20:
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:27:
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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>./examples/failing/mocking_example.rb:31:
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:13:
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:34:
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</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-1.3.1/spec/spec/runner/formatter/html_formatted-1.9.1.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.9.1.html
new file mode 100644
index 000000000..5d0be3bfe
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatted-1.9.1.html
@@ -0,0 +1,377 @@
+<?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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:11:in `block (2 levels) in <top (required)>'
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:in `block (4 levels) in <module:Formatter>'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:20:in `block (2 levels) in <top (required)>'
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:in `block (4 levels) in <module:Formatter>'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:27:in `block (2 levels) in <top (required)>'
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:in `block (4 levels) in <module:Formatter>'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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>./examples/failing/mocking_example.rb:31:in `block (2 levels) in <top (required)>'
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:in `block (4 levels) in <module:Formatter>'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:13:in `block (2 levels) in <top (required)>'
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:in `block (4 levels) in <module:Formatter>'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `block (3 levels) in <module:Formatter>'</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:34:in `block (2 levels) in <top (required)>'
+./spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:in `block (4 levels) in <module:Formatter>'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `block (3 levels) in <module:Formatter>'</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-1.3.1/spec/spec/runner/formatter/html_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatter_spec.rb
new file mode 100644
index 000000000..bbff1ef42
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/html_formatter_spec.rb
@@ -0,0 +1,118 @@
+# require 'spec_helper'
+
+begin # See rescue all the way at the bottom
+
+require 'nokogiri' # Needed to compare generated with wanted HTML
+require 'spec/runner/formatter/html_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe HtmlFormatter do
+
+ treats_method_missing_as_private
+
+ attr_reader :root, :expected_file, :expected_html
+
+ before do
+ @root = File.expand_path("#{File.dirname(__FILE__)}/../../../..")
+ suffix = jruby? ? '-jruby' : ''
+ @expected_file = "#{File.dirname(__FILE__)}/html_formatted-#{::RUBY_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)
+ end
+
+ # Uncomment this line temporarily in order to overwrite the expected with actual.
+ # Use with care!!!
+ # describe "file generator" do
+ # it "generates a new comparison file" do
+ # Dir.chdir(root) do
+ # args = [
+ # 'examples/failing/mocking_example.rb',
+ # 'examples/failing/diffing_spec.rb',
+ # 'examples/passing/stubbing_example.rb',
+ # 'examples/passing/pending_example.rb',
+ # '--format',
+ # 'html',
+ # "--diff"
+ # ]
+ # err = StringIO.new
+ # out = StringIO.new
+ # run_with ::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
+
+ it "should produce HTML identical to the one we designed manually with --diff" do
+ Dir.chdir(root) do
+ args = [
+ 'examples/failing/mocking_example.rb',
+ 'examples/failing/diffing_spec.rb',
+ 'examples/passing/stubbing_example.rb',
+ 'examples/passing/pending_example.rb',
+ '--format',
+ 'html',
+ "--diff"
+ ]
+ err = StringIO.new
+ out = StringIO.new
+ run_with ::Spec::Runner::OptionParser.parse(args, err, out)
+
+ seconds = /\d+\.\d+ seconds/
+ html = out.string.gsub seconds, 'x seconds'
+ expected_html.gsub! seconds, 'x seconds'
+
+ doc = Nokogiri::HTML(html)
+ backtraces = doc.search("div.backtrace").collect {|e| e.at("pre").inner_html}
+ doc.css("div.backtrace").remove
+
+ expected_doc = Nokogiri::HTML(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
+ end
+ end
+
+ it "should produce HTML identical to the one we designed manually with --dry-run" do
+ Dir.chdir(root) do
+ args = [
+ 'examples/failing/mocking_example.rb',
+ 'examples/failing/diffing_spec.rb',
+ 'examples/passing/stubbing_example.rb',
+ 'examples/passing/pending_example.rb',
+ '--format',
+ 'html',
+ "--dry-run"
+ ]
+ err = StringIO.new
+ out = StringIO.new
+ run_with ::Spec::Runner::OptionParser.parse(args, err, out)
+
+ seconds = /\d+\.\d+ seconds/
+ html = out.string.gsub seconds, 'x seconds'
+ expected_html.gsub! seconds, 'x seconds'
+
+ html.should =~ /This was a dry-run/m
+ end
+ end
+ end
+ end
+ end
+end
+
+rescue LoadError
+ warn "nokogiri not loaded -- skipping HtmlFormatter specs"
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/nested_text_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/nested_text_formatter_spec.rb
new file mode 100644
index 000000000..e64d3f615
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/nested_text_formatter_spec.rb
@@ -0,0 +1,329 @@
+require 'spec_helper'
+require 'spec/runner/formatter/nested_text_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe NestedTextFormatter do
+ with_sandboxed_options do
+ attr_reader :io, :options, :formatter, :example_group
+ before(:each) do
+ @io = StringIO.new
+ @formatter = NestedTextFormatter.new(options, io)
+ @example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe("ExampleGroup")
+ @example_group.example("example") {}
+ end
+
+ describe "where ExampleGroup has no superclass with a description" do
+ def example_group_started
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ end
+
+ before(:each) do
+ example_group_started
+ end
+
+ describe "#dump_summary" do
+ it "produces standard summary without pending when pending has a 0 count" do
+ formatter.dump_summary(3, 2, 1, 0)
+ io.string.should == <<-OUT
+ExampleGroup
+
+Finished in 3 seconds
+
+2 examples, 1 failure
+OUT
+ end
+
+ it "produces standard summary" do
+ formatter.dump_summary(3, 2, 1, 4)
+ io.string.should == <<-OUT
+ExampleGroup
+
+Finished in 3 seconds
+
+2 examples, 1 failure, 4 pending
+OUT
+ end
+ end
+
+ describe "#example_group_started" do
+
+ describe "when ExampleGroup has a nested description" do
+
+ describe "when ExampleGroup has no parents with nested description" do
+ it "pushes ExampleGroup name" do
+ io.string.should eql("ExampleGroup\n")
+ end
+ end
+
+ describe "when ExampleGroup has one parent with nested description" do
+ attr_reader :child_example_group
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ end
+
+ describe "and parent ExampleGroups have not been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ end
+
+ it "pushes ExampleGroup name with two spaces of indentation" do
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+OUT
+ end
+ end
+
+ describe "and parent ExampleGroups have been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ io.string = ""
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ end
+
+ it "should print only the indented ExampleGroup" do
+ io.string.should == <<-OUT
+ Child ExampleGroup
+OUT
+ end
+ end
+ end
+
+ describe "when ExampleGroup has two parents with nested description" do
+ attr_reader :child_example_group, :grand_child_example_group
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
+ end
+
+ describe "and parent ExampleGroups have not been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ end
+
+ it "prints the entire nested ExampleGroup heirarchy" do
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+OUT
+ end
+ end
+
+ describe "and parent ExampleGroups have been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ io.string = ""
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ end
+
+ it "should print only the indented ExampleGroup" do
+ io.string.should == <<-OUT
+ GrandChild ExampleGroup
+OUT
+ end
+ end
+ end
+ end
+
+ describe "when ExampleGroup nested description is blank" do
+ attr_reader :child_example_group
+
+ describe "and parent ExampleGroups have not been printed" do
+ def example_group_started
+ @child_example_group = Class.new(example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ end
+
+ it "should render only the parent ExampleGroup" do
+ io.string.should == <<-OUT
+ExampleGroup
+OUT
+ end
+ end
+
+ describe "and parent ExampleGroups have been printed" do
+ def example_group_started
+ @child_example_group = Class.new(example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ io.string = ""
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ end
+
+ it "should not render anything" do
+ io.string.should == ""
+ end
+ end
+ end
+
+ describe "when ExampleGroup nested description is blank" do
+ def example_group_started
+ example_group.set_description
+ super
+ end
+
+ it "should not render anything" do
+ io.string.should == ""
+ end
+ end
+
+ describe "with parallel groups" do
+ def make_group(name, parent=::Spec::Example::ExampleGroupDouble)
+ Class.new(parent).describe(name)
+ end
+
+ it "excludes duplicated group" do
+ parent_1 = make_group("ExampleGroup")
+ child_1 = make_group("Child ExampleGroup", parent_1)
+ grandchild_1 = make_group("GrandChild ExampleGroup", child_1)
+
+ parent_2 = make_group("ExampleGroup")
+ child_2 = make_group("Child ExampleGroup 2", parent_2)
+ grandchild_2 = make_group("GrandChild ExampleGroup", child_2)
+
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grandchild_1))
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grandchild_2))
+ io.string.should == <<-OUTPUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+ Child ExampleGroup 2
+ GrandChild ExampleGroup
+OUTPUT
+ end
+ end
+ end
+
+ describe "#example_failed" do
+ describe "where ExampleGroup has no superclasss with a description" do
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
+ end
+
+ describe "when having an expectation failure" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
+ end
+ end
+
+ describe "where ExampleGroup has two superclasses with a description" do
+ attr_reader :child_example_group, :grand_child_example_group
+
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ end
+
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ grand_child_example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
+ end
+
+ describe "when having an expectation" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ grand_child_example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
+ end
+ end
+ end
+
+ describe "#start" do
+ it "should push nothing on start" do
+ formatter.start(5)
+ io.string.should == <<-OUT
+ExampleGroup
+OUT
+ end
+ end
+
+ describe "#start_dump" do
+ it "should push nothing on start dump" do
+ formatter.start_dump
+ io.string.should == <<-OUT
+ExampleGroup
+OUT
+ end
+ end
+
+ describe "#example_passed" do
+ it "should push passing spec name" do
+ formatter.example_passed(example_group.it("spec"))
+ io.string.should == <<-OUT
+ExampleGroup
+ spec
+OUT
+ end
+ end
+
+ describe "#example_pending" do
+ it "should push pending example name and message" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.string.should == <<-OUT
+ExampleGroup
+ example (PENDING: reason)
+OUT
+ end
+
+ it "should dump pending" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.rewind
+ formatter.dump_pending
+ io.string.should =~ /Pending\:\n\nExampleGroup example \(reason\)\n/
+ end
+ end
+
+ def have_single_level_example_group_output(expected_output)
+ expected = "ExampleGroup\n #{expected_output}"
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
+ actual == expected
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/profile_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/profile_formatter_spec.rb
new file mode 100644
index 000000000..338df7089
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/profile_formatter_spec.rb
@@ -0,0 +1,70 @@
+require 'spec_helper'
+require 'spec/runner/formatter/profile_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe ProfileFormatter do
+
+ treats_method_missing_as_private
+
+ attr_reader :io, :formatter
+ before(:each) do
+ @io = StringIO.new
+ options = mock('options')
+ options.stub!(:colour).and_return(true)
+ options.stub!(:autospec).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(::Spec::Example::ExampleGroupDouble).describe('Parent')
+ child_example_group = Class.new(parent_example_group).describe('Child')
+
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(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.example_group_started(Spec::Example::ExampleGroupProxy.new(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
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
new file mode 100644
index 000000000..ea96ca6c4
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
@@ -0,0 +1,149 @@
+require 'spec_helper'
+require 'spec/runner/formatter/progress_bar_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe ProgressBarFormatter do
+
+ treats_method_missing_as_private
+
+ before(:each) do
+ @io = StringIO.new
+ @options = mock('options')
+ @options.stub!(:dry_run).and_return(false)
+ @options.stub!(:colour).and_return(false)
+ @options.stub!(:autospec).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
+ example_group = ExampleGroup.describe("example_group") do
+ specify "example" do
+ end
+ end
+ example = example_group.examples.first
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
+ @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
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_passed("spec")
+ @io.string.should == "\e[32m.\e[0m"
+ end
+
+ it "should push red F for failure spec" do
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_failed("spec", 98, Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new))
+ @io.string.should eql("\e[31mF\e[0m")
+ end
+
+ it "should push red F for error spec" do
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_failed("spec", 98, Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new))
+ @io.string.should eql("\e[31mF\e[0m")
+ end
+
+ it "should push blue F for fixed pending spec" do
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_failed("spec", 98, Spec::Runner::Reporter::Failure.new("g", "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 with file and line number" do
+ example_group = ExampleGroup.describe("example_group") do
+ specify "example" do
+ end
+ end
+ example = example_group.examples.first
+ file = __FILE__
+ line = __LINE__ - 5
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
+ @formatter.dump_pending
+ @io.string.should =~ /Pending:\n\nexample_group example \(message\)\n#{file}:#{line}/m
+ 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-1.3.1/spec/spec/runner/formatter/snippet_extractor_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/snippet_extractor_spec.rb
new file mode 100644
index 000000000..c683c39a8
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/snippet_extractor_spec.rb
@@ -0,0 +1,18 @@
+require 'spec_helper'
+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-1.3.1/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/specdoc_formatter_spec.rb
new file mode 100644
index 000000000..ac4e0eeea
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/specdoc_formatter_spec.rb
@@ -0,0 +1,159 @@
+require 'spec_helper'
+require 'spec/runner/formatter/specdoc_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe SpecdocFormatter do
+ with_sandboxed_options do
+ attr_reader :io, :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 = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
+ specify "example" do
+ end
+ end
+ end
+
+ describe "where ExampleGroup has no superclasss with a description" do
+ before do
+ example_group_started
+ end
+
+ def example_group_started
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ end
+
+ describe "#dump_summary" do
+ 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
+ end
+
+ describe "#example_group_started" do
+ it "should push ExampleGroup name" do
+ io.string.should eql("\nExampleGroup\n")
+ end
+ end
+
+ describe "#example_failed" do
+ describe "where ExampleGroup has no superclasss with a description" do
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should have_example_group_output("- spec (FAILED - 98)\n")
+ end
+ end
+
+ describe "when having an expectation failure" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should have_example_group_output("- spec (FAILED - 98)\n")
+ end
+ end
+ end
+
+ describe "where ExampleGroup has two superclasses with a description" do
+ attr_reader :child_example_group, :grand_child_example_group
+
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ end
+
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
+ end
+ end
+
+ describe "when having an expectation" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
+ end
+ 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
+
+ describe "#start" do
+ it "should push nothing on start" do
+ formatter.start(5)
+ io.string.should have_example_group_output("")
+ end
+ end
+
+ describe "#start_dump" do
+ it "should push nothing on start dump" do
+ formatter.start_dump
+ io.string.should have_example_group_output("")
+ end
+ end
+
+ describe "#example_passed" do
+ it "should push passing spec name" do
+ formatter.example_passed(example_group.it("spec"))
+ io.string.should have_example_group_output("- spec\n")
+ end
+ end
+
+ describe "#example_pending" do
+ it "should push pending example name and message" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.string.should have_example_group_output("- example (PENDING: reason)\n")
+ end
+
+ it "should dump pending" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.rewind
+ formatter.dump_pending
+ io.string.should =~ /Pending\:\n\nExampleGroup example \(reason\)\n/
+ end
+ 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
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html
new file mode 100644
index 000000000..bbef5eb8b
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=11">examples/failing/mocking_example.rb:11</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=20">examples/failing/mocking_example.rb:20</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=27">examples/failing/mocking_example.rb:27</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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://./examples/failing/mocking_example.rb&line=31">examples/failing/mocking_example.rb:31</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=13">examples/failing/diffing_spec.rb:13</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=34">examples/failing/diffing_spec.rb:34</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</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-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
new file mode 100644
index 000000000..54d761901
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.6.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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=11">./examples/failing/mocking_example.rb:11</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=20">./examples/failing/mocking_example.rb:20</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=27">./examples/failing/mocking_example.rb:27</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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://./examples/failing/mocking_example.rb&line=31">./examples/failing/mocking_example.rb:31</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=13">./examples/failing/diffing_spec.rb:13</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=34">./examples/failing/diffing_spec.rb:34</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</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-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html
new file mode 100644
index 000000000..54d761901
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.8.7.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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=11">./examples/failing/mocking_example.rb:11</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=20">./examples/failing/mocking_example.rb:20</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=27">./examples/failing/mocking_example.rb:27</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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://./examples/failing/mocking_example.rb&line=31">./examples/failing/mocking_example.rb:31</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=13">./examples/failing/diffing_spec.rb:13</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=34">./examples/failing/diffing_spec.rb:34</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</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-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html
new file mode 100644
index 000000000..24c98046b
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatted-1.9.1.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>
+ <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; height: 4em;
+}
+
+.rspec-report h1 {
+ margin: 0px 10px 0px 10px;
+ padding: 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ font-size: 1.8em;
+ position: absolute;
+}
+
+#summary {
+ margin: 0; padding: 5px 10px;
+ font-family: "Lucida Grande", Helvetica, sans-serif;
+ text-align: right;
+ top: 0px;
+ right: 0px;
+ float:right;
+}
+
+#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>
+</head>
+<body>
+<div class="rspec-report">
+
+<div id="rspec-header">
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
+
+ <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 &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=11">./examples/failing/mocking_example.rb:11</a> :in `block (2 levels) in <top (required)>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a> :in `block (4 levels) in <module:Formatter>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</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">10</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">11</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">12</span> <span class="keyword">end</span>
+<span class="linenum">13</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 &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=20">./examples/failing/mocking_example.rb:20</a> :in `block (2 levels) in <top (required)>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a> :in `block (4 levels) in <module:Formatter>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</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">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</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 &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=27">./examples/failing/mocking_example.rb:27</a> :in `block (2 levels) in <top (required)>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a> :in `block (4 levels) in <module:Formatter>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</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="linenum">26</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 class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</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://./examples/failing/mocking_example.rb&line=31">./examples/failing/mocking_example.rb:31</a> :in `block (2 levels) in <top (required)>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a> :in `block (4 levels) in <module:Formatter>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `block (3 levels) in <module:Formatter>'</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</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">31</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">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</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
+-behaviour driven development
++behavior driven development
+ framework for Ruby
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=13">./examples/failing/diffing_spec.rb:13</a> :in `block (2 levels) in <top (required)>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a> :in `block (4 levels) in <module:Formatter>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `block (3 levels) in <module:Formatter>'</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;
+
+
+(compared using eql?)
+</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=34">./examples/failing/diffing_spec.rb:34</a> :in `block (2 levels) in <top (required)>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a> :in `block (4 levels) in <module:Formatter>'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `block (3 levels) in <module:Formatter>'</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-1.3.1/spec/spec/runner/formatter/text_mate_formatter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatter_spec.rb
new file mode 100644
index 000000000..a35ad89f5
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/formatter/text_mate_formatter_spec.rb
@@ -0,0 +1,106 @@
+require 'spec_helper'
+
+begin # See rescue all the way at the bottom
+
+require 'nokogiri' # 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-#{::RUBY_VERSION}#{suffix}.html"
+ end
+
+ def produces_html_identical_to_manually_designed_document(opt)
+ root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
+
+ Dir.chdir(root) do
+ args = [
+ 'examples/failing/mocking_example.rb',
+ 'examples/failing/diffing_spec.rb',
+ 'examples/passing/stubbing_example.rb',
+ 'examples/passing/pending_example.rb',
+ '--format',
+ 'textmate',
+ opt
+ ]
+ err = StringIO.new
+ out = StringIO.new
+
+ run_with ::Spec::Runner::OptionParser.parse(args, err, out)
+
+ yield(out.string)
+ end
+ end
+
+ # Uncomment this spec temporarily in order to overwrite the expected with actual.
+ # Use with care!!!
+ # describe "functional spec file generator" do
+ # it "generates a new comparison file" do
+ # Dir.chdir(root) do
+ # args = ['examples/failing/mocking_example.rb', 'examples/failing/diffing_spec.rb', 'examples/passing/stubbing_example.rb', 'examples/passing/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-#{::RUBY_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 = Nokogiri::HTML(html)
+ backtraces = doc.search("div.backtrace a")
+ doc.search("div.backtrace").remove
+
+ expected_doc = Nokogiri::HTML(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
+
+rescue LoadError
+ warn "nokogiri not loaded -- skipping TextMateFormatter specs"
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/heckle_runner_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/heckle_runner_spec.rb
new file mode 100644
index 000000000..287ff856a
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/heckle_runner_spec.rb
@@ -0,0 +1,78 @@
+require 'spec_helper'
+unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} || Spec::Ruby.version.to_f == 1.9
+ 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", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Zap", "three", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Zap", "four", Spec::Runner.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", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.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", Spec::Runner.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", Spec::Runner.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-1.3.1/spec/spec/runner/heckler_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/heckler_spec.rb
new file mode 100644
index 000000000..00869df6e
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/heckler_spec.rb
@@ -0,0 +1,20 @@
+if Spec::Ruby.version.to_f < 1.9
+ require 'spec_helper'
+ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
+ require 'spec/runner/heckle_runner'
+
+ describe "Heckler" do
+ it "should run examples on tests_pass?" do
+ sub = Class.new(Spec::Runner::Heckler) do
+ def initialize(klass_name, method_name, rspec_options)
+ @rspec_options = rspec_options
+ end
+ end
+ opts = mock('options')
+ opts.should_receive(:run_examples).and_return(true)
+ heckler = sub.new('klass','method',opts)
+ heckler.tests_pass?
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query/line_number_query_fixture.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query/line_number_query_fixture.rb
new file mode 100644
index 000000000..82a257d3b
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query/line_number_query_fixture.rb
@@ -0,0 +1,70 @@
+require 'spec_helper'
+
+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 LineNumberQuerySubject
+end
+
+describe LineNumberQuerySubject do
+
+ it "5" do
+ end
+
+end
+
+describe LineNumberQuerySubject, "described" do
+
+ it "6" do
+ end
+
+end
+
+describe LineNumberQuerySubject, "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-1.3.1/spec/spec/runner/line_number_query_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query_spec.rb
new file mode 100644
index 000000000..e4e11050d
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/line_number_query_spec.rb
@@ -0,0 +1,129 @@
+require 'spec_helper'
+
+describe "LineNumberQuery" do
+ with_sandboxed_options do
+ attr_reader :parser, :file
+
+ before do
+ @parser = Spec::Runner::LineNumberQuery.new(options)
+ @file = "#{File.dirname(__FILE__)}/line_number_query/line_number_query_fixture.rb"
+ load 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 == "LineNumberQuerySubject"
+ end
+
+ it "should find context and spec name for type" do
+ parser.spec_name_for(file, 28).should == "LineNumberQuerySubject 5"
+ end
+
+ it "should find context and description for type" do
+ parser.spec_name_for(file, 33).should == "LineNumberQuerySubject described"
+ end
+
+ it "should find context and description and example for type" do
+ parser.spec_name_for(file, 36).should == "LineNumberQuerySubject described 6"
+ end
+
+ it "should find context and description for type with modifications" do
+ parser.spec_name_for(file, 40).should == "LineNumberQuerySubject described"
+ end
+
+ it "should find context and described and example for type with modifications" do
+ parser.spec_name_for(file, 43).should == "LineNumberQuerySubject 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
+
+ it "should handle paths which contain colons" do
+ fixture =
+ { "c:/somepath/somefile.rb:999:in 'method'" => "c:/somepath/somefile.rb",
+ "./somepath/somefile:999" => "./somepath/somefile" }
+ fixture.each_pair do |input, expected|
+ parser.send(:parse_location, input ).should == [expected, 999]
+ end
+ end
+
+ it "should handle paths which contain colons and backslashes" do
+ fixture =
+ { "c:\\somepath\\somefile.rb:999:in 'method'" => "c:\\somepath\\somefile.rb",
+ ".\\somepath\\somefile:999" => ".\\somepath\\somefile" }
+ fixture.each_pair do |input, expected|
+ parser.send(:parse_location, input ).should == [expected, 999]
+ end
+ end
+
+ it "ignores example group base classes which have no location" do
+ options = stub('options', :example_groups => [
+ stub('example_group', :location => nil)
+ ])
+ parser = Spec::Runner::LineNumberQuery.new(options)
+ parser.spec_name_for('foo',37).should == nil
+ end
+
+ describe "#example_line_for" do
+ it "should find example declared on same line" do
+ parser.example_line_for(file, 5).should == 5
+ end
+
+ it "should find example declared on the line above, while still inside the example" do
+ parser.example_line_for(file, 6).should == 5
+ end
+
+ it "should find example declared from empty line below the example" do
+ parser.example_line_for(file, 7).should == 5
+ end
+
+ it "should find the group declared on the same line" do
+ parser.example_line_for(file, 3).should == 3
+ end
+
+ it "should find the group declared above the first example" do
+ parser.example_line_for(file, 4).should == 3
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
new file mode 100644
index 000000000..13b79432c
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
@@ -0,0 +1,51 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ describe NoisyBacktraceTweaker do
+ before(:each) do
+ @error = RuntimeError.new
+ @tweaker = NoisyBacktraceTweaker.new
+ end
+
+ it "gracefully handles nil backtrace" do
+ lambda do
+ @tweaker.tweak_backtrace(@error)
+ end.should_not raise_error
+ end
+
+ it "cleans 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
+
+ it "preserves lines in lib/spec" 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 "preserves lines in spec/" do
+ @error.set_backtrace(["/lib/spec/expectations/anything.rb"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should_not be_empty
+ end
+
+ it "preserves lines in bin/spec" do
+ @error.set_backtrace(["bin/spec:"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should_not be_empty
+ end
+
+ it "ignores custom patterns" do
+ @tweaker.ignore_patterns(/custom_pattern/)
+ @error.set_backtrace(["custom_pattern"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should_not be_empty
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/option_parser_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/option_parser_spec.rb
new file mode 100644
index 000000000..3b31f35c1
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/option_parser_spec.rb
@@ -0,0 +1,551 @@
+require 'spec_helper'
+require 'spec/runner/resources/custom_example_group_runner'
+require 'fakefs/spec_helpers'
+
+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
+
+ describe "with fakefs" do
+ include FakeFS::SpecHelpers
+
+ it "should not use colour by default" do
+ options = parse([])
+ options.colour.should == false
+ end
+
+ it "should use progress bar formatter by default" do
+ options = parse([])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
+ end
+ end
+
+ it "should leave the submitted argv alone" do
+ args = ["--pattern", "foo"]
+ @parser.order!(args)
+ args.should == ["--pattern", "foo"]
+ end
+
+ it "should accept files to include" do
+ options = parse(["--pattern", "foo"])
+ options.filename_pattern.should == "foo"
+ end
+
+ it "should accept debugger option" do
+ options = parse(["--debugger"])
+ options.debug.should be_true
+ end
+
+ it "should accept -u form of debugger option" do
+ options = parse(["-u"])
+ options.debug.should be_true
+ end
+
+ it "should turn off the debugger option if drb is specified later" do
+ @parser.stub!(:parse_drb).with(no_args).and_return(true)
+ options = parse(["-u", "--drb"])
+ options.debug.should be_false
+ end
+
+ it "should turn off the debugger option if drb is specified first" do
+ @parser.stub!(:parse_drb).with(no_args).and_return(true)
+ options = parse(["--drb", "-u"])
+ options.debug.should be_false
+ end
+
+ it "should accept port option" do
+ options = parse(["--port", "9000"])
+ options.drb_port.should == 9000
+ end
+
+ it 'should require argument to port option' do
+ lambda { parse(["--port"]) }.should raise_error(OptionParser::MissingArgument)
+ 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 print help to stdout if no args and spec_comand?" do
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(true)
+ options = parse([])
+ @out.rewind
+ @out.read.should match(/Usage: spec \(FILE\(:LINE\)\?\|DIRECTORY\|GLOB\)\+ \[options\]/m)
+ end
+
+ it "should not print help to stdout if no args and NOT spec_command?" do
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(false)
+ options = parse([])
+ @out.rewind
+ @out.read.should == ""
+ end
+
+ it "should print help to stdout" do
+ options = parse(["--help"])
+ @out.rewind
+ @out.read.should match(/Usage: spec \(FILE\(:LINE\)\?\|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+/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 formatter when format is html" do
+ options = parse(["--format", "html"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
+ end
+
+ it "should use silent formatter when format is s" do
+ options = parse(["--format", "l"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SilentFormatter)
+ end
+
+ it "should use silent formatter when format is silent" do
+ options = parse(["--format", "silent"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SilentFormatter)
+ 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 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 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 use nested text formatter when format is s" do
+ options = parse(["--format", "n"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
+ end
+
+ it "should use nested text formatter when format is nested" do
+ options = parse(["--format", "nested"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::NestedTextFormatter)
+ 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(:each) do
+ @original_rspec_options = Spec::Runner.options
+ @file = "#{File.dirname(__FILE__)}/line_number_query/line_number_query_fixture.rb"
+ @dir = File.dirname(file)
+ end
+
+ after(:each) do
+ Spec::Runner.use @original_rspec_options
+ end
+
+ def parse(args)
+ options = super
+ Spec::Runner.use options
+ options.filename_pattern = "*_fixture.rb"
+ options
+ end
+
+ describe 'with the --line flag' do
+ it "should correctly identify the 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 specified file is a dir" 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 providing a line number/n)
+ end
+
+
+ it "should fail with error message if file does not exist" 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" do
+ options = parse([file, file, "--line", "169"])
+ options.run_examples
+ @err.string.should match(/Only one file can be specified when providing a line number/n)
+ end
+
+ it "should fail with error message if using simultaneously with --example" do
+ options = parse([file, "--example", "some example", "--line", "169"])
+ options.run_examples
+ @err.string.should match(/You cannot use --example and specify a line number/n)
+ end
+ end
+
+ describe 'with the colon syntax (filename:LINE_NUMBER)' do
+
+ it "should strip the line number from the file name" do
+ options = parse(["#{file}:13"])
+ options.files.should include(file)
+ end
+
+ it "should correctly identify the spec" do
+ options = parse(["#{file}: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 specified file is a dir" do
+ options = parse(["#{dir}:169"])
+ options.line_number.should == 169
+ options.run_examples
+ @err.string.should match(/You must specify one file, not a directory when providing a line number/n)
+ end
+
+
+ it "should fail with error message if file does not exist" do
+ options = parse(["some file:169"])
+ proc do
+ options.run_examples
+ end.should raise_error
+ end
+
+ it "should fail with error message if more than one files are specified" do
+ options = parse([file, "#{file}:169"])
+ options.run_examples
+ @err.string.should match(/Only one file can be specified when providing a line number/n)
+ end
+
+ it "should fail with error message if using simultaneously with --example" do
+ options = parse(["#{file}:169", "--example", "some example"])
+ options.run_examples
+ @err.string.should match(/You cannot use --example and specify a line number/n)
+ end
+ 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 is not supported/)
+ end
+ elsif Spec::Ruby.version.to_f == 1.9
+ it "should barf when --heckle is specified (and platform is Ruby 1.9)" do
+ lambda do
+ options = parse(["--heckle", "Spec"])
+ end.should raise_error(StandardError, /Heckle is not supported/)
+ 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 run parse drb after parsing options" do
+ @parser.should_receive(:parse_drb).with(no_args).and_return(true)
+ options = parse(["--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ end
+
+ it "should send all the arguments other than --drb back to the parser after parsing options" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
+ options.argv.should == ["example_file.rb", "--colour"]
+ end
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ end
+
+ it "runs specs locally if no drb is running when --drb is specified" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(false)
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ options.__send__(:examples_should_be_run?).should be_true
+ end
+
+ it "says its running specs locally if no drb is running when --drb is specified" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(false)
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ options.error_stream.rewind
+ options.error_stream.string.should =~ /Running specs locally/
+ end
+
+ it "does not run specs locally if drb is running when --drb is specified" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(true)
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ options.__send__(:examples_should_be_run?).should be_false
+ 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
+
+ it "sets options.autospec to true with --autospec" do
+ options = parse(["--autospec"])
+ options.autospec.should be(true)
+ end
+
+ describe "implicitly loading spec/spec.opts" do
+ include FakeFS::SpecHelpers
+
+ it "uses spec/spec.opts if present" do
+ File.open('spec/spec.opts', 'w') { |f| f.write "--colour" }
+ options = parse(['ignore.rb'])
+ options.colour.should be(true)
+ end
+
+ it "does not try to load spec/spec.opts if not present" do
+ FileUtils.rm 'spec/spec.opts'
+ options = parse(['ignore.rb'])
+ options.colour.should be(false)
+ end
+
+ it "uses specified opts if supplied" do
+ options = nil
+ File.open("spec/spec.opts",'w') { |f| f.write "" }
+ File.open("spec/alternate.opts",'w') { |f| f.write "--colour" }
+ options = parse(['-O','spec/alternate.opts'])
+ options.colour.should be(true)
+ end
+ end
+
+
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/options_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/options_spec.rb
new file mode 100644
index 000000000..63f9fa43d
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/options_spec.rb
@@ -0,0 +1,554 @@
+require 'spec_helper'
+require 'spec/runner/resources/custom_example_group_runner'
+
+module Spec
+ module Runner
+ describe Options do
+ before(:each) do
+ @err = StringIO.new('')
+ @out = StringIO.new('')
+ @options = Options.new(@err, @out)
+
+ before_suite_parts = []
+ after_suite_parts = []
+ @options.stub!(:before_suite_parts).and_return(before_suite_parts)
+ @options.stub!(:after_suite_parts).and_return(after_suite_parts)
+ end
+
+ after(:each) do
+ Spec::Expectations.differ = nil
+ end
+
+ describe "#require_ruby_debug" do
+ it "should require ruby-debug" do
+ @options.stub!(:require)
+ @options.should_receive(:require).with("ruby-debug")
+ @options.require_ruby_debug
+ end
+ 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
+
+ it "adds custom ignored backtrace patterns" do
+ Spec::Runner.configuration.stub!(:ignored_backtrace_patterns).and_return([/custom_pattern/])
+ @options.run_examples
+ @options.backtrace_tweaker.ignored_patterns.should include(/custom_pattern/)
+ end
+ end
+
+ describe "#dry_run" do
+ it "should default to false" do
+ @options.dry_run.should == false
+ end
+ end
+
+ describe "#debug" do
+ it "should default to false" do
+ @options.debug.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 "debug option specified" do
+ it "should cause ruby_debug to be required and do nothing" do
+ @options.debug = true
+ @options.should_receive(:require_ruby_debug)
+ @options.run_examples.should be_true
+ end
+ end
+
+ describe "debug option not specified" do
+ it "should not cause ruby_debug to be required" do
+ @options.debug = false
+ @options.should_not_receive(:require_ruby_debug)
+ @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 "#drb_port" do
+ it "returns a number" do
+ @options.drb_port = "400"
+ @options.drb_port.should == 400
+ end
+ end
+
+ describe "#number_of_examples" do
+ context "when --example is parsed" do
+ it "provides the number of examples parsed instead of the total number of examples collected" do
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
+ it "uses this example_group 1" do; end
+ it "uses this example_group 2" do; end
+ it "uses this example_group 3" do; end
+ end
+ @options.add_example_group @example_group
+ @options.parse_example("an example")
+ @options.number_of_examples.should == 1
+ end
+ end
+ end
+
+ describe "#add_example_group affecting passed in example_group" do
+ it "runs all examples 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.clear
+
+ @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.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
+ describe "with global predicate matchers" do
+ it "defines global predicate matcher methods on ExampleMethods" do
+ Spec::Runner.configuration.stub!(:predicate_matchers).and_return({:this => :that?})
+ group = Class.new(::Spec::Example::ExampleGroupDouble).describe("Some Examples")
+ example = group.new(::Spec::Example::ExampleProxy.new)
+
+ @options.run_examples
+ example.this
+ end
+
+ after(:each) do
+ Spec::Example::ExampleMethods.class_eval "undef :this"
+ end
+ end
+
+ describe "with a mock framework defined as a Symbol" do
+ it "includes Spec::Adapters::MockFramework" do
+ Spec::Runner.configuration.stub!(:mock_framework).and_return('spec/adapters/mock_frameworks/rspec')
+
+ Spec::Example::ExampleMethods.should_receive(:include).with(Spec::Adapters::MockFramework)
+
+ @options.run_examples
+ end
+ end
+
+ describe "with a mock framework defined as a Module" do
+ it "includes the module in ExampleMethods" do
+ mod = Module.new
+ Spec::Runner.configuration.stub!(:mock_framework).and_return(mod)
+ Spec::Example::ExampleMethods.should_receive(:include).with(mod)
+ @options.run_examples
+ end
+ end
+
+ describe "when not given a custom runner" do
+ it "should use the standard" 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
+ end
+
+ describe "when given a custom runner" do
+ it "should use the custom runner" 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 the 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
+ end
+
+ describe "when there are examples" do
+ before(:each) do
+ @example_group = Class.new(::Spec::Example::ExampleGroup)
+ @options.add_example_group @example_group
+ @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
+
+ describe "and the suite passes" do
+ before do
+ @example_group.should_receive(:run).and_return(true)
+ end
+
+ it "invokes after_suite_parts with true" do
+ success_result = nil
+ @options.after_suite_parts << lambda do |success|
+ success_result = success
+ end
+
+ @options.run_examples
+ success_result.should be_true
+ end
+ end
+
+ describe "and the suite fails" do
+ before(:each) do
+ @example_group.should_receive(:run).and_return(false)
+ end
+
+ it "invokes after_suite_parts with false" do
+ success_result = nil
+ @options.after_suite_parts << lambda do |success|
+ success_result = success
+ end
+
+ @options.run_examples
+ success_result.should be_false
+ end
+ end
+
+ describe "when using heckle runner" do
+ before(:each) do
+ @heckle_runner_mock = mock("HeckleRunner")
+ @options.heckle_runner = @heckle_runner_mock
+ end
+
+ it "should heckle" do
+ @heckle_runner_mock.should_receive(:heckle_with)
+ @options.run_examples
+ end
+
+ it "shouldn't heckle recursively" do
+ heckled = false
+ @heckle_runner_mock.should_receive(:heckle_with) {
+ heckled.should == false
+ heckled = true
+ @options.run_examples
+ }
+ @options.run_examples
+ end
+
+ it "shouldn't load spec files twice" do
+ example_runner = mock("ExampleGroupRunner")
+ example_runner_inside_heckle = mock("ExampleGroupRunner inside Heckle")
+
+ ExampleGroupRunner.should_receive(:new).twice.and_return(
+ example_runner, example_runner_inside_heckle
+ )
+
+ example_runner.stub!(:run)
+ example_runner.should_receive(:load_files)
+ @heckle_runner_mock.stub!(:heckle_with).and_return { @options.run_examples }
+ example_runner_inside_heckle.stub!(:run)
+ example_runner_inside_heckle.should_not_receive(:load_files)
+
+ @options.run_examples
+ end
+ 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
+
+ it "invokes after_suite_parts with true" do
+ success_result = nil
+ @options.after_suite_parts << lambda do |success|
+ success_result = success
+ end
+
+ @options.run_examples
+ success_result.should be_true
+ end
+ end
+ end
+
+ describe "#add_dir_from_project_root_to_load_path" do
+ it "handles nil gracefully" do
+ load_path = double().as_null_object
+ @options.stub(:project_root).and_return(nil)
+ @options.add_dir_from_project_root_to_load_path(nil,load_path)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture.rb
new file mode 100644
index 000000000..8a3a9fc72
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture.rb
@@ -0,0 +1,7 @@
+require 'spec_helper'
+
+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-1.3.1/spec/spec/runner/output_one_time_fixture_runner.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture_runner.rb
new file mode 100644
index 000000000..b6b3761e4
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_fixture_runner.rb
@@ -0,0 +1,7 @@
+require "spec_helper"
+
+triggering_double_output = Spec::Runner.options
+options = Spec::Runner::OptionParser.parse(
+ [File.dirname(__FILE__) + "/output_one_time_fixture.rb"], $stderr, $stdout
+)
+Spec::Runner::CommandLine.run(options)
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_spec.rb
new file mode 100644
index 000000000..c91bb0ffb
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/output_one_time_spec.rb
@@ -0,0 +1,15 @@
+require 'spec_helper'
+require 'ruby_forker'
+
+module Spec
+ module Runner
+ describe CommandLine do
+ include RubyForker
+ it "should not output twice" do
+ output = ruby "-Ilib bin/spec spec/spec/runner/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 \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
new file mode 100644
index 000000000..725434775
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
@@ -0,0 +1,123 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ describe QuietBacktraceTweaker do
+ before(:each) do
+ @error = RuntimeError.new
+ @tweaker = QuietBacktraceTweaker.new
+ end
+
+ it "gracefully handles nil backtrace" do
+ expect do
+ @tweaker.tweak_backtrace(@error)
+ end.to_not raise_error
+ end
+
+ it "gracefully handles backtraces with newlines" do
+ @error.set_backtrace(["we like\nbin/spec:\nnewlines"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should include("we like\nnewlines")
+ end
+
+ it "cleans 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
+
+ it "preserves lines 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 "removes lines in lib/spec" do
+ ["expectations", "mocks", "runner"].each do |child|
+ element="/lib/spec/#{child}/anything.rb"
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+ end
+
+ it "removes lines in bin/spec" do
+ @error.set_backtrace(["bin/spec:"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty
+ end
+
+ it "preserves lines in spec" do
+ @error.set_backtrace(["spec/foo/bar_spec.rb"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should == ["spec/foo/bar_spec.rb"]
+ end
+
+ it "preserves lines in ./spec" do
+ @error.set_backtrace(["./spec/foo/bar_spec.rb"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should == ["./spec/foo/bar_spec.rb"]
+ end
+
+ it "preserves lines in /path/to/project/spec" do
+ @error.set_backtrace(["/path/to/project/spec/foo/bar_spec.rb"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should == ["/path/to/project/spec/foo/bar_spec.rb"]
+ end
+
+ it "removes lines in mock_frameworks/rspec" do
+ element = "mock_frameworks/rspec"
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+
+ it "removes custom patterns in regexp form" do
+ element = "/vendor/lib/custom_pattern/"
+ @tweaker.ignore_patterns /custom_pattern/
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+
+ it "removes custom patterns in string form" do
+ element = "/vendor/lib/custom_pattern/"
+ @tweaker.ignore_patterns "custom_pattern"
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+
+ it "removes lines in mock_frameworks/rspec" do
+ element = "mock_frameworks/rspec"
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+
+ it "removes lines in rspec gem" do
+ ["/rspec-1.2.3/lib/spec.rb","/rspec-1.2.3/lib/spec/anything.rb","bin/spec:123"].each do |element|
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+ end
+
+ it "removes lines in pre-release rspec gems" do
+ ["/rspec-1.2.3.a1.gem/lib/spec.rb","/rspec-1.2.3.b1.gem/lib/spec.rb","/rspec-1.2.3.rc1.gem/lib/spec.rb"].each do |element|
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+ end
+
+ it "removes lines in spork gem" do
+ ["/spork-1.2.3/lib/spec.rb","/spork-1.2.3/lib/spec/anything.rb","bin/spork:123"].each do |element|
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/reporter_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/reporter_spec.rb
new file mode 100644
index 000000000..556387dc7
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/reporter_spec.rb
@@ -0,0 +1,244 @@
+require 'spec_helper'
+
+module Spec
+ module Runner
+ describe Reporter do
+ attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group, :example_group_proxy, :example_proxy
+ 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")
+ @example_group_proxy = Spec::Example::ExampleGroupProxy.new(@example_group)
+ @example_proxy = Spec::Example::ExampleProxy.new
+ example_group.notify(reporter)
+ end
+
+ def failure
+ Mocks::ArgumentMatchers::DuckTypeMatcher.new(:header, :exception)
+ end
+
+ def create_example_group(text)
+ example_group = Spec::Example::ExampleGroup.describe(text) do
+ it "should do something" do
+ end
+ end
+ 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(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ end
+
+ it "should handle multiple example_groups with same name" do
+ formatter.should_receive(:example_group_started).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)
+ create_example_group("example_group").notify(reporter)
+ reporter.example_started(description_of("spec 1"))
+ reporter.example_finished(description_of("spec 1"))
+ create_example_group("example_group").notify(reporter)
+ reporter.example_started(description_of("spec 2"))
+ reporter.example_finished(description_of("spec 2"))
+ create_example_group("example_group").notify(reporter)
+ reporter.example_started(description_of("spec 3"))
+ reporter.example_finished(description_of("spec 3"))
+ reporter.dump
+ end
+
+ def description_of(example)
+ ::Spec::Example::ExampleProxy.new(String === example ? example : example.description)
+ end
+
+ it "should handle multiple examples with the same name" do
+ error=RuntimeError.new
+ passing = ::Spec::Example::ExampleGroupDouble.new(example_proxy)
+ failing = ::Spec::Example::ExampleGroupDouble.new(example_proxy)
+
+ formatter.should_receive(:example_group_started).exactly(2).times
+ formatter.should_receive(:example_passed).with(description_of(passing)).exactly(2).times
+ formatter.should_receive(:example_failed).with(description_of(failing), 1, failure)
+ formatter.should_receive(:example_failed).with(description_of(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
+
+ create_example_group("example_group").notify(reporter)
+ reporter.example_finished(description_of(passing))
+ reporter.example_finished(description_of(failing), error)
+
+ create_example_group("example_group").notify(reporter)
+ reporter.example_finished(description_of(passing))
+ reporter.example_finished(description_of(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 "reporting one passing example" do
+ it "should tell formatter example passed" do
+ formatter.should_receive(:example_passed)
+ reporter.example_finished(description_of("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(description_of("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(description_of("example"))
+ reporter.dump
+ end
+ end
+
+ describe "reporting one failing example" do
+ it "should tell formatter that example failed" do
+ example = example_group.it("should do something") {}
+ formatter.should_receive(:example_failed)
+ reporter.example_finished(description_of(example), RuntimeError.new)
+ end
+
+ it "should delegate to backtrace tweaker" do
+ formatter.should_receive(:example_failed)
+ backtrace_tweaker.should_receive(:tweak_backtrace)
+ reporter.example_finished(example_proxy, RuntimeError.new)
+ end
+
+ it "should account for failing example in stats" do
+ example = ::Spec::Example::ExampleGroupDouble.new(example_proxy)
+ formatter.should_receive(:example_failed).with(description_of(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(description_of(example), RuntimeError.new)
+ reporter.dump
+ end
+
+ end
+
+ describe "reporting one pending example (ExamplePendingError)" do
+ before :each do
+ @pending_error = Spec::Example::ExamplePendingError.new("reason")
+ end
+
+ it "should tell formatter example is pending" do
+ example = ExampleGroup.new(example_proxy)
+ formatter.should_receive(:example_pending).with(description_of(example), "reason")
+ formatter.should_receive(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+ end
+
+ it "should account for pending example in stats" do
+ example = ExampleGroup.new(example_proxy)
+ formatter.should_receive(:example_pending).with(description_of(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(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+ reporter.dump
+ end
+
+ describe "to formatters which have example_pending's arity of 3 (which is now deprecated)" do
+ before :each do
+ Spec.stub!(:warn)
+
+ @deprecated_formatter = Class.new(@formatter.class) do
+ attr_reader :example_passed_to_method, :message_passed_to_method
+
+ def example_pending(example_passed_to_method, message_passed_to_method, deprecated_pending_location)
+ @example_passed_to_method = example_passed_to_method
+ @message_passed_to_method = message_passed_to_method
+ end
+ end.new(options, formatter_output)
+
+ options.formatters << @deprecated_formatter
+ end
+
+ it "should pass the correct example description to the formatter" do
+ proxy = Spec::Example::ExampleProxy.new("name")
+ example = ExampleGroup.new(proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+
+ @deprecated_formatter.example_passed_to_method.should == proxy
+ end
+
+ it "should pass the correct pending error message to the formatter" do
+ example = ExampleGroup.new(example_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+
+ @deprecated_formatter.message_passed_to_method.should == @pending_error.message
+ end
+
+ it "should raise a deprecation warning" do
+ Spec.should_receive(:warn)
+
+ example = ExampleGroup.new(example_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+ end
+ end
+ end
+
+ describe "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 should do something' FIXED"
+ end
+ formatter.should_receive(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example_group.examples.first), Spec::Example::PendingExampleFixedError.new("reason"))
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_bar.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_bar.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_bar.rb
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_foo.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_foo.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_foo.rb
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/a_spec.rb
new file mode 100644
index 000000000..d9b67cc76
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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-1.3.1/spec/spec/runner/resources/custom_example_group_runner.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/custom_example_group_runner.rb
new file mode 100644
index 000000000..edcf54e96
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/custom_example_group_runner.rb
@@ -0,0 +1,14 @@
+module Custom
+ class ExampleGroupRunner
+ attr_reader :options, :arg
+ def initialize(options, arg)
+ @options, @arg = options, arg
+ end
+
+ def load_files(files)
+ end
+
+ def run
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/utf8_encoded.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/utf8_encoded.rb
new file mode 100644
index 000000000..7cbdd6908
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/resources/utf8_encoded.rb
@@ -0,0 +1,8 @@
+# encoding: utf-8
+module Custom
+ class ExampleUTF8ClassNameVarietà
+ def self.è
+ così = :però
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/spec.opts b/vendor/gems/rspec-1.3.1/spec/spec/runner/spec.opts
new file mode 100644
index 000000000..fd816a424
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/spec.opts
@@ -0,0 +1,2 @@
+--diff
+--colour \ No newline at end of file
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/spec_drb.opts b/vendor/gems/rspec-1.3.1/spec/spec/runner/spec_drb.opts
new file mode 100644
index 000000000..61f260b71
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner/spec_drb.opts
@@ -0,0 +1,2 @@
+--colour
+--drb
diff --git a/vendor/gems/rspec-1.3.1/spec/spec/runner/spec_spaced.opts b/vendor/gems/rspec-1.3.1/spec/spec/runner/spec_spaced.opts
new file mode 100644
index 000000000..6b3efd20f
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/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-1.3.1/spec/spec/runner_spec.rb b/vendor/gems/rspec-1.3.1/spec/spec/runner_spec.rb
new file mode 100644
index 000000000..3b55be7a7
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec/runner_spec.rb
@@ -0,0 +1,13 @@
+require 'spec_helper'
+
+module Spec
+ describe Runner do
+ describe ".configure" do
+ it "should yield global configuration" do
+ Spec::Runner.configure do |config|
+ config.should equal(Spec::Runner.configuration)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/spec_helper.rb b/vendor/gems/rspec-1.3.1/spec/spec_helper.rb
new file mode 100644
index 000000000..d746d0871
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/spec_helper.rb
@@ -0,0 +1,113 @@
+$: << '.' # for ruby 1.9
+require 'stringio'
+
+$_spec_spec = true # Prevents Kernel.exit in various places
+
+require 'spec'
+require 'spec/mocks'
+require 'spec/runner/differs/default'
+require 'spec/autorun'
+
+require 'support/spec_classes'
+require 'support/macros'
+
+def jruby?
+ ::RUBY_PLATFORM == 'java'
+end
+
+module Spec
+ module Example
+ class NonStandardError < Exception; end
+ end
+
+ module Matchers
+ def fail
+ raise_error(Spec::Expectations::ExpectationNotMetError)
+ end
+
+ def fail_with(message)
+ raise_error(Spec::Expectations::ExpectationNotMetError, message)
+ end
+
+ def exception_from(&block)
+ exception = nil
+ begin
+ yield
+ rescue StandardError => e
+ exception = e
+ end
+ exception
+ end
+
+ def run_with(options)
+ ::Spec::Runner::CommandLine.run(options)
+ end
+
+ def with_ruby(version)
+ yield if RUBY_VERSION =~ Regexp.compile("^#{version.to_s}")
+ end
+ end
+end
+
+def with_sandboxed_options
+ attr_reader :options
+
+ before(:each) do
+ @original_rspec_options = ::Spec::Runner.options
+ ::Spec::Runner.use(@options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new))
+ end
+
+ after(:each) do
+ ::Spec::Runner.use(@original_rspec_options)
+ end
+
+ yield
+end
+
+def with_sandboxed_config
+ attr_reader :config
+
+ before(:each) do
+ @config = ::Spec::Runner::Configuration.new
+ @original_configuration = ::Spec::Runner.configuration
+ spec_configuration = @config
+ ::Spec::Runner.instance_eval {@configuration = spec_configuration}
+ end
+
+ after(:each) do
+ original_configuration = @original_configuration
+ ::Spec::Runner.instance_eval {@configuration = original_configuration}
+ ::Spec::Example::ExampleGroupFactory.reset
+ end
+
+ yield
+end
+
+module Spec
+ module Example
+ module Resettable
+ def reset # :nodoc:
+ @before_all_parts = nil
+ @after_all_parts = nil
+ @before_each_parts = nil
+ @after_each_parts = nil
+ end
+ end
+ class ExampleGroup
+ extend Resettable
+ end
+ class ExampleGroupDouble < ExampleGroup
+ ::Spec::Runner.options.remove_example_group self
+ def register_example_group(klass)
+ #ignore
+ end
+ def initialize(proxy=nil, &block)
+ super(proxy || ExampleProxy.new, &block)
+ end
+ end
+ end
+end
+
+Spec::Runner.configure do |config|
+ config.extend(Macros)
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/support/macros.rb b/vendor/gems/rspec-1.3.1/spec/support/macros.rb
new file mode 100644
index 000000000..6322060b0
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/support/macros.rb
@@ -0,0 +1,29 @@
+module Macros
+ def treats_method_missing_as_private(options = {:noop => true, :subject => nil})
+ it "should have method_missing as private" do
+ with_ruby 1.8 do
+ described_class.private_instance_methods.should include("method_missing")
+ end
+ with_ruby 1.9 do
+ described_class.private_instance_methods.should include(:method_missing)
+ end
+ end
+
+ it "should not respond_to? method_missing (because it's private)" do
+ formatter = options[:subject] || described_class.new({ }, StringIO.new)
+ formatter.should_not respond_to(:method_missing)
+ end
+
+ if options[:noop]
+ it "should respond_to? all messages" do
+ formatter = described_class.new({ }, StringIO.new)
+ formatter.should respond_to(:just_about_anything)
+ end
+
+ it "should respond_to? anything, when given the private flag" do
+ formatter = described_class.new({ }, StringIO.new)
+ formatter.respond_to?(:method_missing, true).should be_true
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec-1.3.1/spec/support/spec_classes.rb b/vendor/gems/rspec-1.3.1/spec/support/spec_classes.rb
new file mode 100644
index 000000000..c8900a789
--- /dev/null
+++ b/vendor/gems/rspec-1.3.1/spec/support/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